千家信息网

贪吃蛇和俄罗斯方块软件

发表于:2025-02-21 作者:千家信息网编辑
千家信息网最后更新 2025年02月21日,C语言课程设的第一节课,老师提供了一个C语言的飞俄罗斯方块让我们感受,我们所学的C语言课程,主要是各种语句的练习,这次是用我们所学过的知识来感受一个实际的系统。我感觉特别新奇,也对c语言这门课程产生了
千家信息网最后更新 2025年02月21日贪吃蛇和俄罗斯方块软件

C语言课程设的第一节课,老师提供了一个C语言的飞俄罗斯方块让我们感受,我们所学的C语言课程,主要是各种语句的练习,这次是用我们所学过的知识来感受一个实际的系统。我感觉特别新奇,也对c语言这门课程产生了很大的兴趣。

想要做c语言文件的第一步就是安装C-FREE软件,然后就是将源代码写入。虽然界面简陋,而且操作还不流畅。但是已经体现出了他的奥妙之所在。

分析一下程序,感觉没有太复杂的,就是上学期学习的简单语句的组合,但是用的非常好。首先看看用到了几种语句:

1、首先是在屏幕上显示的语句printf,

2、另外一个就是多条件判断switch--case

应用方法

switch(tetris->flag)

{

case 1:

{

a[tetris->x][tetris->y-1]=b[1];

a[tetris->x+2][tetris->y-1]=b[2];

a[tetris->x+2][tetris->y]=b[3];

break;

}

case 2:

{

a[tetris->x-2][tetris->y]=b[1];

a[tetris->x+2][tetris->y]=b[2];

a[tetris->x+4][tetris->y]=b[3];

break;

}

case 3:

{

a[tetris->x][tetris->y-1]=b[1];

a[tetris->x][tetris->y-2]=b[2];

a[tetris->x][tetris->y+1]=b[3];

break;

}

case 4:

{

a[tetris->x-2][tetris->y]=b[1];

a[tetris->x+2][tetris->y]=b[2];

a[tetris->x][tetris->y+1]=b[3];

break;

}

case 5:

{

a[tetris->x][tetris->y-1]=b[1];

a[tetris->x][tetris->y+1]=b[2];

a[tetris->x-2][tetris->y]=b[3];

break;

}

case 6:

{

a[tetris->x][tetris->y-1]=b[1];

a[tetris->x-2][tetris->y]=b[2];

a[tetris->x+2][tetris->y]=b[3];

break;

}

case 7:

{

a[tetris->x][tetris->y-1]=b[1];

a[tetris->x][tetris->y+1]=b[2];

a[tetris->x+2][tetris->y]=b[3];

break;

}

case 8:

{

a[tetris->x][tetris->y+1]=b[1];

a[tetris->x-2][tetris->y]=b[2];

a[tetris->x+2][tetris->y+1]=b[3];

break;

}

case 9:

{

a[tetris->x][tetris->y-1]=b[1];

a[tetris->x-2][tetris->y]=b[2];

a[tetris->x-2][tetris->y+1]=b[3];

break;

}

case 10:

{

a[tetris->x][tetris->y-1]=b[1];

a[tetris->x-2][tetris->y-1]=b[2];

a[tetris->x+2][tetris->y]=b[3];

break;

}

case 11:

{

a[tetris->x][tetris->y+1]=b[1];

a[tetris->x+2][tetris->y-1]=b[2];

a[tetris->x+2][tetris->y]=b[3];

break;

}

case 12:

{

a[tetris->x][tetris->y-1]=b[1];

a[tetris->x][tetris->y+1]=b[2];

a[tetris->x-2][tetris->y-1]=b[3];

break;

}

case 13:

{

a[tetris->x-2][tetris->y]=b[1];

a[tetris->x-2][tetris->y+1]=b[2];

a[tetris->x+2][tetris->y]=b[3];

break;

}

case 14:

{

a[tetris->x][tetris->y-1]=b[1];

a[tetris->x][tetris->y+1]=b[2];

a[tetris->x+2][tetris->y+1]=b[3];

break;

}

case 15:

{

a[tetris->x-2][tetris->y]=b[1];

a[tetris->x+2][tetris->y-1]=b[2];

a[tetris->x+2][tetris->y]=b[3];

break;

}

case 16:

{

a[tetris->x][tetris->y+1]=b[1];

a[tetris->x][tetris->y-1]=b[2];

a[tetris->x+2][tetris->y-1]=b[3];

break;

}

case 17:

{

a[tetris->x-2][tetris->y]=b[1];

a[tetris->x-2][tetris->y-1]=b[2];

a[tetris->x+2][tetris->y]=b[3];

break;

}

case 18:

{

a[tetris->x][tetris->y-1]=b[1];

a[tetris->x][tetris->y+1]=b[2];

a[tetris->x-2][tetris->y+1]=b[3];

break;

}

case 19:

{

a[tetris->x-2][tetris->y]=b[1];

a[tetris->x+2][tetris->y+1]=b[2];

a[tetris->x+2][tetris->y]=b[3];

break;

}

}

}

