java小游戏设计.doc

上传人:jian****018 文档编号:8467185 上传时间:2020-03-29 格式:DOC 页数:9 大小:165.50KB
返回 下载 相关 举报
java小游戏设计.doc_第1页
第1页 / 共9页
java小游戏设计.doc_第2页
第2页 / 共9页
java小游戏设计.doc_第3页
第3页 / 共9页
点击查看更多>>
资源描述
华北科技学院计算机系综合性实验报告华北科技学院计算机学院综合性实验实 验 报 告 课程名称 JAVA程序设计 实验学期 2014 至 2015 学年 第 1 学期学生所在院部 计算机学院 年级 专业班级 学生姓名 学号 任课教师 实验成绩 计算机学院制Java程序设计课程综合性实验报告开课实验室:基础四 2016年 11 月 28日实验题目基于java的拼图游戏一、 实验目的程序使用Eclipse集成开发环境完成,熟悉并掌握在Eclipse开发环境下编写Java程序。二、 设备与环境硬件:多媒体计算机软件:Windows系列操作系统、JDK开发包、Eclipse开发环境三、实验内容及要求1.实验要求使用Java swing编程实现拼图游戏。游戏功能是将一幅图片分割成5*5的规则小图片,游戏开始时将25个小图片随机摆放,玩家能够参考原图拼接出正确的图片。游戏规则:在25个小图片中有一个为空白图片,玩家可以单击和空白小图片相邻的任一个小图片(上、下、左、右均可),即可将单击的小图片与空白小图片交换位置。通过有限次的移动,即可将随机分布的小图片恢复成原图的样式。2.实验内容(1)各类及主要成员函数的功能: java源代码及其功能序号类名主要功能1GreedSnake该类为程序入口,含有main方法。2SnakeControl实现控制运行等总体要求,实现方向键控制蛇的方向,空格键控制游戏暂停或继续,还有分数等。 3SnakeModel该类实现蛇的结构和具体运动,如判断食物是否和怎样被吃掉及判断后的动作。 4Node该类实现组成蛇身的单位-食物。5SnakeView该类实现画板功能,用黑色画蛇身,红色画食物。(2)具体代码及实现如下:程序入口主方法:/第一部分public class GreedSnake /建立主类GreeSnake public static void main(String args) SnakeModel model = new SnakeModel(20,30);/初始化蛇出现的位置 SnakeControl control = new SnakeControl(model); SnakeView view = new SnakeView(model,control); /添加一个观察者,让view成为model的观察者 model.addObserver(view); (new Thread(model).start(); 实现对蛇身的控制要求:/第二部分/游戏的Model类,负责所有游戏相关数据及运行 class SnakeControl implements KeyListener/SnakeControl实现接口KeyListener,键盘监听SnakeModel model;public SnakeControl(SnakeModel model) this.model = model;public void keyPressed(KeyEvent e) int keyCode = e.getKeyCode(); if (model.running) / 运行状态下,处理的按键 switch (keyCode) case KeyEvent.VK_UP: model.changeDirection(SnakeModel.UP); break; case KeyEvent.VK_DOWN: model.changeDirection(SnakeModel.DOWN); break; case KeyEvent.VK_LEFT: model.changeDirection(SnakeModel.LEFT); break; case KeyEvent.VK_RIGHT: model.changeDirection(SnakeModel.RIGHT); break; case KeyEvent.VK_ADD: case KeyEvent.VK_PAGE_UP:/向上翻加速 model.speedUp(); break; case KeyEvent.VK_SUBTRACT: case KeyEvent.VK_PAGE_DOWN:/减速 model.speedDown(); break; case KeyEvent.VK_SPACE: case KeyEvent.VK_P: model.changePauseState();/暂停进入睡眠状态 break; default: / 任何情况下处理的按键,按键导致重新启动游戏 if (keyCode = KeyEvent.VK_R | keyCode = KeyEvent.VK_S | keyCode = KeyEvent.VK_ENTER) model.reset(); public void keyReleased(KeyEvent e) public void keyTyped(KeyEvent e) 实现蛇的结构和具体运动:/第三部分SuppressWarnings(“unchecked”)class SnakeModel extends Observable implements Runnable /SnakeModel继承Observable类并且实现接口Runnableainfra matrix; / 指示位置上有没蛇体或食物LinkedList nodeArray = new LinkedList(); / 蛇体Node food;int maxX;int maxY;int direction = 2; / 蛇运行的方向ainfra running = false; / 运行状态int timeInterval = 200; / 时间间隔,毫秒double speedChangeRate = 0.75; / 每次得速度变化率ainfra paused = false; / 暂停标志int score = 0; / 得分int countMove = 0; / 吃到食物前移动的次数/ UP and DOWN should be even/ RIGHT and LEFT should be oddpublic static final int UP = 2;public static final int DOWN = 4;public static final int LEFT = 1;public static final int RIGHT = 3;public SnakeModel( int maxX, int maxY) this.maxX = maxX; this.maxY = maxY; reset(); public void reset() direction = SnakeModel.UP; / 蛇运行的方向 timeInterval = 500; / 时间间隔,毫秒 paused = false; / 暂停标志 score = 0; / 得分 countMove = 0; / 吃到食物前移动的次数 / initial ainfr, 全部清0 matrix = new ainframaxX; for (int I = 0; I 20 ? 10 : maxX / 2; nodeArray.clear(); for (int I = 0; I initArrayLength; +i) int x = maxX / 2 + I;/maxX被初始化为20 int y = maxY / 2; /maxY被初始化为30 /nodeArrayx,y: 10,15-11,15-12,1520,15 /默认的运行方向向上,所以游戏一开始nodeArray就变为: / 10,14-10,15-11,15-12,1519,15 nodeArray.addLast(new Node(x, y); matrixxy = true; / 创建食物 food = createFood(); matrixfood.xfood.y = true;public void changeDirection(int newDirection) / 改变的方向不能与原来方向同向或反向 if (direction % 2 != newDirection % 2) direction = newDirection; public ainfra moveOn() Node n = nodeArray.getFirst(); int x = n.x; int y = n.y; / 根据方向增减坐标值 switch (direction) case UP: y-; break; case DOWN: y+; break; case LEFT: x-; break; case RIGHT: x+; break; / 如果新坐标落在有效范围内,则进行处理 if (0 = x & x maxX) & (0 = y & y 0 ? scoreGet : 10; countMove = 0; food = createFood(); / 创建新的食物 matrixfood.xfood.y = true; / 设置食物所在位置 return true; else / 吃到蛇体自身,失败 return false; else / 如果新坐标的点上没有东西(蛇体),移动蛇体 nodeArray.addFirst(new Node(x, y); matrixxy = true; n = nodeArray.removeLast(); matrixn.xn.y = false; countMove+; return true; return false; / 触到边线,失败public void run() /运行方法 running = true; while (running) try Thread.sleep(timeInterval); catch (Exception e) break; if (!paused) if (moveOn() setChanged(); / Model通知View数据已经更新 notifyObservers(); else JoptionPane.showMessageDialog(null, “你输了”, “Game Over”, JoptionPane.INFORMATION_MESSAGE); break; running = false;private Node createFood() int x = 0; int y = 0; / 随机获取一个有效区域内的与蛇体和食物不重叠的位置 do Random r = new Random(); x = r.nextInt(maxX); y = r.nextInt(maxY); while (matrixxy); return new Node(x, y);public void ainfra() timeInterval *= speedChangeRate;public void speedDown() timeInterval /= speedChangeRate;public void changePauseState() paused = !paused;public String toString() String result = “”; for (int I = 0; I nodeArray.size(); +i) Node n = nodeArray.get(i); result += “ + n.x + “,” + n.y + “”; return result;实现组成蛇身的单位-食物:/第四部分class Node /Node子类int x;int y;Node(int x, int y) this.x = x; this.y = y;实现画板功能,黑色为蛇身,红色为食物:/第五部分class SnakeView implements Observer /SnakeView实现接口ObserverSnakeControl control = null;SnakeModel model = null;Jframe ainframe;/窗口Canvas paintCanvas;/图像背景Jlabel labelScore;/分数public static final int canvasWidth = 300;/窗口宽度public static final int canvasHeight = 300;/窗口高度(3)游戏运行结果如图:初始游戏界面及蛇出现的位置,最后三行英文字母为帮助菜单:第一次吃到食物加10分,增长1个食物的长度:第二次吃到食物加14分,蛇身增加1个食物的长度,两次加分说明游戏分数不仅和食物有关还和所走路径有关:游戏失败两种情况:咬到蛇尾或者自身:四、实验结果及分析此处写自己通过学习本课程所得到的收获、感想以及对课程教学的看法等内容,要写自己的真实想法,不要写套话。至少200字。教 师 评 价评定项目ABCD评定项目ABCD算法正确界面美观,布局合理程序结构合理操作熟练语法、语义正确解析完整实验结果正确文字流畅报告规范题解正确其他:评价教师签名:年 月 日考查报告内容必须自己独立完成,如果发现雷同现象,双方成绩都将认定为不及格!最后要把课程考查报告电子文档及程序压缩文件上传到FTP服务器上,并提交打印稿。打印报告时删除此红色提示第 8 页
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑环境 > 建筑工程


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!