1、#define M 200#includegraphics.h#includestdio.hstring.hiostream.hdos.hconio.h#include #define LEFT 97/A#define RIGHT 100/D#define DOWN 115/S#define UP 119/W#define Esc 0x011bint i,key;int score=0;int gamespeed=250;/游戏速度可根据实际情况自行调整struct Food int x;/食物的横坐标 int y;/食物的纵坐标 int yes;/判断是否要出现食物的变量food;/食物的结
2、构体struct Snake int xM; int yM; int node;/蛇的节数 int direction;/蛇的移动方向 int life;/蛇的生命,0表示活着,1表示死亡snake;void Init();/图形驱动void Close();/图形结束void DrawK();/开始画面void GamePlay();/玩游戏的具体过程void GameOver();/游戏结束void PrScore();/输出成绩(2)主函数main( )主函数是程序的主流程,首先定义使用到的常数、全局变量及函数原型说明,然后初始化图形系统,调用函数DrawK()画出开始画面,调用函数Ga
3、mePlay(),即玩游戏的具体过程,游戏结束后调用Close()关闭图形系统,结束程序void main()/主函数 Init();DrawK();GamePlay();Close();void Init()/图形驱动int gd=DETECT,gm;initgraph(&gd,&gm, );/*此处为turboc的路径,读者可以根据自己的电脑而改*/cleardevice();(3) 画界面函数DrawK( ) 主界面是一个封闭的围墙,用两个循环语句分别在水平和垂直方向输出连续的宽度和高度均的矩形方块,表示围墙,为了醒目,设置为白色。void DrawK()/开始画面,左上角坐标为(50,
4、40),右下角坐标为(610,460)的围墙 setbkcolor(GREEN); setcolor(LIGHTRED); setlinestyle(0,0,5);/设置线型 for(i=50;i0;i-)/蛇的每个环节往前移动,也就是贪吃蛇的关键算法 snake.xi=snake.xi-1; snake.yi=snake.yi-1; switch(snake.direction)/1,2,3,4表示上下左右四个方向,通过这个判断来移动蛇头 case 1: snake.x0+=10;break; case 2: snake.x0-=10; case 3: snake.y0-=10; case
5、4: snake.y0+=10; for(i=3;snake.node;i+)/从蛇的第四节开始判断是否撞到自己了,因为蛇头为两节,第三节不可能拐过来 if(snake.xi=snake.x0&snake.yi=snake.y0) GameOver();/显示失败 snake.life=1; break; if(snake.x0595|snake.y0455)/蛇是否撞到墙壁 GameOver();/本次游戏结束 snake.life=1;/蛇死 if(snake.life=1)/以上两种判断以后,如果蛇死就跳出内循环,重新开始 break; if(snake.x0=food.x&snake.
6、y0=food.y)/吃到食物以后 setcolor(0);/把画面上的食物去掉 snake.xsnake.node=-20; snake.ysnake.node=-20;/新的一节先放在看不见得位置,下次循环就取前一节的位置 snake.node+;/蛇的身体长一节 food.yes=1; score+=10; PrScore();/输出新的得分 setcolor(WHITE);/画出蛇 for(i=0;i+) rectangle(snake.xi,snake.yi,snake.xi+10,snake.yi-10); Sleep(gamespeed); setcolor(0);/用黑色去除蛇
7、的最后一节 rectangle(snake.xsnake.node-1,snake.ysnake.node-1,snake.xsnake.node-1+10,snake.ysnake.node-1-10); if(snake.life=1)/如果蛇死就跳出循环 break; key=getchar();/接受案件 if(key=Esc)/按ESC键退出 else if(key=UP&snake.direction!=4) snake.direction=3; else if(key=RIGHT&=2) snake.direction=1; else if(key=LEFT&=1) snake.direction=2; else if(key=DOWN&=3) snake.direction=4; /endwhile(1)(5)游戏结束函数GameOver( ) 游戏结束,清除屏幕,输出分数,显示游戏结束信息。void GameOver()/游戏结束 cleardevice(); setcolor(RED); outtextxy(100,100,我会回来的! getch();void PrScore()/输出成绩 char str10; setfillstyle(SOLID_FILL,YELLOW);
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1