华北科技学院计算机学院综合性实验

课程名称

JA VA A 程序设计

实验学期

20 14

20 15

学年

学期

学生所在院部

计算机学院

年级

专业班级

学生姓名

学号

任课教师

实验成绩

计算机学院制

ﻬ 《J av a程序设计》课程综合性实验报告

开课实验室:基础四

2 2016 年 年

11 月 28 日 日

实验题目

于 基于 j ava 得拼图游戏 一、实验目得 程序使用Eclipse集成开发环境完成,熟悉并掌握在Eclipse开发环境下编写Java程序。

二、设备与环境 硬件:多媒体计算机 软件:Windows 系列操作系统、JDK 开发包、Eclipse 开发环境 三、实验内容及要求 1、实验要求 使用 Java swing编程实现拼图游戏。游戏功能就是将一幅图片分割成 5 *5 得规则小图片,游戏开始时将 25 个小图片随机摆放,玩家能够参考原图拼接出正确得图片。

游戏规则:在 25个小图片中有一个为空白图片,玩家可以单击与空白小图片相邻得任一

个小图片(上、下、左、右均可),即可将单击得小图片与空白小图片交换位置。通过有限次得移动,即可将随机分布得小图片恢复成原图得样式。

2、实验内容 (1 1 )

各 类及 主 要 成员 函 数 得功 能: 2 (2 )

具 体代 码 及 实现 如 下: ① 程 序 入口 主 方法: :

//第一部分 public class GreedSnake {//建立主类GreeSnake

pub lic s tatic vo id 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);

(ne w Thread(model))、start();

} } ② 实现对蛇身得控制要求: //第二部分 //游戏得Model类,负责所有游戏相关数据及运行

clas s SnakeControl

imple men ts KeyListener{//SnakeControl实现接口KeyListener,键盘监听 SnakeModel model; publ ic SnakeControl(SnakeModel model){

this、model = model; } pu blic vo id keyPressed(KeyEvent e)

int keyCode = e、getKeyCode();

i f (model、running){

// 运行状态下,处理得按键

swit ch (keyCode)

ca se KeyEvent、V K _UP:

model、changeDirection(SnakeModel、U P );

br eak;

case KeyEvent、VK_DOW N :

model、changeDirection(SnakeModel、 DO WN);

break;

case KeyEvent、 V K_ L EF T :

model、changeDirection(SnakeModel、L E F T );

java 源代码及其功能 序号 类名 主要功能 1 GreedSnake

该类为程序入口,含有 main 方法。

2 SnakeControl

实现控制运行等总体要求,实现方向键控制蛇得方向,空格键控制游戏暂停或继续,还有分数等。

3 SnakeModel

该类实现蛇得结构与具体运动,如判断食物就是否与怎样被吃掉及判断后得动作。

4 Node

该类实现组成蛇身得单位-食物。

5 SnakeView

该类实现画板功能,用黑色画蛇身,红色画食物。

bre ak;

c ase KeyEvent、 V K _ RIGHT:

model、changeDirection(SnakeModel、RI GH T);

break;

case KeyEvent、VK_AD D :

ca se KeyEvent、VK_P A GE _U P://向上翻加速

model、speedUp();

brea k;

ca se KeyEvent、VK_SU BTR ACT:

c ase KeyEvent、VK_PAGE_ D O WN ://减速

model、speedDown();

bre ak;

cas e KeyEvent、V K _SPACE:

c ase KeyEvent、 V K_ P :

model、changePauseState();//暂停进入睡眠状态

break;

de fault:

}

// 任何情况下处理得按键,按键导致重新启动游戏

if (keyCode == KeyEvent、 V K_ R

||

keyCode == KeyEvent、VK _ S ||

keyCode == KeyEvent、VK_ENTER) {

model、reset();

} } pu bli c voi d keyReleased(KeyEvent e) { } p ublic vo id keyTyped(KeyEvent e) { } } ③ 实现蛇得结构与具体运动: //第三部分 SuppressWarnings(―unchecked‖)

class SnakeModel exte nds Observable im ple ment s Runnable {//SnakeModel继承Observable类并且实现接口Runnable

ainfra[][] matrix;

// 指示位置上有没蛇体或食物 LinkedList〈Node〉 nodeArray = n ew LinkedList

// 蛇体 Node food; in t maxX; int maxY; int direction = 2;

// 蛇运行得方向 niaﻠ infra running = f alse;

// 运行状态 int timeInterval = 200;

// 时间间隔,毫秒 d ouble speedChangeRate = 0、75;

// 每次得速度变化率

ain fra paused = fals e;

// 暂停标志 in t score = 0;

// 得分 i nt countMove = 0;

// 吃到食物前移动得次数 // UP and DOWN should be even // RIGHT and LEFT should be odd p ub li c sta tic f inal int U P

= 2; public stat ic f inal int DOWN = 4;

pu bli c stati c final in t L EF T = 1; pub lic s tatic final int R IGH T

= 3; public SnakeModel( i nt maxX, int maxY)

t hi s、maxX = maxX;

th is、maxY = maxY;

reset(); } public v oid 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 fniaﻠ fra[maxY];

