Java实践专周设计报告

时间:2024.3.24

电子科技大学成都学院云计算系

 

实践专周设计报告

课 程  名 称:      JAVA实践专周           

设 计  题 目:      贪吃蛇设计              

指导 教师 组:      黄曼绮    陈虹君        

学生姓名学号:_     屈太源    1341310131     

                    关林燕    1341310113     

云计算系制

20##年12月


目  录

第1章 贪吃蛇游戏项目概述......................................................................................... 1

1.1 设计思路.................................................................................................................... 1

1.2 程序概述.................................................................................................................... 1

1.3 程序流程图................................................................................................................ 2

第2章 总体设计............................................................................................................. 3

2.1 程序设计模块的划分................................................................................................ 3

2.2 类说明........................................................................................................................ 4

第3章 游戏说明............................................................................................................. 6

3.1 游戏说明.................................................................................................................... 6

3.2 单及菜单单项说明.................................................................................................... 6

3.3 工具键说明................................................................................................................ 7

第4章 运行效果及核心代码......................................................................................... 8

4.1 游戏运行效果截图.................................................................................................... 8

4.2 核心代码.................................................................................................................... 9

第5章 总结................................................................................................................... 18

参考文献......................................................................................................................... 19

致谢................................................................................................................................. 20


第1章   贪吃蛇游戏项目概述

1.1 设计思路

贪吃蛇游戏设计与实现,主要分为以下二个模块:游戏主界面模块和游戏控制模块。在此只实现游戏的游戏主界面模块、游戏控制模块。并且只是实现移动速度、暂停、重新开始等功能。

游戏主界面模块:

游戏的主界面是进入游戏后,能够给玩家第一感官的部分,主要包括游戏图形区域界面、游戏的速度选择更新界面、新生方块的预览、暂停游戏按钮、重新开始游戏按钮。从很大程度上决定了玩家对游戏的兴趣问题,因此,游戏的主界面应该力求美观,爽心悦目。

游戏控制模块:

这个模块是游戏的中心环节,主要完成控制游戏的开始、暂停、重新开始等功能。为了能够给玩家一个很好的游戏环境,这部分应该做到易懂、易操作。

本设计所开发的是基于Java的一个贪吃蛇游戏软件,主要实现游戏的速度控制、游戏的暂停、游戏的退出等功能,分为: 游戏主界面模块、游戏控制模块以二个模块。

1.2 程序概述

本程序是一个利用Java应用软件制作的贪食蛇小游戏。在游戏过程中,用户通过点击小键盘区的方向键来控制蛇的运行方向;游戏运行过程中,如果想暂停,只需要按F3键即可。重新开始游戏的按键为F2。当蛇没有吃到食物且碰到墙壁或自己的身体时游戏结束。

本程序的另一个功能是在程序运行窗口的左上角显示,用户在游戏过程中的移动和长度。

1.3 程序流程图

 

                                               否

                                                   

 

                         是

 

图1-1 程序流程图


第2章   总体设计

2.1 程序设计模块的划分

根据游戏需求中游戏所要实现的功能,整个游戏分为二个模块进行具体的设计如图2-1所示。

游戏控制模块的主要框架如图2-2所示。

游戏暂停控制:点击“F3”按钮,游戏暂停;再单击,游戏继续。

游戏重新开始控制:点击“F2”键后,点击确定,即游戏重新开始。

游戏退出控制:点击“F4”键好,点击确定,退出游戏界面。

2.2 类说明

此工程共有9个类,2个文件。这9个类的作用如下:

Direction类:表示方向的类,其中定义了方向的属性。

Foot类:表示食物的类,定义了随机产生食物坐标、画食物等行为。

Game类:其中只有一个方法,即程序入口。

GameFrame类:表示游戏界面的类,定义了游戏界面的设计和一些行为,如制作菜单、判定游戏结束、记录分数等。

GameThread类:表示游戏线程类,定义了继续游戏、暂停游戏、设置速度档等行为。

KeyMonittor类:表示键盘按键的适配器类,定义了处理按键事件的行为。

Map类:表示地图的类,定义了根据地图模式画出地图的行为。

Node类:表示蛇中的一个节点,定义构造节点,画节点等行为。

Snake类:表示蛇的类,定义了初始化蛇,蛇移动、加尾、去尾、加头、吃食物、判断蛇死、画蛇等行为。

Help.txt:游戏说明文件。

Record.txt:记录分数信息的文件。


第3章   游戏说明

3.1 游戏说明

