Java课程设计-推箱子小游戏

 

## 一.团队总体概述

团队名称:ZHL
团队成员 任务分工

臧麒越(组长)

201821123025

GUI设计,界面编程,博客撰写

 (tuixiangzi.view包,tuixiangzi.util包)

韩佳欣

201821123024

运算逻辑功能、悔一步功能、重新开始功能实现,bgm和计时添加

(tuixiangzi.model包)

林贵龙

201821123012

地图参数设置,绘图,素材收集

(tuixiangzi.model.goods包,tuixiangzi.model.map包)

 

## 二. 项目git地址:this this !!!

 

三. 项目git提交记录

Java课程设计-推箱子小游戏

 

 

 

 

 Java课程设计-推箱子小游戏

 

 

四. 前期调查

我们在4399上寻找推箱子小游戏,发现大致功能如下

Java课程设计-推箱子小游戏

Java课程设计-推箱子小游戏

所以我们所要实现的基本功能为:

1.实现键盘操作功能,上下左右键

2.游戏是否通关判断功能

3.支持选关功能,可以选择1~50关

4.添加游戏背景音乐

5.支持“悔棋”功能,即返回上一步,以及重新开始功能

 

五.

1.项目功能架构图

Java课程设计-推箱子小游戏

 

 

 2.主要功能流程图

Java课程设计-推箱子小游戏

 

六. UML类图

Java课程设计-推箱子小游戏

 

七. 运行截图

主界面:

Java课程设计-推箱子小游戏

 

 通关达成:

Java课程设计-推箱子小游戏

 总体运行效果:

Java课程设计-推箱子小游戏

八. 关键代码

悔一步代码:

    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;
        }
    }

 

九. 扫描结果及改正

扫描结果:

Java课程设计-推箱子小游戏

 

 改正结果:

Java课程设计-推箱子小游戏

 

 

十. 总结

 不足:

  悔一步功能只能够返回未到达目标的箱子,如若箱子已变成“win”状态,则不会再返回上一步(游戏难度降低):

  界面编程仅用eclipse实现,界面些许简陋

展望:

  尝试推箱子暴力破解

  尝试NetBeans或JavaFx编程界面

上一篇:龙贝格求积算法


下一篇:请实现一个节流函数