谚语英语-重播
华北科技学院计算机学院综合性实验
实
验
报
告
课程名称
JAVA
程序设计
实验学期
2014
至
2015
学年
第
1
学期
学生所在院部
计算机学院
年级
专业班级
学生姓名
学号
任课教师
实验成绩
计算机学院制
叮叮小文库
《
Java
程序设计》课程综合性实验报告
开课实验室:基础四
2016
年
11
月
28
日
实验题目
一、实验目的
基于
< br>java
的拼图游戏
程序使用
Eclipse
集成开发环境完成,熟悉并掌握在
Eclipse
开发环境下编写
Java
程序。
二、设备与环境
硬件:多媒体计算机
软件:
Windows
系列操作系统、
JDK
开发包、
Eclipse
开发环境
三、实验内容及要求
1.
实验要求
使用
Java swing
编程实现拼
图游戏。游戏功能是将一幅图片分割成
5*5
的规则小图片,游
戏开始时将
25
个小图片随机摆放,玩
家能够参考原图拼接出正确的图片。
游戏规则:
在
25
个小图片中有一个为空白图片,
玩家可以单击和空白小图片相邻的任一个
小图片(上、下、左、右均可)
p>
,即可将单击的小图片与空白小图片交换位置。通过有限次的移
动,
即可将随机分布的小图片恢复成原图的样式。
2.
实验内容
(
1
)各类及主要成员函数的功能
:
(
p>
2
)具体代码及实现如下
:
①程序入口主方法:
//
第一部分
public
class
GreedSnake {
//
建立主类
GreeSnake
public
static
void
main(String[] args) {
SnakeModel model =
new
SnakeModel(20,30);
//
初始化蛇出现的位置
SnakeControl control =
new
SnakeControl(model);
-
1
java
源代码及其功能
序号
1
2
类名
GreedSnake
SnakeControl
主要功能
该类为程序入口,含有
p>
main
方法。
实现控制运行等总体要求,实现方向键控制蛇的方
向,空格键控制游戏暂停或继续,还有
分数等。
该类实现蛇的结构和具体运动,如判断食物是否和<
/p>
怎样被吃掉及判断后的动作。
该类实现
组成蛇身的单位
-
食物。
该类实现画板功能,用黑色画蛇身,红色画食物。
3
4
5
SnakeModel
Node
SnakeView
叮叮小文库
SnakeView view =
new
SnakeView(model,control);
//
添加一个观察者,让
view
< br>成为
model
的观察者
erver(view);
(
new
Thread(model)).start();
}
}
②实现对蛇身的控制要求
:
//
第二部分
//
游戏的
Model
类,负责所有
游戏相关数据及运行
class
SnakeControl
implements
KeyListener{
//SnakeControl
实现接口
KeyL
istener
,键盘监听
SnakeModel
model
;
public
SnakeControl(SnakeModel model){
<
/p>
this
.
model
< br> = model;
}
public
void
keyPressed(KeyEvent e)
{
int
keyCode = Code();
if
(
model
< br>.
running
){
//
运行状态下,处理的按键
switch
(keyCode) {
case
KeyEvent.
VK_UP
:
model
.changeDirection(SnakeM
odel.
UP
);
break
;
case
KeyEvent.
VK_DOWN
:
model
.changeDirection(SnakeModel.
DOWN<
/p>
);
break
;
case
KeyEvent.
VK_LEFT
:
model
.changeDirection(SnakeModel.
LEFT<
/p>
);
break
;
case
KeyEvent.
VK_RIGHT
:
model
.changeDirection(SnakeModel.
RIGHT
);
break
;
case
KeyEvent.
VK_ADD
:
case
KeyEvent.
VK_
PAGE_UP
:
//
向上翻加速
p>
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) {
}
-
2
叮叮小文库
}
③实现蛇的结构和具体运动:
//
第三部分
@SuppressWarnings
(
“unchecke
d”
)
class
SnakeModel
extends
Observable
implements
Runnable {
//SnakeModel
继承
Observable
类并且实现接口
Runn
able
ainfra
[][]
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 odd
public
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
< br> = maxX;
this
.
maxY
= maxY;
reset();
}
public
void
reset(){
direction
=
SnakeModel.
UP
;
//
蛇运行的方向
timeInterval
= 500;
//
时间间隔,毫秒
paused
=
false
;
//
暂停标志
score
=
0;
//
得分
countMove
= 0;
//
吃到食物前移动的次数
//
initial ainfr,
全部清
0
matrix
=
new
ainfra
[
maxX
][];
for
(
int
I = 0; I <
maxX
; ++i) {
matrix
[i] =
new
ainfra
[
maxY
];
Arrays.
fill
(
matrix
[i],
false
);
}
// initial the
snake
//
初始化蛇体,如果横向位置超过
20
个
,长度为
10
,否则为横向位置的一半
int
initArrayLength =
maxX
> 20
? 10 :
maxX
/ 2;
nodeArray
.clear();
for
(
int
I = 0; I <
initArrayLength; ++i) {
int
x =
maxX
/ 2 + I;
//ma
xX
被初始化为
20
int
y
=
maxY
/ 2;
//
maxY
被初始化为
30
//nodeArray[x,y]: [10,15]-[11,15]-[12
p>
,
15]~~[20,15]
//
默认的
运行方向向上,所以游戏一开始
nodeArray
就变为:<
/p>
//
[10
,
14]-[10
,
15]-[11
,
15]-[12
,
15]~~[19
,
15]
node
Array
.addLast(
new
Node(x, y));
-
3