java贪吃蛇论文.docx
- 文档编号:2398440
- 上传时间:2023-05-03
- 格式:DOCX
- 页数:19
- 大小:80.66KB
java贪吃蛇论文.docx
《java贪吃蛇论文.docx》由会员分享,可在线阅读,更多相关《java贪吃蛇论文.docx(19页珍藏版)》请在冰点文库上搜索。
java贪吃蛇论文
Java贪吃蛇毕业论文
摘 要
近年来,java作为一种新的编程语言,以其简单性、可移植性和平台无关性等优点,得到了各个国家广泛地认可。
本文基于java技术和Eclipse开发环境,设计并实现了一个操作简单、界面美观的“贪吃蛇”游戏。
就整个游戏来说,目的是通过本游戏的设计与实现,达到学习java技术和熟悉软件开发流程的目的。
本文先介绍了java,对java进行了概述,然后对开发工具进行了选择,又进行了需求分析进而通过java语言设计并实现了贪吃蛇游戏,本系统在视图上运用了Java中的Swing技术规划界面。
通过GamePannel这个方法画出来整个展示的面板视图。
同时根据系统的需要定义了几个实体类如下(如食物、蛇、障碍物)。
并且在每个类里面定义了各自的属性和方法。
像在蛇这个类里面定义蛇在前后左右移动时候会有几个位移。
方法上运用了线程,控制snake会在运行SnakeGameTest这个方法运行后按照蛇头的方向不停的移动。
还有定义了蛇头(在蛇吃到food后重新定义蛇头)和蛇身(在吃到food后将food上添加到蛇身)。
food这个类定义了食物的样式和判断食物被吃过后,随机的在面板上产生一个food。
ground这个类定义了如何在面板上随机出现障碍物,还有对food的判断是否是食物并返回一个boolean型的值。
在控制上作者创建了controller这个类,并在这个类里面运用了接口事件监听键盘上下左右键对面板上的蛇进行控制,并创建了两个方法对蛇吃到东西后,对吃到的东西进行判断(调用了ground类中的方法进行判断)。
如果是食物则添加否则游戏结束。
最后在为了整个系统融合在一块并运行时,创建了SnakeGameTest这个类去开启这个系统。
为了保证代码的正确性和可靠性最后还进行了系统测试。
关键词:
java,贪吃蛇,eclipse
Abstract
Inrecentyears,thejavaasanewprogramminglanguage,withitsadvantagesofsimplicity,portabilityandplatformindependence,hasbeenwidelyrecognizedbyallcountries.JavabasedEclipsedevelopmentenvironment,designandrealizeasimpleoperation,beautifulinterfacenamely'Snake'game.TheDesignandImplementationofthegameattachimportancetolearningjavatechnologyandknowingthesoftwaredevelopmentprocess.Thisarticlefirstintroducesthejava,choosesdevelopmentaltools,conductsademandanalysisandthendesignstheSnakegamethroughbyjavalanguage.Additionally,thesystemusesinJavaSwingtechnologyinterface.ItDrawsthepanelviewoftheentireshowthroughGamePannel.Accordingtotheneedsofthesystem,severalentityclassesaredefinedasfollows(suchasfood,snakes,obstacles).Forexample,thedefinitionofasnake,therewillbeseveraldisplacementaroudthesnake.Therearealsodefinedsnakeheadsandsnakebody(thesnakeeatthefoodwhichwillbeaddedtothesnake).Thefoodthisclassdefinesthestyleofthefoodandjudgethefoodwhichiseaten,randompanelonafood.Thegroundofthisclassdefinesthepanelrandomobstacles,whetherthejudgmentofthefoodisthefoodandreturnsabooleanvalue.Createdonthecontrolofthecontrollerofthisclass,andinthisclassusetheboardsnakeacrosstheinterfaceeventlistenerkeyboardarrowkeystocontrolandcreatetwomethodssnakeeatsomething,eatsomethingtojudge(calledmethodsinthegroundclassjudgment).Ifitisfood,addtoorelsethegameends.Finally,theentiresystemisintegratedinoneandruntocreatetheSnakeGameTestthistoopenthesystem.Inordertoensurecodecorrectnessandreliabilityofthefinalsystemtest.
Keywords:
Java,Snake,Eclipse
目 录
绪论
“贪吃蛇”游戏是一个经典的游戏,它因简单的操作、很强的娱乐性而广受欢迎。
对于程序来说贪吃蛇制作相对简单,而且逻辑性强,通常是要步入游戏开发这个队伍前必练的项目。
贪吃蛇这个游戏的制作方法对于以前的我而言是很神秘的,我希望通过我自己所学的知识和自己的努力把它剖析起来。
正是由于这个想法,本文基于java技术和Eclipse开发环境,设计并实现了一个操作简单、界面美观的“贪吃蛇”游戏[1]。
由于自己初次编写程序,时间的紧迫和自己的技术有限,编写的贪吃蛇游戏还是相对简单,但就整个游戏来说,目的是通过本游戏的设计与实现,达到学习java技术和熟悉软件开发流程的目的。
我相信在以后通过自己不断的努力我会在编程这条路上越走越远。
本文首先介绍了java技术,对java技术进行了概述,然后对开发工具进行了选择,又进行了需求分析进而通过java语言设计出了贪吃蛇这个经典的小游戏[2],为了保证代码的正确性和可靠性最后还进行了系统测试。
1Java的概述
1.1java的简介
java最初被命名为Oak,目标设定在家用电器等小型系统的编程语言,来解决诸如电视机、电话、闹钟、烤面包机等家用电器的控制和通讯问题。
由于这些智能化家电的市场需求没有预期的高,Sun放弃了该项计划。
就在Oak几近失败之时,随着互联网的发展,Sun看到了Oak在计算机网络上的广阔应用前景,于是改造了Oak,以“Java”的名称正式发布。
Java不同于一般的编译执行计算机语言和解释执行计算机语言。
它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码,从而实现了“一次编译、到处执行”的跨平台特性。
不过,每次的编译执行需要消耗一定的时间,这同时也在一定程度上降低了Java程序的运行效率。
但在J2SE1.4.2发布后,Java的执行速度有了大幅提升[3]。
Java是一种跨平台,适合于分布式计算环境的面向对象编程语言。
具体来说,它具有如下特性:
简单性、面向对象、分布式、健壮性、结构中立、安全性、可移植、解释的、高性能、多线程、动态性等。
1.2环境配置
1.2.1JDK安装
⑴安装JDK,安装过程中可以自定义安装目录等信息,例如我们选择安装目录为D:
\java\jdk1.6.0_02;
⑵安装完成后,右击“我的电脑”,点击“属性”;
⑶选择“高级”选项卡,点击“环境变量”
⑷在“系统变量”中,设置三项属性,JAVA_HOME,PATH,CLASSPATH,若已存在则点击“编辑”,不存在则点击“新建”;
⑸JAVA_HOME指明JDK安装路径,就是刚才安装时所选择的路径D:
\java\jdk1.6.0_02,此路径下包括lib,bin,jre等文件夹(此变量最好设置,因为以后运行tomcat,Eclipse等都需要依此变量);Path使得系统可以在任何路径下识别java命令,设为:
%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;CLASSPATH为java加载类(classorlib)路径,只有类在classpath中,java命令才能识别,设为:
.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar(要加.表示当前路径)%JAVA_HOME%就是引用前面指定的JAVA_HOME;
⑹“开始”->;“运行”,键入“cmd”;
⑺键入命令“java-version”,“java”,“javac”几个命令,出现画面,说明环境变量配置成功。
1.2.2系统工具的选择安装
本论文采用的工具是Eclipse。
Eclipse是一个开放源代码的、基于Java的可扩展开发平台。
就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。
幸运的是,Eclipse附带了一个标准的插件集,包括Java开发工具(JavaDevelopmentTools,JDT)。
虽然大多数用户很乐于将Eclipse当作Java集成开发环境(IDE)来使用,但Eclipse的目标却不仅限于此。
Eclipse还包括插件开发环境(Plug-inDevelopmentEnvironment,PDE),这个组件主要针对希望扩展Eclipse的软件开发人员,因为它允许他们构建与Eclipse环境无缝集成的工具。
由于Eclipse中的每样东西都是插件,对于给Eclipse提供插件,以及给用户提供一致和统一的集成开发环境而言,所有工具开发人员都具有同等的发挥场所。
这种平等和一致性并不仅限于Java开发工具。
尽管Eclipse是使用Java语言开发的,但它的用途并不限于Java语言;例如,支持诸如C/C++和COBOL等编程语言的插件已经可用,或预计将会推出。
Eclipse框架还可用来作为与软件开发无关的其他应用程序类型的基础,比如内容管理系统。
就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境.尽管Eclipse功能很多,但是基于本文我们只采用Eclipse提供的java集成开发环境。
Eclipse的安装非常简单,也比较特殊,Eclipse要求你的计算机上必须先安装好1.4.1或更高版本的JRE(java运行环境),否则Eclipse不能工作。
2系统设计
2.1系统的介绍
本论文设计的游戏名称为贪吃蛇,蛇身是有很多的小方块组成的,蛇头与蛇身都是用小方块来组成,每一个小方块是蛇身上的最小单位,贪吃蛇所吃的食物也是有一个个小方块儿组成,食物会随机出现,当蛇吃掉一个小方块儿后蛇身会变长然后会随机出现下一个小方块儿。
当蛇头碰到蛇身或者碰到边框的时游戏会自动结束[4]。
2.2设计目的
综合运用在校所学的知识和技能,设计并实现贪吃蛇游戏,使自己熟悉应用系统的开发的过程,培养独立的思考能力,校验学习效果和动手能力,提高工程实践能力。
2.3游戏需求
在一定的范围内,给出一条小蛇和随机出现一个食物,当小蛇吃到食物时蛇身就长长。
由于蛇活动范围太小,并没有设置左右边框,只设计了上下的边框。
使得游戏操作起来可以更简单一些。
2.3.1游戏形状需求
良好的方块形状设计,绘制小蛇和食物,小蛇由几个方块组成,食物由一个方块组成。
2.3.2键盘事件处理
小蛇可以通过键盘方向键(上,下,左,右)进行方向的移动。
当蛇头碰到蛇尾时游戏结束,当蛇头碰到墙壁的时候游戏会结束。
2.3.3显示需求
当小蛇吃掉几个食物后会变长,平且吃完食物时食物会消失,并立即产生一个1个新的食物。
2.3.4接口控制
本软件通过键盘进行操作,在windows操作系统下,利用键盘的上下左右键进行操作,要使用键盘的接口事件[5]。
3系统实现
3.1系统所需定义的类
整个游戏设计中所涉及的相关Java类,如图3.1:
图3.1系统所需类
其中:
Food.java类是构造食物的实体类。
Snake.java类是蛇的实体类。
Ground.java类是蛇体活动范围的边界。
GamePanel.java类是将蛇、食物、活动范围的边界整合在一块,在游戏开始时一起初始化。
Global.java是构造蛇体运动的范围。
Controller.java是控制蛇的各种行为。
SnakeGameTest.java类是整个游戏运行入口的main类。
SnakeListener.java类是线程类,监听蛇的每一个动作,根据条件判断是否终止游戏。
Test.java类是在游戏设计过程中更深一步的了解线程知识而写的测试。
3.2系统实现
3.2.1 构造一个蛇体
publicclassSnake{
privatebooleanlife=true;
privateSnakeListenerl;
privateLinkedList
publicstaticfinalintLEFT=1;
publicstaticfinalintRIGHT=-1;
publicstaticfinalintDOWN=3;
publicstaticfinalintUP=-3;
privatePointoldTail;
privateintoldDirection,newDirection;//存放当前的方向
publicSnake(){
init();
}
publicvoidinit(){
body=newLinkedList
for(inti=0;i<3;i++){
body.add(newPoint(Global.WIDTH/2-i,Global.HEIGHT/2));
}
oldDirection=newDirection=RIGHT;
}
初始化结果如图3.2:
图3.2蛇体的构造
其中方法:
init()是在游戏刚启动时构造出一个最初的蛇体;move():
此方法是让蛇按照原来的方向向前走一步;eatFood(Foodfood):
如果蛇吃到食物,调用该方法,蛇身加长一个单位;die():
如果调用此方法,那么线程终止,游戏结束[6];changeDirection(intdirection):
此功能是通过按键改变蛇的方向;drawMe(Graphicsg):
通过当前的Graphics对象将蛇本身画出来。
start():
启动线程,让蛇动起来;isEatSelf():
判断是否咬住自己了;addSnakeListener(SnakeListenerl);getHead():
获取蛇头的点坐标。
3.2.2 构造一个食物
此步设计的Java类是Food.java,食物生成的位置是随机的,在ground.java中有随机得到食物的方法:
publicPointgetPoint(){
intx,y;
do{
x=newRandom().nextInt(Global.WIDTH);
y=newRandom().nextInt(Global.HEIGHT);
}while(rocks[x][y]==1);
returnnewPoint(x,y);
}
具体代码:
publicclassFoodextendsPoint{
publicbooleanisEatFood(Snakesnake){
if(snake.getHead().equals(this))
returntrue;
returnfalse;
}
publicvoiddrawMe(Graphicsg){
System.out.println("食物正在画出自己...");
g.setColor(Color.red);
g.fill3DRect(x*Global.CELL_SIZE,y*Global.CELL_SIZE,
Global.CELL_SIZE,Global.CELL_SIZE,true);
}
publicvoidaddFood(Pointp){
this.setLocation(p);
}
}
各个方法的功能:
isEatFood(Snakesnake):
判断此食物是不是和蛇头重合,返回true,则蛇吃到这个food.反之,没有吃到此food;drawMe(Graphicsg):
通过当前的Graphics对象将食物本身画出来;addFood(Pointp):
增加一个食物的方法。
3.2.3 把蛇和食物放在一个活动范围上
此步设计的类是Ground.java具体的代码:
publicclassGround{
privateint[][]rocks=newint[Global.WIDTH][Global.HEIGHT];
publicGround(){
for(intx=0;x rocks[x][0]=1; rocks[x][Global.HEIGHT-1]=1; } } publicvoiddrawMe(Graphicsg){ System.out.println("障碍物正在画出自己..."); g.setColor(Color.yellow); for(intx=0;x for(inty=0;y if(rocks[x][y]==1){ g.fill3DRect(x*Global.CELL_SIZE,y*Global.CELL_SIZE, Global.CELL_SIZE,Global.CELL_SIZE,true); } } } } publicbooleanisEatRocks(Snakesnake){ for(intx=0;x for(inty=0;y if(rocks[x][y]==1&&snake.getHead().x==x &&snake.getHead().y==y){ returntrue; } } } returnfalse; } publicPointgetPoint(){ intx,y; do{ x=newRandom().nextInt(Global.WIDTH); y=newRandom().nextInt(Global.HEIGHT); }while(rocks[x][y]==1); returnnewPoint(x,y); }} 各个方法的功能: Ground(): 这个是构造器,创建Ground对象时调此方法。 drawMe(Graphicsg): 通过当前的Graphics对象将活动范围本身画出来。 isEatRocks(Snakesnake): 判断蛇头是不是撞倒上下边界,撞倒了就返回true,没有返回false。 getPoint(): 通过调用这个方法可以随机获得一个新的点坐标(食物)。 3.2.4 整合为一个面板 此步设计的目的是将各个零散的部件整合到一块 具体实现类是GamePanel.java具体代码如下: publicclassGamePanelextendsJPanel{ privateSnakesnake; privateFoodfood; privateGroundground; publicvoiddisplay(Snakesnake,Foodfood,Groundground){ this.snake=snake; this.food=food; this.ground=ground; repaint(); } @Override protectedvoidpaintComponent(Graphicsarg0){ //TODOAuto-generatedmethodstub super.paintComponent(arg0); if(snake! =null&&food! =null&&ground! =null){ snake.drawMe(arg0); food.drawMe(arg0); ground.drawMe(arg0); } } } 各个方法的功能: display(Snakesnake,Foodfood,Groundground): 此方法是获得已经创建好的snake,food,ground,为自己的属性snake,food,ground付初始值[7];paintComponent(Graphicsarg0): 此方法是将snake,food,ground一起显式出来。 3.2.5 需要控制蛇 此步设计的类是Controller.java具体代码是: publicclassControllerextendsKeyAdapterimplementsSnakeListener{ Snakesnake; Foodfood; Groundground; GamePanelgamePanel; publicController(Snakesnake,Foodfood,Groundground,GamePanelgamePanel){ this.snak
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java 贪吃 论文