1、#include stdlib.hdos.h#define LEFT 0x4b00#define RIGHT 0x4d00#define DOWN 0x5000#define UP 0x4800#define ESC 0x011bint i,key;int score=0;/*得分*/int gamespeed=50000;/*游戏速度自己调整*/struct Food int x;/*食物的横坐标*/ int y;/*食物的纵坐标*/ int yes;/*判断是否要出现食物的变量*/food;/*食物的结构体*/struct Snake int xN; int yN; int node;/*
2、蛇的节数*/ int direction;/*蛇移动方向*/ int life;/* 蛇的生命,0活着,1死亡*/snake;void Init(void);/*图形驱动*/void Close(void);/*图形结束*/void DrawK(void);/*开始画面*/void GameOver(void);/*结束游戏*/void GamePlay(void);/*玩游戏具体过程*/void PrScore(void);/*输出成绩*/*主函数*/void main(void) Init(); DrawK(); GamePlay(); Close();void Init(void) in
3、t gd=DETECT,gm; initgraph(&gd,&gm,c:tc); cleardevice();/*开始画面,左上角坐标为(50,40),右下角坐标为(610,460)的围墙*/void DrawK(void)/*setbkcolor(LIGHTGREEN);*/ setcolor(11); setlinestyle(SOLID_LINE,0,THICK_WIDTH);/*设置线型*/ for(i=50;i0;i-)/*蛇的每个环节往前移动,也就是贪吃蛇的关键算法*/ snake.xi=snake.xi-1; snake.yi=snake.yi-1; /*1,2,3,4表示右,左
4、,上,下四个方向,通过这个判断来移动蛇头*/ switch(snake.direction) case 1:snake.x0+=10;break; case 2: snake.x0-=10; case 3: snake.y0-=10; case 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|sn
5、ake.y0455)/*蛇是否撞到墙壁*/*本次游戏结束*/ /*蛇死*/ if(snake.life=1)/*以上两种判断以后,如果蛇死就跳出内循环,重新开始*/ if(snake.x0=food.x&snake.y0=food.y)/*吃到食物以后*/ setcolor(0);/*把画面上的食物东西去掉*/ snake.xsnake.node=-20;snake.ysnake.node=-20; /*新的一节先放在看不见的位置,下次循环就取前一节的位置*/ snake.node+;/*蛇的身体长一节*/*画面上需要出现新的食物*/ score+=10;/*输出新得分*/ setcolor(
6、4);/*画出蛇*/ for(i=0;i+) rectangle(snake.xi,snake.yi,snake.xi+10, snake.yi-10); delay(gamespeed);/*用黑色去除蛇的的最后一节*/ rectangle(snake.xsnake.node-1,snake.ysnake.node-1, snake.xsnake.node-1+10,snake.ysnake.node-1-10); /*endwhile(!kbhit)*/ if(snake.life=1)/*如果蛇死就跳出循环*/ key=bioskey(0);/*接收按键*/ if(key=ESC)/*按
7、ESC键退出*/ else if(key=UP&snake.direction!=4)/*判断是否往相反的方向移动*/ snake.direction=3; if(key=RIGHT&=2) if(key=LEFT&=1) snake.direction=2; if(key=DOWN&=3) snake.direction=4; /*endwhile(1)*/*游戏结束*/void GameOver(void) setcolor(RED); settextstyle(0,0,4); outtextxy(200,200,GAME OVER getch();void PrScore(void) c
8、har 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) closegraph();五、主要解决问题的方法及技术关键1、主要问题及解决方法:主要调用到graphics.h,stdio.h,dos.h,stdlib.h等重要库函数,运用结构体、链表以及结构体等进行编译。2、技术关键 If else、break continue等语句的运用,及绘图函数等函数的应用。食物和围墙坐标的设置。六、设计结果说明1、 设计优点:容易理解,而且操作简单。 并且运用了简单的C语言知识,巩固C语言运用的目的。2、 设计不足: 由于对C语言了解还不够,所以程序的某些地方还有些不足,游戏的趣味性还很不够,而且没有声音,要想效果更加好,还需加以改正。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1