版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、?Java游戏程序设计教程?实验任务书实验一 弹跳小球游戏设计一 实验目的 通过设计和制作弹跳小球游戏来了解游戏程序的根本结构,理解游戏循环和双缓冲机制的根本原理,并掌握游戏运行框架的设计方法。二 实验内容学习和了解游戏根本框架的设计方法参考教材第3章内容及相关代码,在此根底上设计弹跳小球游戏,实现小球在程序窗口边界反弹的效果。要求实现如下功能:1. 创立游戏程序主窗体GameFrame和绘图面板GamePanel;2. 设计游戏循环,并通过线程来控制游戏运行的帧速率;3. 在游戏逻辑更新局部实现小球的运动逻辑,使得小球可以朝着窗口四周移动,并在边界处反弹。4. 在游戏绘制局部实现小球的图形绘
2、制,并通过双缓冲机制消除屏幕闪烁。三 实验步骤1. 阅读实验要求,设计程序整体结构及各个类的功能。2. 启动java开发环境,新建游戏工程。3. 根据实验内容要求编写代码,以实现相应的功能。4书写实验报告,详细阐述代码编写的根本思想及主要过程。四 课时分配2课时五 提交文档实验报告、源程序代码1. 创立游戏程序主窗体GameFrame和绘图面板GamePanel;/程序主窗体public GameFrame() Frame app = new Frame("GameFrame"); app.addWindowListener(new WindowAdapter() publ
3、ic void windowClosing(WindowEvent e) System.exit(0); ); app.setLocation(100, 100); gamePanel drawB = new gamePanel(); app.add(drawB, BorderLayout.CENTER); app.pack(); app.setVisible(true); drawB.gameStart();/绘图面板public gamePanel() width=500; heigth=500; setBackground(Color.pink); setPreferredSize(ne
4、w Dimension(width, heigth); myball=new ball(this); mypad=new pad(this); this.setFocusable(true); this.requestFocus(); this.addKeyListener(this); 2. 设计游戏循环,并通过线程来控制游戏运行的帧速率; /线程 public void gameStart() gamethread = new Thread(this); gamethread.start(); /游戏循环,控制游戏运行的帧速度 public void run() long t1,t2,dt
5、,sleepTime; long period=1000/FPS; /计算每一次循环需要的执行时间,单位毫秒 t1=System.nanoTime(); /保存游戏循环执行前的系统时间,单位纳秒 while(true) gameUpdate(); gameRender(); gamePaint(); t2= System.nanoTime() ; /游戏循环执行后的系统时间,单位纳秒 dt=(t2-t1)/1000000L; /本次循环实际花费的时间,并转换为毫秒 sleepTime = period - dt;/计算本次循环剩余的时间,单位毫秒 if(sleepTime<=0) /防止
6、sleepTime值为负数 sleepTime=2; try Thread.sleep(sleepTime); /让线程休眠,由sleepTime值决定 catch (InterruptedException ex) t1 = System.nanoTime(); /重新获取当前系统时间 3. 在游戏逻辑更新局部实现小球的运动逻辑,使得小球可以朝着窗口四周移动,并在边界处反弹。 public void move() location.x += dx; location.y += dy; if (location.x > bound.x - diameter) | (location.x
7、< 0) dx = -dx; if (location.y < 0) | (location.y > bound.y-diameter) dy = -dy; 4. 在游戏绘制局部实现小球的图形绘制,并通过双缓冲机制消除屏幕闪烁。/消除屏幕闪烁public void gamePaint() Graphics g; try g = this.getGraphics(); if (g != null && im != null) g.drawImage(im, 0, 0, null); g.dispose(); catch (Exception e) /小球图形绘制
8、 public void gameRender() if (im = null) im = createImage(width, heigth); if (im = null) System.out.println("im is null"); else dbg = im.getGraphics(); dbg.setColor(Color.pink); dbg.fillRect(0, 0, width, heigth); myball.draw(dbg); mypad.draw(dbg); 实验二 贪食蛇游戏设计一 实验目的 通过设计和制作贪食蛇游戏来理解游戏程序的运行机制
9、,同时学习运用java的事件处理机制来改变游戏状态和传递控制命令。二 实验内容学习和了解贪食蛇游戏的根本设计思想参考教材4.4节内容及相关代码,在此根底上进行改良,要求实现如下功能:1.当窗口最小化或被遮挡时暂停游戏;2.改变蛇的运动速度,按+号键加速,按-号键减速;3.手动控制蛇的移动,按下方向键时让蛇朝对应的方向移动,否那么静止不动;4.能够添加多个食物,如当按下某个键后随机添加一个新食物(原来的食物不消失);5.添加游戏结束规那么比方蛇头碰到边界或蛇身时结束,并能重新开始游戏。 要求至少实现3个功能。还可以根据自己的创意,参加更多功能。三 实验步骤1. 启动java开发环境,运行例如程序
10、。2. 阅读例如程序,分析程序整体结构及各个类的功能。3. 根据实验内容要求修改或添加代码,以实现相应的功能。4书写实验报告,详细阐述代码编写的根本思想及主要过程。四 课时分配2课时五 提交文档实验报告、源程序代码1. 当窗口最小化或被遮挡时暂停游戏;2. 改变蛇的运动速度,按+号键加速,按-号键减速; 3. 手动控制蛇的移动,按下方向键时让蛇朝对应的方向移动,否那么静止不动;在按下方向键时,蛇向该方向运动,当按下大写字母Q时,蛇暂停运动。对于几个常量的定义 public static final int SOUTH = 0; public static final int NORTH = 1
11、; public static final int EAST = 2; public static final int WEST = 3;public static final int quilt = 4;控制方向函数:public void keyPressed(KeyEvent e) int keycode = e.getKeyCode(); if (keycode = KeyEvent.VK_P) isPaused = !isPaused; System.out.println("key is P"); if (!isPaused ) switch (keycode)
12、 case KeyEvent.VK_DOWN: direction = SOUTH; System.out.println("key is down" + direction); break; case KeyEvent.VK_UP: direction = NORTH; System.out.println("key is up" + direction); break; case KeyEvent.VK_RIGHT: direction = EAST; System.out.println("key is right" + dir
13、ection); break; case KeyEvent.VK_LEFT: direction = WEST; System.out.println("key is left" + direction); break; case KeyEvent.VK_Q: direction = quilt; System.out.println("key is quilt" + direction); break; 4. 能够添加多个食物,如当按下某个键后随机添加一个新食物(原来的食物不消失);5.添加游戏结束规那么比方蛇头碰到边界或蛇身时结束,并能重新开始游戏。
14、 / 如果新坐标落在有效范围内,那么进行处理 if (0 <= x && x < maxX) && (0 <= y && y < maxY) if (matrixxy) / 如果新坐标的点上有东西蛇体或者食物 if (x = food.x && y = food.y) / 吃到食物,成功 nodeArray.addFirst(food); / 从蛇头赠长 / 分数规那么,与移动改变方向的次数和速度两个元素有关 int scoreGet = (10000 - 200 * countMove) / timeIn
15、terval; score += scoreGet > 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 = (Node) nodeArray.removeLast(); matrixn.x
16、n.y = false; countMove+; return true; return false; 实验三 打砖块游戏设计一 实验目的 通过设计和制作打砖块游戏来理解游戏程序的运行机制,同时学习运用java编程来实现游戏世界中物体间的碰撞检测。二 实验内容学习和了解打砖块游戏的根本设计思想参考教材4.5节内容及相关代码,在此根底上进行改良,要求实现如下功能:1 增加生命,如初始时设小球3条命,掉下挡板三次游戏结束;2 增加难度,每个砖块要敲击两次才能消失;3 分数显示,设计积分规那么,并在游戏结束时显示出来;4 设置宝物,让宝物隐藏砖块后,打中相应的砖块后改变属性,如小球减速,挡板增长,小
17、球穿越砖块,小球停在挡板上等等;5 增加新的关卡,在初始的游戏过关后能生成新的关卡改变砖块布局。要求至少实现3个功能。还可以根据自己创意,参加更多功能。三 实验步骤1. 启动java开发环境,运行例如程序。2. 阅读例如程序,分析程序整体结构及各个类的功能。3. 根据实验内容要求修改或添加代码,以实现相应的功能。4书写实验报告,详细阐述代码编写的根本思想及主要过程。四 课时分配2课时五 提交文档实验报告、源程序代码1 增加生命,如初始时设小球3条命,掉下挡板三次游戏结束;public class Life extends Spritepublic Life() super(0,0,"
18、Images/heart1.png",1); public Sprite(int x, int y, String imfile, int num) locX = x; locY = y; dx = 3; dy = 3; imFileName = imfile; numImages = num; if (numImages = 1) image = setImage(imFileName); else if (numImages > 1) animPlayer = new Animation(imFileName, numImages, 0, 0, false); image
19、= animPlayer.getCurrentImage(); width = image.getWidth(); height = image.getHeight(); 2 增加难度,每个砖块要敲击两次才能消失;3 分数显示,设计积分规那么,并在游戏结束时显示出来;public void paintComponent(Graphics g)super.paintComponent(g);g.drawString("分数:"+fenshu, 200, 30);4 设置宝物,让宝物隐藏砖块后,打中相应的砖块后改变属性,如小球减速,挡板增长,小球穿越砖块,小球停在挡板上等等;5
20、 增加新的关卡,在初始的游戏过关后能生成新的关卡改变砖块布局。实验四 角色扮演游戏设计一 实验目的 通过设计和制作简单的角色扮演游戏来了解游戏场景设计和角色设计的根本概念和原理,并掌握游戏场景滚动和角色动画播放的根本实现方法。二 实验内容学习和了解游戏场景设计和角色设计的根本原理参考教材5、6章内容,在此根底上设计简单的角色扮演游戏,要求实现如下功能:1.创立一副大尺寸图像宽和高均超过程序窗口的宽和高,作为游戏的场景图像。2.实现场景的滚动控制,要求能够在水平方向和垂直方向进行场景滚动用键盘左右键进行水平滚动控制,上下键进行垂直滚动控制。 3.创立游戏角色,并实现角色上下左右四个方向行走时的精
21、灵动画播放。4.将游戏角色参加游戏场景,并控制角色在场景中四处走动,当按下某个方向键时,滚动游戏场景并播放角色朝着相应方向行走的动画。三 实验步骤1. 阅读实验要求,设计程序整体结构及各个类的功能。2. 启动java开发环境,新建游戏工程。3. 根据实验内容要求编写代码,以实现相应的功能。4书写实验报告,详细阐述代码编写的根本思想及主要过程。四 课时分配2课时五 提交文档实验报告、源程序代码1.创立一副大尺寸图像宽和高均超过程序窗口的宽和高,作为游戏的场景图像。public void init() imMoveSize = 5; canMoveRight = false; canMoveLef
22、t = false; im1 = loadImage("Images/mountains.gif"); im2 = loadImage("Images/houses.gif"); im3 = loadImage("Images/trees.gif"); bg1 = new Ribbon(int) (imMoveSize * 0.2), im1); bg2 = new Ribbon(int) (imMoveSize * 0.5), im2); bg3 = new Ribbon(imMoveSize, im3); tileImage =
23、new BufferedImage10; tiles = new ArrayList(); for (int i = 0; i < 9; i+) tileImagei = loadImage("Images/tile_" + (char) (i + 'A') + ".png"); tiles.add(tileImagei); sprites = new ArrayList(); tMap = loadTileMap("Images/map.txt"); 2.实现场景的滚动控制,要求能够在水平方向和垂直方向进行场景
24、滚动用键盘左右键进行水平滚动控制,上下键进行垂直滚动控制。 3. 4.创立游戏角色,并实现角色上下左右四个方向行走时的精灵动画播放。将游戏角色参加游戏场景,并控制角色在场景中四处走动,当按下某个方向键时,滚动游戏场景并播放角色朝着相应方向行走的动画。public Enemy(int x, int y, GameWorldManager gameWorld) super(x, y, "Images/runningRight.gif", 4);numImages = 9;animRight = new Animation("Images/runningRight.gi
25、f", 4, 50, 3, true);animLeft = new Animation("Images/runningLeft.gif", 4, 50, 3, true);runningRight = false;runningLeft = false;standRight = true;standLeft = false;world = gameWorld;sound = new SoundPlayer();/ offsetX = world.getOffsetX();/ offsetY = world.getOffsetY();setDX(4);setDY(
26、0);setJumpSpeed(JUMPSPEED); public void move() if (dx > 0) runningRight = true; runningLeft = false; else if (dx < 0) runningLeft = true; runningRight = false; if (isJumping) jump(); onGround = false; if (jumpSpeed >= 0) jumpStopped(); if (!isJumping) dy += GRAVITY; locY += dy; locX += dx;
27、if (hasFoundPlayer() if (locX - world.getOffsetX() > GamePanel.WIDTH / 2) dx = -Math.abs(dx); else dx = Math.abs(dx); if (runningRight) animRight.updateImage(); else if (runningLeft) animLeft.updateImage(); if (world.worldCollisionVertical(this, thisPosition(), nextPosition(), 0) if (dy > 0) o
28、nGround = true; setDY(0); else onGround=false; if (world.worldCollisionHorizontal(this, thisPosition(), nextPosition(), 0) dx = -dx; if (hasFoundPlayer()&&onGround=true) isJumping = true; sound.loadSound("Sounds/jump.wav"); sound.playSound(); 实验五 横版动作游戏设计一 实验目的 通过设计和制作横版动作游戏来理解游戏场景
29、与角色的交互、游戏规那么设计、游戏音乐设计及游戏关卡设计的根本原理,并掌握横版动作游戏程序的根本实现方法。二 实验内容学习和了解横版动作游戏的根本设计思想参考教材7-10章的内容和相关代码,在此根底上进行改良,要求实现如下功能:1.用其它图像资源替换教材游戏例如中的场景及精灵,同时用其它声音资源替换例如中的音乐和音效;2.改良NPC电脑角色间的碰撞检测及处理规那么,如让两个NPC碰到后相互按相反的方向移动等;3.在游戏地图中设置秘密出口,玩家走到该处可以直接过关;4.增加新的道具,让玩家得到道具后获得新技能;5.增加移动障碍物,比方上下或左右浮动的木头等;6.使用关卡编辑器设计一个新关卡。要求
30、至少实现3个功能。还可以根据自己创意,参加更多功能。三 实验步骤1. 启动java开发环境,运行例如程序。2. 阅读例如程序,分析程序整体结构及各个类的功能。3. 根据实验内容要求修改或添加代码,以实现相应的功能。4书写实验报告,详细阐述代码编写的根本思想及主要过程。四 课时分配2课时五 提交文档实验报告、源程序代码实验六、七、八、九为综合实验,要求模仿经典游戏“推箱子来独立地设计一款java游戏,以此理解游戏设计的根本原理,同时练习使用面向对象的程序设计方法。说明:只需要实现任务书上的根本功能,不能从网上copy现成的代码。需提交可玩的游戏源程序及各次实验的实验报告。实验六 推箱子游戏场景设
31、计一 实验目的理解游戏循环的实现原理,掌握java图像绘制、tile贴图、精灵动画及移动控制的程序实现。二 实验内容1. 绘制游戏场景。背景底层使用一副图片作为场景,前层用tile贴图表示障碍物。2. 绘制精灵。包括箱子、玩家角色、标志点。3. 控制玩家移动。按上下左右方向键后玩家分别向对应的方向移动,同时播放该方向的行走动画。三 实验步骤1. 阅读实验要求,设计程序整体结构及各个类的功能。2. 启动java开发环境,新建游戏工程。3. 根据实验内容要求编写代码,以实现相应的功能。4书写实验报告,详细阐述代码编写的根本思想及主要过程。四 课时分配2课时五 提交文档实验报告、源程序代码1. 绘制
32、游戏场景。背景底层使用一副图片作为场景,前层用tile贴图表示障碍物。public TXZ()TXZm T=new TXZm();add(T);setTitle("推箱子");setSize(500,500);setBackground(Color.red);setLocation(500,500);setVisible(true);2. 绘制精灵。包括箱子、玩家角色、标志点。3.控制玩家移动。按上下左右方向键后玩家分别向对应的方向移动,同时播放该方向的行走动画。switch (keycode) case KeyEvent.VK_DOWN: break; case KeyEvent.VK_UP: break; case KeyEvent.VK_RIGHT: gameWorld.canMoveLeft = true; man.
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 主要领导离职的感言(5篇)
- 新学期学习计划十篇
- DB12T 598.10-2015 天津市建设项目用地控制指标 第10部分:非营利性社会福利设施项目
- 中秋节学校致辞范文(13篇)
- 新学期学习计划范文汇编九篇
- 范文新学期学习计划模板合集7篇
- DB12∕T 879-2019 仓储企业诚信评价规范
- 电动叉车维修保养的安全与操作规范
- 影响水利工程施工质量控制的主要因素
- 移动通信笔试题
- 第一章、总体概述:施工组织总体设想、工程概述、方案针对性及施工标段划分
- 2024 年上海市普通高中学业水平等级性考试 物理 试卷
- 国家开放大学专科《法理学》(第三版教材)形成性考核试题及答案
- 计量基础知识考核试题及参考答案
- 眼科学基础病例分析
- 混合痔中医护理 方案
- 美国刑法制度
- 慢性病防治和健康生活知识讲座
- 中华民族共同体概论课件第十六讲文明新路与人类命运共同体
- 人教部编版一年级道德与法治上册第10课《吃饭有讲究》精美课件
- 2024-2030全球与中国铂铜合金市场现状及未来发展趋势
评论
0/150
提交评论