java大作业报告

西 安 思 源 学 院

Java大作业

实验名称:贪吃蛇游戏设计

班    级:11计算机科学与技术

学    号:111102020104 111102020120

组    员

指导教师王振铎

 

摘   要............................................................................................................................ 3

一:题目.......................................................................................................................... 4

1.1贪吃蛇游戏......................................................................................................... 4

1.2目的.................................................................................................................... 4

1.3适应实际,实践编程的能力................................................................................. 4

1.4基本任务............................................................................................................. 4

1.5 要求................................................................................................................... 5

二:开发环境................................................................................................................... 5

2.1开发语言及实现平台或实验环境.......................................................................... 5

2.2 开发工具............................................................................................................ 5

三:设计思路................................................................................................................... 6

3.1游戏主界面模块:............................................................................................... 7

3.2游戏控制模块:.................................................................................................. 7

3.3性能:................................................................................................................ 7

四:需求分析................................................................................................................... 7

4.1项目概述............................................................................................................. 7

4.2本项目主要功能有............................................................................................... 8

4.3 可行性分析........................................................................................................ 8

4.4  其它需求.......................................................................................................... 9

五:游戏设计流程图........................................................................................................ 9

5.1游戏流程图:...................................................................................................... 9

5.2 游戏面板.......................................................................................................... 10

第六:系统测试.............................................................................................................. 12

5.1 测试的意义....................................................................................................... 12

6.2测试过程测试过程............................................................................................. 12

6.3 测试结果.......................................................................................................... 13

6.4 游戏最终代码................................................................................................... 13

第七:心得体会.............................................................................................................. 17

 

 

 

 

摘   要

  近年来,Java作为一种新的编程语言,以其简单性和平台无关性等

优点,得到了广泛地应用,特别是Java与万维网的完美结合,使其成为网络编程和嵌入式编程领域的首选编程语言。它以其友好的开发界面、强大的组件支持等优点,得到广大程序员的接受和认可。

   “贪吃蛇”游戏是一个经典的游戏,它因操作简单、娱乐性强而广受欢迎。本文基于Java技术和JBuilder开发环境,开发了一个操作简单、界面美观、功能较齐全的“贪吃蛇”游戏。整个游戏程序分为二个功能模块,实现了游戏的开始、结束。通过本游戏的开发,达到学习Java技术和熟悉软件开发流程的目的。

 

 

一:题目

1.1贪吃蛇游戏

1.2目的

1) 复习、巩固Java语言的基础知识,进一步加深对Java语言的理解和掌握

2) 掌握java程序设计的思想、流程,企业要求代码规范性及在项目中的应用

3) 加强理论知识和实际应用的结合应用,锻炼学生的分析解决实际问题的能力。提高学生设计的能力

1.3适应实际,实践编程的能力

1) 培养学生在项目开发中团队合作精神,表达沟通、创新意识能力

2) 提高学生的科技论文写作能力

1.4基本任务

1) 能在游戏面板中出现蛇和食物

2) 能通过键盘的上下左右键来控制蛇的移动

3) 蛇能够吃掉游戏面板中的食物,同时再随机出现另外一个食物

4) 蛇在碰到游戏面板的边缘时,游戏结束

5) 蛇在碰到自身时,游戏结束

1.5 要求

1) 对系统进行功能模块分析、控制模块分析正确,符合课题要求,实现相应功能;可以加以其他功能或修饰,使程序更加完善、合理

2) 系统设计要实用,编程简练、规范,可用,功能全面

3) 说明书、流程图要清楚,有解决问题办法总结

4) 要求上机调试通过

5) 设计上交内容:设计报告,源程序文件,可执行文件

二:开发环境

2.1开发语言及实现平台或实验环境

Windows2000 或XP,JDK1.6与Jcreator4.0

2.2 开发工具

   Sun Microsystems公司在推出Java语言的同时,推出了一套开发工具JDK。Sun提供的基于字符模式的Java开发工具包JDK: Java开发工具(JDK)是许多Java专家最初使用的开发环境。Java是平台无关的语言是指用Java写的应用程序不用修改就可在不同的软硬件平台上运行。

    所有的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程序根本就不能用。  

    而专门运行在x86平台的Jrocket在服务端运行效率也要比SunJDK好很多。但不管怎么说,我们还是需要先把Sun JDK掌握好。

