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
#include
#include
#include
#include
#include
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=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;
}