Java实践专周设计报告

  • 格式:doc
  • 大小:328.78 KB
  • 文档页数:25

电子科技大学成都学院云计算系实践专周设计报告课程名称: JAVA实践专周设计题目:贪吃蛇设计指导教师组:黄曼绮陈虹君学生姓名学号:_ 屈太源 1341310131关林燕 1341310113云计算系制2014年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章运行效果及核心代码 ...................................................... 错误!未定义书签。

4.1 游戏运行效果截图 (8)4.2 核心代码 (9)第5章总结 .................................................................................. 错误!未定义书签。

参考文献 . (19)致谢 (20)第1章贪吃蛇游戏项目概述第1章贪吃蛇游戏项目概述1.1设计思路贪吃蛇游戏设计与实现,主要分为以下二个模块:游戏主界面模块和游戏控制模块。

在此只实现游戏的游戏主界面模块、游戏控制模块。

并且只是实现移动速度、暂停、重新开始等功能。

游戏主界面模块:游戏的主界面是进入游戏后,能够给玩家第一感官的部分,主要包括游戏图形区域界面、游戏的速度选择更新界面、新生方块的预览、暂停游戏按钮、重新开始游戏按钮。

从很大程度上决定了玩家对游戏的兴趣问题,因此,游戏的主界面应该力求美观,爽心悦目。

游戏控制模块:这个模块是游戏的中心环节,主要完成控制游戏的开始、暂停、重新开始等功能。

为了能够给玩家一个很好的游戏环境,这部分应该做到易懂、易操作。

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

1.2程序概述本程序是一个利用Java应用软件制作的贪食蛇小游戏。

在游戏过程中,用户通过点击小键盘区的方向键来控制蛇的运行方向;游戏运行过程中,如果想暂停,只需要按F3键即可。

重新开始游戏的按键为F2。

当蛇没有吃到食物且碰到墙壁或自己的身体时游戏结束。

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

1电子科技大学成都学院实践专周设计报告1.3程序流程图图1-1 程序流程图2第2章总体设计第2章总体设计2.1程序设计模块的划分根据游戏需求中游戏所要实现的功能,整个游戏分为二个模块进行具体的设计如图2-1所示。

图2-1 设计总模块电子科技大学成都学院实践专周设计报告游戏控制模块的主要框架如图2-2所示。

图2-2 控制模块框架游戏暂停控制:点击“F3”按钮,游戏暂停;再单击,游戏继续。

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

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

2.2类说明此工程共有9个类,2个文件。

这9个类的作用如下:Direction类:表示方向的类,其中定义了方向的属性。

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

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

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

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

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

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

第2章总体设计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.3工具键说明1)按键盘的“上”、“下”、“左”、“右”键控制蛇头的移动方向。

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

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

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

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

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

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

7电子科技大学成都学院实践专周设计报告8第4章 运行效果及核心代码4.1 游戏运行效果截图图4-1 地图模式2运行效果图4-2 无障碍模式运行效果第4章 运行效果及核心代码9图4-3 游戏结束画面4.2 核心代码//Direction.javapublic 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. Javaimport 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;10第4章运行效果及核心代码/*绘制节点。

根据蛇身的模式选择绘制普通蛇的节点或彩蛇的节点*/ void draw (graphics g){Random r= new Random();//得到随机数对象Color c =g.getColor();//得到画笔原来的颜色*若为彩蛇,则蛇身为橙色*若为普通蛇身,则蛇身颜色随机产生if (GameFrame.SNAKESTYLE==2)g.setColor(Color.ORANGE);elseg.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.javaimport java,awt.Color;import java,awt.Graphics;import java,awt.event.KeyEvent;11电子科技大学成都学院实践专周设计报告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(){12第4章运行效果及核心代码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;13电子科技大学成都学院实践专周设计报告}/*增加头节点*/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){}/*构造方法,初始化游戏界面,为框架注册按键监听器,游戏开始*/14第4章运行效果及核心代码/*保存分数记录*/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,”分数记录保存成功”);15电子科技大学成都学院实践专周设计报告}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{16第4章运行效果及核心代码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;}17电子科技大学成都学院实践专周设计报告第5章总结通过这次课程设计,我对这学期所学的JAVA语言程序设计有一个更深刻的了解,将所学的知识应用于实践,由于所学知识有限,为了使游戏能够实现自己预先的构想,我通过上网和去图书馆找程序,比较好的流程图及功能模块,不断阅读修改代码使程序达到预期所要实现的目标,完成课程设计后,可以感觉到自己对Java程序的又有了新的认识。