发布时间 : 星期日 文章《贪吃蛇游戏课程设计》报告更新完毕开始阅读2e9d6e708e9951e79b8927f1
{
rand();//随机数发生器
food.yes=1;//1表示需要出现新食物,0表示已经存在食物 snake.life=0;//蛇活着 snake.direction=1;//方向往右
snake.x[0]=100;snake.y[0]=100;//舌头坐标 snake.x[1]=110;snake.y[1]=100 ; snake.node=2;//蛇的节数 PrScore();//输出分数
while(1)//可重复玩游戏,按ESC键结束 {
while(!kbhit())//在没有按键的情况下,蛇自己移动身体 {
if(food.yes==1)//需要出现新食物 { }
if(food.yes==0)//画面上有食物就要显示 { }
for(i=snake.node-1;i>0;i--)//蛇的每个环节往前移动,也就是贪吃蛇的关{ }
switch(snake.direction)//1,2,3,4表示上下左右四个方向,通过这个判断
5
food.x=rand()@0+60; food.y=rand()50+60;
while(food.x!=0)//食物随即出现后必须让食物能够在整格内,这样
food.x++; food.y++;
才能让蛇迟到
while(food.y!=0) food.yes=0;//画面上有食物了
setcolor(GREEN);
rectangle(food.x,food.y,food.x+10,food.y-10);
键算法
snake.x[i]=snake.x[i-1]; snake.y[i]=snake.y[i-1];
来移动蛇头
{ }
for(i=3;i if(snake.x[0]<55||snake.x[0]>595||snake.y[0]<55||snake.y[0]>455)//{ } if(snake.life==1)//以上两种判断以后,如果蛇死就跳出内循环,重新开始 { setcolor(0);//把画面上的食物去掉 rectangle(food.x,food.y,food.x+10,food.y-10); snake.x[snake.node]=-20; snake.y[snake.node]=-20;//新的一节先放在看不见得位置,下次循环就break; if(snake.x[0]==food.x&&snake.y[0]==food.y)//吃到食物以后 GameOver();//本次游戏结束 snake.life=1;//蛇死 if(snake.x[i]==snake.x[0]&&snake.y[i]==snake.y[0]) { } GameOver();//显示失败 snake.life=1; break; case 1: snake.x[0]+=10;break; snake.x[0]-=10;break; snake.y[0]-=10;break; snake.y[0]+=10;break; case 2: case 3: case 4: 蛇头为两节,第三节不可能拐过来 蛇是否撞到墙壁 取前一节的位置 6 } } snake.node++;//蛇的身体长一节 food.yes=1; score+=10; PrScore();//输出新的得分 setcolor(WHITE);//画出蛇 for(i=0;i rectangle(snake.x[i],snake.y[i],snake.x[i]+10,snake.y[i]-10); Sleep(gamespeed); setcolor(0);//用黑色去除蛇的最后一节 rectangle(snake.x[snake.node-1],snake.y[snake.node-1],snake.x[snake.node-1 } if(snake.life==1)//如果蛇死就跳出循环 break; key=getchar();//接受案件 if(key==Esc)//按ESC键退出 break; snake.direction=3; snake.direction=1; snake.direction=2; snake.direction=4; else if(key==UP&&snake.direction!=4) else if(key==RIGHT&&snake.direction!=2) else if(key==LEFT&&snake.direction!=1) else if(key==DOWN&&snake.direction!=3) ]+10,snake.y[snake.node-1]-10); }//endwhile(1) (5)游戏结束函数GameOver( ) 游戏结束,清除屏幕,输出分数,显示游戏结束信息。 void GameOver()//游戏结束 { cleardevice(); 7 } PrScore(); setcolor(RED); outtextxy(100,100,\我会回来的!!!!!\getch(); void PrScore()//输出成绩 { } void Close()//图形结束 { } getch(); closegraph(); char str[10]; setfillstyle(SOLID_FILL,YELLOW); bar(50,15,220,35); setcolor(6); sprintf(str,\outtextxy(55,20,str); 五、调试及解决方法 可以按照程序运行的错误提示对原程序进行修改,在调试过程中有时也会遇到不懂的问题,我去图书馆或上网查阅一些资料或者是向老师请教也解决了对源程序一一修改直到运行成功。 六、测试结果 8