当前位置: 首页 > 知识库问答 >
问题:

滑槽和梯子游戏随机放置问题

丁子石
2023-03-14

我是一名学生,正在做滑梯和梯子游戏。我正在使用一些方法来确定游戏板上应该放置多少滑槽和梯子。我在main中使用参数为每一个指定10,但我一直在获得6到11的位置。

这两种方法互相干扰是不是有什么问题?

或者我为随机放置设置for循环的方式有问题吗?

我是新来的这个网站,请让我知道,如果你需要更多的澄清,我不想把整个程序在这里。谢谢。

//main
                  ChutesAndLadders cl = new ChutesAndLadders();
                  cl.setBoard(new String[100]);
                  cl.makeChutes(10);
                  cl.makeLadders(10);

//methods
            public String [] board;
            private int chutes, ladders;
            public int position;
            public Random rand = new Random();


        //set board
                    public void setBoard(String [] n){
                        board = n;
                        for(int i = 0; i < board.length; i++)
                            board[i] = "   ";
                    }
        //set and place chutes
                    public void makeChutes(int n){
                        chutes = n;
                        for(int i = 0; i <= chutes; i++)                    
                            board[rand.nextInt(board.length)] = "C" + chutes;

                    }
        //set and place ladders
                    public void makeLadders(int n){
                        ladders = n;
                            int lcell = 0; 
                        for(int i = 0; i <= ladders; i++)
                                 board[rand.nextInt(board.length)] = "L" + ladders;

共有3个答案

符学
2023-03-14

您的for循环有一个包含上限检查,0...10产生11个条目。

正如Mike所说,较少的结果是由于碰撞造成的,您可以通过在板上填充所需的元素,然后对板进行洗牌以获得最终结果来防止碰撞,例如:

public void setupBoard(String [] n, int nrLadders, int nrChutes){
    board = n;
    int index = 0;

    while (index < board.length && 0 < nrLadders--) {
        board[index++] = "L" + nrLadders;
    }

    while (index < board.length && 0 < nrChutes--) {
        board[index++] = "C" + nrChutes;
    }

    while (index < board.length) {
        board[index++] = "   ";
    }

    board = Collections.shuffle(Arrays.asList(board)).toArray(new String[board.length]);
}

这就像创建一副包含许多梯子卡、许多滑槽卡、大量空现货卡的牌,然后洗牌以获得游戏板。

梁华皓
2023-03-14

乍一看,我的猜测是,你是结束与重叠的条目。因为您生成了一个随机放置,并且没有检查那里是否已经有斜槽或梯子,所以很可能会出现重叠。

生成随机位置,然后在放置之前检查是否有任何内容,这应该相当简单。如果发现碰撞,只需生成另一个随机数并重复,直到可以放置它。

另外,顺便说一句,避免使用没有大括号的for循环和if语句始终是一个很好的做法。向块中添加第二个like很容易,并且很想知道为什么它没有作为块的一部分执行。

仲君昊
2023-03-14

首先,你写道:

for(int i = 0; i <= chutes; i++)                    
    board[rand.nextInt(board.length)] = "C" + chutes;

循环中的赋值语句将运行1次降落伞。(在你的情况下是11次。)[使用i

其次,您没有注意防止同一空间多次被分配斜槽或梯子<代码>兰德。nextInt(board.length)不能保证每次运行时都生成唯一的值(否则它就不会是随机的)这就解释了为什么在运行代码时,您可能看不到多达11个滑槽和阶梯。

为了更清楚地说明这一点,请在其中输入一个常量值:

for(int i = 0; i < chutes; i++)                    
    board[11] = "C" + chutes;

请注意,最后只有一个斜槽(在11号空间)——除非梯形图代码用梯形图覆盖它。

希望有帮助。

祝你好运

 类似资料:
  • 我有一个任务,我要用JavaFX创建一个滑梯和梯子游戏。 我目前所坚持的是,一旦用户选择了他们想要的玩家数量,我运行的方法就会出错。 我已经通过调试器运行了它,并且我知道问题出在哪一行,但是我不知道从这里可以走到哪里。 例外情况是: 异常线程"JavaFX应用程序线程"java.lang.ArrayIndexOutOfBoundsExc0019:0 我发现如果我把中的零改为4,它就起作用了。但是,

  • 一个全随机的刷装备刷词条小游戏。 游戏设计 通过副本获得装备与金币 装备分为四个等级:破旧、普通、神器、史诗 主角默认每秒回血 2% 默认暴击伤害 150% 完成副本时可能掉落独特级别(5 个词条)的装备(通关后 2.5%掉落率,无尽挑战不会掉落) 通关后开启无尽挑战

  • 我的程序应该要求用户猜测 0 到 100 之间的数字,但我似乎无法正确输出。目前,如果用户数大于随机数,它会打印出无限数量的“您的数字太高”。此外,如果第一个 UserGuess 很低,那么以下所有数字都将具有相同的提示:(“您的数字太低”),尽管它们实际上大于随机数。我不知道我做错了什么。任何帮助将不胜感激。谢谢!

  • 在我的游戏中出现的问题是,当我试图在游戏中插入单词时,它不显示字母,它应该在正确的时候显示字母,如果它是错误的,它应该通过增加刽子手的一部分来惩罚我。 我创建了惩罚函数和函数,当它正确时显示用户输入的字母,请帮助!! 这是我的代码:http://pastebin.com/du98i88G 我认为在pygame中的函数` 中可能存在问题,而不是gameQuit:for event。事件get():i

  • 在本节中,我们将介绍梯度下降(gradient descent)的工作原理。虽然梯度下降在深度学习中很少被直接使用,但理解梯度的意义以及沿着梯度反方向更新自变量可能降低目标函数值的原因是学习后续优化算法的基础。随后,我们将引出随机梯度下降(stochastic gradient descent)。 一维梯度下降 我们先以简单的一维梯度下降为例,解释梯度下降算法可能降低目标函数值的原因。假设连续可导

  • 代码的目的是让两个玩家掷一对骰子。第一个掷出20分的玩家赢得比赛。我很难弄清楚如何正确地跟踪滚动的总和;它只给我当前回合的总和,然后当每个玩家滚动10次时游戏就结束了。 我如何正确地计算每个玩家游戏的总和,然后当其中一个玩家的总和等于20时停止循环?