




已阅读5页,还剩9页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
课 程 设 计 报 告 课程名称:面向对象程序设计C+ 设计题目:贪吃蛇小游戏 专 业:计算机科学与技术 姓 名: 学 号: 指导教师:李 晓 虹2016 年 1 月 1 日一、开发背景及意义1.1开发背景贪吃蛇是家喻户晓的益智类小游戏,选择这个题目一是为了将自己的所学知识加以运用,二是一直以来贪吃蛇这个游戏就深深地吸引着我,它的制作方法对于以前的我而言都是很神秘的。我希望通过自己的所学知识把它剖析开来,真真正正的了解它的本质和精髓。虽然我的编程能力不是很强,但是我有信心,在这次学习中我将从实践和实际的项目中提高自己的编程能力。因此我选定了这个题目。2、 系统需求分析2.1、程序功能贪吃蛇游戏是一个经典小游戏,一条蛇在封闭围墙里,围墙里随机出现一个食物,通过按键盘四个光标键控制蛇向上下左右四个方向移动,蛇头撞倒食物,则食物吃掉,蛇身体长一节,同时记10分,接着又出现食物,等待蛇来吃,如果蛇在移动中撞到墙或身体交叉蛇头撞倒自己身体游戏结束。2.2、设计思想程序关键在于表示蛇的图形及蛇的移动。用一个小矩形快表示蛇的一节身体,身体每长一节,增加一个矩形块,蛇头用俩节表示。移动时必须从蛇头开始,所以蛇不能向相反的方向移动,如果不按任意键,蛇自行在当前方向上前移,但按下有效方向键后,蛇头朝着该方向移动,一步移动一节身体,所以按下有效方向键后,先确定蛇头的位置,而后蛇2的身体随蛇头移动,图形的实现是从蛇头新位置开始画出蛇,这时,由于未清屏的原因,原来的蛇的位置和新蛇的位置差一个单位,所以看起来蛇多一节身体,所以将蛇的最后一节用背景色覆盖。食物的出现与消失也是画矩形块和覆盖矩形块。为了便于理解,定义两个结构体:食物与蛇。2.3、流程图开始初始化界面和蛇身放置食物蛇开始运动蛇吃到食?蛇长大蛇死亡?继续?退出界面NNYNY游戏者按键选择Y图2-13、 总体设计3.1 运行环境 本程序运行时需要硬件环境和支持环境。a. 硬件环境:一般的PC机b. 软件环境:WINGDOWS 95或以上 3.2系统流程 用流程图示出程序的主要控制流程和处理流程,如图3-1所示:游戏载入内存并初始化界面判断游戏是否开始单击工具栏按钮 【玩】或者【游戏】【开始】开始游戏没有开始游戏,就返回初始界面贪吃蛇开始移动(初始方向向左)根据键盘消息判断蛇头的运动方向根据蛇头的坐标和食物的坐标判断蛇是否已经得到食物如果已经得到食物,则蛇的身体加长,积分器加一如果没有得到食物,则蛇的身体不变,积分器不变根据蛇头的坐标、蛇身体的坐标和墙壁的坐标判断蛇是否已经撞墙或者自己咬到自己如果没有撞墙并且没有自己咬到自己则程序继续进行如果已经撞墙或者自己咬到自己则程序终止贪吃蛇程序结束计时器开始计时积分器开始计分图3-13.3用户接口设计 a.用户看到的游戏界面:网状边框表示草地,绿色矩形串代表蛇,绿色空心圆形代表食物。 b.用户通过单击工具栏按钮 【玩】或者【游戏】【开始】开始游戏。 c.用户可以在窗口中直接看到游戏玩法的文字提示。 d.游戏结束时程序会弹出窗口提示。四、详细设计4.1数据结构 动态数组CArray m_aBody; / 保存蛇身点类 CPoint m_pAim;/保存一个食物目标的坐标4.2 函数4.2.1函数定义 函数定义是对各个基础函数的定义,并且设置需要运用的信息,便于调用#define N 200#define M 200#includegraphics.h#include#include#include#include#include#include#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 Foodint x;/食物的横坐标int y;/食物的纵坐标int yes;/判断是否要出现食物的变量food;/食物的结构体struct Snakeint xM;int yM;int node;/蛇的节数int direction;/蛇的移动方向int life;/蛇的生命,0表示活着,1表示死亡snake;void Init();/图形驱动void Close();/图形结束void DrawK();/开始画面void GamePlay();/玩游戏的具体过程void GameOver();/游戏结束void PrScore();/输出成绩void CSnakeView:IniAim()/随机函数生成食物的X 和Y坐标void CSnakeView:IniGame()/改函数对游戏初始化定义游戏的初始状态void CSnakeView:ReDisplay(CPoint pPoint)/刷新游戏区域中pPoint处的一个小方格void CSnakeView:OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)/判断键盘按钮事件CView:OnTimer(nIDEvent);/计时器函数来重画屏幕4.2.2主函数main( )主函数是程序的主流程,首先定义使用到的常数、全局变量及函数原型说明,然后初始化图形系统,调用函数DrawK()画出开始画面,调用函数GamePlay(),即玩游戏的具体过程,游戏结束后调用Close()关闭图形系统,结束程序void main()/主函数 Init();/图形驱动DrawK();/开始画面GamePlay();/玩游戏的具体过程Close();/图形结束void Init()/图形驱动int gd=DETECT,gm;initgraph(&gd,&gm, );/*此处为turboc的路径,读者可以根据自己的电脑而改*/cleardevice();4.2.3 画界面函数DrawK( ) 主界面是一个封闭的围墙,用两个循环语句分别在水平和垂直方向输出连续的宽度和高度均的矩形方块,表示围墙,为了醒目,设置为白色。void DrawK()/开始画面,左上角坐标为(50,40),右下角坐标为(610,460)的围墙setbkcolor(GREEN);setcolor(LIGHTRED);setlinestyle(0,0,5);/设置线型for(i=50;i=600;i+=10)/画围墙rectangle(i,40,i+10,49);/上边rectangle(i,451,i+10,460);/下边for(i=40;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;break;case 3:snake.y0-=10;break;case 4:snake.y0+=10;break;for(i=3;isnake.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.y0=food.y)/吃到食物以后setcolor(0);/把画面上的食物去掉rectangle(food.x,food.y,food.x+10,food.y-10);snake.xsnake.node=-20;snake.ysnake.node=-20;/新的一节先放在看不见得位置,下次循环就取前一节的位置snake.node+;/蛇的身体长一节food.yes=1;score+=10;PrScore();/输出新的得分setcolor(WHITE);/画出蛇for(i=0;isnake.node;i+)rectangle(snake.xi,snake.yi,snake.xi+10,snake.yi-10);Sleep(gamespeed);setcolor(0);/用黑色去除蛇的最后一节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键退出break;else if(key=UP&snake.direction!=4)snake.direction=3;else if(key=RIGHT&snake.direction!=2)snake.direction=1;else if(key=LEFT&snake.direction!=1)snake.direction=2;else if(key=DOWN&snake.direction!=3)snake.direction=4;/endwhile(1)4.2.5游戏结束函数GameOver( ) 游戏结束,清除屏幕,输出分数,显示游戏结束信息。void GameOver()/游戏结束cleardevice();PrScore();setcolor(RED);outtextxy(100,100,呜呜呜,贪吃蛇挂掉了!);getch();void PrScore()/输出成绩char str10;setfillstyle(SOLID_FILL,YELLOW);bar(50,15,220,35);setcolor(6);sprintf(str,score:%d,score);outtextxy(55,20,str);void Close()/图形结束 getch();closegraph();五、系统调试可以按照程序运行的错误提示对原程序进行修改,在调试过程中有时也会遇到不懂的问题,我去图书馆或上网查阅一些资料或者是向老师请教也解决了对源程序一一修改直到运行成功。6、 结果分析6.1 运行界面图6-1 游戏运行界面图6-2游戏结束界面图6-3游戏结束界面6.2界面分析如图6-1游戏运行界面所示,游戏能够实现其基本功能,正常运行,界面有一个菜单项,进行辅助功能,可以根据需要进行选择,可点击游戏的下拉菜单开始或者点击工具栏的玩开始游戏。其次界面会显示当前玩家的游戏用时和当前得分,游戏主界面还有对游戏的具体说明。如图6-2游戏结束界面显示,当贪吃蛇碰到四面任何一面时,游戏就结束,系统会弹出“呜呜呜,贪吃蛇挂掉了!!”的提示框,关闭提示框,系统停留在本次游戏界面,再次点击开始,系统数据清空。七、总结在设计这个程序中我主要学会了如何运用以下有关C语言和C+的知识1) 函数定义是要做到顾名思义是很重要的,它对读程序的人正确认识程序 十分重要,在修改这个程序的过程中也能很快找到程序各模块的作用,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025鱼塘租赁合同样本
- 2025内蒙古鄂尔多斯生态环境职业学院专业技术人员招聘18人模拟试卷带答案详解
- 2025农业生产资料租赁合同范本
- 2025房屋租赁合同范本代理人
- 2025年马鞍山花山区社区工作者招聘40人模拟试卷及完整答案详解1套
- 纯化水考试题库及答案
- 船厂技师考试题库及答案
- 卫生应急考试题库及答案
- 应急救生员证考试题库及答案
- 2025年锅炉工岗位应知应会题库及答案
- 医院2025年度内部控制风险评估报告
- 药房采购员与验收员培训
- 计算机网络基础IP地址TFTP协议NAT配置等知识试卷
- 重症自身免疫性脑炎监测与治疗中国专家共识(2024版)解读
- 机动车检测工资格证考试题(附答案)
- 护士沟通技巧与人文关怀护理课件
- 2025年上半年海南三亚市知识产权保护中心选聘事业单位6人重点基础提升(共500题)附带答案详解
- 2025年辽宁现代服务职业技术学院单招综合素质考试题库附答案
- 电力电缆模拟题及答案
- 2025年药物制剂工(中级)考试题库(附答案)
- 仿古建筑施工常见问题及应对策略
评论
0/150
提交评论