《java游戏程序设计教程》实验任务
书
关于书的成语关于读书的排比句社区图书漂流公约怎么写关于读书的小报汉书pdf
《Java游戏程序设计教程》实验任务书
实验一 弹跳小球游戏设计
一 实验目的
通过设计和制作弹跳小球游戏来了解游戏程序的基本结构,理解游戏循环和双缓冲机制的基本原理,并掌握游戏运行框架的设计方法。
二 实验内容
学习和了解游戏基本框架的设计方法(参考教材第3章内容及相关代码),在此基础上设计弹跳小球游戏,实现小球在程序窗口边界反弹的效果。要求实现如下功能:
1. 创建游戏程序主窗体(GameFrame)和绘图面板(GamePanel);
2. 设计游戏循环,并通过线程来控制游戏运行的帧速率;
3. 在游戏逻辑更新部分实现小球的运动逻辑,使得小球可以朝着窗口四周移动,并在边界处反弹。
4. 在游戏绘制部分实现小球的图形绘制,并通过双缓冲机制消除屏幕闪烁。 三 实验步骤
1. 阅读实验要求,设计程序整体结构及各个类的功能。
2. 启动java开发环境,新建游戏项目。
3. 根据实验内容要求编写代码,以实现相应的功能。
4(书写实验
报告
软件系统测试报告下载sgs报告如何下载关于路面塌陷情况报告535n,sgs报告怎么下载竣工报告下载
,详细阐述代码编写的基本思想及主要过程。 四 课时分配
2课时
五 提交文档
实验报告、源程序代码
1. 创建游戏程序主窗体(GameFrame)和绘图面板(GamePanel); //程序主窗体
public GameFrame() {
Frame app = new Frame("GameFrame");
app.addWindowListener(new WindowAdapter() {
public 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(new 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,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) //防止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 < 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) {
}
}
//小球图形绘制
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);
}
实验二 贪食蛇游戏设计
一 实验目的
通过设计和制作贪食蛇游戏来理解游戏程序的运行机制,同时学习运用java
的事件处理机制来改变游戏状态和传递控制命令。 二 实验内容
学习和了解贪食蛇游戏的基本设计思想(参考教材4.4节内容及相关代码),
在此基础上进行改进,要求实现如下功能:
1.当窗口最小化或被遮挡时暂停游戏;
2.改变蛇的运动速度,按+号键加速,按-号键减速;
3.手动控制蛇的移动,按下方向键时让蛇朝对应的方向移动,否则静止不动;
4.能够添加多个食物,如当按下某个键后随机添加一个新食物(原来的食物不消失);
5.添加游戏结束规则(比如蛇头碰到边界或蛇身时结束),并能重新开始游戏。
要求至少实现3个功能。还可以根据自己的创意,加入更多功能。 三 实验步骤
1. 启动java开发环境,运行示例程序。
2. 阅读示例程序,分析程序整体结构及各个类的功能。
3. 根据实验内容要求修改或添加代码,以实现相应的功能。
4(书写实验报告,详细阐述代码编写的基本思想及主要过程。 四 课时分配
2课时
五 提交文档
实验报告、源程序代码
1.当窗口最小化或被遮挡时暂停游戏;
2.改变蛇的运动速度,按+号键加速,按-号键减速;
3.手动控制蛇的移动,按下方向键时让蛇朝对应的方向移动,否则静止不动;
在按下方向键时,蛇向该方向运动,当按下大写字母Q时,蛇暂停运动。 对于几个常量的定义
public static final int SOUTH = 0;
public static final int NORTH = 1;
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) {
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" + direction);
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.添加游戏结束规则(比如蛇头碰到边界或蛇身时结束),并能重新开始游戏。
// 如果新坐标落在有效范围内,则进行处理
if ((0 <= x && x < maxX) && (0 <= y && y < maxY)) {
if (matrix[x][y]) { // 如果新坐标的点上有东西(蛇体或者食物)
if (x == food.x && y == food.y) { // 吃到食物,成功
nodeArray.addFirst(food); // 从蛇头赠长
// 分数规则,与移动改变方向的次数和速度两个元素有关
int scoreGet = (10000 - 200 * countMove) / timeInterval;
score += scoreGet > 0 ? scoreGet : 10;
countMove = 0;
food = createFood(); // 创建新的食物
matrix[food.x][food.y] = true; // 设置食物所在位置
return true;
} else // 吃到蛇体自身,失败
return false;
} else { // 如果新坐标的点上没有东西(蛇体),移动蛇体
nodeArray.addFirst(new Node(x, y));
matrix[x][y] = true;
n = (Node) nodeArray.removeLast();
matrix[n.x][n.y] = false;
countMove++;
return true;
}
}
return false;
实验三 打砖块游戏设计
一 实验目的
通过设计和制作打砖块游戏来理解游戏程序的运行机制,同时学习运用java
编程来实现游戏世界中物体间的碰撞检测。
二 实验内容
学习和了解打砖块游戏的基本设计思想(参考教材4.5节内容及相关代码),在此基础上进行改进,要求实现如下功能:
1 增加生命,如初始时设小球3条命,掉下挡板三次游戏结束;
2 增加难度,每个砖块要敲击两次才能消失;
3 分数显示,设计积分规则,并在游戏结束时显示出来;
4 设置宝物,让宝物隐藏砖块后,打中相应的砖块后改变属性,如小球减速,挡板增长,小球穿越砖块,小球停在挡板上等等;
5 增加新的关卡,在初始的游戏过关后能生成新的关卡(改变砖块布局)。
要求至少实现3个功能。还可以根据自己创意,加入更多功能。 三 实验步骤
1. 启动java开发环境,运行示例程序。
2. 阅读示例程序,分析程序整体结构及各个类的功能。
3. 根据实验内容要求修改或添加代码,以实现相应的功能。
4(书写实验报告,详细阐述代码编写的基本思想及主要过程。 四 课时分配
2课时
五 提交文档
实验报告、源程序代码
1 增加生命,如初始时设小球3条命,掉下挡板三次游戏结束;
public class Life extends Sprite{
public Life(){
super(0,0,"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 = 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 增加新的关卡,在初始的游戏过关后能生成新的关卡(改变砖块布局)。
实验四 角色扮演游戏设计
一 实验目的
通过设计和制作简单的角色扮演游戏来了解游戏场景设计和角色设计的基本概念和原理,并掌握游戏场景滚动和角色动画播放的基本实现方法。 二 实验内容
学习和了解游戏场景设计和角色设计的基本原理(参考教材5、6章内容),在此基础上设计简单的角色扮演游戏,要求实现如下功能:
1.创建一副大尺寸图像(宽和高均超过程序窗口的宽和高),作为游戏的场景图像。
2.实现场景的滚动控制,要求能够在水平方向和垂直方向进行场景滚动(用键盘左右键进行水平滚动控制,上下键进行垂直滚动控制)。
创建游戏角色,并实现角色上下左右四个方向行走时的精灵动画播放。 3.
4.将游戏角色加入游戏场景,并控制角色在场景中四处走动,当按下某个方向键时,滚动游戏场景并播放角色朝着相应方向行走的动画。 三 实验步骤
1. 阅读实验要求,设计程序整体结构及各个类的功能。
2. 启动java开发环境,新建游戏项目。
3. 根据实验内容要求编写代码,以实现相应的功能。
4(书写实验报告,详细阐述代码编写的基本思想及主要过程。 四 课时分配
2课时
五 提交文档
实验报告、源程序代码
1.创建一副大尺寸图像(宽和高均超过程序窗口的宽和高),作为游戏的场景图像。
public void init() {
imMoveSize = 5;
canMoveRight = false;
canMoveLeft = 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 = new BufferedImage[10];
tiles = new ArrayList();
for (int i = 0; i < 9; i++) {
tileImage[i] = loadImage("Images/tile_" + (char) (i + 'A') + ".png");
tiles.add(tileImage[i]);
}
sprites = new ArrayList();
tMap = loadTileMap("Images/map.txt");
}
2.实现场景的滚动控制,要求能够在水平方向和垂直方向进行场景滚动(用键盘左右键进行水平滚动控制,上下键进行垂直滚动控制)。
3.—4.创建游戏角色,并实现角色上下左右四个方向行走时的精灵动画播放。
将游戏角色加入游戏场景,并控制角色在场景中四处走动,当按下某个方向键时,滚动游戏场景并播放角色朝着相应方向行走的动画。
public Enemy(int x, int y, GameWorldManager gameWorld) {
super(x, y, "Images/runningRight.gif", 4);
numImages = 9;
animRight = new Animation("Images/runningRight.gif", 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(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;
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) {
onGround = 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();
}
}
}
实验五 横版动作游戏设计
一 实验目的
通过设计和制作横版动作游戏来理解游戏场景与角色的交互、游戏规则设计、游戏音乐设计及游戏关卡设计的基本原理,并掌握横版动作游戏程序的基本实现方法。
二 实验内容
学习和了解横版动作游戏的基本设计思想(参考教材7-10章的内容和相关代码),在此基础上进行改进,要求实现如下功能:
1.用其它图像资源替换教材游戏示例中的场景及精灵,同时用其它声音资源替换示例中的音乐和音效;
2.改进NPC(电脑角色)间的碰撞检测及处理规则,如让两个NPC碰到后相互按相反的方向移动等;
3.在游戏地图中设置秘密出口,玩家走到该处可以直接过关;
4.增加新的道具,让玩家得到道具后获得新技能;
5.增加移动障碍物,比如上下(或左右)浮动的木头等;
6.使用关卡编辑器设计一个新关卡。
要求至少实现3个功能。还可以根据自己创意,加入更多功能。 三 实验步骤
1. 启动java开发环境,运行示例程序。
2. 阅读示例程序,分析程序整体结构及各个类的功能。
3. 根据实验内容要求修改或添加代码,以实现相应的功能。
4(书写实验报告,详细阐述代码编写的基本思想及主要过程。 四 课时分配
2课时
五 提交文档
实验报告、源程序代码
实验六、七、八、九为综合实验,要求模仿经典游戏“推箱子”来独立地设
计一款java游戏,以此理解游戏设计的基本原理,同时练习使用面向对象的程序设计方法。(说明:只需要实现任务书上的基本功能,不能从网上copy现成的代码。需提交可玩的游戏源程序及各次实验的实验报告。)
实验六 推箱子游戏场景设计
一 实验目的
理解游戏循环的实现原理,掌握java图像绘制、tile贴图、精灵动画及移动控制的程序实现。
二 实验内容
1. 绘制游戏场景。背景底层使用一副图片作为场景,前层用tile贴图表示障碍
物。
2. 绘制精灵。包括箱子、玩家角色、标志点。
3. 控制玩家移动。按上下左右方向键后玩家分别向对应的方向移动,同时播放
该方向的行走动画。
三 实验步骤
1. 阅读实验要求,设计程序整体结构及各个类的功能。
2. 启动java开发环境,新建游戏项目。
3. 根据实验内容要求编写代码,以实现相应的功能。
4(书写实验报告,详细阐述代码编写的基本思想及主要过程。
四 课时分配
2课时
五 提交文档
实验报告、源程序代码
1.绘制游戏场景。背景底层使用一副图片作为场景,前层用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.standLeft = false;
break;
case KeyEvent.VK_LEFT:
gameWorld.canMoveRight = true;
man.standRight = false;
break;
}
实验七 推箱子游戏交互设计
一 实验目的
理解碰撞检测的原理,并掌握其程序的实现方式。
二 实验内容
1. 玩家与障碍物碰撞。玩家碰到障碍物后停止移动。
玩家与箱子碰撞。玩家碰到箱子后,箱子朝玩家行走的方向移动一个单位。 2.
3. 箱子与障碍物碰撞。箱子碰到障碍物后停止移动(箱子与箱子碰撞与此类
似)。
三 实验步骤
1. 阅读实验要求,设计程序整体结构及各个类的功能。 2. 启动java开发环境,新建游戏项目。
3. 根据实验内容要求编写代码,以实现相应的功能。 4(书写实验报告,详细阐述代码编写的基本思想及主要过程。
四 课时分配
2课时
五 提交文档
实验报告、源程序代码
实验八 推箱子游戏规则设计
一 实验目的
理解并实现游戏的状态转换、游戏规则设计、游戏的背景音乐及音效设计。
二 实验内容
1. 完善游戏规则。当所有箱子都处在“标志点”上时游戏结束,在程序窗口正
中显示“finished”。
2. 设定重置键。按“R”键重新开始游戏,所有箱子和玩家回到初始位置。 3. 添加声音效果。为游戏设定一个背景音乐,在游戏过程中循环播放;当玩家
推动箱子时播放一个音效,当游戏结束时播放一个音效。
三 实验步骤
1. 阅读实验要求,设计程序整体结构及各个类的功能。
2. 启动java开发环境,新建游戏项目。
3. 根据实验内容要求编写代码,以实现相应的功能。
4(书写实验报告,详细阐述代码编写的基本思想及主要过程。
四 课时分配
2课时
五 提交文档
实验报告、源程序代码
实验九 推箱子游戏关卡设计
一 实验目的
理解游戏关卡的设计原理及游戏菜单的制作方式,并掌握其程序实现方法。
二 实验内容
1. 设计新关卡。用文件保存关卡中的障碍物信息,并通过java的文件操作功能
读取关卡信息,同时生成新的关卡。
2. 切换关卡。当前关卡完成后自动切换至下一关卡,当所有关卡完成后游戏结
束。
3. 添加游戏菜单。为游戏设计一个菜单,当游戏程序启动时自动显示在屏幕正
中。菜单项需要包含“开始游戏”、“退出游戏”、“跳转关卡”以及“关闭/
开启音乐”等功能。
三 实验步骤
1. 阅读实验要求,设计程序整体结构及各个类的功能。
2. 启动java开发环境,新建游戏项目。
3. 根据实验内容要求编写代码,以实现相应的功能。
4(书写实验报告,详细阐述代码编写的基本思想及主要过程。
四 课时分配
2课时
五 提交文档
实验报告、源程序代码