Arrays、 f ill(matrix[i], fa ls e);

}

// 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;//maxX被初始化为20

int y = maxY / 2;

//maxY被初始化为30

//nodeArray[x,y]: [10,15]-[11,15]-[12,15]~~[20,15]

//默认得运行方向向上,所以游戏一开始nodeArray就变为:

//

[10,14]—[10,15]-[11,15]-[12,15]~~[19,15]

nodeArray、addLast( new Node(x, y));

matrix[x][y] = true;

// 创建食物

food = createFood();

matrix[food、x][food、y] = true; } public void changeDirection(int newDirection) {// 改变得方向不能与原来方向同向或反向

if (direction % 2 != newDirection % 2) {

direction = newDirection;

} } pub lic

a infra moveOn() {

Node n = nodeArray、getFirst();

int x = n、x;

in t y = n、y;

// 根据方向增减坐标值

swit ch (direction)

case UP:

y—-;

break;

cas e DOWN:

y++;

break;

case LEFT:

x—-;

b reak;

case R IGHT:

x++;

break;

}

// 如果新坐标落在有效范围内,则进行处理

if ((0 〈= x && x 〈 maxX)

&& (0 〈= y && y < maxY)) {

if (matrix[x][y]) {

// 如果新坐标得点上有东西(蛇体或者食物)

i f (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] = t rue;

// 设置食物所在位置

retu rn tru e;

}

else

// 吃到蛇体自身,失败

retur n false;

}

else {

// 如果新坐标得点上没有东西(蛇体),移动蛇体

nodeArray、addFirst(new Node(x, y));

matrix[x][y] = tr ue;

n = nodeArray、removeLast();

matrix[n、x][n、y] = f als e;

countMove++;

return tr ue;

}

return fa lse;

// 触到边线,失败 } p ubl ic void run()

{//运行方法

running = tru e;

while (running)

t ry {

Thread、 s leep(timeInterval);

catc h (Exception e)

{

break;

if (!paused) {

if (moveOn())

{

setChanged();

// Model通知View数据已经更新

notifyObservers();

els e {

JoptionPane、show M essageDi a log( null,

―您输了‖,

―Game Over",

JoptionPane、INF O RMA TION _MESSAGE);

bre ak;

}

}

running = false; } pr ivate Node createFood() {

int x = 0;

i nt y = 0;

// 随机获取一个有效区域内得与蛇体与食物不重叠得位置

do {

Random r = ne w Random();

x = r、nextInt(maxX);

y = r、nextInt(maxY);

}

while (matrix[x][y]);

return n ew Node(x, y); } pu blic v oid

{ )(arfniaﻠ

timeInterval *= speedChangeRate; } p ub lic void speedDown()

timeInterval /= speedChangeRate; } p ubl ic vo id changePauseState() {

paused = !paused; } public String toString() {

String result = ―‖;

for ( in t I = 0; I 〈 nodeArray、size(); ++i)

Node n = nodeArray、get(i);

result += ―[― + n、x + ―,‖ + n、y + ―]‖;

retu rn result; } } ④ 实现组成蛇身得单位 — 食物: :

//第四部分 class Node {//Node子类 in t x; i nt y; Node( int x, i nt y)

{

this、x = x;

this、y = y; } } ⑤ 实现画板功能,黑色为蛇身, , 红色为食物:

//第五部分 class SnakeView imp lements Observer {//SnakeView实现接口Observer SnakeControl control = nu ll; SnakeModel model = nul l; Jframe

口窗//;emarfniaﻠ

Canvas paintCanvas;//图像背景 Jlabel labelScore;//分数 publ ic stat ic f inal in t c a nva s Width = 300;//窗口宽度 public stati c fina l i nt c an v asH e ight = 300;//窗口高度 } (3 3 )

游戏运行结果如图:

① ①初始游戏界面及蛇出现得位置,最后三行英文字母为帮助菜单:

② ②第一次吃到食物加 10 分,增长 1 个食物得长度:

③ ③第二次吃到食物加 14 分,蛇身增加1个食物得长度,两次加分说明游戏分数不仅与食物有关还与所走路径有关: ④ ④游戏失败两种情况:

咬到蛇尾或者自身:

四、实验结果及分析 此处写自己通过学习本课程所得到得收获、感想以及对课程教学得瞧法等内容,要写自己得真实想法,不要写套话。至少200字。

价 评定项目

A A

B B

C C

D D

评定项目

A A

B B

C C

D D

算法正确

界面美观,布局合理

程序结构合理

操作熟练

语法、语义正确

解析完整

实验结果正确

文字流畅

报告规范

题解正确

其她:

评价教师签名:

考查报告内容必须自己独立完成,如果发现雷同现象,双方成绩都将认定为不及格! 到 最后要把课程考查报告电子文档及程序压缩文件上传到 FT P服务

器上, 并提交打印稿。

打印报告时删除此红色提示

