【问题标题】:can't find solution for my Java Game找不到我的 Java 游戏的解决方案
【发布时间】:2017-02-20 16:53:37
【问题描述】:

为了学校,我必须制作一个已经存在的游戏。 这是游戏的链接: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 语句将每个字符放在一行中(每个字符代表一个对象)在 2D 数组中。

我的问题是:你有 2 组箭头:一个 FixedArrow(它已经在场上,你不能改变它的位置)和一个 VariableArrow(屏幕右侧的箭头,用户可以将它们放置在该字段上,如果该字段是空闲的,或者换句话说,如果它在一个草对象上。 但我该怎么做呢?我如何创建一个单独的屏幕,我可以在其中放置用户可以放在字段上的箭头?

我知道我的解释含糊不清,所以我希望你们打开我在上面发布的链接并玩 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)我如何在二维数组上反映网格窗格 ==> 以便二维数组的 1 个元素与网格窗格的 1 个正方形相同? 2)是否可以在网格窗格上制作 2 个不同的窗格?例如,在左侧窗格和右侧窗格中分隔 1 个网格窗格。左侧窗格代表二维数组中的所有项目,右侧窗格中我可以在左侧放置一些用户可以拖放的其他对象?
  • 1 -> 是的,这是可能的,您可以将二维数组节点(图块)设置为网格窗格,但每个图块应该是节点的子类(如标签、ImageView、按钮等)。 2 ->(网格窗格上的 2 个窗格)?只需使用 BorderPane 作为父级并将 Gridpane 设置在左侧,将另一个设置在边框窗格的右侧。 3)-> 你必须为拖放瓷砖做艰苦的工作和研究。

标签: java oop javafx logic mvp


【解决方案1】:

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

希望我能正确理解您的问题,这会有所帮助:)

【讨论】:

  • 嗨,感谢您的回复。问题是。我有 2 组箭头:fixedArrow,当关卡加载时放置在字段上,用户无法更改它。以及用户可以放在字段上的 VariableArrow。我必须使用 Gridpane 来创建布局。如果我从 .txt 文件中读取变量箭头,如何将它们设置在显示屏的右侧。
猜你喜欢
  • 2020-08-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多