用来控制左右移动和进入菜单,

3、游戏窗口的定义


void make_frame()

{

HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);

gotoxy(hOut,FrameX+Frame_width-5,FrameY-2);

printf("俄罗斯方块");

gotoxy(hOut,FrameX+2*Frame_width+3,FrameY+7);

printf("**********下一个方块:");

gotoxy(hOut,FrameX+2*Frame_width+3,FrameY+13);

printf("**********");

gotoxy(hOut,FrameX+2*Frame_width+3,FrameY+17);

printf("↑键:变体");

gotoxy(hOut,FrameX+2*Frame_width+3,FrameY+19);

printf("空格:暂停游戏");

gotoxy(hOut,FrameX+2*Frame_width+3,FrameY+15);

printf("Esc :退出游戏");

gotoxy(hOut,FrameX,FrameY);

printf("╔");

gotoxy(hOut,FrameX+2*Frame_width-2,FrameY);

printf("╗");

gotoxy(hOut,FrameX,FrameY+Frame_height);

printf("╚");

gotoxy(hOut,FrameX+2*Frame_width-2,FrameY+Frame_height);

printf("╝");

a[FrameX][FrameY+Frame_height]=2;

a[FrameX+2*Frame_width-2][FrameY+Frame_height]=2;

for(i=2;i<2*Frame_width-2;i+=2)

{

gotoxy(hOut,FrameX+i,FrameY);

printf("═");

}

for(i=2;i<2*Frame_width-2;i+=2)

{

gotoxy(hOut,FrameX+i,FrameY+Frame_height);

printf("═");

a[FrameX+i][FrameY+Frame_height]=2;

}

