logo资料库

贪吃蛇项目报告.doc

第1页 / 共13页
第2页 / 共13页
第3页 / 共13页
第4页 / 共13页
第5页 / 共13页
第6页 / 共13页
第7页 / 共13页
第8页 / 共13页
资料共13页,剩余部分请下载后查看
程序设计基础 项目报告 项 目 名 称 贪吃蛇 1. 项目功能简要说明:贪吃蛇游戏,该有游戏主要指通过控制小蛇的移动方向,来吃掉随机 生成的食物,从而使小蛇达到一个成长的效果。小蛇每吃掉一次食物都 会加相应得分数。当小蛇碰到自身或者碰到墙就会结束游戏。 2.程序基本算法的文字描述(500 字) (一)函数头必不可少要包含 TC 里面的图形库()、()里面定义了五种类型、一些宏和 通用工具函数、()这是一个头文件,里面包含了很多 BIOS 和 DOS 调用函数。首先要定义四个 方向键和一个退出键的扫描码; (二)分别定义食物和小蛇的结构体; (三)声明调用的函数; (四)主函数(图形驱动、开始画面、玩游戏具体过程、图形结束;) (五)图形驱动:初始化图形系统; (六)开始画面,左上角坐标为(50,40),右下角坐标为(610,460)的围墙。设置颜色、设置线 型、用两个 for 循环分别画出上下、左右围墙; (七)玩游戏具体过程:随机发生器控制食物出现位置,1 表示需要出现新食物,0 表示已经存在食物,在没 有按键的情况下,蛇自己移动身体,当遇见食物之后会吃掉食物起身增长,然后食物还要随机生成,每吃一 次食物分数就会长十,但分数为偶数的时候小蛇是一种颜色,否则为另外一种颜色,当分数是五十的整数倍 时会出现 good!!的提示,此时小蛇为绿色,当分数是五十的整数倍时食物为黄色,否则为另一种颜色。当 分数为 100 的倍数后小蛇的速度就会增长。当吃到食物之后小蛇会自动长一截,而在没吃到食物的时候,小 蛇向前走,最后一节会被磨掉,吃到食物就不摸了,当小蛇遇到自己或者墙都会死亡也就是结束游戏; (八)图形结束,输出成绩。 3. 该项目用到的知识的总结(200 字) 调用函数,for 循环,while 循环,if else 语句,随机函数,控制坐标,输出图形,背景颜色,控制形状 颜色线性,等等 4. 关键步骤的流程图(三个流程图以上) 第 1 页 共 13 页
整 个 游 戏 大 体 制 作 过 程 开始 定义食物的结构体 struct Food {int x;--食物的横坐标 int y;--食物的纵坐标 int yes;--判断是否要出现食物的变量 }food;--食物的结构体 定义小蛇的结构体 struct Snake {int x[N]; int y[N]; int node;/*蛇的节数*/ 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();/*图形结束*/ } 结束 第 2 页 共 13 页
开始 setcolor(9);setlinestyle(SOLID_LIN E,0,THICK_WIDTH);/*设置线型*/ for(i=50;i<=600;i+=10)/*画围墙*/ { rectangle(i,40,i+10,49); /*上边*/ rectangle(i,451,i+10,460);/*下边*/ } for(i=40;i<=450;i+=10) { rectangle(50,i,59,i+10); /*左边*/ rectangle(601,i,610,i+10);/*右边*/ } } 结束 游 戏 围 墙 范 围 确 定 第 3 页 共 13 页
开始 randomize();随机数发生器 food.yes=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())/*在没有按键的情况下,蛇自己移动身体*/ { food.yes==0 food.yes==1 if(food.yes) if(score%50=0&&score!=0)setcolor(YELLOW) ; else setcolor(CYAN); rectangle(food.x,food.y,food.x+10,food.y-10); i=snake. node-1; i > 0 snake.x[i]=snake.x[i-1]; snake.y[i]=snake.y[i-1]; i-- 3 1 food.x=rand()%400+60; food.y=rand()%350+60; while(food.x%10!=0)/*食物随机出现后必须 让食物能够在整格内,这样才可以让蛇吃到 */ food.x++; while(food.y%10!=0) food.y++; food.yes=0;/*画面上有食物了*/ snake.y[0]-=10;break; snake.direction snake.x[0]+=10;break; 4 2 snake.y[0]+=10;break; snake.x[0]-=10;break; 1 第 4 页 共 13 页
否 否 1 i=3 是 snake.x[i]==snake.x[0]&&snake .y[i]==snake.y[0] 是 GameOver();/*显示失败*/ snake.life=1; break; 是 GameOver();/*本次游戏结束*/ snake.life=1; /*蛇死*/ 2 否 /* 吃 到 食 物 以 后*/ 否 snake.x[0]==food.x&&s nake.y[0]==food.y 是 setcolor(0);/*把画面上的食物东西去掉*/ rectangle(food.x,food.y,food.x+10,food.y-10); snake.x[snake.node]=-20;snake.y[snake.node]=-20; /*新的一节先放在看不见的位置,下次循环就取前一节的位置*/ snake.node++;/*蛇的身体长一节*/ food.yes=1;/*画面上需要出现新的食物*/ score+=10; PrScore();/*输出新得分 第 5 页 共 13 页 /* 蛇 是 否 撞 到 墙 壁 */ snake.x [0]<55| |snake. x[0]>5 95||sna ke.y[0] <55|| snake.y [0]>45 5 否 snake.life==1 是 * 以 上 两 种 判断以后,如 果 蛇死 就跳 出 内循 环, 重新开始*/ b r e a k
2 if(score%20==0) setcolor(MAGENTA); /*画出蛇*/ else setcolor(LIGHTRED); if(score%50==0&&score!=0) {setcolor(GREEN); settextstyle(0,0,3); outtextxy(80,16,"good!!");} for(i=0;i
开始 Key Key Key 否 否 是 是 是 key==ESC break ; key==UP&&snake.direction!=4 snake.direction=3; key==RIGHT&&snake.direction!=2 Key 是 snake.direction=1; key==LEFT&&snake.direction!=1 K e y snake.direction=2; key==LEFT&&snake.direction!=3 snake.direction=4; endwhile(1)*接 3 的 while(1) 结束 /*游戏结束*/ 第 7 页 共 13 页
5 项目完成过程中遇到的难点、问题及解决办法 出现围墙和小蛇并没有多大难度,因为以前做过了笑脸移动,我的难点在于控制边界,还有就是让小蛇吃完 食物之后会自动增长一节。边界的问题主要是不能让小蛇与正好能吃掉食物,而这个问题就在于自己的计算 上,首先要掌握自己设置的各个坐标点以便于后期的各种调试,而让小蛇自动增长在我突然醒悟之后也出来 了。 小蛇吃完食物之后自动增长: for(i=snake.node-1;i>0;i--)/*蛇的每个环节往前移动,也就是贪吃蛇的关键算法*/ { snake.x[i]=snake.x[i-1]; snake.y[i]=snake.y[i-1]; } 6. 项目特色(延伸功能、附加功能) 分数为偶数的时候小蛇是一种颜色,否则为另外一种颜色,当分数是五十的整数倍时会出现 good!!的提 示,此时小蛇为绿色,当分数是五十的整数倍时食物为黄色,否则为另一种颜色。当分数为 100 的倍数后小 蛇的速度就会增长。 7. 收获与心得体会 通过亲自动手动脑完成这个小游戏,不仅复习了一下自己学过的很多知道,而且也学会了细心,要想做好一 个程序员必须认真仔细对手下的所有键盘负责任,哪怕一个标点符号,一个空格都会导致程序无法正常运行。 在今后的日子里好要更加熟练那些最基本的操作,不能学点忘点,要学会积累学会变通应用 8.程序代码 第 8 页 共 13 页
分享到:
收藏