课程设计贪吃蛇(I).doc_第1页
课程设计贪吃蛇(I).doc_第2页
课程设计贪吃蛇(I).doc_第3页
课程设计贪吃蛇(I).doc_第4页
课程设计贪吃蛇(I).doc_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

课 程 设 计 报 告 课程名称:面向对象程序设计C+ 设计题目:贪吃蛇 专 业:计算机科学与技术 姓 名: 学 号: 指导教师:李 晓 虹2015 年 1 月 10 日贪吃蛇游戏内容摘要目前,以计算机技术和网络技术为核心的现代网络技术已在现实生活和生产中得以广泛的使用,休闲类网络游戏集趣味性,娱乐性,互动性和益智性于一体,已经成为多数人群的休闲方式。电脑游戏经过短短30年的发展,已经成为影响公众生活,改变公众娱乐方式的重要产业。过去,人们主要是借助电影、电视、音乐等方式来娱乐。而今天,以游戏为代表的电子娱乐正在成为主流娱乐方式。游戏也正在迅速成长为一个庞大的1引言贪吃蛇是家喻户晓的益智类小游戏,选择这个题目一是为了将自己的所学知识加以运用,二是一直以来贪吃蛇这个游戏就深深地吸引着我,它的制作方法对于以前的我而言都是很神秘的。我希望通过自己的所学知识把它剖析开来,真真正正的了解它的本质和精髓。虽然我的编程能力不是很强,但是我有信心,在这次学习中我将从实践和实际的项目中提高自己的编程能力。因此我选定了这个题目。2系统需求分析2.1用户功能该贪吃蛇小游戏面向各个人群,用户群体不限年龄。2.2功能包括:贪吃蛇的移动;食物的管理;分数的管理;系统维护。2.3功能描述:贪吃蛇的移动包括:按w上移按a左移按s下移按d右移。分数管理:当蛇通过移动吃掉一次食物的时候,就增加10分,并且蛇身增加一个#的长度。系统维护:当用户没有按下键的时候,蛇自动向下移动,直到遇到*为止,游戏结束。2.4数据流图1. 系统数据流图:开始移动蛇,往食物方向前进是否吃到食物是否吃到身体结束蛇身体长度增加是否是否 开始开始开始3总体设计3.1软件主要功能设计 实现蛇的上下移动,当蛇吃到东西时身体的长度增加一个#并且分数加10分,实现当蛇吃掉一个食物后另一个食物位置的随机出现。当蛇继续移动碰到*后,结束游戏。4详细设计4.1函数声明struct snake /*蛇的结构体定义*/int head,tail,body200,length;void init() /*蛇身体的初始化*/T.head=T.tail=0;/T.length=0;memset(T.body,0,sizeof(T.body);void www() /*蛇向上运动的处理*/ int sum,i;sum=T.body(T.head-1+ML)%ML-100;if(mapsum/100sum%100=1)T.length+;T.bodyT.head+=sum;T.head%=ML;mapsum/100sum%100=0;for(i=T.tail;i!=T.head;)sum=T.bodyi;mapsum/100sum%100=-1;i+;i%=ML;while(1)sum=getnum();if(mapsum/100sum%100=0)mapsum/100sum%100=1;break;for(i=T.tail;i!=T.head;)sum=T.bodyi;mapsum/100sum%100=0;i+;i%=ML;elseT.bodyT.head+=sum;T.head%=ML;T.tail=(+T.tail)%ML;4.2食物的设计确定用点数组存储贪吃蛇以后,贪吃蛇的食物如何达到随机出现,并且能够按照网格式与蛇头无偏差相接就是一个亟待解决的问题。随机出现应采用rand()函数来实现,而食物与蛇头无偏差相接则利用坐标来解决。设置两个整型变量m_qnX,m_qnY作为食物出现的点的坐标,令m_qnX= rand()%30, ,m_qnY= rand()%40即可。使随机出现的点能够整除最小网格,也就是使食物与蛇头无偏差相接。再由食物坐标(m_qnX,m_qnY)与蛇头坐标是否相同判断蛇是否“吃”到了食物,设置判断标签qnTag,如果吃到了,qnTag为1,则再出现下一个食物,反之,如果没吃到,则不出现食物直到标签为1为止。最后,再将(m_qnX,m_qnY)赋给m_qnFood作为食物坐标,以便在其他函数中调用。4.3判断刷新时间while(clock()-start=TM&!kbhit()判断时间是否到了刷新界面时间,以及判断按下按键,如果按下则退出循环4.4处理clickingif(kbhit()&(order=getch(),order=w|order=s|order=a|order=d)4.5头文件#include#include#include#include#include#include#include 5系统调试5.1打开游戏时游戏的界面此时蛇和食物的位置已经随机产生了。5.2蛇吃掉一个食物当蛇经过移动吃掉一个食物时,蛇的身体增加了一个#的长度,同时另一个食物又随机产生了。5.3蛇吃掉5次食物当蛇经过移动吃掉五次食物时,蛇的身体增加了五个#的长度,同时另一个食物又随机产生了。5.4蛇吃掉12次食物5.5蛇吃掉19次食物蛇已经吃掉19次食物,并且将要吃第20次的时候结束语贪吃蛇游戏终于完成了,在编写游戏过程中,遇到了许多难题,例如,舍得头部与食物的检测问题,蛇的移动与现实问题,蛇的转向问题,事物的随机生成问题等等,这些个难题摆在面前,让人实在有些招架不住。经过查阅大量的文献资料阅读相关的书籍,以及老师的悉心指导和帮助,最后终于将面临的问题一一击破。解决难题的时候,仿佛是拨开一层云,又见令一层云,但是日光也越来越闪耀了。自己感觉通过这次学习研究很是受益匪浅。不仅自己揭开了游戏程序神秘的面纱,而且在实际的程序编写与调试过程中,令自己成长了许多。能够编写复杂的游戏都是在编写过简单的游戏基础上演变过来的能力。然而像贪吃蛇这样的简单的游戏就自然成了游戏设计者的入门首选。本次设计既是一个学习的过程,也是一个实践的过程,对所学知识进一步巩固和加深,使理论和实践相结合,发现书本知识的不足的同时,也提高了自己的实践能力。同时它也使我获得了一些开发小型的休闲类游戏的宝贵经验。参考文献1郑阿奇,Visual C+ 实用教程(第2版),电子工业出版社,20032周鸣扬,VISUAL C+界面编程技术,北京希望电子,20033罗伟坚,Visual C+经典游戏程序设计,人民邮电出版社,2006致谢 时光的流逝也许是可观的,然而流逝的快慢却纯是一种主观享受。当自己终于可以从作业,考试的压力下解脱出来,长长的吁出一口气时,我突然间才意识到,道别的日子步步紧逼。一念至此,竟有些恍惚,所谓白驹过隙、百代过客云云,想来便是这般惆怅了。在这里能顺利的完成,我要感谢和我共度美好大学生活的12级计算机系的全体同学,感谢所有的授课老师,感谢所有关心、鼓励、支持我的人。#include#include#include#include#include#include#include#define ML 100using namespace std;struct snake /*蛇的结构体定义*/int head,tail,body200,length;snake T;int map100100;char maze100100;void init() /*蛇身体的初始化*/T.head=T.tail=0;/T.length=0;memset(T.body,0,sizeof(T.body);int card400,T_T;char order;int getnum()static int n=0;n+;n%=400+1;return cardn;void www() /*蛇向上运动的处理*/ int sum,i;sum=T.body(T.head-1+ML)%ML-100;if(mapsum/100sum%100=1)T.length+;T.bodyT.head+=sum;T.head%=ML;mapsum/100sum%100=0;for(i=T.tail;i!=T.head;)sum=T.bodyi;mapsum/100sum%100=-1;i+;i%=ML;while(1)sum=getnum();if(mapsum/100sum%100=0)mapsum/100sum%100=1;break;for(i=T.tail;i!=T.head;)sum=T.bodyi;mapsum/100sum%100=0;i+;i%=ML;elseT.bodyT.head+=sum;T.head%=ML;T.tail=(+T.tail)%ML;void sss() /*蛇向右运动的处理*/ int sum,i;sum=T.body(T.head-1+ML)%ML+100;if(mapsum/100sum%100=1)T.length+;T.bodyT.head+=sum;T.head%=ML;mapsum/100sum%100=0;for(i=T.tail;i!=T.head;)sum=T.bodyi;mapsum/100sum%100=-1;i+;i%=ML;while(1)sum=getnum();if(mapsum/100sum%100=0)mapsum/100sum%100=1;break;for(i=T.tail;i!=T.head;)sum=T.bodyi;mapsum/100sum%100=0;i+;i%=ML;elseT.bodyT.head+=sum;T.head%=ML;T.tail=(+T.tail)%ML;void ddd() /*蛇向右运动的处理*/ int sum,i;sum=T.body(T.head-1+ML)%ML+1;if(mapsum/100sum%100=1)T.length+;T.bodyT.head+=sum;T.head%=ML;mapsum/100sum%100=0;for(i=T.tail;i!=T.head;)sum=T.bodyi;mapsum/100sum%100=-1;i+;i%=ML;while(1)sum=getnum();if(mapsum/100sum%100=0)mapsum/100sum%100=1;break;for(i=T.tail;i!=T.head;)sum=T.bodyi;mapsum/100sum%100=0;i+;i%=ML;elseT.bodyT.head+=sum;T.head%=ML;T.tail=(+T.tail)%ML;void aaa() /*蛇向左运动的处理*/ int sum,i;sum=T.body(T.head-1+ML)%ML-1;if(mapsum/100sum%100=1)T.length+;T.bodyT.head+=sum;T.head%=ML;mapsum/100sum%100=0;for(i=T.tail;i!=T.head;)sum=T.bodyi;mapsum/100sum%100=-1;i+;i%=ML;while(1)sum=getnum();if(mapsum/100sum%100=0)mapsum/100sum%100=1;break;for(i=T.tail;i!=T.head;)sum=T.bodyi;mapsum/100sum%100=0;i+;i%=ML;elseT.bodyT.head+=sum;T.head%=ML;T.tail=(+T.tail)%ML;int main()memset(map,0,sizeof(map);memset(maze, ,sizeof(maze);int i,j,sum=0,k=0,temp;for(i=1;i20;i+)for(j=1;j20;j+)cardk+=i*100+j;srand(time(0);temp=rand()%10+1;while(temp-)random_shuffle(card,card+19*19);for(i=0;i19|sum%10019|mapsum/100sum%100=-1)srand(time(0);sum=rand()%10000+101;*/T.bodyT.head+=101;/printf(%dn,sum);T.head%=ML;sum=getnum();mapsum/100sum%100=1;T_T=0;char jud=s;int TM=300,start;while(1)TM=300-T.length*15;start=clock();while(clock()-startwn);if(mapsum/100-1sum%100!=-1)for(i=T.tail;i!=T.head;)temp=T.bodyi;maptemp/100temp%100=0;i+;i%=ML;www();elsesystem(CLS);printf(哈哈,你输了!最后得分:%dn,T.length*10-10); /*如果没有按键,则蛇默认向下 直到壮到墙*/ break;else if(order=a) /*如果按下的是a键,则调用aaa()*/ jud=order;/printf(-an);if(mapsum/100sum%100-1!=-1)for(i=T.tail;i!=T.head;)temp=T.bodyi;maptemp/100temp%100=0;i+;i%=ML;aaa();elsesystem(CLS);printf(哈哈,你输了!最后得分:%dn,T.length*10-10);break;else if (order=s) /*如果按下的是s键,则调用sss()*/ jud=order;/printf(-sn);if(mapsum/100+1sum%100!=-1)for(i=T.tail;i!=T.head;)temp=T.bodyi;maptemp/100temp%100=0;i+;i%=ML;sss();elsesystem(CLS);printf(哈哈,你输了!最后得分:%dn,T.length*10-10);break;else if(order=d) /*如果按下的是d键,则调用d()*/ jud=order;/printf(-dn);if(mapsum/100sum%100+1!=-1)for(i=T.tail;i!=T.head;)temp=T.bodyi;maptemp/100temp%100=0;i+;i%=ML;ddd();elsesystem(CLS);printf(哈哈,你输了!最后得分:%dn,T.length*10-10);break;memset(maze, ,sizeof(maze);for(i=0;i=20;i+)for(j=0;j=20;j+)if(mapij=-1)mazeij=*;else if(mapij=1)mazeij=.;for(i=T.tail;i!=T.head;)sum=T.bodyi;mazesum/100sum%100=#;+i;i%=ML;sum=T.body(i-1+ML)%ML;mazesum/100sum%100=;printf(score: %dn,T.length*10-10);for(i=0;i=20;i+)for(j=0;jwn);if(mapsum/100-1sum%100!=-1)for(i=T.tail;i!=T.head;)temp=T.bodyi;maptemp/100temp%100=0;i+;i%=ML;www();elsesystem(CLS);printf(哈哈,你输了!最后得分:%dn,T.length*10-10);break;else if(jud=a)/printf(-an);if(mapsum/100sum%100-1!=-1)for(i=T.tail;i!=T.head;)temp=T.bodyi;maptemp/100temp%100=0;i+;i%=ML;aaa();elsesystem(CLS);printf(哈哈,你输了!最后得分:%

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论