## 一.团队总体概述
团队成员 | 任务分工 |
臧麒越(组长) 201821123025 |
GUI设计,界面编程,博客撰写 (tuixiangzi.view包,tuixiangzi.util包) |
韩佳欣 201821123024 |
运算逻辑功能、悔一步功能、重新开始功能实现,bgm和计时添加 (tuixiangzi.model包) |
林贵龙 201821123012 |
地图参数设置,绘图,素材收集 (tuixiangzi.model.goods包,tuixiangzi.model.map包) |
## 二. 项目git地址:this this !!!
三. 项目git提交记录
四. 前期调查
我们在4399上寻找推箱子小游戏,发现大致功能如下
所以我们所要实现的基本功能为:
1.实现键盘操作功能,上下左右键
2.游戏是否通关判断功能
3.支持选关功能,可以选择1~50关
4.添加游戏背景音乐
5.支持“悔棋”功能,即返回上一步,以及重新开始功能
五.
1.项目功能架构图
2.主要功能流程图
六. UML类图
七. 运行截图
主界面:
通关达成:
总体运行效果:
八. 关键代码
悔一步代码:
public void previousMove() { if(moveStack.isEmpty()){ return; } GameMove previous=moveStack.pollLast(); if(previous!=null) { boy.reset(previous.boyX,previous.boyY,previous.boyDirection); if(previous.moveBox!=null) { Box b=previous.moveBox; b.moveTo(previous.boxX, previous.boxY); GameMapCell homeCell=map.get(b.x, b.y); if(homeCell.type==GameMapCell.TYPE_HOME) { b.setWin(); } } }else { this.setLevel(this.level); } }
人物及箱子移动代码(以向左移动为例)
private void handleLeft() { int bx = boy.x, by = boy.y; // 获取boy前面类型 GameMapCell cell = map.get(bx-1, by); if (cell == null) { return; } switch (cell.type) { case GameMapCell.TYPE_BLOCK: // 障碍物,不能移动 return; case GameMapCell.TYPE_GRASS: case GameMapCell.TYPE_HOME: // 草地和目标位置上是否有箱子 Box box = getBoxAt(cell.x, cell.y); if (box == null) { // 没有,则boy移动 boy.moveLeft(); moveStack.add(GameMove.of(boy)); } else { // 有,判断盒子前面有什么 if (canBoxMoveIn(box.x-1, box.y)) { box.moveLeft(); boy.moveLeft(); moveStack.add(GameMove.of(boy,box)); } } break; } }
九. 扫描结果及改正
扫描结果:
改正结果:
十. 总结
不足:
悔一步功能只能够返回未到达目标的箱子,如若箱子已变成“win”状态,则不会再返回上一步(游戏难度降低):
界面编程仅用eclipse实现,界面些许简陋
展望:
尝试推箱子暴力破解
尝试NetBeans或JavaFx编程界面