1、贪吃蛇游戏 C 源代码.txt“恋”是个很强悍的字。它的上半部取自“变态”的“变” ,下半部取自“变态”的“态” 。贪吃蛇游戏 C 源代码2007 年 10 月 28 日 星期日 15:55#define N 200#include #include #include #define LEFT 0x4b00#define RIGHT 0x4d00#define DOWN 0x5000#define UP 0x4800#define ESC 0x011bint i,key;int score=0;/*得分*/int gamespeed=50000;/*游戏速度自己调整*/struct Foodi
2、nt x;/*食物的横坐标*/int y;/*食物的纵坐标*/int yes;/*判断是否要出现食物的变量*/food;/*食物的结构体*/struct Snakeint xN;int yN;int node;/*蛇的节数*/int direction;/*蛇移动方向*/int life;/* 蛇的生命,0 活着,1 死亡*/snake;void Init(void);/*图形驱动*/void Close(void);/*图形结束*/void DrawK(void);/*开始画面*/void GameOver(void);/*结束游戏*/void GamePlay(void);/*玩游戏具体过
3、程*/void PrScore(void);/*输出成绩*/*主函数*/void main(void)Init();/*图形驱动*/DrawK();/*开始画面*/GamePlay();/*玩游戏具体过程*/Close();/*图形结束*/*图形驱动*/void Init(void)int gd=DETECT,gm;initgraph(cleardevice();/*开始画面,左上角坐标为(50,40) ,右下角坐标为(610,460)的围墙*/void DrawK(void)/*setbkcolor(LIGHTGREEN);*/setcolor(11);setlinestyle(SOLID_
4、LINE,0,THICK_WIDTH);/*设置线型*/for(i=50;i0;i-)/*蛇的每个环节往前移动,也就是贪吃蛇的关键算法*/snake.xi=snake.xi-1;snake.yi=snake.yi-1;/*1,2,3,4 表示右,左,上,下四个方向,通过这个判断来移动蛇头*/switch(snake.direction)case 1:snake.x0+=10;break;case 2: snake.x0-=10;break;case 3: snake.y0-=10;break;case 4: snake.y0+=10;break;for(i=3;i595|snake.y0455
5、)/*蛇是否撞到墙壁*/GameOver();/*本次游戏结束*/snake.life=1; /*蛇死*/if(snake.life=1)/*以上两种判断以后,如果蛇死就跳出内循环,重新开始*/break;if(snake.x0=food.x/*把画面上的食物东西去掉*/rectangle(food.x,food.y,food.x+10,food.y-10);snake.xsnake.node=-20;snake.ysnake.node=-20;/*新的一节先放在看不见的位置,下次循环就取前一节的位置*/snake.node+;/*蛇的身体长一节*/food.yes=1;/*画面上需要出现新的
6、食物*/score+=10;PrScore();/*输出新得分*/setcolor(4);/*画出蛇*/for(i=0;isnake.node;i+)rectangle(snake.xi,snake.yi,snake.xi+10,snake.yi-10);delay(gamespeed);setcolor(0);/*用黑色去除蛇的的最后一节*/rectangle(snake.xsnake.node-1,snake.ysnake.node-1,snake.xsnake.node-1+10,snake.ysnake.node-1-10); /*endwhile(!kbhit)*/if(snake.
7、life=1)/*如果蛇死就跳出循环*/break;key=bioskey(0);/*接收按键*/if(key=ESC)/*按 ESC 键退出*/break;elseif(key=UPelseif(key=RIGHTelseif(key=LEFTelseif(key=DOWN/*endwhile(1)*/*游戏结束*/void GameOver(void)cleardevice(); PrScore();setcolor(RED);settextstyle(0,0,4);outtextxy(200,200,“GAME OVER“);getch();/*输出成绩*/void PrScore(void) char str10;setfillstyle(SOLID_FILL,YELLOW);bar(50,15,220,35);setcolor(6);settextstyle(0,0,2);sprintf(str,“score:%d“,score);outtextxy(55,20,str);/*图形结束*/void Close(void) getch();closegraph();