三:设计思路

  贪吃蛇游戏设计与实现,主要分为以下二个模块:游戏主界面模块和游戏控制模块。

在此只实现游戏的游戏主界面模块、游戏控制模块。并且只是实现移动速度、重新开始等功能。

3.1游戏主界面模块:

   游戏的主界面是进入游戏后,能够给玩家第一感官的部分,主要包括游戏图形区域界面、游戏速度控制、重新开始游戏、速度等级以及当前分数。从很大程度上决定了玩家对游戏的兴趣问题,因此,游戏的主界面应该力求美观,爽心悦目。

3.2游戏控制模块:

   这个模块是游戏的中心环节,主要完成控制游戏的速度、重新开始等功能。为了能够给玩家一个很好的游戏环境,这部分应该做到易懂、易操作。设计所开发的是基于Java的一个贪吃蛇游戏软件,主要实现游戏的速度控制。分为: 游戏主界面模块、游戏控制模块以二个模块。

3.3性能:

  本软件在设计方面本着方便、实用及娱乐性高的宗旨,在对界面进行设计的过程中,始终坚持清晰明了,在性能方面能够实现效率高,不易出错等优点。

四:需求分析

4.1项目概述

  本项目是开发贪吃蛇游戏,它是一个老少皆宜雅俗共赏的益智类游戏,通过按键控制蛇的移动来吃食物,适于用户在空暇时刻放松身心休闲娱乐。

4.2本项目主要功能有

    1.游戏:主要实现游戏的开始、继续、结束等功能,

  游戏开始,在游戏面板中出现蛇和食物,通过键盘的上下左右键来控制蛇的移动,并且蛇能够吃掉游戏面板中的食物,同时再随机出现另外一个食物,蛇每吃掉一个食物后,长度增1,而蛇在碰到游戏面板的边缘时,游戏结束,蛇在碰到自身时,游戏结束;但是如果蛇吃了穿身,穿墙宝贝的食物,蛇就具有了特殊功能,可以实现穿身,穿墙,游戏中可以随时暂停、继续、结束游戏,蛇的开始、暂停、继续、结束都是通过按钮来控制。

4.3 可行性分析

   贪吃蛇游戏是一种简单的大众的游戏,自从计算机实现以来,深受广大电脑玩家的喜爱,做一个简单的贪吃蛇小游戏。

    贪吃蛇的核心算法时如何实现移动和吃掉食物,没有碰到食物的时候,把当前运动方向上的下个节点入队,并以蛇节点的颜色绘制这个节点,然后把头指针所指的节点出队,并以游戏框架内部背景色重绘出队的节点,这样就可以达到移动的效果。而在吃到食物的时候,则只需把食物入队即可。实现贪吃蛇的基本的蛇身移动、吃到食物身体增长、和碰到墙壁或自身死亡,能够暂停和开始。

    本次设计我将主要运用java语言来完成。Java语言是一种跨平台,适合于分布式计算环境的面向对象编程语言,用Java写的应用程序不用修改就可在不同的软硬件平台上运行。

   由于Java主要用于网络应用程序开发,因此对安全性有较高的要求。如果没有安全保证,用户从网络下载程序执行就非常危险。Java通过自己的安全机制防止了病毒程序的产生和下载程序对本地系统的威胁破坏。

4.4  其它需求

游戏界面应该力求友好、美观、操作简单

五:游戏设计流程图

5.1游戏流程图:

 

 


5.2 游戏面板

点击“Z”游戏开始如图:

按“                     ”控制蛇的方向如下图:


蛇碰到边界游戏结束,出现“Game over”,如图:

第六:系统测试

5.1 测试的意义

   系统测试是为了发现错误而执行程序的过程,成功的测试是发现了至今尚未发现的错误的测试。 测试的目的就是希望能以最少的人力和时间发现潜在的各种错误和缺陷。应根据开发各阶段的需求、设计等文档或程序的内部结构精心设计测试用例,并利用这些实例来运行程序,以便发现错误。系统测试是保证系统质量和可靠性的关键步骤,是对系统开发过程中的系统分析系统设计和实施的最后复查。