一、游戏规则说明

1)        运行程序出现游戏界面,蛇头自动向右移动。

2)        食物随机产生,但不能再障碍物中生成。

3)        蛇吃到食物,则蛇的身体变长一节。

4)        蛇每吃一个食物加3分。

5)        默认每三十分提升一个档次。

6)        蛇吃到自己的身体游戏结束。

7)        蛇不能穿越自己的身体运行。

8)   默认每个速度都走完后更换地图并速度恢复默认值,积分归零。

3.2 单及菜单单项说明

1. “游戏”菜单

1)        开始/重新开始

2)        暂停/继续

3)        保存分数

4)        查看分数记录

5)        退出

2. 设置模式”菜单速度选择

6)          地图切换

7)          蛇身模式切换

8)          游戏模式切换

3.  “帮助”菜单

游戏说明

3.3 工具键说明

1)        按键盘的“上”、“下”、“左”、“右”键控制蛇头的移动方向。

2)        按“F1”键重新开始。

3)        按“空格”键暂停/继续。

4)        按数字键设计蛇的移动速度,逐渐加快。

5)        按“F2”键更换地图。

6)        按“F3”键切换普通蛇/彩蛇,默认普通蛇身。

7)        按“F4”键更换游戏模式,蛇撞墙死还是从另一端出现,默认撞墙不死。


第4章   运行效果及核心代码

4.1 游戏运行效果截图  

图4-1 地图模式2运行效果

               

                                           

图4-2 无障碍模式运行效果

图4-3 游戏结束画面

4.2 核心代码

//Direction.java

public class Direction{

/**

* 定义四个静态的最终变量,表示方向,常量值可以任意

*LEFT:方向为左

*RIGHT:方向为右

*UPPER:方向为上

*DOWN:方向为下

public static final int LEFT=-1;

public static final int RIGHT=1;

public static final int UPPER=-2;

public static final int DOWN=2;

//Node. Java

import java.awt.Color;

import java.awt.Graphics;

import java.util.Random;

class Node{

/**

*m:节点的横格坐标

*n:节点的竖格坐标

*direction:节点的移动方向

*next:下一个节点

*pre:前一个节点

*/

