贪吃蛇和俄罗斯方块软件
C语言课程设的第一节课,老师提供了一个C语言的飞俄罗斯方块让我们感受,我们所学的C语言课程,主要是各种语句的练习,这次是用我们所学过的知识来感受一个实际的系统。我感觉特别新奇,也对c语言这门课程产生了很大的兴趣。
成都创新互联公司是一家集成都网站设计、成都网站制作、网站页面设计、网站优化SEO优化为一体的专业网站设计公司,已为成都等多地近百家企业提供网站建设服务。追求良好的浏览体验,以探求精品塑造与理念升华,设计最适合用户的网站页面。 合作只是第一步,服务才是根本,我们始终坚持讲诚信,负责任的原则,为您进行细心、贴心、认真的服务,与众多客户在蓬勃发展的市场环境中,互促共生。
想要做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; elsedirection=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; elsedirection=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; } }
网页名称:贪吃蛇和俄罗斯方块软件
转载来于:http://scyanting.com/article/gcdjcp.html