基于java设计小游戏目的_java小游戏设计
华北科技学院计算机学院综合性实验
实
验
报
告
课程名称
JA VA A 程序设计
实验学期
20 14
至
20 15
学年
第
1
学期
学生所在院部
计算机学院
年级
专业班级
学生姓名
学号
任课教师
实验成绩
计算机学院制
ﻬ 《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小游戏设计相关推荐
- 【源码+教程】Java课设项目_12款最热最新Java游戏项目_Java游戏开发_Java小游戏_飞翔的小鸟_王者荣耀_超级玛丽_推箱子_黄金矿工_贪吃蛇
马上就要期末了,同学们课设做的如何了呢?本篇为大家带来了12款热门Java小游戏项目的源码和教程,助力大家顺利迎接暑假![源码+教程]Java课设项目_12款最热最新Java游戏项目_Java游戏开发 ...
- 计算机毕业设计-基于Java的GUI实现贪吃蛇小游戏
标题:基于Java多线程版本GUI贪吃蛇小游戏 1.项目技术点 1.多线程的运用. 2.JAVA的GUI的运用. 3.数据结构的灵活运用. 4.随机食物的生成. 5.关卡加速,随着蛇身增长,蛇的速度也 ...
- java象棋游戏用户特点_基于Java Swing的《中国象棋》游戏的设计与实现
60 开发经验 3基金项目: 江西省自然科学基金资助项目(编号: 0411046); 江西省高性能计算技术重点实验室资助基金项目(No. JXHC20052003) ). 基于 Java Swing ...
- 基于java springboot的小说阅读微信小程序含后台管理系统源码
系统运行环境 开发工具 eclipse(idea),mysql5.7(大于5.5),navicat,小程序开发工具 硬件要求 windows操作系统 cpu:2.4GHz 内存:4G 硬盘:100G ...
- java毕业设计——基于java+J2EE+Hibernate的校园二手交易网站设计与实现(毕业论文+程序源码)——二手交易网站
基于java+J2EE+Hibernate的校园二手交易网站设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于java+J2EE+Hibernate的校园二手交易网站设计与实现,文章末尾附有 ...
- 【java毕业设计】基于java+swing+CS的图书销售管理系统GUI设计与实现(毕业论文+程序源码)——图书销售管理系统
基于java+swing+CS的图书销售管理系统GUI设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于java+swing+CS的图书销售管理系统GUI设计与实现,文章末尾附有本毕业设计的 ...
- 超市库存管理java sql_基于JAVA的超市管理(商店库存)系统的设计与实现(Eclipse,SQLServer)...
基于JAVA的超市管理(商店库存)系统的设计与实现(Eclipse,SQLServer)(论文14000字,程序代码,SQLServer数据库) 摘要:本文的内容是针对超市管理系统,对该系统的运行过程 ...
- java动漫网站开题报告_基于java的校园论坛网站的开发与设计开题报告.doc
基于java的校园论坛网站的开发与设计开题报告 太 原 科 技 大 学 华 科 学 院 毕业设计开题报告 学 生 姓 名:学 号:学 院.系:专 业:论 文 题 目:指导教师: 2015 年 3 月1 ...
- java三手交换智能下棋代码,基于Java的六子棋人工智能系统的设计研究
基于Java的六子棋人工智能系统的设计研究 邱烨,杨旭,王伟 中国矿业大学计算机科学与技术学院,徐州(221008) 摘要:六子棋作为一个刚刚兴起不久的棋类游戏,其计算机博弈算法的研究还相对较少.六子 ...
最新文章
- webpack 项目使用webpack-dev-server 自动编译 (2)
- c语言delay_利用C语言编程单片机,制作可以根据环境光照调整亮度的智能灯
- 飞鸽传书不能传送文件
- 画质评测|一次关于视频画质的探(zhǎn)讨(xiàn)
- Java知识点总结(反射-获取类的信息)
- iOS: 常用的宏
- Axure图片不显示
- Android 加密
- u12无线网卡linux驱动装不上,腾达(U12)USB无线网卡Linux驱动安装笔记
- 学习java之前应该先了解哪些知识?
- Python 编码错误的本质原因
- matlab如何绘制语谱图,语谱图matlab
- uni-app框架、微信小程序项目
- 天池大赛-心跳信号分类预测:探索性数据分析
- SQL之ADD_MONTHS函数用法
- 阿德莱德大学计算机考研专业,阿德莱德大学研究生学制是几年?
- [转]谈谈如何建立数据模型
- [Leetcode] 58. 最后一个单词的长度
- 科卫机器人软件测试笔试题
- 有关输入一段话,输出字的个数
热门文章
- 股票指数的四种加权方式
- Java Swing教程
- 电子计算机里CE,电子计算机上的ce表示什么意思
- 问道怎么找回以前的服务器,问道服务器盘点“北京古都”传奇之地
- LoadRunner性能测试培训大纲
- 关于Flutter中使用 webview_flutter: 1.0.6 打开公众号连接只显示标题不显示内容的记录
- java的excel模板下载(解决中文名乱码问题)
- Quartus ii 中ROM ip核的应用
- 小学五年级计算机教学工作总结,小学五年级信息技术教学工作总结
- SA上传吞吐率优化经验总结