  int m;//横格

int n;//竖格

int direction=Derection .LEFT;

Node next=null;

Node pre=null;

/*构造方法*/

public Node (int m, int n,int direction){

this.m=m;

this.n=n;

this.direction=direction;

/*绘制节点。根据蛇身的模式选择绘制普通蛇的节点或彩蛇的节点 */

void draw (graphics g){

   Random r= new Random();//得到随机数对象

   Color c =g.getColor();//得到画笔原来的颜色

*若为彩蛇,则蛇身为橙色

*若为普通蛇身,则蛇身颜色随机产生

if (GameFrame.SNAKESTYLE==2)

  g.setColor(Color.ORANGE);

else

  g.setColor(new Color(r.nextInt(256),r.nextInt(256),r.nextInt(256)));

/*将格子坐标换算成像素坐标画矩形

*节点矩形比一个格子的宽,高小2像素

*视觉效果是蛇身中有间隙

*/

g.fillRect(GameFrame.CELL_SIZE*m,GameFrame.CELL_SIZE*n,

GameFrame.CELL_SIZE-2,GameFrame.CELL_SIZE-2);

g.setColor(c);//恢复原来的画笔颜色

}

}

//Snake.java

import java,awt.Color;

import java,awt.Graphics;

import java,awt.event.KeyEvent;

public class Snake{

/**

*head:蛇头节点

*tail:蛇尾节点

*size:蛇身的长度

*gameFrame:游戏框架对象

*n:蛇的第一个节点

*life:默认蛇有生命

Node head =null;

Node tail=null;

int size=0;

GameFrame gameFrame;

boolean life=true;

Node n = new Node(1,15,Direction.RIGHT);

/*构造方法,蛇的初始节点共4个*/

public Snake(GameFrame  gameFrame){

head=n;

tail=n;

size=1;

this.gameFrame=gameFrame;

for(int i=0;i<3;i++)

this.addHead();

/*增加尾节点*/

public void addTail(){

   Node node=null;

switch(tail.direction){

case Direction.LEFT;

node=new Node(tail.m+1,tail.n,tail.direction);

break;

case Direction.UPPER;

node=new Node(tail.m,tail.n+1,tail.direction);

break;

case Direction.RIGHT;

node=new Node(tail.m-1,tail.n,tail.direction);

break;

case Direction.DOWN;

node=new Node(tail.m,tail.n+1,tail.direction);

break;

tail.next=node;

node.pre=tail;

tail=node;

size++;

/*删除尾节点*/

public void delTail(){

if(size==0)

return;

tail=tail.pre;

tail.next=null;

}

/*增加头节点*/

public void addHead(){

     Node node=null;

     switch(head.direction){

case Direction.LEFT;

node=new Node(head.m-1,head. n,head. direction);

    break;

case Direction.UPPER;

node=new Node(head.m,head. n-1,head. direction);

    break;

case Direction.RIGHT;

node=new Node(head.m+1,head. n,head. direction);

break;

case Direction.DOWN;

node=new Node(head.m,head. n+1,head. direction);

    break;

}

node. next=head;

head. pre=node;

head= node;

size++;

}public void actionPerformed(ActionEvent e){}

/*构造方法,初始化游戏界面,为框架注册按键监听器,游戏开始*/

/*保存分数记录*/

   public void saveRecord(){

      String name=JOptionPane.showInputDialog(“准备保存!请输入你的姓名”);

      //输入框输入姓名

      String content=”姓名:”+name+”   ”+”成绩: ”+score;  //要保存的内容

      RandomAccessFile raf;//随机存取文件

      String contentToCn=null;//字符编码转换后的内容

      /* 若输入框单击“确定”按钮,则保存;否则单击“取消”按钮,则放弃保存 */

     if(name!=null){

          try{

                 //为了字符串不显示乱码,需要转换为中文字符编码,如“GBK”

                 contentToCn=new String(content.getBytes(“GBK”),”ISO8859_1”);

                 //建随机存取文件对象

                raf=new RandomAccessFile(“scr\\record.txt”,”rw” );

                 //文件指针指向文件尾

                raf.seek(raf.length());

                 //写出内存

               raf.writeBytes(contentToCn+”\r\n”);

                //关闭资源

               raf.close();

                //显示保存成功

               JOptionPane.showMessageDialog(null,”分数记录保存成功”);

             }catch(FileNotFoundException e){

                  System.out.println(“记录文件找不到!”);

}catch(IOException e){

     System.out.println(“写数据出错!”);

}

        }else JOptionPane.showMessageDialog(null,”你已经取消保存”);

}

private int score=0;//成绩,初值为0

/*打开文本文件,查看其内容*/

   public void openTxt(MenuItem item){

        String title=null;

        String filePath=null;

       if(item==desprition){//若菜单项为“游戏说明”

          title=” 帮助文件  ”;

          filePath=” src\\help.txt”;

      else if(item==viewRcord){//

         title=” 成绩记录文件 ”;

         filePath=”src\\record.txt ”;

     JFrame note=new JFrame(title);//新建框架

    note.setSize(400,600).;//设置大小

    JTextArea jta=new JTextArea();//新建文本区域

    note.add(jta);//构建外观

    note.setVisible(true);//设置可见性

try{

        FileReader in =newFileReader(filePath);//文件字符输入流

    String s=””;

    int b;

    while(b=in.read())!=-1{//循环读入

       s=s+((char)b);

jta.append(s);//向文本区域中追加内存

}catch(FileNotFoundException e){

    System.out.println(“帮助文件找不到!”);

}catch(IOException e){

    System.out.println(“读取数据出错!”);

GameThread th=new GameThread(this);//th:游戏线程对象

public class Game{

public static void main(String[]args){

   new GameFrame();

}

class GameThread extends Thread{

     private Boolean pause=false;//暂停标志为假

     private int speed=120;//默认速度3档,即每步间隔120ms

GameFrame gameFrame;

//构造方法

public GameThread(GameFrame gameFrame) {

     this.gameFrame= gameFrame;

}


第5章   总结

通过这次课程设计,我对这学期所学的JAVA语言程序设计有一个更深刻的了解,将所学的知识应用于实践,由于所学知识有限,为了使游戏能够实现自己预先的构想,我通过上网和去图书馆找程序,比较好的流程图及功能模块,不断阅读修改代码使程序达到预期所要实现的目标,完成课程设计后,可以感觉到自己对Java程序的又有了新的认识。总之,通过本次的课程设计,使我平时学到的理论知识得到了很好地升华,理论与实际得到一次很好的结合,为我今后参加工作打下了坚实的基础,使我受益匪浅。


参考文献

[1]java2实用教程(第四版)清华大学出版社.,2001.101~2012.804

[2]数据库系统概论(第四版)高等教育出版社2006.504~2013.522

[3]王保罗.Java面向对象程序设计[M]. 北京:清华大学出版社,20##年

[4]高林,周海燕.Jsp网上书店系统与案例分析[M]. 北京:人民邮电出版社,20##年

[5]刘腾红,孙细明.信息系统分析与设计[M]. 北京:科学出版社,20##年


致谢

我要首先感谢我们的任课老师陈虹君和实践课程辅导我们的黄曼绮老师,经过一周的时间,终于完成了实践专周所布置的任务,在此次实验当中遇到了很多了问题,经过老师的悉心帮助和耐心的指导,还有老师不厌其烦的解答以及同学对我的帮助,才使我完成了这次实验,在此,我向帮助我的老师及同学表示由衷的感谢!


电子科技大学成都学院

2017届实践专周成绩评定表

更多相关推荐:
综合实践周总结报告

05电本(1)班李雯35号对于实践周,我们往往抱以不予重视的态度,不把它当作一门重要的课程来对待,忽视其设立的必要性和意义,因此经常是草草了事,能混水摸鱼更是倍感幸运,殊不知正错失了一次宝贵的学习机会。我认为,…

社会实践周报告

ShanxiuniversityofFinanceandEconomics全日制普通本科实习报告学院管理科学与工程专业项目管理姓名学号指导教师20xx年9月1日社会实践周报告这次的社会实践周学校组织我们分别听了...

大学生实践周报告总结

浙江传媒学院国际文化传播学院实习报告实习名称综合实践周实习外宣调研院系国际文化传播学院专业班级指导教师报告人时间浙江传媒学院实习情况登记表档

教学实践周报告 - 副本

实践记录1方法在厦门和大嶝岛实地调查走访大街小巷中山路文灶火车站大嶝岛等等电话采访问卷调查网上查找资料2步骤7月1112日查找在厦门台商企业简单整理和了解台商企业的发展历程和现有规模选择适合调研的企业7月13日...

实践周报告

财务管理主要培养目标和主要课程比较实践目的:大学生社会实践的目的在于弥补学校实践知识的不足,大学生通过社会实践可以开阔学生眼界丰富大学生的专业知识,实质全面深入了解该专业的系统,促进大学生理论知识与实践知识的融…

实践周报告

中华女子学院计算机系实践教学周实践实训报告键入文字计算机系实践周实践实训综合报告遨游在思想的实践里2020学年学期学号姓名班级实践时间年月日至年月日共天实践单位评定教师评定成绩1中华女子学院计算机系实践教学周实...

社会实践周报告

社会实践周报告法学是一门实践性很强的学科法学需要理论的指导但是法学的发展是在实践中来完成的在理论学习结束之后我进入社会进行社会实践将自己在学校所学的理论知识向实践方面转化做到理论与实践相结合周一我们听了马红等老...

寒假社会实践报告 2

寒假社会实践报告社会实践是大学生课外教育的一个重要方面也是大学生自我能力培养的一个重要方式因此对于我们在校大学生来说能在寒假有充足的时间进行实践活动给了我们一个认识社会了解社会提高自我能力的重要的机会作为专升本...

实践报告

仲恺农业工程学院寒假大学生社会实践报告实践内容打工院系管理学院班级工管152姓名吴俊贤实践时间20xx21620xx226实践地点广东省白云区龙兴中路中通快递6f3D2PQ7ap实践报告工管152吴俊贤20xx...

社会实践报告

寒假社会实践姓名蔡志雄性别男院系公共管理与法学学院年纪20xx级班级行政管理三班学号20xx40172313活动总结成长不是一种感受而是一种经历时常你会在食堂看到一群手里提着抹布扫帚仔细地擦着桌子扫着地弯着身子...

实践周(请先阅读“全国大学生数学建模竞赛论文格式规范”)

实践周请先阅读全国大学生数学建模竞赛论文格式规范A题交巡警平台调度问题重新考虑20xx年全国大学生数学建模竞赛试题B题通过建立数学模型设计算法给出以下问题的最佳解决方案1附件1中的附图1给出了该市中心城区A的交...

实践专周标准设计报告(学生用-示例)2

电子科技大学成都学院计算机系实践专周设计报告课程名称分方向工程项目实践II设计题目指导教师组组长学号姓名组员学号姓名组员学号姓名计算机系制20xx年11月目录目录第1章引言111设计目的错误未定义书签12功能要...

实践周实践报告(44篇)