Java課程設計-推箱子小游戲


 

一.團隊總體概述

團隊名稱:ZHL
團隊成員 任務分工

臧麒越(組長)

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”狀態,則圖標不會變成“normal”態,但不影響游戲進行:

  界面編程僅用eclipse實現,界面些許簡陋

展望:

  嘗試推箱子暴力破解

  嘗試NetBeans或JavaFx編程界面


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM