随着科技的发展,现在手机的功能已不仅仅是简单的打接电话、收发短信了。更多的手机用户希望在工作、学习之余通过方便灵巧可随身携带的仪器休闲娱乐。因此,为了迎合众多用户的需求并适应现在手机的规模,我们开发出一套适合各阶层人士的具有很强的娱乐性和交互性的贪吃蛇小游戏。
贪吃蛇,之所以取这样的名字,去用意还是很明显的.贪吃蛇其实并不贪,它是人不断向前追求的象征.就像现代的人只有不断努力向前才能得到自己想要的。而食物也是随机出现的,就像现在社会存在的机会,而我们只有找好自己的目标才能成功。
虽然现在市面上存在着各种各样的游戏版本,可是贪吃蛇其市场还是相当大的。因为它的特殊在于它能吸引人更深入,爱不释手.随着游戏速度不断加快,其刺激性也更强。可以说该游戏的优势在于它的简单易行,不论是手机,还是小游戏机,都能很快顺利的运行。对于在外忙碌的人,不可能花费大量时间在娱乐上,大型游戏是行不通的。这样的小游戏刚好迎合了他们的需求。
在如今社会,人们的工作学习压力逐渐增大,生活节奏逐渐加快,大多数人没有足够的时间去休闲娱乐,放松自己。这款小型的手机游戏,可以让我们随时随地都能享受游戏,。让我们从繁重的日常生活中解脱出来。
游戏的主界面应该力求美观,爽心悦目,以提高玩家对游戏的兴趣。游戏的控制模块应该做到易懂、易操作,以给玩家一个很好的游戏环境。
通过这个游戏可以使玩贪吃蛇的人感到心情轻松,愉悦。使心情得以舒畅,让工作的压力可以得到缓解。给大家一个愉悦的游戏环境。
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) 在随机的地方产生食物。
(3) 吃到食物就变成新的蛇体,碰到壁或自身则游戏结束,否则正常运行。
贪吃蛇游戏是一种简单的大众的游戏,自从计算机实现以来,深受广大电脑玩家的喜爱,做一个简单的贪吃蛇小游戏。
贪吃蛇的核心算法是如何实现移动和吃掉食物,在没有碰到食物的时候,把当前运动方向上的下个节点入队,然后把头指针所指的节点出队,这样就可以达到移动的效果。而在吃到食物的时候,则只需把食物入队即可。实现贪吃蛇的基本的蛇身移动、吃到食物身体增长、和碰到墙壁或自身死亡,能够停止和运行。
本次设计主要运用java语言来完成。Java语言是一种跨平台,适合于分布式计算环境的面向对象编程语言,用Java写的应用程序不用修改就可在不同的软硬件平台上运行。
本软件是针对贪吃蛇小游戏的JAVA程序,利用方向键来改变蛇的运行方向,空格键暂停或继续游戏,并在随机的地方产生食物,吃到食物就变成新的蛇体,碰到壁或自身则游戏结束,否则正常运行。
本系统共包括1个java源文件和7个类文件。
1. 类之间的关系如图1所示。
图1类之间的关系
2.java源文件及其功能如表所示。
1.主类贪吃蛇
(1)主类为此程序的入口,定义了贪吃蛇的对象frame,开始运行此程序。
(2)源代码见详细代码。
2.类SnakeFrame
(1)成员变量见表2
(2)方法见表3
3.类贪吃蛇
(1)成员变量见表4
(2)方法见表5
4. 类reform
(1)成员变量见表6
(2)源代码见详细代码。
5.类Paint
此类为画蛇的面板类,是粉色蛇身算法的类。
源代码见详细代码。
6.类Isdead
此类为线程的子类,实现记录状态的功能。
源代码见详细代码。
7.类Run
此类为线程的子类,实现蛇运动以及记录分数的功能。
源代码见详细代码。
1、贪吃蛇游戏的基本运行界面
(1)生成初始界面:
图1 初始界面
(2)游戏菜单栏:
图2 游戏菜单栏
(3)困难程度菜单栏:
图3 困难程度菜单栏
2、程序开始运行界面
(1)鼠标点击游戏按钮,开始游戏
图4游戏初始界面
(3)按方向键改变蛇的运行方向,并且碰壁后停止游戏:
图5 游戏运行界面
代码:
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.KeyStroke;
public class 贪吃蛇 extends JFrame implements ActionListener, KeyListener,Runnable {
private static final long serialVersionUID = 1L;
private String temp = null;
private JMenuBar menuBar;
public JMenu youXiMenu,nanDuMenu,fenShuMenu,guanYuMenu;
private JMenuItem kaiShiYouXi,exitItem,tanchisheItem,fenShuItem;
private JCheckBoxMenuItem cJianDan,cPuTong,cKunNan;
private int length = 6;
private Toolkit toolkit;
private int i,x,y,z,objectX,objectY,object=0,growth=0,time;//bojectX,Y
private int m[]=new int[50];
private int n[]=new int[50];
private static Thread she = null;
private int life=0;
private int foods = 0;
private int fenshu=0;
public void run(){
time=800;
for(i=0;i<=length-1;i++)
{
m[i]=90-i*10;n[i]=60;
}
x=m[0];
y=n[0];
z=4;
while(she!=null)
{
check();
try{
Thread.sleep(time);
}
catch(Exception ee){
System.out.println(z+"");
}
}
}
public 贪吃蛇() {
setVisible(true);
menuBar = new JMenuBar();
toolkit=getToolkit();
youXiMenu = new JMenu("游戏");
kaiShiYouXi = new JMenuItem("开始游戏");
exitItem = new JMenuItem("退出游戏");
nanDuMenu = new JMenu("困难程度");
cJianDan = new JCheckBoxMenuItem("简单");
cPuTong = new JCheckBoxMenuItem("普通");
cKunNan = new JCheckBoxMenuItem("困难");
fenShuMenu = new JMenu("积分排行");
fenShuItem = new JMenuItem("最高记录");
guanYuMenu = new JMenu("关于");
tanchisheItem = new JMenuItem("关于贪吃蛇");
guanYuMenu.add(tanchisheItem);
nanDuMenu.add(cJianDan);
nanDuMenu.add(cPuTong);
nanDuMenu.add(cKunNan);
fenShuMenu.add(fenShuItem);
youXiMenu.add(kaiShiYouXi);
youXiMenu.add(exitItem);
menuBar.add(youXiMenu);
menuBar.add(nanDuMenu);
menuBar.add(fenShuMenu);
menuBar.add(guanYuMenu);
tanchisheItem.addActionListener(this);
kaiShiYouXi.addActionListener(this);
exitItem.addActionListener(this);
addKeyListener(this);
fenShuItem.addActionListener(this);
KeyStrokkeyOpen = KeyStroke.getKeyStroke('O',InputEvent.CTRL_DOWN_MASK);
kaiShiYouXi.setAccelerator(keyOpen);
KeyStroke keyExit = KeyStroke.getKeyStroke('X',InputEvent.CTRL_DOWN_MASK);
exitItem.setAccelerator(keyExit);
setJMenuBar(menuBar);
setTitle("贪吃蛇");
setResizable(false);
setBounds(300,200,400,400);
validate();
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public static void main(String args[])
{
new 贪吃蛇();
}
public void actionPerformed(ActionEvent e)
{
if(e.getSource()==kaiShiYouXi)
{
length = 10;
life = 0;
foods = 0;
if(she==null)
{
she=new Thread(this);
she.start();
temp="运行";
}
else
if(she!=null)
{
she=null;
she= new Thread(this);
she.start();
temp="运行";
}
}
if(e.getSource()==exitItem)
{
System.exit(0);
}
if(e.getSource()==tanchisheItem)
{
JOptionPane.showMessageDialog(this,"按方向键使蛇移动");
}
if(e.getSource()==fenShuItem)
{
JOptionPane.showMessageDialog(this,"最高记录为"+fenshu+"");
}
}
public void check(){
isDead();
if(she!=null)
{
if(growth==0)
{
reform(); //得到食物
}
else
{
upgrowth(); //生成食物
}
if(x==objectX&&y==objectY)
{
object=0;
growth=1;
toolkit.beep();
}
if(object==0)
object=1;
objectX=(int)Math.floor(Math.random()*39)*10;
objectY=(int)Math.floor(Math.random()*29)*10+50;
}
this.repaint(); //重绘
}
}
void isDead()
{ //判断游戏是否结束的方法
switch(z)
{
case 4: x=x+10;break;
case 3 ::x=x-10;break;
case 2: y=y+10;break;
case 1: y=y-10;break;
}
if(x<0||x>390||y<50||y>390)
{
she=null;
}
for(i=1;i<length;i++)
{
if(m[i]==x&&n[i]==y)
{
she=null;
}
}
if(x==0||x==400||y==0||y==400)
temp="停止";
else
temp="运行";
}
public void upgrowth()
{ //当生成食物时的方法
if(length<50)
{
length++;
}
growth--;
time=time-10;
reform();
life+=100;
if(fenshu<life)
{
fenshu = life;
}
foods++;
}
public void reform()
{ //蛇得到食物的方法
for(i=length-1;i>0;i--)
{
m[i]=m[i-1];
n[i]=n[i-1];
}
switch(z)
{
case 4:m[0]=m[0]+10;break;
case 3:m[0]=m[0]-10;break;
case 2:n[0]=n[0]+10;break;
case 1:n[0]=n[0]+10;break;
}
}
public void keyPressed(KeyEvent e)
{
if(she!=null)
{
if(e.getKeyCode()==KeyEvent.VK_UP)
{
if(z!=2)
{
z=1;
check();
}
}
else if(e.getKeyCode()==KeyEvent.VK_DOWN)
{
if(z!=1)
{
z=2;
check();
}
}
else if(e.getKeyCode()==KeyEvent.VK_LEFT)
{
if(z!=4)
{
z=3;
check();
}
}
else if(e.getKeyCode()==KeyEvent.VK_RIGHT)
{
if(z!=3)
{
z=4;
check();
}
}
}
public void keyReleased(KeyEvent e)
{
}
public void keyTyped(KeyEvent e)
{
}
public void paint(Graphics g) {
g.setColor(Color.DARK_GRAY); //设置背景
g.fillRect(0,50,400,400);
g.setColor(Color.pink);
for(i=0;i<=length-1;i++)
{
g.fillRect(m[i],n[i],10,10);
}
g.setColor(Color.red); //蛇的食物
g.fillRect(objectX,objectY,10,10);
g.setColor(Color.yellow);
g.drawString("运行状态:"+"\n"+this.temp,290,60);
g.drawString("当前 分数:"+"\n"+this.life,290,75);
g.drawString("当前已吃食物数:"+"\n"+this.foods,290,90);
}
}
系统测试是为了发现错误而执行程序的过程,成功的测试是发现了至今尚未发现的错误的测试。 测试的目的就是希望能以最少的人力和时间发现潜在的各种错误和缺陷。应根据开发各阶段的需求、设计等文档或程序的内部结构精心设计测试用例,并利用这些实例来运行程序,以便发现错误。系统测试是保证系统质量和可靠性的关键步骤,是对系统开发过程中的系统分析系统设计和实施的最后复查。根据测试的概念和目的,在进行信息系统测试时应遵循以基本原则。
(1)拟定测试计划。在制定测试计划时,要充分考虑整个项目的开发时间和开发进童以及一些人为因素和客观条件等,使得测试计划是可行的。测试计划的内容主要有测试的内容、进度安排、测试所需的环境和条件、测试培训安排等。
(2)编制测试大纲。测试大纲是测试的依据。它明确详尽地规定了在测试中针对系统的每一项功能或特性所必须完成的基本测试项目和测试完成的标准。
(3)根据测试大纲设计和生成测试用例。在设计测试用例的时候,可综合利用前面介绍的测试用例和设计技术,产生测试设计说明文档,其内容主要有被测项目、输人数据、测试过程、预期输出结果等。
(4)实施测试。测试的实施阶段是由一系列的测试周期组成的。在每个测试周期中,测试人员和开发人员将依据预先编制好的测试大纲和准备好的测试用例,对被测软件或设备进行完整的测试。
(5)生成测试报告。测试完成后,要形成相应的测试报告,主要对测试进行概要说明,列出测试的结论,指出缺陷和错误,另外,给出一些建议,如可采用的修改方法,各项修改预计的工作量及修改的负责人员。
程序运行正常,没有发现什么错误,可以运行自如。
课程设计就快结束了,我自己认为自己学java没学好,而在整个新技术专题中我觉得贪吃蛇的游戏应该是最简单的。
通过这次课程设计,我对java又有了更深刻的认识。也有了更深一步的喜爱,决定一定要努力学好java,并能更好的应用于以后的工作中。
这次贪吃蛇的设计,俺做的不是很完美,也没想象中的那么好,但也获得了许多宝贵的经验:
1) 在设计程序之前,务必要对自己所要设计的题目和内容有一个系统的,大概的了解,知道所设计的题目和内容包含哪些资源。
2) 设计程序采用什么编程语言并不是非常重要,关键是要有一个清晰的思路和一个完整的软件流程图,所有要先把设计原理与思路搞清楚,再把流程图画出来,这样设计起来就简单多了。
3) 在设计程序时,不能妄想一次就将整个程序设计好,“反复修改,不断改进”是程序设计的必经之路,发现错误也是取得成绩及成绩的一种必经之路。
4) 要养成注释程序的好习惯,一个程序的完美与否不仅仅是实现功能,而
应该让人一看就能明白自己的思路,这样也为资料的保存和交流提供了方便。
在以后的工作中,我希望我能把这些经验应用起来。为以后的工作顺利进行,也让自己获得一定的能力,能够拥有一份好的工作。
【 1 】 张鹏、宁莹璋、王雪梅, Java手机游戏实例手册(第一版).海洋出版社,2006。
【 2 】 陈晋波、李雪娟、熊飞,手机游戏开发实践.电子工业出版社,2005。
贪吃蛇JAVA设计报告第一章绪论1.1开发的背景随着科技的发展,现在手机的功能已不仅仅是简单的打接电话、收发短信了。更多的手机用户…
MFC应用开发技术贪吃蛇游戏开发学院人民武装学院专业计算机工程与技术班级11维护学号1120xx0257学生姓名胡桥林指导教师黄顺…
青岛理工大学琴岛学院设计报告课题名称贪吃蛇游戏设计学院青岛理工大学琴岛学院专业班级计算机网络技术091学号20xx03120xx7…
《Java应用开发》课程设计报告题目:JAVA小游戏-贪吃蛇指导老师:姓名:专业:班级:日期:目录一、系统总体设计.1(一)设计目…
目录第1章课程设计的目的与要求.11.1课程设计目的.11.2课程设计的实验环境.11.3课程设计的预备知识.11.4课程设计要求…
程序设计基础课程设计C课程设计报告贪吃蛇院系:计算机学院网络工程系班级:122班姓名:指导教师:20##年12月25日程序设计基础…
贪吃蛇游戏C程序设计报告目录一设计要求2二设计的作用目的2三课题分析21贪吃蛇游戏功能分析22游戏界面分析33设计思路分析3四设计…
贪吃蛇游戏C程序设计报告目录一设计要求2二设计的作用目的2三课题分析21贪吃蛇游戏功能分析22游戏界面分析33设计思路分析3四设计…
计算机实习报告姓名:班级:学号:小班序号:指导老师:题目:贪吃蛇(运行环境:visual,studio2010)邮箱:题目贪吃蛇实…
目录一软件设计要求和规范2二软件制作过程2三收获和体会13参考文献13一软件设计要求和规范11设计要求通过游戏程序设计提高编程兴趣…
山东工商学院信电学院自动111班第一组贪吃蛇课程设计报告高级语言程序设计课程设计报告ExperimentDesigningrepo…