基于java设计小游戏目的_java小游戏设计相关推荐

  1. 【源码+教程】Java课设项目_12款最热最新Java游戏项目_Java游戏开发_Java小游戏_飞翔的小鸟_王者荣耀_超级玛丽_推箱子_黄金矿工_贪吃蛇

    马上就要期末了,同学们课设做的如何了呢?本篇为大家带来了12款热门Java小游戏项目的源码和教程,助力大家顺利迎接暑假![源码+教程]Java课设项目_12款最热最新Java游戏项目_Java游戏开发 ...

  2. 计算机毕业设计-基于Java的GUI实现贪吃蛇小游戏

    标题:基于Java多线程版本GUI贪吃蛇小游戏 1.项目技术点 1.多线程的运用. 2.JAVA的GUI的运用. 3.数据结构的灵活运用. 4.随机食物的生成. 5.关卡加速,随着蛇身增长,蛇的速度也 ...

  3. java象棋游戏用户特点_基于Java Swing的《中国象棋》游戏的设计与实现

    60 开发经验 3基金项目: 江西省自然科学基金资助项目(编号: 0411046); 江西省高性能计算技术重点实验室资助基金项目(No. JXHC20052003) ). 基于 Java Swing ...

  4. 基于java springboot的小说阅读微信小程序含后台管理系统源码

    系统运行环境 开发工具 eclipse(idea),mysql5.7(大于5.5),navicat,小程序开发工具 硬件要求 windows操作系统 cpu:2.4GHz 内存:4G 硬盘:100G ...

  5. java毕业设计——基于java+J2EE+Hibernate的校园二手交易网站设计与实现(毕业论文+程序源码)——二手交易网站

    基于java+J2EE+Hibernate的校园二手交易网站设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于java+J2EE+Hibernate的校园二手交易网站设计与实现,文章末尾附有 ...

  6. 【java毕业设计】基于java+swing+CS的图书销售管理系统GUI设计与实现(毕业论文+程序源码)——图书销售管理系统

    基于java+swing+CS的图书销售管理系统GUI设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于java+swing+CS的图书销售管理系统GUI设计与实现,文章末尾附有本毕业设计的 ...

  7. 超市库存管理java sql_基于JAVA的超市管理(商店库存)系统的设计与实现(Eclipse,SQLServer)...

    基于JAVA的超市管理(商店库存)系统的设计与实现(Eclipse,SQLServer)(论文14000字,程序代码,SQLServer数据库) 摘要:本文的内容是针对超市管理系统,对该系统的运行过程 ...

  8. java动漫网站开题报告_基于java的校园论坛网站的开发与设计开题报告.doc

    基于java的校园论坛网站的开发与设计开题报告 太 原 科 技 大 学 华 科 学 院 毕业设计开题报告 学 生 姓 名:学 号:学 院.系:专 业:论 文 题 目:指导教师: 2015 年 3 月1 ...

  9. java三手交换智能下棋代码,基于Java的六子棋人工智能系统的设计研究

    基于Java的六子棋人工智能系统的设计研究 邱烨,杨旭,王伟 中国矿业大学计算机科学与技术学院,徐州(221008) 摘要:六子棋作为一个刚刚兴起不久的棋类游戏,其计算机博弈算法的研究还相对较少.六子 ...

最新文章

  1. webpack 项目使用webpack-dev-server 自动编译 (2)
  2. c语言delay_利用C语言编程单片机,制作可以根据环境光照调整亮度的智能灯
  3. 飞鸽传书不能传送文件
  4. 画质评测|一次关于视频画质的探(zhǎn)讨(xiàn)
  5. Java知识点总结(反射-获取类的信息)
  6. iOS: 常用的宏
  7. Axure图片不显示
  8. Android 加密
  9. u12无线网卡linux驱动装不上,腾达(U12)USB无线网卡Linux驱动安装笔记
  10. 学习java之前应该先了解哪些知识?
  11. Python 编码错误的本质原因
  12. matlab如何绘制语谱图,语谱图matlab
  13. uni-app框架、微信小程序项目
  14. 天池大赛-心跳信号分类预测:探索性数据分析
  15. SQL之ADD_MONTHS函数用法
  16. 阿德莱德大学计算机考研专业,阿德莱德大学研究生学制是几年?
  17. [转]谈谈如何建立数据模型
  18. [Leetcode] 58. 最后一个单词的长度
  19. 科卫机器人软件测试笔试题
  20. 有关输入一段话,输出字的个数

热门文章

  1. 股票指数的四种加权方式
  2. Java Swing教程
  3. 电子计算机里CE,电子计算机上的ce表示什么意思
  4. 问道怎么找回以前的服务器,问道服务器盘点“北京古都”传奇之地
  5. LoadRunner性能测试培训大纲
  6. 关于Flutter中使用 webview_flutter: 1.0.6 打开公众号连接只显示标题不显示内容的记录
  7. java的excel模板下载(解决中文名乱码问题)
  8. Quartus ii 中ROM ip核的应用
  9. 小学五年级计算机教学工作总结,小学五年级信息技术教学工作总结
  10. SA上传吞吐率优化经验总结