贪吃蛇小游戏开发毕业论文
贪吃蛇MFC的VC++编辑毕业设计论文

目录第1章需求分析 (2)第2章游戏设计 (2)2.1 游戏介绍 (2)2.2 游戏结构 (2)2.2.1控制面板结构............................................. 错误!未定义书签。
2.2.2贪吃蛇行动指令系统逻辑流程设计......... 错误!未定义书签。
第3章游戏详细设计与实现 .. (5)3.1.定义蛇和食物3.2蛇形和食物绘制3.3.开始游戏暂停游戏继续游戏退出游戏3.4.初始化界面3.5.蛇在行走的运动,蛇头方向,吃食物判定,蛇身变长,游戏结束等判定第4章编码与调试 (13)第5章系统使用手册 (13)第6章总结 (13)第1章需求分析贪吃蛇是一款老少皆宜的益智类竞技游戏,操作简单广受大众喜爱,因程序简易模式多样支持多平台而被我们选为本次课设题目,我们将基于MFC的VC++编辑。
第2章游戏设计2.1 游戏介绍本游戏讲述了一只可怜的像素蛇snake,被两个可怕的猥琐怪蜀黍囚禁在一个凄凉的幽闭空间中不停追逐像素果子的故事。
在幽闭空间中每当snake碰撞到像素果子时就会伸长而且移动速度会随之变快,当snake碰触到自己身体或四壁时game over。
1. 控制面板功能(1)开始游戏;(2)暂停游戏;(3)继续游戏;(4)退出游戏;2. 游戏功能(1)snake初始位置,初始移动;(2)方向移动snake;(3)果子随机出现;(4)snake吃掉像素果子后伸长;(5)果子再生;(6)snake碰撞四壁以及身体后死亡;2.2 游戏结构整个软件根据游戏需求分析,可得出系统控制面板结构图和snake程序整体调用关系流程图。
2.2.1 控制面板结构有操作需制作控制板结构来控制游戏控制面板结构图如下所示图2.1 控制面板结构图2.2.2 贪吃蛇行动指令系统逻辑流程设计分析贪吃蛇游戏功能以及操作后得出贪吃蛇行动逻辑方案,按照方案编写程序函数以及构造程序逻辑流程图主要运行函数以及逻辑流程图如下:表2.2 主要函数表图2.3 贪吃蛇行动逻辑流程图第3章游戏细设计与实现我们将游戏的制作重点放在实现snake的各种行动指令以及实现snake的伸长和果实的随机出现3.1游戏运行中的设计与实现1.定义蛇和食物开始定义游戏中的蛇与食物两个单位struct Snake{ int x,y;int len;int direct;}Snake[50];struct Food{int x;int y;int isfood;}Food;2蛇形和食物绘制void CSNAKEView::OnDraw(CDC* pDC){CSNAKEDoc* pDoc = GetDocument();ASSERT_V ALID(pDoc);// TODO: add draw code for native data hereCBrush backBrush(RGB(100,100,0));CBrush* pOldBrush = pDC->SelectObject(&backBrush);CRect rect;pDC->GetClipBox(&rect);pDC->PatBlt(rect.left, rect.top, rect.Width(), rect.Height(),PATCOPY);pDC->SelectObject(pOldBrush);3.开始游戏暂停游戏继续游戏退出游戏游戏中的各菜单功能的设计与实现(1)Continue菜单void CSNAKEView::OnContinue(){// TODO: Add your command handler code hereSetTimer(1,10,NULL);}(2)Exit菜单void CSNAKEView::OnExit(){// TODO: Add your command handler code here AfxMessageBox("退出游戏...");}(3)Start菜单void CSNAKEView::OnStart(){// TODO: Add your command handler code here SetTimer(1,3000,NULL);AfxMessageBox("3秒后开始游戏!"); OnInitialUpdate();}(4)Stop菜单void CSNAKEView::OnStop(){// TODO: Add your command handler code here KillTimer(1);AfxMessageBox("暂停游戏...");}4.初始化界面void CSNAKEView::OnInitialUpdate(){CView::OnInitialUpdate();Snake[0].x=10;Snake[0].y=10;Snake[1].x=11;Snake[1].y=10;Snake[2].x=12;Snake[2].y=10;Snake[0].direct=3;Snake[0].len=3;Food.isfood=1;// TODO: Add your specialized code here and/or call the base class }5.蛇在行走的运动,蛇头方向,吃食物判定,蛇身变长,游戏结束等判定我们将蛇的一系列运动写在一个函数中,此函数用来实现蛇的各种行动以及各种判定void CSNAKEView::OnTimer(UINT nIDEvent){// TODO: Add your message handler code here and/or call defaultCDC *pDC=GetDC();CString soure;if(Snake[0].len==2)SetTimer(1,370,NULL);if(Snake[0].len==3)SetTimer(1,270,NULL);if(Snake[0].len==6)SetTimer(1,200,NULL);if(Snake[0].len==9)SetTimer(1,100,NULL);soure.Format("得分:%d!",(Snake[0].len-3)*10);//撞界判断if(Snake[0].x*20<=37||Snake[0].y*20<=37||Snake[0].x*20>=462||Snake[0].y*20>=46 2){KillTimer(1);AfxMessageBox(soure);// s=0;}//蛇身相撞判断if(Snake[0].len>3)for(int sn=Snake[0].len-1;sn>0;sn--){if(Snake[0].x*20==Snake[sn].x*20&&Snake[0].y*20==Snake[sn].y*20){KillTimer(1);AfxMessageBox(soure);// s=0;}}///////////////////////////////////////////////////////////////////////////pDC->SelectStockObject(WHITE_PEN);pDC->Rectangle(Snake[Snake[0].len-1].x*20,Snake[Snake[0].len-1].y*20,(Snake[Sn ake[0].len-1].x+1)*20,(Snake[Snake[0].len-1].y+1)*20);for(int i=Snake[0].len-1;i>0;i--){Snake[i].x=Snake[i-1].x;Snake[i].y=Snake[i-1].y;}//行走方向判断if(Snake[0].direct==1)Snake[0].y--;if(Snake[0].direct==2)Snake[0].y++;if(Snake[0].direct==3)Snake[0].x--;if(Snake[0].direct==4)Snake[0].x++;pDC->SelectStockObject(BLACK_PEN);CBrush DrawBrush=(RGB(100,100,100));CBrush *Drawbrush=pDC->SelectObject(&DrawBrush);pDC->Rectangle(Snake[0].x*20,Snake[0].y*20,(Snake[0].x+1)*20,(Snake[0].y+1)*2 0);pDC->SelectObject(DrawBrush);//判断吃豆的条件,撞到就吃if(Snake[0].x*20==Food.x*20&&Snake[0].y*20==Food.y*20){Snake[0].len++;Food.isfood=1;Snake[Snake[0].len-1].x=Snake[Snake[0].len-2].x;Snake[Snake[0].len-1].y=Snake[Snake[0].len-2].y;}//如果食物被吃了就生成if(Food.isfood==1){srand((unsigned)time(NULL));do{for(int isfo=Snake[0].len-1;isfo>=0;isfo--)if(Snake[0].x*20==Snake[isfo].x*20&&Snake[0].y*20==Snake[isfo].y*20) {Food.x=rand()%25;Food.y=rand()%25;}}while(Food.x*20<70||Food.y*20<70||Food.x*20>430||Food.y*20>430);pDC->Rectangle(Food.x*20,Food.y*20,(Food.x+1)*20,(Food.y+1)*20);Food.isfood=0;}CView::OnTimer(nIDEvent);}第4章编码与调试在上一章节中已经分模块给出了核心代码,则在此不需再给出代码,可从系统在编码实现过程中遇到的主要问题及其解决方法在此罗列。
java版的贪吃蛇毕业论文

j a v a版的贪吃蛇毕业论文Document serial number【UU89WT-UU98YT-UU8CB-UUUT-UUT108】贪吃蛇姓名:摘要:本文用J2SE实现大家耳熟能详的一个贪吃蛇游戏来综合运用所学知识,本游戏运用软件工程思想(螺旋模型),打好游戏主体框架,JAVA的面向对象思想,封装类,接口等概念,来完成本游戏,打到综合运用知识的目的。
⑴.本游戏开发平台:WINXP;⑵.JAVA开发环境: +Eclipse;⑶.开发语言:J2SE关键词:中央控制器;游戏面板;食物;蛇;石头The Greed SnakeAbstract: In this paper, J2SE implementation of a Snake game familiar to the integrated use of what they have learned, this game is the use of software engineering thinking (spiral model), the main framework of the fight game, JAVA object-oriented thinking, wrapper classes, interface concepts to complete this game, hitting the integrated use of knowledge and purpose.⑴. The game development platform: WINXP;⑵. JAVA Development Environment: + Eclipse;⑶. Development Languages: J2SEKeywords:Controller;GamePanel;Food;Snake;Ground前言贪吃蛇游戏背景:蛇引诱夏娃吃了苹果之后,就被贬为毒虫,阴险的象征。
贪吃蛇游戏开发论文设计

MFC应用开发技术贪吃蛇游戏开发学院:人民武装学院专业:计算机工程与技术班级: 11 维护学号: 1120070257 学生姓名:胡桥林指导教师:黄顺强摘要本设计实现了一个简单的贪食蛇小游戏,该游戏不仅实现了简单的游戏操作功能,还实现了灵活的运作功能,而且具有简洁大方的图文外观。
此设计按照软件工程的方法进行,系统具有良好的界面和必要的交互信息,使操作人员能快捷简单地进行操作,给玩家一个容易有趣的游戏。
本系统开发平台为Windows XP,程序设计语言采用C++,在程序设计中,采用了结构化与面向对象两种解决问题的方法。
关键词:程序设计;计算器;MFC;按钮控件目录第一章游戏说明 (4)1.1 功能描述 (4)1.2 VC++6.0 的介绍 (4)第二章 MFC的的概述 (5)2.1 MFC的介绍 (5)2.2 类的介绍 (5)第三章总体设计说明 (7)3.1 设计思路 (7)3.2 程序框图 (7)3.3 数据结构 (9)3.4 主要算法 (10)第四章代码实现 (11)4.1 随机放置食物 (11)4.2 初始化数据 (11)4.3 方向键控制蛇的运动方向 (13)第五章运行结果 (17)5.1 初始界面 (17)5.2 开始游戏时的界面 (17)5.3 游戏运行时界面 (18)5.4 游戏结束 (18)总结 (20)致谢 (21)参考文献 (22)第一章游戏说明贪食蛇是一个深受大众喜爱的简单游戏,玩家通过按键上的四个光标控制蛇的上下左右四个方向移动,蛇头碰撞到食物则表示食物被蛇吃掉,这时蛇的身长长一节,接着出现食物,等待被蛇吃掉,如果蛇在移动过程中,撞到墙壁或者身体交叉蛇头撞到自己的身体游戏结束游戏运行环境:设计环境:Microsoft Windows XP开发工具:Visual C++ 6.0运行环境:Microsoft Windows XP及以上版本1.1 功能描述游戏规则如下:●点击游戏->开始菜单游戏开始;●通过方向键控制蛇的运动方向,吃掉随机出现的豆子,若不小心碰到墙壁或者与自身相交,则该轮游戏结束;●点击游戏->暂停按钮,暂停游戏;点击游戏->继续菜单,继续游戏;●点击设置->难度菜单,设定游戏难易程度;●点击游戏->结束菜单退出游戏。
毕业设计论文-基于Java的游戏设计贪吃蛇

毕业设计(论文)中文摘要1 绪论贪吃蛇是世界知名的益智类小游戏,选择这个题目一方面是为了将我们自己的所学知识加以运用;另一方面,我希望通过自己的所学知识把它剖析开来,通过自己的动手实践,真正的了解它的本质和精髓。
希望通过这次实践,能从中提高自己的编程能力。
并从中学会从零开始分析设计程序,达到学以致用,活学活用的目的。
另外,通过本游戏的开发,达到学习Java技术和熟悉软件开发流程的目的。
本游戏的开发语言为Java,开发工具选用Eclipse。
Java是一种简单的,面向对象的,分布式的,解释型的,健壮安全的,结构中立的,可移植的,性能优异、多线程的动态语言。
这里采用Java作为开发语言主要是基于Java的面向对象和可移植性。
Eclipse 是一个开放源代码的、基于 Java 的可扩展开发平台。
就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。
Java语言的特点1.1.1 简单性Java与C++语言非常相近,但Java比C++简单,它抛弃了C++中的一些不是绝对必要的功能,如头文件、预处理文件、指针、结构、运算符重载、多重继承以及自动强迫同型。
Java实现了自动的垃圾收集,简化了内存管理的工作。
1.1.2 平台无关性Java引进虚拟机原理,并运行于虚拟机,实现不同平台之间的Java接口。
Java 的数据类型与机器无关。
1.1.3 安全性Java的编程类似C++,但舍弃了C++的指针对存储器地址的直接操作,程序运行时,内存由操作系统分配,这样可以避免病毒通过指针入侵系统。
它提供了安全管理器,防止程序的非法访问。
1.1.4 面向对象Java吸收了C++面向对象的概念,将数据封装于类中,实现了程序的简洁性和便于维护性,使程序代码可以只需一次编译就可反复利用。
1.1.5 分布式Java建立在TCP/IP网络平台上,提供了用HTTP和FTP协议传送和接收信息的库函数,使用其相关技术可以十分方便的构建分布式应用系统。
毕业设计(论文)-贪吃蛇游戏的设计

本科毕业论文(设计)(2015届)贪吃蛇游戏的设计院 系 电子信息工程学院专 业 电气工程及其自动化姓 名指导教师 副教授2015年4月摘要本篇论文主要是设计并且着手致力于实现一种基于51单片机的经典的贪吃蛇游戏,主要是研究该游戏的硬件电路和软件编程的设计,同时也简单介绍了应该如何使用Proteus软件进行仿真。
借助仿真软件进行实验测试,可以基本实现游戏一些简单的基本功能。
直至现在,大家都知道且明白了51系列的单片机技术相对而言比较成熟,功能也十分强大,应用较为广泛。
将单片机作为本设计的控制核心,能够使硬件电路大大地简化,用软件来编程控制单片机,来加以实现硬件电路的功能,可以降低能耗,同时也节约成本。
选用C语言编程,比较方便灵活,极大地加快了软件开发的速度,使开发周期缩短了,同时方便移植。
本篇论文比较详细的的介绍了各种硬件的基本特性,贪吃蛇游戏实现的基本功能与详细设计,软件设计的具体说明,每一个模块的细节要求,还有一些功能模块的程序流程图和关键部分代码的详细讲解等。
关键词:Proteus软件仿真;51单片机;Keil;贪吃蛇;LED点阵屏AbstractThis paper is mainly committed to the design and begin a 51 microcontroller based on the classic Snake game, is to study the hardware circuit design and software programming of the game, but also a brief introduction to how to use Proteus simulation software . With simulation software experimental tests, the basic realization of the game can be some simple basic functions. Until now, we all know and understand the 51 series of single-chip technology is relatively mature, the function is also very powerful, is widely used. The microcontroller as control core of this design, enabling greatly simplify the hardware circuit with microcontroller programming control software, hardware circuitry to be functional, you can reduce energy consumption, but also cost savings. Selection of the C programming language, more convenient and flexible, which greatly accelerated the pace of software development, shorten the development cycle, while convenient for transplant. This paper a more detailed introduction to the basic characteristics of various hardware realization of the basic functions of the Snake game with detailed design, software design, specify the details of the requirements of each module, there are some functional modules of the program flow chart and explain in detail the critical parts of the code and so on.Keywords:Proteus software simulation;51 microcontroller;Keil;Snake;LED lattice;目录摘要 (I)Abstract (II)目录 (Ⅲ)1 绪论 (1)1.1研究背景及意义 (1)1.2单片机发展状况 (1)1.3 LED发展状况 (2)1.4 设计特点 (3)2 系统总体设计 (3)2.1设计要求 (3)2.2 系统设计方案 (4)2.2.1硬件设计 (4)2.2.2软件设计 (4)3系统硬件设计 (4)3.18*8LED点阵的原理说明 (4)3.2 LED阵列驱动电路 (4)4系统软件设计 (5)4.1系统主要模块介绍 (5)4.1.1 主函数模块 (6)4.1.2 按键模块 (6)4.1.3 蛇运动控制模块 (6)4.2主程序工作流程 (6)4.3 游戏设计思想 (7)4.4 LED点阵初始化 (8)4.5 贪吃蛇的移动 (9)4.6 食物的随机出现 (9)5联调与测试 (9)5.1软件调试 (9)5.2硬件调试 (10)结论与展望 (13)致谢 (14)参考文献 (15)附录A:系统原理图 (16)附录B:系统PCB图 (17)附录C:系统仿真图 (18)附录D:系统实物图 (18)附录E:系统源程序 (20)1 绪论1.1研究背景及意义时代在不断的进步,人们的生活节奏也因此不断加快,越来越多的人加入了经济化全球化的世界。
python贪吃蛇课程设计论文

python贪吃蛇课程设计论文一、教学目标本课程旨在通过Python编程语言实现贪吃蛇游戏,让学生掌握Python基本语法、流程控制语句、函数定义等知识,培养学生的编程思维和问题解决能力。
1.理解Python基本语法和数据类型。
2.掌握变量定义、赋值和运算符使用。
3.了解流程控制语句,如条件判断、循环等。
4.熟悉函数定义和调用。
5.能够运用Python编写简单的程序。
6.学会使用Python进行数据输入和输出。
7.掌握Python流程控制,能实现分支和循环。
8.能够独立编写和调试Python函数。
情感态度价值观目标:1.培养学生的团队合作意识和沟通能力。
2.激发学生对编程和计算机科学的兴趣。
3.培养学生的创新精神和问题解决能力。
二、教学内容本课程的教学内容主要包括Python基本语法、数据类型、流程控制语句、函数定义等。
具体安排如下:1.Python基本语法和数据类型:介绍Python编程环境,变量定义、赋值和运算符使用。
2.流程控制语句:条件判断、循环等。
3.函数定义和调用:函数的定义、参数传递、返回值等。
4.贪吃蛇游戏实现:分析游戏逻辑,编写相关函数和主程序。
三、教学方法本课程采用讲授法、案例分析法和实验法相结合的教学方法。
1.讲授法:通过讲解Python基本语法、数据类型、流程控制语句和函数定义等知识,使学生掌握编程基础。
2.案例分析法:通过分析贪吃蛇游戏的实现案例,使学生理解游戏逻辑和编程思路。
3.实验法:让学生动手编写和调试代码,培养学生的编程实践能力。
四、教学资源1.教材:Python编程:从入门到实践。
2.参考书:Python核心编程。
3.多媒体资料:PPT、教学视频等。
4.实验设备:计算机、网络环境等。
教学资源的选择和准备应充分支持教学内容和教学方法的实施,提高学生的学习效果。
五、教学评估本课程的评估方式包括平时表现、作业、考试等,以全面客观地评价学生的学习成果。
1.平时表现:通过课堂参与、提问、小组讨论等评估学生的学习态度和积极性。
基于Android贪吃蛇游戏_本科毕业设计(论文)

本科毕业设计(论文)题目名称:基于Android贪吃蛇游戏学院:计算机科学技术专业年级:计算机科学与技术08(师)级摘要本课题是利用java语言在Android平台上进行手机游戏的开发,由于本人知识的有限,以及客观条件的限制,本人打算开发一个单机版的游戏。
本人在手机上玩过贪吃蛇的游戏,曾经为了和别人比赛,苦苦的玩了好多次,追求高分!后来得知这个小小的游戏是nokia当年很成功的一款手机游戏,许多人都玩过,也很喜欢。
现在这款游戏的版本已经发展到第三版了,手机生产厂商继续开发这个游戏,看来这个游戏还是有很大的市场的。
Google公司2007年11月5日发布的开源的Android 平台——一款包括操作系统(基于Linux内核)、中间件和关键应用的手机平台,并组建了开放手机联盟(Open Handset Alliance),包括Google、中国移动、T-Mobile、宏达电、高通、摩托罗拉等领军企业。
于是,我决定利用自己大学所学的知识,自己在指导老师的帮助下,独立开发这个小游戏。
本文首先详细介绍了java的一些基本的知识点,在此基础上引出了Android,介绍了Android的基础以及其特点,然后介绍了一下Android将来的一些前景和发展。
重点说明了这个贪吃蛇程序所用到的一些类和控件,包括Drawable,Canvas, Thread,等等。
介绍了这些类的一般的使用方法,以及本程序是如何使用这些类来进行游戏的开发的。
本程序将老少皆宜的经典作品移植到手机上来,为更流行的硬件平台提供应用软件。
这些都将能很好的满足未来人们对手机游戏的需求。
吞吃蛇游戏基于Android平台编写,满足一般手机用户的娱乐需求。
关键词:Android系统; 贪食蛇游戏; 手机游戏Abstract.This topic is using java language on the Android platform mobile phone game development, I limited knowledge, and objective constraints, I intend to develop a stand-alone game. I played the game of Snake, on the phone once in order to match with others, struggling to play many times, the pursuit of high scores! Later learned that this little game nokia was very successful mobile phone games, many people have played, and also enjoyed. Version of the game has been developed to the third edition, mobile phone manufacturers continue to develop this game, it seems that this game is a great market. Open-source Android platform, Google's released on November 5, 2007 - an operating system (Linux kernel), middleware and key applications-based mobile phone platform, and the formation of the Open Handset Alliance (Open Handset Alliance), includingGoogle, China Mobile, T-Mobile, HTC, Qualcomm, Motorola and other leading enterprisesSo, I decided to use the knowledge learned in his college, in the instructor's help, the independent development of this game.This article first details some of the basic java knowledge, on this basis leads to Android, the basis of the Android and its characteristics, and then introduces the Android future prospects and development. Highlights this Snake procedures used and controls, including the Drawable Canvas, Thread, and so on. Describes the general use, as well as the program is how to use these classes to the development of the game. The ages of the classic works transplantation in this program to the phone up, to provide application software for the more popular hardware platforms. These will be well positioned to meet future demand for mobile games. Devour the snake game based on the Android platform, prepared to meet the entertainment needs of the general mobile phone users.Key words: Android system; Gluttony snake game; Mobile game目录摘要 (I)Abstract (II)第1章绪论 (1)1.1 Android简介 (1)1.1.1 Android的来源及发展 (1)1.1.2 Android系统的特点 (2)1.2 项目目的与意义 (2)1.2.1 开发目的 (2)1.2.2 开发意义 (3)1.3 国内外现状分析 (3)1.3.1 国内外手机系统现状 (3)1.3.2 国内外手机应用现状 (4)1.3.3 发展趋势 (5)第2章方案论证 (6)2.1 经济可行性分析 (6)2.2 技术可行性分析 (6)2.2.1 Android平台特性 (6)2.2.2 Android平台架构 (6)2.2.3 Android应用程序组件 (7)2.3 本项目的开发方法 (8)2.4 开发工具及环境简介 (10)2.4.1 开发工具Eclipse简介 (10)2.4.2 开发环境简介 (10)第3章需求分析 (11)3.1 系统开发目标 (11)3.2 系统需求分析 (11)3.2.1 业务需求分析 (11)3.2.2 用户需求分析 (12)3.2.3 功能需求分析 (12)第4章过程论述............................................................................. 错误!未定义书签。
java贪吃蛇毕业论文

java贪吃蛇毕业论文本文将介绍贪吃蛇游戏的设计与实现,该游戏的主要功能包括游戏开始、游戏暂停、游戏结束、得分统计等。
基于Java 语言,采用面向对象的程序设计方法,构建了具有良好交互性的贪吃蛇游戏系统。
一、引言贪吃蛇是一个经典的小游戏,它在全世界范围内都受到玩家们的喜欢。
贪吃蛇这个小游戏有着简单的规则和良好的互动性,因此成为了许多程序员学习编程的入门教材。
本文旨在通过对贪吃蛇游戏的设计和实现,加深对Java编程语言的理解,提升面向对象程序设计的能力。
本文将介绍贪吃蛇游戏的整体框架设计、游戏流程设计、源代码分析等内容,希望对同学们学习Java编程有所帮助。
二、贪吃蛇游戏的设计与实现2.1整体框架设计首先,我们来看一下贪吃蛇游戏的整体框架设计。
贪吃蛇游戏的界面分为左右两部分,左边显示游戏画面,右边显示得分情况。
游戏开始后,蛇会出现在游戏画面的中央位置,游戏画面上还会随机出现食物。
如果蛇吃到了食物,那么得分就会增加,同时蛇也会变长。
如果蛇撞到了游戏画面的边界或者自己的身体,则游戏失败,游戏画面会出现“Game over”的提示。
贪吃蛇游戏的设计可以分为两个模块:游戏画面显示模块和游戏逻辑实现模块。
其中,游戏画面显示模块是用来将游戏运行时的状态显示在界面上,游戏逻辑实现模块则是通过对用户的操作产生游戏效果。
2.2游戏流程设计当用户点击游戏开始按钮后,游戏画面会显示出蛇的头部,然后蛇会按照一定的规则向前移动。
此时,用户可以通过按键控制蛇的移动方向,蛇吃到食物时,得分会增加,同时蛇的长度增加。
如果蛇撞到了游戏画面的边界或自己的身体,则游戏失败,游戏画面会出现“Game over”的提示。
如果用户点击游戏暂停按钮,则游戏就会暂停,并且再次点击按钮游戏就会恢复进行。
2.3源代码分析以下是源代码的分析,采用了面向对象的编程方式,将游戏画面、蛇、食物等各个元素都抽象成了对象。
下面我们就来看一下其中的一部分代码。
(1)GamePanel.java```javapublic class GamePanel extends JPanel {private Snake snake;//蛇private Food food;//食物private int score;//分数private int speed;//移动速度private Timer timer;//计时器public GamePanel() {snake = new Snake();food = new Food();score = 0;speed = 200;timer = new Timer(speed, new ActionListener() { @Overridepublic void actionPerformed(ActionEvent e) { snake.move();//蛇移动check();//检查游戏是否结束或吃到食物repaint();//重新绘制}});timer.start();//开始计时器}public void paint(Graphics g) {super.paint(g);snake.draw(g);//绘制蛇food.draw(g);//绘制食物g.drawString(\。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
贪吃蛇小游戏开发毕业论文目录摘要 (I)1.引言 (2)1.1开发工具 (2)1.2应用环境 (2)2.系统需求分析 (3)2.1需求分析 (3)2.2可行性分析 (3)3.系统概要设计 (4)3.1设计目标 (4)3.2系统功能模块 (4)4.系统详细设计 (6)4.1程序设计 (6)4.2程序源代码 (10)4.3各功能界面截图 (23)5.系统测试 (29)5.1测试的意义 (29)5.2测试过程 (29)5.3测试结果 (30)参考文献 (31)致 (32)1.引言1.1 开发工具Sun Microsystems公司在推出Java语言的同时,推出了一套开发工具JDK。
Sun提供的基于字符模式的Java开发工具包JDK: Java开发工具(JDK)是许多Java专家最初使用的开发环境。
Java是平台无关的语言是指用Java写的应用程序不用修改就可在不同的软硬件平台上运行。
Java源程序编写借助于记事本,Editpuls,UltraEdit等第三方编辑工具。
所有的Java文件编辑、编译、调试、解释运行都是通过使用字符命令来执行操作。
JDK由一个标准类库和一组建立,测试及建立文档的Java实用程序组成。
其核心Java API是一些预定义的类库,开发人员需要用这些类来访问Java语言的功能。
JDK 是整个Java的核心,包括了Java运行环境(Java RuntimeEnvirnment),一堆Java工具和Java基础的类库(rt.jar)。
不论什么Java应用服务器实质都是置了某个版本的JDK。
因此掌握JDK是学好Java的第一步。
JDK里面是java类库和java的语言规,它提供的是无论你用何种开发软件写java程序都必须用到的类库和java语言规.没有jdk,你的java程序根本就不能用。
最主流的JDK是Sun公司发布的JDK,除了Sun之外,还有很多公司和组织都开发了自己的JDK,例如IBM公司开发的JDK,BEA公司的Jrocket,还有GNU组织开发的JDK等等。
其中IBM的JDK包含的JVM(Java Virtual Machine)运行效率要比SunJDK包含的JVM高出许多。
而专门运行在x86平台的Jrocket在服务端运行效率也要比SunJDK好很多。
但不管怎么说,我们还是需要先把Sun JDK掌握好。
1.2 应用环境(1).操作系统:Solaris、Windows NT、Windows 95等(2). 应用软件:jdk1.52.系统需求分析2.1 需求分析本系统主要是完成贪吃蛇游戏的基本操作。
用户可以自己练习和娱乐。
本系统需要满足以下几点要求:(1) 利用方向键来改变蛇的运行方向。
(2) 空格键暂停或继续游戏,并在随机的地方产生食物。
(3) 吃到食物就变成新的蛇体,碰到壁或自身则游戏结束,否则正常运行。
2.2 可行性分析贪吃蛇游戏是一种简单的大众的游戏,自从计算机实现以来,深受广大电脑玩家的喜爱,做一个简单的贪吃蛇小游戏。
贪吃蛇的核心算法时如何实现移动和吃掉食物,没有碰到食物的时候,把当前运动方向上的下个节点入队,并以蛇节点的颜色绘制这个节点,然后把头指针所指的节点出队,并以游戏框架部背景色重绘出队的节点,这样就可以达到移动的效果。
而在吃到食物的时候,则只需把食物入队即可。
实现贪吃蛇的基本的蛇身移动、吃到食物身体增长、和碰到墙壁或自身死亡,能够暂停和开始。
本次设计我将主要运用java语言来完成。
Java语言是一种跨平台,适合于分布式计算环境的面向对象编程语言,用Java写的应用程序不用修改就可在不同的软硬件平台上运行。
由于Java主要用于网络应用程序开发,因此对安全性有较高的要求。
如果没有安全保证,用户从网络下载程序执行就非常危险。
Java通过自己的安全机制防止了病毒程序的产生和下载程序对本地系统的威胁破坏。
3.系统概要设计3.1 设计目标本软件是针对贪吃蛇小游戏的JAVA程序,利用方向键来改变蛇的运行方向,空格键暂停或继续游戏,并在随机的地方产生食物,吃到食物就变成新的蛇体,碰到壁或自身则游戏结束,否则正常运行。
3.2 系统功能模块本游戏系统共包括1个java源文件和7个类文件。
1.类之间的关系如图1所示。
图1类之间的关系2.java源文件及其功能如表所示。
表1 java源文件及其功能4.系统详细设计4.1 程序设计1.主类SnakeGame(1)主类为此程序的入口,定义了SnakeFrame的对象frame,开始运行此程序。
(2)源代码见文件SnakeGame.Java2.类SnakeFrame(1)成员变量见表2表2 主要成员变量(2)方法见表3表3 主要方法3.类Snake(1)成员变量见表4表4 主要成员变量(2)方法见表5表5 主要方法4. 类Node(1)成员变量见表6表6 主要成员变量(2)源代码见文件SnakeGame.java5.类SnakePanel此类为画蛇的面板类,是实现红蓝间隔画蛇身算法的类。
源代码见文件源代码见文件SnakeGame.java6.类StatusRunnable此类为线程的子类,实现记录状态的功能。
源代码见文件SnakeGame.java7.类SnakeRunnable此类为线程的子类,实现蛇运动以及记录分数的功能。
4.2 程序源代码import java.awt.Color;import ponent;import java.awt.Graphics;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.KeyEvent;import java.awt.event.KeyListener;import java.util.ArrayList;import javax.swing.BorderFactory;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JMenu;import javax.swing.JMenuBar;import javax.swing.JMenuItem;import javax.swing.JPanel;public class SnakeGame {public static void main(String[] args) {SnakeFrame frame = new SnakeFrame();frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setVisible(true);}}// ----------记录状态的线程class StatusRunnable implements Runnable {public StatusRunnable(Snake snake, JLabel statusLabel, JLabelscoreLabel) {this.statusLabel = statusLabel;this.scoreLabel = scoreLabel;this.snake = snake;}public void run() {String sta = "";String spe = "";while (true) {switch (snake.status) {case Snake.RUNNING:sta = "Running";break;case Snake.PAUSED:sta = "Paused";break;case Snake.GAMEOVER:sta = "GameOver";break;}statusLabel.setText(sta);scoreLabel.setText("" + snake.score);try {Thread.sleep(100);} catch (Exception e) {}}}private JLabel scoreLabel;private JLabel statusLabel;private Snake snake;}// ----------蛇运动以及记录分数的线程class SnakeRunnable implements Runnable {public SnakeRunnable(Snake snake, Component component) { this.snake = snake;ponent = component;}public void run() {while (true) {try {snake.move();component.repaint();Thread.sleep(snake.speed); } catch (Exception e) {}}}private Snake snake;private Component component;}class Snake {boolean isRun;// ---------是否运动中ArrayList<Node> body;// -----蛇体Node food;// --------食物int derection;// --------方向int score;int status;int speed;public static final int SLOW = 500;public static final int MID = 300;public static final int FAST = 100;public static final int RUNNING = 1;public static final int PAUSED = 2;public static final int GAMEOVER = 3;public static final int LEFT = 1;public static final int UP = 2;public static final int RIGHT = 3;public static final int DOWN = 4;public Snake() {speed = Snake.SLOW;score = 0;isRun = false;status = Snake.PAUSED;derection = Snake.RIGHT;body = new ArrayList<Node>();body.add(new Node(60, 20));body.add(new Node(40, 20));body.add(new Node(20, 20));makeFood();}// ------------判断食物是否被蛇吃掉// -------如果食物在蛇运行方向的正前方,并且与蛇头接触,则被吃掉 private boolean isEaten() {Node head = body.get(0);if (derection == Snake.RIGHT && (head.x + Node.W) == food.x&& head.y == food.y)return true;if (derection == Snake.LEFT && (head.x - Node.W) == food.x&& head.y == food.y)return true;if (derection == Snake.UP && head.x == food.x&& (head.y - Node.H) == food.y)return true;if (derection == Snake.DOWN && head.x == food.x&& (head.y + Node.H) == food.y)return true;elsereturn false;}// ----------是否碰撞private boolean isCollsion() {Node node = body.get(0);// ------------碰壁if (derection == Snake.RIGHT && node.x == 280)return true;if (derection == Snake.UP && node.y == 0)return true;if (derection == Snake.LEFT && node.x == 0)return true;if (derection == Snake.DOWN && node.y == 380)return true;// --------------蛇头碰到蛇身Node temp = null;int i = 0;for (i = 3; i < body.size(); i++) {temp = body.get(i);if (temp.x == node.x && temp.y == node.y) break;}if (i < body.size())return true;elsereturn false;}// -------在随机的地方产生食物public void makeFood() {Node node = new Node(0, 0);boolean isInBody = true;int x = 0, y = 0;int X = 0, Y = 0;int i = 0;while (isInBody) {x = (int) (Math.random() * 15);y = (int) (Math.random() * 20);Y = y * Node.H;for (i = 0; i < body.size(); i++) {if (X == body.get(i).x && Y ==body.get(i).y)break;}if (i < body.size())isInBody = true;elseisInBody = false;}food = new Node(X, Y);}// ---------改变运行方向public void changeDerection(int newDer) {if (derection % 2 != newDer % 2)// -------如果与原来方向相同或相反,则无法改变derection = newDer;}public void move() {if (isEaten()) {// -----如果食物被吃掉body.add(0, food);// --------把食物当成蛇头成为新的蛇体score += 10;makeFood();// --------产生食物} else if (isCollsion())// ---------如果碰壁或自身{isRun = false;status = Snake.GAMEOVER;// -----结束} else if (isRun) {// ----正常运行(不吃食物,不碰壁,不碰自身)Node node = body.get(0);int X = node.x;// ------------蛇头按运行方向前进一个单位 switch (derection) {case 1:X -= Node.W;break;case 2:Y -= Node.H;break;case 3:X += Node.W;break;case 4:Y += Node.H;break;}body.add(0, new Node(X, Y));// ---------------去掉蛇尾body.remove(body.size() - 1);}}}// ---------组成蛇身的单位,食物class Node {public static final int W = 20;public static final int H = 20;int x;int y;public Node(int x, int y) {this.x = x;this.y = y;}}// ------画板class SnakePanel extends JPanel {Snake snake;public SnakePanel(Snake snake) {this.snake = snake;}public void paintComponent(Graphics g) {super.paintComponent(g);Node node = null;for (int i = 0; i < snake.body.size(); i++) {// ---红蓝间隔画蛇身if (i % 2 == 0)g.setColor(Color.blue);elseg.setColor(Color.yellow);node = snake.body.get(i);g.fillRect(node.x, node.y, node.H, node.W);//*******************试用*********************}node = snake.food;g.setColor(Color.red);g.fillRect(node.x, node.y, node.H, node.W);}}class SnakeFrame extends JFrame {private JLabel statusLabel;private JLabel speedLabel;private JLabel scoreLabel;private JPanel snakePanel;private Snake snake;private JMenuBar bar;JMenu gameMenu;JMenu helpMenu;JMenu speedMenu;JMenuItem newItem;JMenuItem pauseItem;JMenuItem beginItem;JMenuItem helpItem;JMenuItem aboutItem;JMenuItem slowItem;JMenuItem midItem;JMenuItem fastItem;public SnakeFrame() {init();ActionListener l = new ActionListener() {public void actionPerformed(ActionEvent e) { if (e.getSource() == pauseItem)snake.isRun = false;if (e.getSource() == beginItem)snake.isRun = true;if (e.getSource() == newItem) {newGame();}// ------------菜单控制运行速度if (e.getSource() == slowItem) {snake.speed = Snake.SLOW;speedLabel.setText("Slow"); }if (e.getSource() == midItem) {snake.speed = Snake.MID;speedLabel.setText("Mid"); }if (e.getSource() == fastItem) {snake.speed = Snake.FAST;speedLabel.setText("Fast"); }}};pauseItem.addActionListener(l);beginItem.addActionListener(l);newItem.addActionListener(l);aboutItem.addActionListener(l);slowItem.addActionListener(l);midItem.addActionListener(l);fastItem.addActionListener(l);addKeyListener(new KeyListener() {public void keyPressed(KeyEvent e) {switch (e.getKeyCode()) {// ------------方向键改变蛇运行方向 case KeyEvent.VK_DOWN://snake.changeDerection(Snake.DOWN);break;case KeyEvent.VK_UP://snake.changeDerection(Snake.UP); break;case KeyEvent.VK_LEFT://snake.changeDerection(Snake.LEFT); break;case KeyEvent.VK_RIGHT://snake.changeDerection(Snake.RIGHT); break;// 空格键,游戏暂停或继续case KeyEvent.VK_SPACE://if (snake.isRun == true) {snake.isRun = false;snake.status= Snake.PAUSED;break;}if (snake.isRun == false) {snake.isRun = true;snake.status = Snake.RUNNING;break;}}}public void keyReleased(KeyEvent k) { }public void keyTyped(KeyEvent k) {}});}private void init() {speedLabel = new JLabel();snake = new Snake();setSize(380, 460);setLayout(null);this.setResizable(false);bar = new JMenuBar();gameMenu = new JMenu("游戏");newItem = new JMenuItem("新游戏");gameMenu.add(newItem);pauseItem = new JMenuItem("暂停");gameMenu.add(pauseItem);beginItem = new JMenuItem("继续游戏");gameMenu.add(beginItem);helpMenu = new JMenu("帮助");aboutItem = new JMenuItem("关于");helpMenu.add(aboutItem);speedMenu = new JMenu("速度");slowItem = new JMenuItem("初级");fastItem = new JMenuItem("高级");midItem = new JMenuItem("中级");speedMenu.add(slowItem);speedMenu.add(midItem);speedMenu.add(fastItem);bar.add(helpMenu);bar.add(speedMenu);setJMenuBar(bar);statusLabel = new JLabel();scoreLabel = new JLabel();snakePanel = new JPanel();snakePanel.setBounds(0, 0, 300, 400);snakePanel.setBorder(BorderFactory.createLineBorder(Color.darkGray));add(snakePanel);statusLabel.setBounds(300, 25, 60, 20);add(statusLabel);scoreLabel.setBounds(300, 20, 60, 20);add(scoreLabel);JLabel temp = new JLabel("状态");temp.setBounds(310, 5, 60, 20);add(temp);temp = new JLabel("分数");temp.setBounds(310, 105, 60, 20);add(temp);temp = new JLabel("速度");temp.setBounds(310, 55, 60, 20);add(temp);speedLabel.setBounds(310, 75, 60, 20);add(speedLabel);}private void newGame() {this.remove(snakePanel);this.remove(statusLabel);this.remove(scoreLabel);speedLabel.setText("Slow");statusLabel = new JLabel();scoreLabel = new JLabel();snakePanel = new JPanel();snakePanel = new SnakePanel(snake);snakePanel.setBounds(0, 0, 300, 400);snakePanel.setBorder(BorderFactory.createLineBorder(Color.darkGray));Runnable r1 = new SnakeRunnable(snake, snakePanel);Runnable r2 = new StatusRunnable(snake, statusLabel, scoreLabel); Thread t1 = new Thread(r1);Thread t2 = new Thread(r2);t1.start();t2.start();add(snakePanel);statusLabel.setBounds(310, 25, 60, 20);add(statusLabel);scoreLabel.setBounds(310, 125, 60, 20);add(scoreLabel);}}4.3 各功能界面截图1、贪吃蛇游戏的基本运行界面(1)生成初始界面:(2)游戏菜单栏:图2游戏菜单栏(3)速度菜单栏: 图3 速度菜单栏2.程序运行开始界面(1)鼠标点击New Game按钮,开始游戏(红色方块为食物,蓝黄相间为初始的蛇体):图4游戏初始界面(2)按空格键,游戏开始运行,蛇开始移动,并且吃到一次食物即红色方块后就变成蛇体:图5游戏开始运行界面(3)按方向键改变蛇的运行方向,并且碰壁后从新开始游戏,红色方块随机地方产生:图6 游戏运行界面5.系统测试5.1 测试的意义系统测试是为了发现错误而执行程序的过程,成功的测试是发现了至今尚未发现的错误的测试。