[程序]贪吃蛇
2014-02-12 本文已影响83人
Lapse千叶
2013/03/10
写不出来稿子也写不出来三题的时候突然燃起程序的心- -、
没装上EGE也没学会GUI,半年没碰代码居然搞定了这种东西真是不可思议啊……
用的是最基础的东西,没有一点算法优化,没有一点模块化,理论上提高算法效率可以降低频闪频率,也许有空会做做优化?眼睛都被晃瞎了还做个毛啊- -、
注意事项:
1、方向键控制
2、任意键暂停
3、关掉中文输入法,否则你乱按的话会抖屏
4、因为不会前面提到的两种技术,所以会有频闪,注意保护眼睛
5、可能会报毒,不要理它- -、
更新报告:
v1.1:
根据瑶瑶的建议删去了下面的lenth提示,感觉还不错- -、
下面上代码
/* Name: 贪吃蛇 Copyright: 千叶@lapse from virtue Version: v1.1 Date: 10-03-13 13:14 Description:方向键控制&任意键暂停&关掉中文输入法&注意保护眼睛 */ #include <stdio.h> #include <stdlib.h> #include <windows.h> #include <unistd.h> #include <time.h> #include <conio.h> int main() { char f; //标志变量 srand((unsigned)time(NULL)); //随机种子 do { char a[50][100]; //框架 int i,j; //循环变量 int lenth=5; //身长 int dir[80]; //方向 int x=10,y=30,x0,y0; //头的位置 int m=10,n=26; //尾的位置 int eggx,eggy; //蛋的位置 char k1,k2; //接收输入的变量 for(i=0;i<24;i++) //初始化框架 for(j=0;j<79;j++) a[i][j]=' '; for(i=26;i<=30;i++) //初始化身 a[10][i]='*'; for(i=1;i<=lenth;i++) //初始化方向 dir[i]=4; do //初始化蛋 { eggx=rand()%24; eggy=rand()%79; }while(a[eggx][eggy]=='*'); a[eggx][eggy]='o'; while(1) //主循环 { if(kbhit()) //接收输入 { k1=getch(); k2=getch(); if(k2==72 && x-1!=x0) dir[lenth]=1; else if(k2==80 && x+1!=x0) dir[lenth]=2; else if(k2==75 && y-1!=y0) dir[lenth]=3; else if(k2==77 && y+1!=y0) dir[lenth]=4; } else { x0=x;y0=y; if(dir[lenth]==1) //头行进 if(x-1>=0) x--; else x=23; else if(dir[lenth]==2) if(x+1<24) x++; else x=0; else if(dir[lenth]==3) if(y-1>=0) y--; else y=78; else if(dir[lenth]==4) if(y+1<79) y++; else y=0; if(a[x][y]=='*' && !(x==m && y==n)) //撞死 { printf("Game Over\n"); break; } if(a[x][y]=='o') //吃蛋 { a[x][y]='*'; lenth++; dir[lenth]=dir[lenth-1]; do { eggx=rand()%24; eggy=rand()%79; }while(a[eggx][eggy]=='*'); a[eggx][eggy]='o'; } else //前进一格 { a[m][n]=' '; a[x][y]='*'; for(i=0;i<lenth;i++) dir[i]="dir[i+1];" if(dir[0]="=1)" if(m-1="">=0) m--; else m=23; else if(dir[0]==2) if(m+1<24) m++; else m=0; else if(dir[0]==3) if(n-1>=0) n--; else n=78; else if(dir[0]==4) if(n+1<79) n++; else n=0; } for(i=0;i<24;i++) //输出 { for(j=0;j<79;j++) { printf("%c",a[i][j]); } printf("\n"); } sleep(100); //速度控制 system("cls"); //清屏 } } printf("lenth: %d\n",lenth); printf("Again?(y/n)"); do { f=getch(); }while(f!='y' && f!='n'); }while(f=='y'); return 0; }