for(i=1;i

{

gotoxy(hOut,FrameX,FrameY+i);

printf("║");

a[FrameX][FrameY+i]=2;

}

for(i=1;i

{

gotoxy(hOut,FrameX+2*Frame_width-2,FrameY+i);

printf("║");

a[FrameX+2*Frame_width-2][FrameY+i]=2;

}

}

4、光标移动位置

void gotoxy(HANDLE hOut, int x, int y)

{

COORD pos;

pos.X = x;

pos.Y = y;

SetConsoleCursorPosition(hOut, pos);

}

5、实现俄罗斯方块的移动

个人感觉这个程序最吸引人的地方,就是每个方块都可以变化方向,位置,和平时在游戏机中玩得几乎完全一样,感觉十分的神奇,通过c语言程序的设计,可以完成这样一个游戏,真的令人大吃一惊,真的是简单的语言,可以实现复杂的功能。

其他就是参数设置,已经不是软件的重点了,但是在其中,学习了一个常用的C语言实现的菜单,

void gotoxy(HANDLE hOut, int x, int y);

void make_frame();

void get_flag(struct Tetris *);

void make_tetris(struct Tetris *);

void print_tetris(HANDLE hOut,struct Tetris *);

void clear_tetris(HANDLE hOut,struct Tetris *);

int if_moveable(struct Tetris *);

void del_full(HANDLE hOut,struct Tetris *);

void start_game();

课后的心得体会:

1、虽然c预压程序编辑是一件特别费时间的事,但是做的时候会很枯燥,做完之后你会感到特别舒畅。

2、按照这个思路,我可以把程序修改成一个贪吃蛇的游戏,控制蛇的左右。

例如:由此改编的贪吃蛇程序

#include

#include

#include

#include

int head=3,tail=0,f=0,s,t,m;

int main()

{ int i,j;

int zuobiao[2][80];

long start;

int direction=77;

int gamespeed;

int timeover;

int change(char qipan[30][80],int zuobiao[2][80],char direction);

printf("auto? Y/N\n");

m=getch();

if (m=='y')

{ zuobiao[0][tail]=1;zuobiao[1][tail]=1;zuobiao[0][1]=1;zuobiao[1][1]=2;zuobiao[0][2]=1;zuobiao[1][2]=3;zuobiao[0][head]=1;zuobiao[1][head]=4;

/*处理棋盘*/

char qipan[20][80];//定义棋盘

for(i=0;i<=19;i++)

for(j=0;j<=79;j++)

qipan[i][j]=' ';

qipan[1][1]=qipan[1][2]=qipan[1][3]='*';

qipan[1][4]='#';

printf("start\n");

printf("Input your game level,please.\ 1-1000\n");

scanf("%d",&gamespeed);

s=rand()%20;

t=rand()%80;

qipan[s][t]='$';

while(direction!='q')

{ system("cls");

for(i=0;i<20;i++)

for(j=0;j<80;j++)

printf("%c",qipan[i][j]);

timeover=1;

start=clock();

while(!kbhit()&&(timeover=clock()-start<=1000-gamespeed));

if(direction==72||direction==80)

if(s!=zuobiao[0][head])

if(s-zuobiao[0][head]<0)

direction=72;

else direction=80;

else

if(t-zuobiao[1][head]<0)

direction=75;

else direction=77;

else if(t!=zuobiao[1][head])

if(t-zuobiao[1][head]<0)

direction=75;

else direction=77;

else

if(t-zuobiao[1][head]<0)

direction=72;

else direction=80;

if(!(direction==72||direction==80||direction==75||direction==77))

{

return 0;

system("cls");

printf("GAME OVER!\n");

}

if(!change(qipan,zuobiao,direction))

{

direction='q';

system("cls");

printf("GAME OVER!\n");

}

if(f==1)

{

s=rand()%20;

t=rand()%80;

qipan[s][t]='$';

f=0;

}

}

return 0;

}

else zuobiao[0][tail]=1;zuobiao[1][tail]=1;zuobiao[0][1]=1;zuobiao[1][1]=2;zuobiao[0][2]=1;zuobiao[1][2]=3;zuobiao[0][head]=1;zuobiao[1][head]=4;

char qipan[20][80];

for(i=0;i<20;i++)

for(j=0;j<80;j++)

qipan[i][j]=' ';

for(i=0;i<80;i++)

qipan[0][i]='_';

for(i=1;i<=20;i++)

qipan[i][0]='|';

for(i=1;i<=20;i++)

qipan[i][79]='|';

for(i=0;i<80;i++)

qipan[19][i]='_';

qipan[1][1]=qipan[1][2]=qipan[1][3]='*';

qipan[1][4]='#';

printf("start\n");

printf("Input your game level,please.\ 1-1000\n");

scanf("%d",&gamespeed);

s=rand()%20;

t=rand()%80;

qipan[s][t]='$';

while(direction!='q')

{ system("cls");

for(i=0;i<20;i++)

for(j=0;j<80;j++)

printf("%c",qipan[i][j]);

timeover=1;

start=clock();

while(!kbhit()&&(timeover=clock()-start<=1000-gamespeed));

if(timeover)

{

getch();

direction=getch();

}

else

direction=direction;

if(!(direction==72||direction==80||direction==75||direction==77))

{

return 0;

system("cls");

printf("GAME OVER!\n");

}

if(!change(qipan,zuobiao,direction))

{

direction='q';

system("cls");

printf("GAME OVER!\n");

}

if(f==1)

{

s=rand()%20;

t=rand()%80;

qipan[s][t]='$';

f=0;

}

}

return 0;

}



int change(char qipan[20][80],int zuobiao[2][80],char direction)

{

int x,y;

{if(direction==72)

{x=zuobiao[0][head]-1;

y=zuobiao[1][head]; }

if(direction==80)

{x=zuobiao[0][head]+1;

y=zuobiao[1][head];}

if(direction==75)

{x=zuobiao[0][head];

y=zuobiao[1][head]-1;}

if(direction==77)

{x=zuobiao[0][head];

y=zuobiao[1][head]+1;}

if(x<0)

x=18;

else if(x>18)

x=0;

else if(y>78)

y=0;

else if(y<0)

y=78;

if(qipan[s][t]!='$')

f=1;

qipan[zuobiao[0][tail]][zuobiao[1][tail]]=' ';

tail=(tail+1)%80;

qipan[zuobiao[0][head]][zuobiao[1][head]]='*';

head=(head+1)%80;

zuobiao[0][head]=x;

zuobiao[1][head]=y;

qipan[zuobiao[0][head]][zuobiao[1][head]]='#';

return 1;

}

}





语言 就是 程序 方块 感觉 语句 俄罗斯 课程 移动 软件 复杂 位置 是在 棋盘 菜单 学习 控制 很大 新奇 流畅 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 燃烧的远征178数据库 有关工控网络安全的股票 甘肃金康互联网科技有限公司 云服务器环境安全监控工具 四川巴中网络安全倡议书 服务器网页设置好了但电脑不显示 国家网络安全报警平台 永州快速软件开发费用 数据库a表怎么存入b表 c 取出数据库中某列的值 简体中文输入法软件开发 在线教育直播平台软件开发 根据模型生成数据库没看到 数据库建表只允许输入数字 独立安装配置主流品牌服务器 网络安全防诈骗小标语 计算机网络安全对用户的作用 没有服务器的摄像头可以回放吗 鼓楼区网络营销软件开发 NXP微控制器软件开发 步道乐跑服务器崩了怎么办 远程服务器的显示大小设置问题 数据库分别查询平均年龄 内部承包软件开发教程 上海智能软件开发供应商 数据库代码化是什么 xml 数据库 net 不知道串口协议 接数据库 广州门禁软件开发哪家好 华为服务器安全模块
0