贪吃蛇c语言程序 简书,[程序]贪吃蛇

2013/03/10

写不出来稿子也写不出来三题的时候突然燃起程序的心- -、

没装上EGE也没学会GUI,半年没碰代码居然搞定了这种东西真是不可思议啊……

用的是最基础的东西,没有一点算法优化,没有一点模块化,理论上提高算法效率可以降低频闪频率,也许有空会做做优化?眼睛都被晃瞎了还做个毛啊- -、

注意事项:

1、方向键控制

2、任意键暂停

3、关掉中文输入法,否则你乱按的话会抖屏

4、因为不会前面提到的两种技术,所以会有频闪,注意保护眼睛

5、可能会报毒,不要理它- -、

更新报告:

v1.1:

根据瑶瑶的建议删去了下面的lenth提示,感觉还不错- -、

3569d1333e0c7a769be733fdd606f0aa.gif

8d60ad2548025e82391651ca3fbe46a4.gif

下面上代码

/*

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;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值