找不到我的Java游戏的解决方案

时间:2017-02-20 16:53:38

标签: java oop javafx logic mvp

对于学校,我必须制作一个已经存在的游戏。 这是游戏的链接:Game link

一个简短的解释:您收到的每个级别(在屏幕右侧)可以放置在屏幕上的一组箭头,当您按下“开始”按钮时,奶牛开始移动。当他沿着箭头移动时,他将朝箭头方向改变方向。因此,你必须用箭头引导母牛到达他的最终目的地(奖杯)而不触及任何障碍物(如墙壁或树木......)。

我们必须实现Model-View-Presenter设计模式。 所以我从我的模型开始,因为这是我的游戏逻辑。

我的问题: 应使用简单的.txt文件读取每个级别 这是我的等级1的一个例子:

26,6
xxxxxxxxxxxxxxxxxxxxxxxxxx
xGRGGBGxGGRGGGGGGGGGGBGGTx
xGGGGRGGGGFGxGGGGGGGGGGGGx
xGFGGLGGGGGGGLGGGGGGGGGGGG
xGGGGSGGGxGGGGGGxGGGGGGGGx
xxxxxxxxxxxxxxxxxxxxxxxxxx

x=obstacle 
G=grass
T=trophy
S= Start position of the cow
L= Fixed left arrow  
R= Fixed right arrow
F= fixed front arrow
B= fixed back arrow

我读取文件并使用case语句将每个char放在一个行中(每个char代表一个对象)放在一个2D数组中。

我的问题是: 你有两组箭头:一个FixedArrow(它已经在场上,你不能改变它的位置)和一个VariableArrow(屏幕右侧的箭头,用户可以将它们放在字段上,如果字段是空闲的,或者如果它在Grass对象上,则使用其他字词。 但我怎么能这样做?如何创建一个单独的屏幕,我可以放置用户可以放在场上的箭头?

我知道我的解释很模糊所以我希望你们打开我上面发布的链接并玩1级,这样你就能更好地理解我的意思。

我将在此处发布我的代码和类图的一部分。 path =是我在上面解释的.txt文件的路径。

My Class Diagramm

public class Board {
private Tile[][] tiles;

    public Board(Path path) {

        try {

            int yRow = 0;
            Scanner scanner = new Scanner(path);
            String[] split = scanner.nextLine().split(",");
            tiles = new Tile[Integer.parseInt(split[1])][Integer.parseInt(split[0])];
            while (scanner.hasNext()) {
                String line = scanner.nextLine();

                for (int xRow = 0; xRow < line.length(); xRow++) {
                    char character = line.charAt(xRow);
                    switch (character) {
                        case 'x':
                            tiles[yRow][xRow] = new Tile(new Obstacle());
                            break;
                        case 'G':
                            tiles[yRow][xRow] = new Tile(new Grass());
                            break;
                        case 'S':
                            tiles[yRow][xRow] = new Tile(new Grass());
                            //cow.setStartPosition(xRow,yRow);
                            break;
                        case 'L':
                            tiles[yRow][xRow] = new Tile(new FixedArrow(Direction.LEFT));
                            break;
                        case 'R':
                            tiles[yRow][xRow] = new Tile(new FixedArrow(Direction.RIGHT));
                            break;
                        case 'F':
                            tiles[yRow][xRow] = new Tile(new FixedArrow(Direction.FRONT));
                            break;
                        case 'B':
                            tiles[yRow][xRow] = new Tile(new FixedArrow(Direction.BACK));
                            break;
                        case 'T':
                            tiles[yRow][xRow] = new Tile(new Trophy());
                            break;
                        //How should i read a set of arrows in without placing them in the game field but on the right side of the screen
                    }


                }

                ++yRow;
            }

        } catch (IOException e) {
            e.getMessage();
        }
    }

}

1 个答案:

答案 0 :(得分:0)

您只需要使用输入扫描仪或其他设置变量箭头。变量箭头应位于二维数组中。您需要将输入中的变量箭头坐标与数组中这些点的符号进行比较,并检查是否可以放置新箭头或不允许使用新箭头。如果允许,则用新箭头标志替换此标志,或者重复使用固定箭头标志。

我希望我能正确理解你的问题,这有助于:)