6.2测试过程测试过程

  (1)拟定测试计划。在制定测试计划时,要充分考虑整个项目的开发时间和开发进童以及一些人为因素和客观条件等,使得测试计划是可行的。测试计划的内容主要有测试的内容、进度安排、测试所需的环境和条件、测试培训安排等。

(2)编制测试大纲。测试大纲是测试的依据。它明确详尽地规定了在测试中针对系统的每一项功能或特性所必须完成的基本测试项目和测试完成的标准。

(3)根据测试大纲设计和生成测试用例。在设计测试用例的时候,可综合利用前面介绍的测试用例和设计技术,产生测试设计说明文档。    

(4)实施测试。测试的实施阶段是由一系列的测试周期组成的。在每个测试周期中,测试人员和开发人员将依据预先编制好的测试大纲和准备好的测试用例,对被测软件或设备进行完整的测试。   

(5)生成测试报告。测试完成后,要形成相应的测试报告,主要对测试进行概要说明,列出测试的结论,指出缺陷和错误,另外,给出一些建议,如可采用的修改方法,各项修改预计的工作量及修改的负责人员。

6.3 测试结果

程序运行正常,没有发现什么错误。

6.4 游戏最终代码

package Game;

import java.awt.Color;

import java.awt.Font;

import java.awt.Graphics;

import java.awt.event.KeyEvent;

import java.awt.event.KeyListener;

import java.util.Random;

import javax.swing.JFrame;

import javax.swing.JPanel;

 import javax.swing.*;

public class she extends JFrame{

   

    MyPaint mp=null;

    public static void main(String[] args) {

        she she=new she();      

    }

    public she(){

      

        mp=new MyPaint();

        Thread t1=new Thread(mp);//启动mp线程

        t1.start();

        this.add(mp);//加载面板

        this.addKeyListener(mp);//加载按键监听

        this.setSize(300,320);//窗口大小

        this.setLocationRelativeTo(null);  //居中

        this.setTitle("贪吃蛇V1.0"); 

        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//点击关闭时,关闭程序

        this.setVisible(true);//可见

       

        

   

        }

}

class MyPaint extends JPanel implements KeyListener,Runnable{

    yidong yd=new yidong();

   

    public void paint (Graphics g){

        super.paint(g);  

        g.setColor(Color.ORANGE);

        g.fillRect(0, 0, 300, 260);

        g.setColor(Color.black);

        g.fillOval(yd.swx, yd.swy, 20, 20);

        g.setColor(Color.red);

        g.fillOval(yd.x[0], yd.y[0], 20, 20);//蛇头显示

        g.setColor(Color.blue);

        for(int i=1;i<yd.sum-1;i++){//蛇身体显示

            g.fillOval(yd.x[i], yd.y[i], 20, 20);

        }

        g.drawString("当前分数: "+yd.fenshu, 190, 275);

        g.drawString("速度等级: "+yd.lv, 10, 275);

        g.setColor(Color.white);

        if(yd.kaishi==0){  //当游戏结束时显示

            g.setFont(new Font("黑体",1,20));

            g.drawString("Game over", 90, 100);

            g.setFont(new Font("幼体",1,15));

            g.drawString("按Z键  继续游戏!", 80, 120);

        }

    }

   

   

   

   

    public void keyPressed(KeyEvent e) {

        if(yd.kaishi==1){//当游戏进行时    可控制

            if(e.getKeyCode()==KeyEvent.VK_UP){

                if(yd.fx!=2){yd.fx=8;}

            }else if(e.getKeyCode()==KeyEvent.VK_DOWN){

               if(yd.fx!=8){yd.fx=2;}

            }else if(e.getKeyCode()==KeyEvent.VK_LEFT){

               if(yd.fx!=6){yd.fx=4;}

            }else if(e.getKeyCode()==KeyEvent.VK_RIGHT){

               if(yd.fx!=4){yd.fx=6;}

            }

        }else{//当游戏结束时   按Z   恢复游戏

            if(e.getKeyCode()==KeyEvent.VK_Z){

               yd.sum=4;

               yd.x[0]=100;yd.y[0]=100;yd.x[1]=80;yd.y[1]=100;yd.x[2]=60;yd.y[2]=100;

               yd.yanchi=200;yd.kaishi=1;yd.fx=6;yd.nfx=6;yd.sp=20;

            }

        }  

    }

    public void keyReleased(KeyEvent arg0) {}

    public void keyTyped(KeyEvent arg0) {}

    public void run() {   //刷新面板线程

        Thread t2=new Thread(yd);

        t2.start();    

        while(true){

              try {Thread.sleep(10);}

              catch (InterruptedException e) {e.printStackTrace();}

            this.repaint();

        }}}

       

       

       

       

       

       

class yidong implements Runnable{    //蛇移动线程

int maxsum=128,sum=4,x[]=new int[maxsum],y[]=new int[maxsum],kaishi=1;    //sum:代表蛇的总共长度是sum-1

int fx=1,nfx,sp=20,i=0,yanchi=200,fenshu;//方向  fx :4=←   6=→    8=↑    2=↓   其余:无移动

int swx=0,swy=0,shiwu=0;

String lv="1";

Random sj=new Random();

    @Override

    public void run() {

        x[0]=100;y[0]=100;//初始化蛇坐标

        while(true){

            try {Thread.sleep(yanchi);}

            catch (InterruptedException e) {e.printStackTrace();}

            if(shiwu==0){//随机产生食物

                swx=(sj.nextInt(10)+1)*20;

                swy=(sj.nextInt(10)+1)*20;

                shiwu=1;   }          

            if(kaishi==1){fenshu=sum*100-400;}//分数计算

            for(int i=sum-1;i>0;i--){//身体坐标刷新

                x[i]=x[i-1];

                y[i]=y[i-1];

            }

            if(fx==6&&nfx!=4){//方向判断

                    x[0]+=sp;//移动

                    nfx=6;

                }else if(fx==4&&nfx!=6){x[0]-=sp;nfx=4;}

                else if(fx==2&&nfx!=8){y[0]+=sp;nfx=2;}

                else if(fx==8&&nfx!=2){y[0]-=sp;nfx=8;}

                else{if(nfx==6){x[0]+=sp;}

                    if(nfx==4){x[0]-=sp;}

                    if(nfx==2){y[0]+=sp;}

                    if(nfx==8){y[0]-=sp;}}

            if(x[0]>270){x[0]-=sp;}

            if(x[0]<0){x[0]+=sp;}

            if(y[0]>255){y[0]-=sp;}

            if(y[0]<0){y[0]+=sp;}

                if(x[0]>swx-5&&x[0]<swx+5&&y[0]>swy-5&&y[0]<swy+5){

                    sum++;//增加长度

                    shiwu=0;

                    if(sum==10){yanchi=180;lv="2";}//加速

                    if(sum==20){yanchi=160;lv="3";}

                    if(sum==30){yanchi=150;lv="4";}

                    if(sum==40){yanchi=140;lv="5";}

                    if(sum==50){yanchi=130;lv="max";}

                }              

                for(int i=sum-1;i>0;i--){//判断蛇是否吃到自己

                    if(x[0]>x[i]-5&&x[0]<x[i]+5&&y[0]>y[i]-5&&y[0]<y[i]+5){                    

                        sp=0;

                        yanchi=500;

                        kaishi=0; 

                    }

                    }

                }

        }

    }

第七:心得体会

   通过这次课程设计,我对这学期所学的JAVA语言程序设计有一个更深刻的了解,将所学的知识应用于实践,由于所学知识有限,为了使游戏能够实现自己预先的构想,我通过上网和去图书馆找程序,比较好的流程图及功能模块,不断阅读修改代码使程序达到预期所要实现的目标,完成课程设计后,可以感觉到自己对Java程序的又有了新的认识。

    在做Java设计之前也有做过其他的课程设计,大多规模很小。因为其各个模块间的联系十分紧密,代码重复执行率高,当经过无数次的调试、修改后,能最终看到成品,有无比自豪的心情。大学期间做过图书馆管理程序等简单的数据库管理系统的课程设计,思想大致相似,变化范围有限,没有太多自己可发挥的余地。综合运用以前所学习的知识,设计一个JAVA手机游戏,并能实现以下的功能:游戏暂停、游戏重新开始、游戏的结束。

    总之,通过本次的课程设计,使我平时学到的理论知识得到了很好地升华,理论与实际得到一次很好的结合,为我今后参加工作打下了坚实的基础,使我受益匪浅。

相关推荐