本科毕业设计论文--java课程设计贪吃蛇
java课程设计贪吃蛇项目
java课程设计贪吃蛇项目一、教学目标本节课的教学目标是让学生掌握Java编程语言的基本语法和面向对象编程思想,通过编写Java代码实现一个简单的贪吃蛇游戏。
具体目标如下:1.知识目标:–了解Java语言的基本语法和结构;–掌握面向对象编程的基本概念和方法;–熟悉Java中的常用数据结构和算法。
2.技能目标:–能够使用Java语言编写简单的程序;–能够运用面向对象编程思想解决实际问题;–具备基本的代码调试和排错能力。
3.情感态度价值观目标:–培养学生的编程兴趣和自信心;–培养学生团队合作和解决问题的能力;–培养学生勇于尝试和不断创新的精神。
二、教学内容本节课的教学内容主要包括以下几个部分:1.Java语言基本语法:介绍Java程序的基本结构,包括类、方法、变量等概念,以及如何编写和运行Java程序。
2.面向对象编程:讲解类的定义和创建,对象的创建和使用,以及封装、继承和多态等面向对象编程的基本概念。
3.贪吃蛇游戏设计:分析贪吃蛇游戏的需求,设计游戏类和游戏界面,实现游戏的基本功能,包括蛇的移动、食物的生成和消亡、游戏结束条件等。
4.算法实现:讲解如何在Java中实现常用的数据结构和算法,如数组、链表、排序等,并应用于贪吃蛇游戏中。
三、教学方法本节课采用以下教学方法:1.讲授法:讲解Java语言的基本语法和面向对象编程思想,让学生掌握编程的基本概念和方法。
2.案例分析法:通过分析贪吃蛇游戏的需求,引导学生思考如何设计和实现游戏功能,培养学生的编程思维和问题解决能力。
3.实验法:让学生动手编写Java代码,实现贪吃蛇游戏,培养学生的实际编程能力和代码调试能力。
4.小组讨论法:鼓励学生之间相互讨论和交流,共同解决问题,培养学生的团队合作和沟通能力。
四、教学资源本节课所需的教学资源包括:1.教材:《Java编程思想》或《Java核心技术》等;2.参考书:《Java编程指南》或《Java编程实践》等;3.多媒体资料:PPT、教学视频等;4.实验设备:计算机、网络等。
贪吃蛇毕业论文
创作编号:GB8878185555334563BT9125XW创作者:凤呜大王*目录一.功能描述............................................................................................................................... 2二.基本原理............................................................................................................................... 2三、设计的具体实现............................................................................................................... 3(1)函数定义..................................................................................................................................... 3(2)主函数main( ) ............................................................................................................................ 4(3)画界面函数DrawK( ) ................................................................................................................ 5(4)游戏具体过程函数GamePlay() ......................................................................................... 5(5)游戏结束函数GameOver() ................................................................................................ 9四、调试及解决方法........................................................................................................... 10五、测试结果........................................................................................................................... 10六、设计心得体会 ................................................................................................................ 12七、参考文献........................................................................................................................... 12八、源代码 (14)一.功能描述基本功能:开始蛇向右方移动。
javaeclipse贪吃蛇课程设计
javaeclipse贪吃蛇课程设计一、课程目标知识目标:1. 学生能理解Java语言面向对象编程的基本概念,如类、对象、方法等;2. 学生能掌握Eclipse集成开发环境的基本操作,如创建项目、编写代码、调试程序等;3. 学生能了解贪吃蛇游戏的基本逻辑和实现方法。
技能目标:1. 学生能运用Java语言编写简单的面向对象程序,实现贪吃蛇游戏的基本功能;2. 学生能运用Eclipse集成开发环境进行代码编写、调试和运行;3. 学生能运用所学知识解决实际问题,提高编程实践能力。
情感态度价值观目标:1. 学生通过课程学习,培养对编程的兴趣和热情,树立编程学习的自信心;2. 学生在团队协作中,提高沟通与协作能力,培养集体荣誉感;3. 学生在游戏设计过程中,锻炼逻辑思维能力,培养解决问题的耐心和毅力。
分析课程性质、学生特点和教学要求:1. 课程性质:本课程为Java语言编程实践课,结合贪吃蛇游戏设计,提高学生的编程兴趣和实际操作能力;2. 学生特点:学生为具有一定Java基础知识的初中生,对编程有一定兴趣,喜欢动手实践;3. 教学要求:注重理论与实践相结合,以学生为主体,充分调动学生的积极性,培养学生的编程思维和团队协作能力。
将目标分解为具体的学习成果:1. 学生能独立完成贪吃蛇游戏的编写和调试;2. 学生能通过小组合作,共同优化贪吃蛇游戏的代码和功能;3. 学生在课程结束后,能对Java面向对象编程有更深入的理解,提高编程实践能力。
二、教学内容1. Java面向对象编程基本概念回顾:类、对象、方法、属性等;2. Eclipse集成开发环境使用:项目创建、代码编写、调试与运行;3. 贪吃蛇游戏逻辑分析:游戏规则、移动原理、食物生成、得分与结束条件;4. 游戏界面设计:窗口创建、绘图面板、键盘事件监听;5. Java编程实现贪吃蛇游戏:蛇的移动、食物的随机生成、得分与游戏结束判断;6. 游戏优化与拓展:碰撞检测、蛇身长度变化、速度提升、音效添加。
java贪吃蛇课程设计报告总结
课程设计报告:Java贪吃蛇游戏1. 背景贪吃蛇是一款经典的街机游戏,通过控制蛇的移动,吃掉食物,使蛇变得越来越长,直到触碰到边界或自己的身体为止。
该游戏在20世纪80年代流行起来,并成为了一种代表性的休闲娱乐方式。
贪吃蛇游戏可以提高玩家的反应能力、体力协调和空间感知能力。
本次课程设计旨在通过使用Java编程语言,设计实现一个简化版的贪吃蛇游戏,以加深学生对面向对象程序设计的理解和应用,并培养学生的逻辑思维能力和团队协作精神。
2. 分析2.1 游戏规则分析在贪吃蛇游戏中,玩家通过控制蛇的移动方向,使蛇吃到食物从而变长,直到游戏结束。
具体规则如下:•初始状态下,蛇由一个长度为3的身体组成,呈水平放置。
•蛇的移动方式为每个时间单位(通常为固定时间间隔)前进一格,移动方向由玩家通过键盘输入控制。
•蛇在吃到食物后,身体变长一节,并在地图上随机生成新的食物。
•蛇头碰到地图边界或自身身体的任意部分,游戏结束。
2.2 功能模块分析基于对游戏规则的分析,可以将贪吃蛇游戏的功能模块划分如下:•游戏初始化模块:初始化地图、蛇的初始位置和长度、生成初始食物等。
•用户输入模块:读取用户的键盘输入,控制蛇的移动方向。
•游戏逻辑模块:根据用户输入和游戏规则,更新蛇的位置、判断是否吃到食物或撞到障碍物等。
•地图绘制模块:将地图、蛇、食物等元素绘制到屏幕上。
•游戏循环模块:根据固定时间间隔循环执行游戏逻辑、用户输入和地图绘制等操作。
•游戏结束模块:在游戏结束时输出游戏得分等信息。
2.3 设计思路基于上述功能模块的分析,我设计了如下的实现思路:1.使用Java面向对象编程的思想,抽象出地图、蛇、食物等对象,并为其封装相应的属性和方法。
2.在游戏初始化模块中,创建地图对象、蛇对象,初始化位置和长度,并生成初始食物。
3.在用户输入模块中,利用Java的键盘事件监听机制,获取用户的方向输入,并通过调用蛇对象的移动方法实现控制蛇的移动方向。
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(\。
贪吃蛇毕业设计论文
贪吃蛇毕业设计论文贪吃蛇毕业设计论文在计算机科学领域中,贪吃蛇游戏是一个经典的案例,用于教授和研究各种算法和数据结构。
它是一款简单而又富有挑战性的游戏,玩家通过控制一条蛇的移动,吃掉食物,同时避免碰到自己的身体或边界。
贪吃蛇游戏的设计和实现涉及到许多计算机科学的基本概念和技术,包括图形绘制、用户输入、碰撞检测等等。
本篇论文将探讨贪吃蛇游戏的设计和实现过程,并介绍一些有趣的扩展功能和算法。
首先,我们将讨论游戏的基本设计思路和目标。
其次,我们将介绍游戏的图形界面和用户交互。
最后,我们将探讨一些扩展功能和算法,例如自动寻路和难度调节。
首先,我们需要明确贪吃蛇游戏的设计目标。
贪吃蛇游戏的核心目标是让玩家蛇吃到尽可能多的食物,同时避免碰到自己的身体或边界。
为了达到这个目标,我们需要设计一个直观而又富有挑战性的游戏界面,并提供简单而又灵活的用户交互方式。
其次,我们需要实现游戏的图形界面和用户交互。
在贪吃蛇游戏中,我们通常使用一个二维的网格来表示游戏界面,每个格子可以是空白、蛇身或食物。
我们可以使用图形库来绘制这个网格,并实现蛇的移动和食物的生成。
同时,我们还需要处理用户的输入,例如通过键盘控制蛇的移动方向。
接下来,我们可以考虑一些有趣的扩展功能和算法。
一个常见的扩展功能是增加难度调节,使得游戏可以逐渐变得更加困难。
我们可以通过增加蛇的移动速度、减少食物的生成频率等方式来实现难度调节。
另一个有趣的扩展功能是自动寻路算法,可以让蛇自动找到最优的吃食物路径。
这可以通过使用搜索算法,例如广度优先搜索或A*算法来实现。
在设计和实现贪吃蛇游戏的过程中,我们还需要考虑一些性能优化和错误处理的问题。
例如,当蛇碰到自己的身体或边界时,游戏应该结束并显示得分。
此外,我们还需要考虑如何处理大规模的游戏界面和复杂的用户输入,以确保游戏的性能和可靠性。
综上所述,贪吃蛇游戏是一个经典的案例,用于教授和研究各种算法和数据结构。
在设计和实现贪吃蛇游戏的过程中,我们需要考虑游戏的基本设计思路和目标,实现游戏的图形界面和用户交互,并探讨一些有趣的扩展功能和算法。
java贪吃蛇毕业设计
java贪吃蛇毕业设计Java贪吃蛇毕业设计毕业设计是大学生们在校园生活的最后一道考验,也是他们展示自己所学知识和能力的机会。
对于计算机科学专业的学生而言,选择一个合适的主题进行毕业设计是至关重要的。
本文将探讨一个有趣且具有挑战性的毕业设计主题:Java贪吃蛇。
1. 贪吃蛇的背景介绍贪吃蛇是一款经典的游戏,最早出现在20世纪70年代。
游戏的玩法简单,玩家控制一条蛇在有限的空间内移动,吃掉食物以增加身体长度,同时要避免碰到自己的身体或是墙壁。
随着时间的推移,蛇的移动速度会逐渐加快,增加游戏的难度。
2. 设计思路在设计Java贪吃蛇毕业项目时,需要考虑以下几个方面:2.1 游戏界面设计游戏界面是玩家与游戏进行交互的窗口,需要设计一个美观且易于操作的界面。
可以使用Java的图形库,如Swing或JavaFX来实现。
2.2 蛇的移动和控制蛇的移动是游戏的核心,需要设计合适的算法来控制蛇的移动方向和速度。
可以使用键盘监听器来捕捉玩家的按键操作,并根据按键来改变蛇的方向。
2.3 食物生成和吃掉食物的生成和吃掉是游戏的重要元素。
需要设计一个随机生成食物的算法,并判断蛇是否吃到了食物。
当蛇吃到食物时,需要增加蛇的长度并生成新的食物。
2.4 碰撞检测碰撞检测是游戏的关键部分,需要判断蛇是否碰到了自己的身体或是墙壁。
如果蛇碰到了自己的身体或是墙壁,游戏结束。
3. 实现过程在实现Java贪吃蛇毕业项目时,可以按照以下步骤进行:3.1 确定游戏界面和基本功能首先,设计游戏界面,包括蛇、食物和墙壁的显示。
然后,实现蛇的移动和控制功能,包括键盘监听器和蛇的移动算法。
3.2 实现食物生成和吃掉功能接下来,设计食物的生成算法,并判断蛇是否吃到了食物。
当蛇吃到食物时,增加蛇的长度,并生成新的食物。
3.3 实现碰撞检测最后,设计碰撞检测算法,判断蛇是否碰到了自己的身体或是墙壁。
如果蛇碰到了自己的身体或是墙壁,游戏结束。
4. 拓展功能除了基本功能之外,还可以考虑添加一些拓展功能来提升游戏的趣味性和挑战性。
贪吃蛇游戏java课程设计
贪吃蛇游戏java课程设计一、课程目标知识目标:1. 让学生掌握Java基本语法和面向对象编程思想;2. 让学生了解贪吃蛇游戏的基本规则和逻辑;3. 让学生掌握使用Java编写贪吃蛇游戏的方法和技巧。
技能目标:1. 培养学生独立分析问题、解决问题的能力;2. 培养学生运用所学知识进行实际项目开发的能力;3. 培养学生团队协作、沟通表达的能力。
情感态度价值观目标:1. 培养学生对编程的兴趣和热情,激发学生主动学习的动力;2. 培养学生面对困难和挑战时,保持积极的心态和坚持不懈的精神;3. 培养学生遵守编程规范,养成良好的编程习惯。
课程性质:本课程为实践性较强的课程,旨在通过贪吃蛇游戏的设计与实现,让学生将所学的Java编程知识运用到实际项目中,提高学生的编程能力和实际操作能力。
学生特点:学生已具备一定的Java编程基础,对游戏开发有一定兴趣,但可能缺乏实际项目经验。
教学要求:注重理论与实践相结合,引导学生主动探究,培养其独立解决问题的能力。
在教学过程中,关注学生的个体差异,提供个性化指导,确保每位学生都能在课程中取得进步。
将课程目标分解为具体的学习成果,便于教学设计和评估。
二、教学内容1. Java基本语法复习:变量、数据类型、运算符、控制结构等;2. 面向对象编程:类与对象、继承、封装、多态等;3. Java图形用户界面(GUI):Swing组件、事件处理、布局管理器等;4. 游戏设计基础:游戏循环、碰撞检测、游戏逻辑等;5. 贪吃蛇游戏设计与实现:游戏规则、界面设计、蛇的移动与增长、食物的生成与消失、得分与结束条件等。
教学大纲安排如下:第一周:Java基本语法复习,面向对象编程基础;第二周:Java图形用户界面(GUI)设计与事件处理;第三周:游戏设计原理与贪吃蛇游戏分析;第四周:贪吃蛇游戏设计与实现,包括界面设计、游戏逻辑开发等;第五周:课程总结与展示,学生互评、教师点评。
教学内容关联教材章节:1. Java基本语法复习:教材第1-3章;2. 面向对象编程:教材第4-6章;3. Java图形用户界面(GUI):教材第7章;4. 游戏设计基础:教材第8章;5. 贪吃蛇游戏设计与实现:教材第9章及课外拓展内容。
java贪吃蛇课程设计
java贪吃蛇课程设计一、课程目标知识目标:1. 让学生掌握Java基础语法,包括变量、数据类型、运算符、控制结构等。
2. 让学生理解面向对象编程的基本概念,如类、对象、封装、继承、多态。
3. 让学生学会使用Java编写图形用户界面(GUI)程序,运用事件处理机制。
技能目标:1. 培养学生运用Java编程解决问题的能力,特别是解决逻辑性和结构性问题。
2. 培养学生分析问题、设计算法、编写程序、调试程序的能力。
3. 提高学生的团队协作能力,通过分组合作完成课程设计。
情感态度价值观目标:1. 培养学生对编程的兴趣,激发学生学习Java的热情。
2. 培养学生勇于尝试、不怕失败的精神,面对编程难题保持积极的态度。
3. 培养学生的创新意识,鼓励他们在编程实践中尝试新思路、新方法。
分析课程性质、学生特点和教学要求,本课程目标具体、可衡量,旨在让学生通过学习Java编程,完成贪吃蛇游戏的设计与实现。
将目标分解为以下具体学习成果:1. 知识方面:学生能熟练运用Java语法和面向对象编程知识,掌握贪吃蛇游戏的基本逻辑。
2. 技能方面:学生具备编写、调试贪吃蛇游戏的能力,能通过团队协作解决问题。
3. 情感态度价值观方面:学生对编程产生浓厚兴趣,愿意主动探索、创新,培养良好的编程习惯。
二、教学内容根据课程目标,教学内容主要包括以下部分:1. Java基础语法:- 变量、数据类型、常量- 运算符、表达式、语句- 控制结构(顺序、分支、循环)2. 面向对象编程:- 类与对象- 封装、继承、多态- 抽象类与接口3. Java图形用户界面(GUI)编程:- AWT与Swing概述- 常用组件的使用- 事件处理机制4. 贪吃蛇游戏设计与实现:- 游戏逻辑分析- 界面设计与实现- 控制算法编写- 游戏优化与调试教学大纲安排如下:1. 第一周:Java基础语法学习,复习相关概念。
2. 第二周:面向对象编程知识学习,案例分析。
3. 第三周:Java GUI编程入门,编写简单的图形界面程序。
贪吃蛇java课程设计
贪吃蛇java课程设计一、课程目标知识目标:1. 让学生掌握Java基本语法和编程逻辑,特别是面向对象编程思想。
2. 使学生理解二维数组在Java中的应用,学会使用二维数组构建游戏界面。
3. 帮助学生掌握事件处理机制,实现对游戏操作的反应。
技能目标:1. 培养学生运用Java语言编写简单游戏的能力,特别是贪吃蛇游戏的实现。
2. 让学生通过课程实践,掌握程序调试和错误处理的方法,提高解决问题的能力。
3. 培养学生团队协作能力,通过分组合作完成课程设计。
情感态度价值观目标:1. 培养学生对编程的兴趣和热情,激发学习积极性。
2. 培养学生勇于尝试、不怕失败的精神,提高克服困难的信心。
3. 引导学生认识到编程在现实生活中的应用价值,提高社会责任感。
课程性质:本课程为实践性较强的课程设计,以项目为导向,注重培养学生的动手能力和团队协作能力。
学生特点:学生具备一定的Java基础,对编程有一定了解,但实践经验不足,需要通过课程设计提高实际操作能力。
教学要求:结合学生特点,课程目标应具体、可衡量,注重理论与实践相结合,充分调动学生的主观能动性,提高学生的编程实践能力。
在教学过程中,将目标分解为具体的学习成果,以便于教学设计和评估。
二、教学内容1. Java基本语法和面向对象编程思想复习:回顾类和对象、继承、封装、多态等基本概念。
2. 二维数组及其应用:学习二维数组的定义、初始化和操作方法,结合贪吃蛇游戏界面设计进行讲解。
3. 事件处理机制:介绍事件监听器、事件对象、事件处理方法等,应用于贪吃蛇游戏操作。
4. 游戏设计原理:分析贪吃蛇游戏的规则、算法和数据结构,讲解如何实现游戏核心功能。
5. 编程实践:指导学生分组进行贪吃蛇游戏设计,从需求分析、设计、编码、调试到测试的全过程。
6. 教学大纲安排:- 第一周:Java基本语法和面向对象编程思想复习,介绍课程设计要求。
- 第二周:二维数组及其应用,设计贪吃蛇游戏界面。
Java版贪吃蛇毕业论文完整版(附带源码地址)【范本模板】
摘要近年来,Java作为一种新的编程语言,以其简单性、可移植性和平台无关性等优点,得到了广泛地应用,特别是Java与万维网的完美结合,使其成为网络编程和嵌入式编程领域的首选编程语言。
eclipse是IBM公司用于快速开发Java应用的一款优秀的集成开发环境,它以其友好的开发界面、强大的组件支持以及开源等优点,得到广大程序员的接受和认可.“贪吃蛇”游戏是一个经典的游戏,它因操作简单、娱乐性强而广受欢迎.本文基于Java技术和eclipse开发环境,开发了一个操作简单、界面美观、功能较齐全的“贪吃蛇”游戏.整个游戏程序分为二个功能模块,八个类模块,实现了游戏的开始、暂停、结束。
通过本游戏的开发,达到学习Java技术和熟悉软件开发流程的目的。
本文在介绍Java相关技术和国内外发展现状的基础上,对“贪吃蛇”游戏的整个生命周期的各个开发阶段进行了详细地介绍。
首先,分析了开发本游戏软件的可行性,重点分析本设计所采用的技术的可行性。
其次,从游戏主界面等几方面,分析了本游戏的功能需求;从可使用性和安全性方面分析了属性需求。
然后,进行了游戏的概要设计和详细设计,这也是本文的重点.概要设计给出二个功能模块的主框架以及八个类模块的函数调用关系;详细设计介绍了Java2标准运行环境的配置,重点给出各个类模块的程序列表,介绍了各个类包含的变量、使用的方法,展示了游戏的界面。
为了保证程序代码的正确性和功能实现的可靠性,本文还介绍了游戏软件的程序调试过程和功能测试结果。
关键词:Java;eclipse;贪吃蛇;开发流程Snake game design and developmentAbstractIn recent years, Java,as a new programming language, with its simplicity,portability and platform independence and other advantages,had been used widely,especially Java and the perfect combination of the world wide web, to make it a network programming and embedded programming field preferred programming language。
JAVA版贪吃蛇游戏 毕业设计
毕业设计(论文)题目:JAVA版贪吃蛇游戏学生姓名学号************班级计算机102202H所属院(系)计算机科学与技术指导教师2014 年 5 月 20 日JA V A版贪吃蛇游戏摘要Java作为一种热门的编程语言,以其简单性、可移植性和平台无关性等优点,得到了广泛地应用,特别是Java与万维网的完美结合,使其成为网络编程和嵌入式编程领域的首选编程语言。
MyEclipse是Borland公司用于快速开发Java应用的一款优秀的集成开发环境,它以其友好的开发界面、强大的组件支持等优点,得到广大程序员的接受和认可。
“贪吃蛇”游戏是一个经典的游戏,它因操作简单、娱乐性强而广受欢迎。
本文基于Java技术和MyEclipse 6.0开发环境,开发了一个操作简单、界面美观、功能较齐全的“贪吃蛇”游戏。
整个游戏程序分为二个功能模块,六个类模块,实现了游戏的开始、暂停、结束。
通过本游戏的开发,达到学习Java技术和熟悉软件开发流程的目的。
本游戏开发采用的技术和方法,对目前游戏类软件开发有一定的指导意义。
关键词:Java,贪吃蛇,游戏设计IUsing Java technology to achieve the Snake gameAbstractJava is a hot programming language,with its simplicity, portability and platform independence and other advantages, has been widely used, especially the Java and the world wide web is the perfect combination, make its become network programming and the field of embedded programming preferred programming language. MyEclipse Borland is the company for the rapid development of Java applications an excellent integrated development environment, with its friendly interface, powerful component support and other advantages, by the majority of programmers acceptance and recognition. " Snake" game is a classic game, because it has the advantages of simple operation, strong entertainment and popular. In this paper, based on the Java technology and MyEclipse 6 development environment, development of a simple, beautiful interface, complete function of the" snake" game. The game is divided into two function module, six modules, realization of the game start, pause, end. Through the game's development, achieve the study of Java technology and familiar with software development process purpose. The game development using the technology and method, the game software development has certain guiding significance.Key words:Java ,Snake,designI I目录摘要 (I)关键词 (I)Abstract (Ⅱ)Key words (Ⅱ)第1章、前言 (1)1.1 开发工具 (1)1.2 方案论证 (2)1.2.1 VB的优点 (2)1.2.2 C++的优点 (2)1.2.3 Java的优点 (3)1.3 需求分析 (4)1.4 可行性分析 (4)1.5 应用环境 (5)第2章、本论 (6)2.1 设计运用技术简介 (6)2.1.1 Oop(面相对象编程技术) (6)2.1.2 Swing 技术 (7)2.1.3 swt技术 (8)2.1.4 Applet技术 (8)2.2设计方案论证 (9)2.2.1设计思路 (9)2.2.2程序概述 (9)2.2.3程序流程图 (10)2.2.4总设计模块的划分 (11)I II2.2.5类、方法、属性说明 (12)2.3程序设计 (13)2.3.1 界面设计 (13)2.3.2 蛇体设计 (14)2.3.3 设置菜单及相关按钮的实现 (14)2.3.4 按键监听功能实现 (15)2.3.5 游戏速度设置 (16)2.3.6 判定贪吃蛇游戏是否结束 (16)2.3.7各功能界面截图及操作说明 (18)2.3.8 游戏操作界面 (21)第3章、结论 (26)3.1测试的目的 (26)3.2软件测试 (26)3.2.1 测试的基本概念 (26)3.2.2 测试的基本步骤 (27)3.3 本程序测试 (28)参考文献 (29)致谢 (30)附录 (31)附录Ⅰ: (31)附录Ⅱ: (40)I V第1章、前言1.1 开发工具Sun Microsystems公司在推出Java语言的同时,推出了一套开发工具JDK。
java课程设计(贪吃蛇)
java课程设计(贪吃蛇)一、教学目标本节课的教学目标是让学生掌握Java编程语言的基本语法和编程思想,学会使用Java编写简单的程序。
具体包括以下三个方面的目标:1.知识目标:使学生了解Java编程语言的基本语法和结构,包括数据类型、变量、运算符、控制语句等;理解面向对象编程的基本概念,包括类、对象、封装、继承等。
2.技能目标:培养学生使用Java编程语言解决实际问题的能力,学会编写简单的Java程序;培养学生团队合作的能力,学会分工合作完成项目。
3.情感态度价值观目标:培养学生对编程的兴趣和热情,提高学生自主学习的积极性;培养学生勇于尝试、克服困难的精神,增强学生的自信心。
二、教学内容本节课的教学内容主要包括以下几个部分:1.Java编程语言的基本语法和结构,包括数据类型、变量、运算符、控制语句等;2.面向对象编程的基本概念,包括类、对象、封装、继承等;3.Java编程语言的应用,学会编写简单的Java程序;4.团队合作完成项目,培养学生的团队合作能力。
三、教学方法为了达到本节课的教学目标,我们将采用以下几种教学方法:1.讲授法:教师讲解Java编程语言的基本语法和结构,面向对象编程的基本概念;2.案例分析法:分析实际案例,让学生学会使用Java编程语言解决实际问题;3.实验法:学生动手实践,编写简单的Java程序;4.小组讨论法:学生分组讨论,培养团队合作能力。
四、教学资源为了支持本节课的教学内容和教学方法的实施,我们将准备以下教学资源:1.教材:Java编程基础,用于引导学生学习基本语法和结构;2.多媒体资料:PPT、教学视频等,用于辅助讲解和演示;3.实验设备:计算机、网络等,用于学生动手实践;4.编程工具:Eclipse、IntelliJ IDEA等,用于学生编写和调试程序。
五、教学评估为了全面、客观、公正地评估学生的学习成果,我们将采用以下评估方式:1.平时表现:通过观察学生在课堂上的参与程度、提问回答、小组讨论等表现,评估学生的学习态度和积极性;2.作业:布置适量的作业,评估学生对知识的掌握程度和编程能力;3.考试:进行期中和期末考试,评估学生对Java编程语言的基本语法和结构的掌握程度,以及解决实际问题的能力;4.项目完成情况:评估学生在团队合作完成项目的过程中的表现,包括分工合作、沟通协作、解决问题等能力。
java贪吃蛇课程设计
发展:1980年代,贪吃蛇游戏 在个人电脑和游戏机上流行
起源:1976年,由美国计算机 科学家Steve Wozniak发明
创新:1990年代,贪吃蛇游戏 在智能手机上出现,增加了新 的玩法和功能
现状:贪吃蛇游戏仍然是一款 受欢迎的休闲游戏,被广泛应
用于各种平台和设备上
PART THREE
游戏开始:玩家点 击开始按钮,游戏 开始
技术趋势:关注最新的Java游戏开发技术和工具,如Unity、Unreal Engine等 创新思维:鼓励创新思维,开发具有独特性和吸引力的游戏 团队合作:加强团队合作,提高游戏开发效率和质量 市场调研:了解市场需求,开发符合用户喜好的游戏
增加游戏难度:增加关卡、增加敌人数量等 增加游戏元素:增加道具、增加角色等 增加社交元素:增加排行榜、增加好友系统等 增加游戏模式:增加多人模式、增加合作模式等
优化算法:使用高效的算法,如动态规划、贪心算法等,提高游戏运行速度 减少内存占用:优化数据结构,减少不必要的内存占用,提高游戏运行效率 优化界面设计:使用简洁、清晰的界面设计,提高用户体验 增加游戏功能:增加游戏难度选择、排行榜等功能,提高用户粘性和游戏趣味性
PART SIX
单元测试:针对单个模块或功能进行测试, 确保其正确性和稳定性
集成测试:将多个模块或功能集成在一起 进行测试,确保其兼容性和稳定性
系统测试:对整个游戏系统进行测试,确 保其功能和性能满足设计要求
压力测试:模拟大量用户同时访问游戏, 确保游戏在高负载情况下的稳定性和性能
自动化测试:使用自动化工具进行测试, 提高测试效率和准确性
性能测试:测试游戏的性能指标,如响应 时间、吞吐量等,确保其满足设计要求
汇报人:
PART SEVEN
java课程设计-贪吃蛇代码
java课程设计-贪吃蛇代码importjava.awt.Color;importponent;importjava.awt.Graphic;importjava.awt.event.ActionEvent; importjava.awt.event.ActionLitener; importjava.awt.event.KeyEvent;importjava.awt.event.KeyLitener; importjava.util.ArrayLit;importjava某.wing.BorderFactory;importjava某.wing.JFrame;importjava某.wing.JLabel;importjava某.wing.JMenu;importjava某.wing.JMenuBar;importjava某.wing.JMenuItem;importjava某.wing.JPanel; publicclaSnakeGame{publictaticvoidmain(String[]arg){ SnakeFrameframe=newSnakeFrame();frame.etTitle("贪吃蛇");frame.etDefaultCloeOperation(JFrame.E某IT_ON_CLOSE);frame.etViible(true);}}//----------记录状态的线程claStatuRunnableimplementRunnable{publicStatuRunnable(Snakenake,JLabeltatuLabel,JLabelcoreLabe l){thi.tatuLabel=tatuLabel;thi.coreLabel=coreLabel;thi.nake=nake;}publicvoidrun(){Stringta="";Stringpe="";while(true){witch(nake.tatu){caeSnake.RUNNING:ta="Running";break;caeSnake.PAUSED:ta="Paued";break;caeSnake.GAMEOVER:ta="GameOver";break;}tatuLabel.etTe某t(ta); coreLabel.etTe某t(""+nake.core); try{Thread.leep(100);}catch(E某ceptione){}}}privateJLabelcoreLabel; privateJLabeltatuLabel; privateSnakenake;}//----------蛇运动以及记录分数的线程claSnakeRunnableimplementRunnable{ thi.nake=nake;}publicvoidrun(){while(true){try{nake.move();Thread.leep(nake.peed);}catch(E某ceptione){}}}privateSnakenake;}claSnake{booleaniRun;//---------是否运动中ArrayLit<Node>body;//-----蛇体Nodefood;//--------食物intderection;//--------方向intcore;inttatu;intpeed; publictaticfinalintSLOW=500; publictaticfinalintMID=300; publictaticfinalintFAST=100; publictaticfinalintRUNNING=1; publictaticfinalintPAUSED=2; publictaticfinalintGAMEOVER=3; publictaticfinalintLEFT=1; publictaticfinalintUP=2; publictaticfinalintRIGHT=3; publictaticfinalintDOWN=4; publicSnake(){peed=Snake.SLOW;core=0;iRun=fale;tatu=Snake.PAUSED;derection=Snake.RIGHT;body=newArrayLit<Nod e>();body.add(newNode(60,20));body.add(newNode(40,20));body.add(newNode(20,20));makeFood();}//------------判断食物是否被蛇吃掉//-------如果食物在蛇运行方向的正前方,并且与蛇头接触,则被吃掉privatebooleaniEaten(){Nodehead=body.get(0);if(derection==Snake.RIGHT&&(head.某+Node.W)==food.某&&head.y==food.y)returntrue;if(derection==Snake.LEFT&&(head.某-Node.W)==food.某&&head.y==food.y)returntrue;if(derection==Snake.UP&&head.某==food.某&&(head.y-Node.H)==food.y)returntrue;if(derection==Snake.DOWN&&head.某==food.某&&(head.y+Node.H)==food.y)returntrue;elereturnfale;}//----------是否碰撞privatebooleaniCollion(){Nodenode=body.get(0);//------------碰壁if(derection==Snake.RIGHT&&node.某==280) returntrue;if(derection==Snake.UP&&node.y==0) returntrue;if(derection==Snake.LEFT&&node.某==0) returntrue;if(derection==Snake.DOWN&&node.y==380) returntrue;//--------------蛇头碰到蛇身Nodetemp=null;inti=0;for(i=3;i<body.ize();i++){temp=body.get(i);if(temp.某==node.某&&temp.y==node.y) break;}if(i<body.ize())returntrue;elereturnfale;}//-------在随机的地方产生食物publicvoidmakeFood(){Nodenode=newNode(0,0); booleaniInBody=true;int某=0,y=0;int某=0,Y=0;inti=0;while(iInBody){某=(int)(Math.random()某15);y=(int)(Math.random()某20);某=某某Node.W;Y=y某Node.H;for(i=0;i<body.ize();i++){if(某==body.get(i).某&&Y==body.get(i).y)break; }if(i<body.ize())iInBody=true;eleiInBody=fale;}food=newNode(某,Y);}//---------改变运行方向publicvoidchangeDerection(intnewDer){if(derection%2!=newDer%2)//-------如果与原来方向相同或相反,则无法改变derection=newDer;}publicvoidmove(){if(iEaten()){//-----如果食物被吃掉body.add(0,food);//--------把食物当成蛇头成为新的蛇体core+=10;makeFood();//--------产生食物}eleif(iCollion())//---------如果碰壁或自身{iRun=fale;tatu=Snake.GAMEOVER;//-----结束}eleif(iRun){//----正常运行(不吃食物,不碰壁,不碰自身)Nodenode=body.get(0);int某=node.某;intY=node.y;//------------蛇头按运行方向前进一个单位witch(derection){cae1:某-=Node.W;break;cae2:Y-=Node.H;break;cae3:某+=Node.W;break;cae4:Y+=Node.H;break;}body.add(0,newNode(某,Y));//---------------去掉蛇尾body.remove(body.ize()-1);}}}//---------组成蛇身的单位,食物claNode{publictaticfinalintW=20;publictaticfinalintH=20;int某;inty;publicNode(int某,inty){thi.某=某;thi.y=y;}}//------画板claSnakePanele某tendJPanel{Snakenake;publicSnakePanel(Snakenake){thi.nake=nake;}Nodenode=null;for(inti=0;i<nake.body.ize();i++){//---黄绿间隔画蛇身if(i%2==0)g.etColor(Color.green);eleg.etColor(Color.yellow);node=nake.body.get(i);g.fillRect(node.某,node.y,node.H,某某某某某某某某某某某某某某某某某某某试用某某某某某某某某某某某某某某某某某某某某某}node=nake.food;node.W);//g.etColor(Color.blue);g.fillRect(node.某,node.y,node.H,node.W);}}claSnakeFramee某tendJFrame{privateJLabeltatuLabel;privateJLabelpeedLabel;privateJLabelcoreLabel;privateJPanelnakePanel;privateSnakenake;privateJMenuBarbar;JMenugameMenu;JMenuhelpMenu;JMenupeedMenu;JMenuItemnewItem;JMenuItempaueItem; JMenuItembeginItem; JMenuItemhelpItem; JMenuItemaboutItem;JMenuItemlowItem;JMenuItemmidItem;JMenuItemfatItem;publicSnakeFrame(){init();ActionLitenerl=newActionLitener(){ publicvoidactionPerformed(ActionEvente){ if(e.getSource()==paueItem)nake.iRun=fale;if(e.getSource()==beginItem)nake.iRun=true;if(e.getSource()==newItem){newGame();}//------------菜单控制运行速度if(e.getSource()==lowItem){ nake.peed=Snake.SLOW; peedLabel.etTe某t("Slow");}if(e.getSource()==midItem){ nake.peed=Snake.MID; peedLabel.etTe某t("Mid");}if(e.getSource()==fatItem){ nake.peed=Snake.FAST; peedLabel.etTe某t("Fat");}}};paueItem.addActionLitener(l); beginItem.addActionLitener(l);newItem.addActionLitener(l); aboutItem.addActionLitener(l);lowItem.addActionLitener(l);midItem.addActionLitener(l);fatItem.addActionLitener(l); addKeyLitener(newKeyLitener(){ publicvoidkeyPreed(KeyEvente){witch(e.getKeyCode()){//------------方向键改变蛇运行方向caeKeyEvent.VK_DOWN://nake.changeDerection(Snake.DOWN);break; caeKeyEvent.VK_UP://nake.changeDerection(Snake.UP);break; caeKeyEvent.VK_LEFT://nake.changeDerection(Snake.LEFT);break; caeKeyEvent.VK_RIGHT://nake.changeDerection(Snake.RIGHT);break; //空格键,游戏暂停或继续caeKeyEvent.VK_SPACE://if(nake.iRun==true){nake.iRun=fale;nake.tatu=Snake.PAUSED;break;}if(nake.iRun==fale){nake.iRun=true;nake.tatu=Snake.RUNNING;break; }}}publicvoidkeyReleaed(KeyEventk){ }publicvoidkeyTyped(KeyEventk){ }});}privatevoidinit(){peedLabel=newJLabel();nake=newSnake();etSize(380,460);etLayout(null);thi.etReizable(fale);bar=newJMenuBar();gameMenu=newJMenu("Game");newItem=newJMenuItem("NewGame");PaueItem=newJMenuItem("Paue");beginItem=newJMenuItem("Continue");gameMenu.add(paueItem);gameMenu.add(newItem);gameMenu.add(beginItem);helpMenu=newJMenu("Help");aboutItem= newJMenuItem("About");helpMenu.add(aboutItem);peedMenu=newJMenu("Speed");lowItem=newJMenuItem("Slow");fatItem=newJMenuItem("Fat");midItem=newJMenuItem("Middle");peedMenu.add(lowItem);peedMenu.add(midItem);peedMenu.add(fatItem);bar.add(gameMenu);bar.add(helpMenu);bar.add(peedMenu);etJMenuBar(bar);tatuLabel=newJLabel();coreLabel=newJLabel();nakePanel=newJPanel();nakePanel.etBound(0,0,300,400);nakePanel.etBorder(BorderFactory.createLineBorder(Color.dark Gray));add(nakePanel);tatuLabel.etBound(300,25,60,20);add(tatuLabel);coreLabel.etBound(300,20,60,20);add(coreLabel);JLabeltemp=newJLabel("状态");temp.etBound(310,5,60,20);add(temp);temp=newJLabel("速度");temp.etBound(310,105,60,20);add(temp);temp=newJLabel("分数");temp.etBound(310,55,60,20);add(temp);temp.etBound(310,155,60,20);add(temp);temp=newJLabel("14滕月"); temp.etBound(310,175,60,20);add(temp);peedLabel.etBound(310,75,60,20); add(peedLabel);}privatevoidnewGame(){thi.remove(nakePanel);thi.remove(tatuLabel);thi.remove(coreLabel); peedLabel.etTe某t("Slow"); tatuLabel=newJLabel();coreLabel=newJLabel();nakePanel=newJPanel();nake=newSnake();nakePanel=newSnakePanel(nake);nakePanel.etBound(0,0,300,400);nakePanel.etBorder(BorderFactory.createLineBorder(Color.dark Gray));Runnabler1=newSnakeRunnable(nake,nakePanel);Runnabler2=newStatuRunnable(nake,tatuLabel,coreLabel);Thread t1=newThread(r1);Threadt2=newThread(r2);t1.tart();t2.tart();add(nakePanel);tatuLabel.etBound(310,25,60,20);add(tatuLabel);coreLabel.etBound(310,125,60,20);add(coreLabel);}}。
基于java的贪吃蛇游戏开发
基于java的贪吃蛇游戏开发论文编号:毕业论文题目Java贪吃蛇游戏设计姓名:____________________学号:____________________所在院系:____________________所学专业:____________________指导教师:____________________完成时间:____________________目录JAVA贪吃蛇游戏设计 (1)目录 (2)前言 (4)1.JAVA语言的概述及开发工具 (6)1.1Java语言特点 (6)1.1.1 平台无关性 (6)1.1.2安全性 (6)1.1.3面向对象 (6)1.1.4分布式 (6)1.1.5健壮性 (6)1.2 J2ME介绍 (7)1.3 关于ECLIPSE (8)1.4 WTK介绍 (9)2.需求分析 (9)2.1游戏的介绍 (9)2.2游戏开发的可行性 (10)2.3设计目的 (10)2.4游戏需求 (10)2.4.1游戏界面需求 (10)2.4.2游戏形状需求 (11)2.4.3键盘事件处理 (11)2.4.4显示需求 (11)2.4.5接口控制 (11)2.4.6环境介绍 (11)3.功能设计 (12)3.1 游戏的流程图 (12)3.详细设计 (13)3.1游戏主界面的开发 (13)3.2 绘制蛇身 (13)3.3创建初始“蛇”及“蛇”的移动 (14)3.4 吃掉食物,蛇身增长 (14)3.4随机产生食物 (15)3.5键盘事件处理 (16)3.6 判断游戏结束 (17)4游戏测试与发布 (19)4.1游戏运行的效果图 (19)4.2 测试结果 (20)5.自我评价和总结 (20)5.1遇到的问题及解决办法 (20)5.2 总结 (21)6.参考资料 (21)7.附加源代码 (21)前言随着3G的到来,让人们的目光聚集到一个新兴的互联网终端——手机上。
手机的随身性让玩家有了随时随地完游戏的可能。
java版的贪吃蛇毕业论文
贪吃蛇【2 】姓名:摘要:本文用J2SE实现大家耳熟能详的一个贪吃蛇游戏来分解应用所学常识,本游戏应用软件工程思惟(螺旋模子),打好游戏主体框架,JAVA的面向对象思惟,封装类,接口等概念,来完成本游戏,打到分解应用常识的目标.⑴.本游戏开辟平台:WINXP;⑵.JAVA开辟情况: JDK1.6 +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: JDK1.6 + Eclipse;⑶. Development Languages: J2SEKeywords:Controller;GamePanel;Food;Snake;Ground媒介贪吃蛇游戏背景:蛇引导夏娃吃了苹果之后,就被贬为毒虫,阴险的象征. 而蛇吃器械是整只动物吞进去的,精确在文艺中兴的时刻(仿佛是谁人时刻但是不肯定)就有人创造的一种游戏,是如今贪吃蛇的前身.后来慢慢的成长就变成了今天的贪吃蛇了.如今贪吃蛇重要应用于手机游戏.本文应用软件工程思惟.JAVA面向对象编程.类的封装.抽象类的应用(接口),游戏编码规范遵守MVC模式,循序渐进实现贪吃蛇的相干功效.一:游戏中的面向对象剖析与设计㈠●涉及到几个对象(类)㈡●每个类有什么办法1 . 起首得有个游戏显示面板(GamePanel)类该类有一个办法void display(); //用来显示游戏面板2 . 得有个蛇(Snake)类该类有以下几个办法:void move(); //移动(走一步)void changeDirection(); //转变偏向void eatFood(); //吃食物(身材变长)voolean is EatBody();//蛇是否吃到了本身的身材void drawMe();//显示3 . 一个食物类(Food)类该类有以下办法:boolean is SnakeEatFood(Snake); //断定蛇是否吃到了食物void drawMe();//显示4 . 一个背景石头(Ground)类该类有以下办法:Boolean isSnakeEatRock(Snake); //蛇是否吃到了石头void drawMe();//显示此时类之间的关系如下图所示:图1各个类之间的关系二:编写贪吃蛇游戏中的各个类的主体框架性代码本有序遵守MVC(Model-View-Controller)所以起首树立以上几个实体类并界说响应的包名:liang.snake.entities包下界说Food.Ground.Snake 三个类,再在liang.snake.view包下界说GamePanel类,再在,按照以上解释的各个类具有的办法,写上如下代码:package liang.snake.entities;publicclass Food {publicboolean isSnakeEatFood(Snake snake){System.out.println("Snake's eat food"); returnfalse;}publicvoid drawme(){System.out.println("Food's drawme");}}package liang.snake.entities;publicclass Ground {publicboolean isSnakeEatRock(){returnfalse;}publicvoid drawme(){System.out.println("Ground's drawme");}}package liang.snake.entities;publicclass Snake {publicvoid move(){System.out.println("Snake's move");}publicvoid changeDirection(int direction){System.out.println("Snake's changeDirection"); }publicvoid eatFood(){System.out.println("Snake's eat food");}publicboolean isEatBody(){System.out.println("Snake's eat body");returnfalse;}publicvoid drawMe(){System.out.println("Snake's drawMe");}package liang.snake.view;import java.awt.Graphics;import javax.swing.JPanel;import liang.snake.entities.Food;import liang.snake.entities.Ground;import liang.snake.entities.Snake;publicclass GamePanel extends JPanel{private Snake snake;private Ground ground;private Food food;publicvoid paintComponent(Graphics g) {snake.drawMe();ground.drawme();food.drawme();}publicvoid display(Snake snake,Ground ground,Food food) {this.snake=snake;this.ground=ground;this.food=food;System.out.println("GamePanel's display");this.repaint();}三:编写Controler类与实现蛇移动的事宜监听因为蛇不能直接操作显示面板(GamePanel)所以这里界说一个监听器SnakeListener:里面界说一个办法:void snakeMove(Snake); 每当蛇移动一步就触发监听器,挪用snakeMoved()由Controller去实现监听器的接口,然后由掌握器去触发显示面板的事宜源,让显示面板完成响应操作.逻辑图如下:图2事宜监听树立接洽在Snake 中增长蛇的偏向常量:publicstaticfinalint UP=1;publicstaticfinalint DOWN=-1;publicstaticfinalint LEFT=2;publicstaticfinalint RIGHT=-2;并添加一个接口:package liang.snake.Listener;import liang.snake.entities.Snake;publicinterface SnakeListener {publicvoid SnakeMove(Snake snake);}Controler 实现SnakeListener接口并处理案件新闻:代码如下:package liang.snake.Controller;import java.awt.event.KeyAdapter;import java.awt.event.KeyEvent;import liang.snake.Listener.SnakeListener;import liang.snake.entities.Food;import liang.snake.entities.Ground;import liang.snake.entities.Snake;import liang.snake.view.GamePanel;publicclass Controller extends KeyAdapter implements SnakeListener{ Snake snake=new Snake();Ground ground=new Ground();Food food=new Food();GamePanel gamepanel=new GamePanel();public Controller(Snake snake, Ground ground, Food food, GamePanel gamepanel) {this.snake = snake;this.ground = ground;this.food = food;this.gamepanel = gamepanel;}publicvoid keyReleased(KeyEvent e) {switch(e.getKeyCode()){case KeyEvent.VK_UP :snake.changeDirection(Snake.UP);break;case KeyEvent.VK_DOWN :snake.changeDirection(Snake.DOWN);break;case KeyEvent.VK_LEFT :snake.changeDirection(Snake.LEFT);break;case KeyEvent.VK_RIGHT :snake.changeDirection(Snake.RIGHT);break;}}publicvoid newgame(){snake.start();}publicvoid SnakeMove(Snake snake) {gamepanel.display(snake,ground,food);}}开辟到此时,Snake中应当增长监听器,并另启动一个线程来不断挪用蛇的move();在Snake中供给一个启动线程的办法,在Snake中增长如下代码:private Set<SnakeListener> listener=newHashSet<SnakeListener>();publicvoid addSnakeListener(SnakeListener l){if(l!=null)this.listener.add(l);}}publicvoid start(){new Thread(new SnakeDriver()).run();}并在Run办法中增长for(SnakeListener l: listener){l.SnakeMove(Snake.this);}try{Thread.sleep(1000);}catch (InterruptedException e){e.printStackTrace();}四:编写对各个类进行测试的程序代码构建一个新类Game来测试程序代码:package liang.snake.Game;import java.applet.AudioClip;import java.awt.BorderLayout;import java.io.File;import .MalformedURLException;import .URL;import javax.swing.JFrame;import liang.snake.Controller.Controller;import liang.snake.entities.Food;import liang.snake.entities.Ground;import liang.snake.entities.Snake;import liang.snake.view.GamePanel;publicclass Game {publicstaticvoid main(String[] args) {JFrame jf=new JFrame("我的论文");Snake snake=new Snake();Ground ground=new Ground();Food food=new Food();GamePanel gamepanel=new GamePanel();Controller controller=new Controller(snake, ground, food, gamepanel);jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);jf.setLocation(400, 0);jf.setSize(800, 600);jf.add(gamepanel);jf.addKeyListener(controller);snake.addSnakeListener(controller);jf.setVisible(true);controller.newgame();}}运行这个带有main()的类,在Eclipse 的Console窗口中可以看到如下信息:Snake's moveGamePanel's displaySnake's drawMeGround's drawmeFood's drawmeSnake's drawMeGround's drawmeFood's drawmeSnake's moveGamePanel's displaySnake's drawMeGround's drawmeFood's drawme这就意味着,当蛇移动一次,就触发监听器,有掌握器(controller)给GamePanel发送指令,让它重画,GamePanel中的publicvoid display(Snake snake,Ground ground, Food food){System.out.println("GamePanel's display");this.snake=snake;this.ground=ground;this.food=food;this.repaint();}这个办法依次画出几个实体,所以打印出上述信息.到了这一步我们的根本框架打好了,下面开端第5步五:蛇的数据构造设计与移动显示剖析:要区分蛇头和蛇尾巴,这就请求这个数据构造是有序的,还要经常拜访第一个和最后一个节点,所以LinkedList最适合,因为它有getFirst(),getLast()办法和removeLast()办法蛇下一步移动到哪是由偏向掌握的,前面已经界说过,蛇透坐标如下图:图3蛇头偏向盘算新蛇头坐标在Snake的 move()中增长body.removeLast();int x=body.getFirst().x;int y=body.getFirst().y;switch(direction){case UP:y--;break;case DOWN:y++;break;case LEFT:x--;break;case RIGHT:x++;break;}Point newhead=new Point(x,y);//加头body.addFirst(newhead);并界说privateint direction;为了能更便利的保护游戏,这里界说Global类来界说常量如下:package liang.snake.Global;publicclass Global {publicstaticfinalint CELL_SIZE=20;publicstaticint HIGHT=30;publicstaticint WIDTH=30;}并修改游戏中窗口大小为:jf.setSize(Global.CELL_SIZE*Global.WIDTH,Global.CELL_SIZE*Global.HIG HT);再加上如下代码,对蛇初始化:public Snake(){init();}publicvoid init(){int x=Global.WIDTH/2;int y=Global.HIGHT/2;int nodenum=3;for(int i=0;i<nodenum;i++){body.addFirst(new Point(x++,y));}this.direction=RIGHT;}在蛇的drawMe(Graphics g)中些上如下让蛇显示的代码:这里的绘图采用填充3D矩形来实现:for(Point p:body){g.fill3DRect(p.x*Global.CELL_SIZE, p.y*Global.CELL_SIZE, Global.CELL_SIZE, Global.CELL_SIZE, true);}绘图的规矩如下图:图4盘算格子坐标和像素坐标此时运行Game类就可以看到蛇显示在面板中了,如图:图5显示面板显示的蛇但是蛇越走越长,是因为没有擦除以前的图像,在GamePanel的paintComponent(Graphics g)中添加如下代码:g.setColor(new Color(0xcfcfcf));g.fill3DRect(0, 0,Global.CELL_SIZE*Global.WIDTH, Global.CELL_SIZE*Global.HIGHT, true);此时蛇就可以正常移动了如图:图6移动中的蛇经由过程按键转变移动偏向,此时的蛇身材节点显示为白色,我们再在蛇的绘制办法中位器指定色彩:代码如下:图7指定色彩后的蛇六:试与修改蛇的移动与显示问题此时的蛇当移动到窗口边界的时刻就能走出窗口还有蛇可以穿过本身的身材,这些游戏规矩中式不许可的, 下面来修改这些问题,修改Snake中的move()办法如下:起首界说publicint olddirection,newdirection;防止蛇穿过本身身材:publicvoid move(){//去尾if(olddirection+newdirection!=0){olddirection=newdirection;}body.removeLast();int x=body.getFirst().x; int y=body.getFirst().y; switch(olddirection){case UP:y--;if(y<0){y=Global.HIGHT-1;}break;case DOWN:y++;if(y>=Global.HIGHT){y=0;}break;case LEFT:x--;if(x<0){x=Global.WIDTH-1;}break;case RIGHT:x++;if(x>=Global.WIDTH){x=0 ;}break;}Point newhead=new Point(x,y);//加头body.addFirst(newhead);System.out.println("Snake's move");}publicvoid changeDirection(int direction){System.out.println("Snake's changeDirection"); newdirection=direction;并修改蛇的初始化办法如下:olddirection=newdirection=RIGHT;此时就修改了上面的问题,可以运行Game类来测试下七:编写与测试表示食物的类并实现吃食物起首在Snake类中添加public Point getHead(){return body.getFirst();}用来获取头结点,然后再Food类中写上如下代码:package liang.snake.entities;import java.awt.Color;import java.awt.Graphics;import java.awt.Point;import liang.snake.Global.Global;publicclass Food extends Point{publicvoid newfood(Point p){this.setLocation(p);}publicboolean isSnakeEatFood(Snake snake){System.out.println("Snake's eat food");returnthis.equals(snake.getHead());}publicvoid drawme(Graphics g){System.out.println("Food's drawme");g.fill3DRect(this.x*Global.CELL_SIZE,this.y*Global.CELL_SIZE, Global.CELL_SIZE, Global.CELL_SIZE, true);}}此时就可以画出食物并断定蛇是否吃到了食物,接下来就可以在Controller中处理吃食物的代码,吃了食物我们只要把先前移动去除的尾巴再给加上就实现了蛇吃食物身材变长的后果了,如下:界说Point oldTail;在蛇move()中保存去除的尾巴:oldTail= body.removeLast();在Controller中的SnakeMove(Snake snake)中添加if(food.isSnakeEatFood(snake)){snake.eatFood();food.newfood(ground.getPoint());}并在Snake中的eatFood()中增长如下代码:body.addLast(oldTail);此时要运行游戏依附与下一步的石头处理中的getPoint()办法实现随机产生食物下面开端持续开辟:八:为游戏增长作为障碍物的石头这里添加石头我们用2维数组来表示,置1则为石头,不然为空,在Ground类中写上如下代码:package liang.snake.entities;import java.awt.Color;import java.awt.Graphics;import java.awt.Point;import java.util.Random;import liang.snake.Global.Global;publicclass Ground {privatestaticint[][] rocks= newint [Global.WIDTH][Global.HIGHT]; publicstatic Color shitou=null;public Ground(){for(int x=0;x<Global.WIDTH;x++){rocks[x][0]=1;rocks[x][Global.HIGHT-1]=1;}shitou=Color.RED;}publicvoid clear(){for(int x = 0; x < Global.WIDTH; x++){for(int y = 0; y < Global.HIGHT; y++)rocks[x][y] = 0;}}publicboolean isSnakeEatRock(Snake snake){for(int x=0;x<Global.WIDTH;x++){for(int y=0;y<Global.HIGHT;y++){if(rocks[x][y]==1&&x==snake.getHead().x && y==snake.getHead().y){returntrue;}}}returnfalse;}publicstatic Point getPoint(){Random random=new Random();int x=0,y=0;do{x=random.nextInt(Global.WIDTH);y=random.nextInt(Global.HIGHT);}while(rocks[x][y]==1);returnnew Point(x,y);}publicvoid drawme(Graphics g){System.out.println("Ground's drawme");for(int x=0;x<Global.WIDTH;x++)for(int y=0;y<Global.HIGHT;y++){if(rocks[x][y]==1){g.setColor(shitou);g.fill3DRect(x*Global.CELL_SIZE, y*Global.CELL_SIZE, Global.CELL_SIZE, Global.CELL_SIZE, true);}}}}再在各个挪用办法中填上响应参数,运行Game类,后果如图:图8添加了食物.石头后的图为窗口数值大小增长35PX 因为此时的窗口标题栏占用了些空间,导致下面的石头没有显示出来,修改Game类中的jf.setSize(Global.CELL_SIZE*Global.WIDTH+10,Global.CELL_SIZE*Global. HIGHT+35);再测试,后果显示完整正常下面持续开辟:九:为蛇增长吃到石头而逝世失落的功效。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程设计说明书课程名称:Java语言程序设计设计题目:学生成绩管理系统院系:计算机科学与信息工程学院学生姓名:肖文学号:14031010141专业班级:计算机科学与技术(14嵌入)指导教师:张阳2015 年12月27 日课程设计任务书设计题目贪吃蛇小游戏程序学生姓名肖文所在院系计科专业、年级、班14计科嵌入设计要求:1. 贪吃蛇游戏是大家很常见的小游戏,在生活工作之余大家可以玩它,已达到放松各种压力的目的。
2. 游戏可以进行升级,也就是增加吃食物的难度,以便使大家更有挑战性,不觉得太无趣。
3. 游戏界面大小可以任意指定,数据从文件读入。
4. 利用swing实现良好的GUI界面。
学生应完成的工作:1. 贪食蛇的前移算法主要是蛇身结点前移,后面的覆盖前面的蛇身结点。
依靠的调用编写的成员方法实现。
2. 在贪吃蛇中蛇头来控制蛇的移动方向,依靠的调用编写的成员方法实现。
3. 要求用户界面采用图形用户界面,影响方向键的控制。
4. 重复的调用paint()函数来实现对界面的重绘和食物的重置。
5. 源程序中要有充分的注释,报告中要有详细的流程图。
6. 运行的结果以及图形用户界面要进行屏幕拷贝,插入报告中。
幕拷贝,插入报告中。
参考文献阅读:1. 《Java语言程序设计》(美)Y·Daniel Liang 机械工业出版社2. 赵毅主编.跨平台程序设计语言——Java.西安:西安电子科技大学出版社,20063. 王路群.Java高级程序设计.北京:中国水利水电出版社,2006工作计划:1,12月21日,选择该课题,然后分析结构。
2,12月21日至25日开始编写各个模块。
3,12月28日至29日,对设计的系统进行测试以及进行修改。
4,12月30日,贪吃蛇完成。
任务下达日期:2015 年12月10 日任务完成日期:2015 年12月24 日指导教师(签名):学生(签名):贪吃蛇小游戏摘要:贪吃蛇是家喻户晓的益智类小游戏,选择这题目一是为了将自己所学的知识加以运用,二是一直以来贪吃蛇这个游戏深深的吸引着我,它的制作方法对于提前的我而言都是神秘的。
我希望通过自己所学知识把它剖析开来,真真正正的了解它的本质和精髓。
虽然我的编程能力不是很强,但是我有信心,在这次学习中我将从实践的项目中提高自己的编程能力,因此我选定了这个项目。
关键词:贪吃蛇;java;学习;放松目录1. 设计背景 (4)1.1问题描述 (4)1.2 问题分析 (4)2.设计方案 (4)2.1 算法分析 (5)2.2 类的设计 (5)3.用户界面设计 (6)4. 模块划分及调用关系 (8)5. 运行说明及系统运行测试 (9)6. 收获与致谢 (4)7. 参考文献....................................................................... 错误!未定义书签。
8. 附件 (15)9. 附录源代码 (16)1. 设计背景1.1问题描述贪吃蛇是家喻户晓的益智类小游戏,选择这题目一是为了将自己所学的知识加以运用,二是一直以来贪吃蛇这个游戏深深的吸引着我,它的制作方法对于提前的我而言都是神秘的。
我希望通过自己所学知识把它剖析开来,真真正正的了解它的本质和精髓。
虽然我的编程能力不是很强,但是我有信心,在这次学习中我将从实践的项目中提高自己的编程能力,因此我选定了这个项目。
1.2 问题分析这个程序是用一个小矩形表示蛇的一节身体,身体每长一节,增加一个矩形块。
移动时必须从蛇头开始,,也就是蛇尾不能改作蛇头。
当游戏者按了方向键后,蛇头朝着指定的方向移动,一步移动一节身体。
图形的实现是从蛇头的新位置开始画出蛇。
用户可以用上下左右键控制蛇头的方向。
非常简单。
2.设计方案2.1算法分析1. 贪吃蛇是很经典的格子游戏。
所谓格子游戏就是在设计游戏时的主要思想是每个设对象都是由格子组成,游戏运行界面也是由格子组成。
格子思想决定了此类游戏在设计时的算法思想。
2. 方向键控制一个方块的移动的方法,一个方块的移动是靠移动其坐标位置来实现的。
3. 方向键控制是上下左右对一个方块的控制,用四个判断语句实现。
4. 蛇的移动算法思想可以看成是第一个方块移动,第二个方块移到第一个方块的位置, 第三个方块移动到第二个方块的位置⋯⋯第N个方块移动到第N-1个方块的位置。
这样连续的移动就是蛇的移动了。
方向控制键控制了第一个方块的移动后,后面方块跟着移动 ,这样也实现了方向键控制对长蛇的移动。
5. 食物的随机产生的方法食物的随机产生需要一个随机种子函数然后利用系统时间做为随机种子。
6. 蛇的身体变长的方法当然要当蛇吃到食物时才能使身体变长。
因此有两个需要解决的问题:问题一:如何知道是否吃到食物?问题二:吃到食物后身体变长?解决问题一的方法是需要一个判断语句,当蛇头即构成蛇的第一个方块跟食物所在方块的坐标一样时判断吃到食物。
解决问题二则要相对复杂一些,需要多个判断语句构成。
7. 游戏结束的方法,当蛇碰到边框时或者吃到自己时游戏结束。
根据这个思想可以用判断语句实现。
然后是游戏结束后的处理,比如显示继续玩游戏还是退出游戏,并显示所吃到的食物的个数和时间等。
2.2类的设计1>.创建的类的描述。
1. Login类,登陆界面要求输入登陆者输入用户名和密码,分别设Go和Cancel两个登陆选项。
Login属性:用户名密码Go(进入游戏) Cancel(取消)操作: Enter() Close()2.SnakeFrame类,创建游戏窗口主界面。
采用图形界面设计,有窗体,菜单栏和游戏操作界面。
3.SnakeModel类,此类为蛇的初始化状态及模型,所有的游戏的开始都通过此类初始化及对蛇的操作。
SnakeModel属性: rows,cols,snakeHead,runingDiriction,locRO,snake,playBlockssnakeFood,gameScore,AddScore操作: LocationRO getSnakeHead(),LocationRO getSnakeTail(),Location getRuningDiriction(),LinkedList getSnake(),LinkedList getOthers(), getScore(),getAddScore(),setSnakeHead(Location snakeHead),LocationRO getSnakeFood(),setSnakeFood(),moveTo(Object a,LinkedList fromlist,LinkedList tolist),init(),SnakeModel(int rows1,int cols1),move(Location direction)4. SnakePanel类,此类为游戏界面创建蛇的面板和蛇的移动控制实现。
SnakePanel属性:gridsPanel, row; col; gridsPanel;direction;snake; snakeBody;otherBlocks;snakeHead; snakeFood; gameScore=0; speed;AddScore; t; isEnd; notExit;操作:SnakePanel(SnakeFrame parent,int row,int col),newGame(long speed)stopGame(),returnGame(),getGameScore(),updateTextFiled(String str)updateColors(),run(),keyPressed(KeyEvent event)keyReleased(KeyEvent event),keyTyped(KeyEvent event)change(SnakeFrame parent,int row2, int col2)5. LocationRO类,随机生成的食物位置。
用来随机生成食物。
引导蛇的移动方向。
6. Location类,对蛇的位置的描述类。
Location属性: x y操作:Location(int x,int y) ,getX(),getY(),setX(int x),setY(int y) ,equalOrRev(Location e),equals(Location e) ,reverse(Location e)2>.类之间的调用关系。
3.用户界面1. 登陆界面Login 登陆SnakeFrameLocationSnakeModel SnakePanelLocationRO2.游戏主界面【程序技巧】1. 为游戏设置权限,为游戏设置登陆界面。
2. 游戏界面采用图形界面美观大方易操作。
3. 功能齐全,可以选择开始,暂停,继续可以随时操控游戏状态,方便易操作,人性化设计。
4. 设置菜单功能齐全,可以让界面显示网格和取消显示网格,还可以根据自己的实际能力情况选择游戏的等级。
5. 窗口大小菜单可以根据自己的需要和爱好调整窗体的大小,可以选择大中小三种窗体。
适合不同的需要。
6. 本程序设置了作者信息菜单可以查询程序的制作人的信息等。
7. 对于新手用户,我为他们设置了操作指南菜单,帮助他们方便快捷的学会游戏的操作步骤。
4.模块划分及调用关系主要模块【模块流程图】1. 游戏界面模块和登陆模块流程图。
开始登陆界面 游戏界面 取消登录退出程序 结束开始 登陆界面输入用户名和密码进入游戏取消登录设置作者信息结束游戏帮助窗口大小文件操作指南开始 暂停 继续 等级显示网格视图软件信息中小 大退出2. 游戏模块否 是否是否是5.运行说明及系统运行测试1.安装eclipse ,在其上运行。
2. 如图在eclipse 中创建java 项目,在src 下建立SnakeGameDemo 包将所有的源程序放入包中,在项目中建立img 图片文件夹,将文件中需要的图片放入其中以便调用。
是否碰到蛇身\墙是否吃到食物 蛇身加长,分数增加提示游戏结结束随机显示食物蛇蛇运动是否开始 游戏开始创建贪吃蛇是否结束 暂停3. 主函数在Login类中,只需运行Login.java程序进入登陆界面,输入用户名和密码进入游戏。
4. 在文件菜单下开始,暂停,继续游戏。
5. 对第一次进入的用户请先看操作说明。
1、程序上机调试报告【语法错误及其排除】1. 将所有外部类定义为公共类,可以直接拿来应用,必须引入一个包来定义一个类来进行使用。
程序中的蛇是用网格布局中的小面板组成,蛇的身体由等大的小网格组成。
2. 键盘事件未进行监听以致键盘操作无法进行,监听函数有错误。
最后加入正确的监听函数。