使用随机数的Java游戏

时间:2017-01-02 07:16:46

标签: java

我有一个java程序,计算机将决定哪个玩家先行,然后选择随机数从阵列中删除。当玩家删除号码时,阵列将减少。所有这些都将使用随机完成。但是当我运行我的代码时,它并不是我所期望的。我可以知道我哪里出错吗?

这是我的代码:

[班级]

public class StickBag {

    private int numOfSticks;

    public StickBag(int numOfSticks)
    {
        this.numOfSticks = numOfSticks;
    }

    public int getNumOfSticks() {
        return numOfSticks;
    }

    public void setNumOfSticks(int numOfSticks) {
        this.numOfSticks = numOfSticks;
    }

    public int remove(int n)
    {
        numOfSticks = numOfSticks - n;
        return numOfSticks;
    }
}

[主要]

public class StickGameApp {

    public static void main(String[] args) {

        StickBag s1 = new StickBag(25);

        System.out.println("Welcome to the game of sticks!");
        System.out.println("There are initially " + s1.getNumOfSticks() + " sticks on the board.");

        int minP = 1;
        int maxP = 2;
        int randP;

        int minN = 1;
        int maxN = 10;
        int randNum;

        randP = minP + (int)(Math.random()*(maxP));
        randNum = minN + (int)(Math.random()*(maxN));

        for (int i=0; i<10; i++)
        {
            if(s1.getNumOfSticks() > randNum)
            {
            System.out.println("Computer player " + randP + " choose " + randNum + " sticks ");
            s1.remove(randNum);
            }
            else
            {
                System.out.println("Computer player " + randP + " wants to choose " + randNum + " sticks but is unable to.");
                System.out.println("Computer player " + randP + " loses ");
            }
        }

    }
}

当我运行代码时,它显示如下:

欢迎来到棍棒游戏!

董事会最初有25支。

电脑播放器2选择6支装

电脑播放器2选择6支装

电脑播放器2选择6支装

电脑播放器2选择6支装

计算机播放器2想要选择6支但是无法选择。 电脑播放器2输了

计算机播放器2想要选择6支但是无法选择。 电脑播放器2输了

计算机播放器2想要选择6支但是无法选择。 电脑播放器2输了

计算机播放器2想要选择6支但是无法选择。 电脑播放器2输了

计算机播放器2想要选择6支但是无法选择。 电脑播放器2输了

计算机播放器2想要选择6支但是无法选择。 电脑播放器2输了

但我希望它显示如下:

欢迎来到棍棒游戏!

董事会最初有25支。

计算机播放器1选择5支。

计算机播放器2选择7支。

电脑玩家1选择7支装。

计算机玩家2想要选择7支但是无法选择。

电脑玩家2,你输了。

我可以知道我哪里出错吗?

4 个答案:

答案 0 :(得分:1)

你的错误只是你把玩家和计算机randPrandNum的随机数生成器放在运行游戏的for循环之前,所以选择的随机数只会被执行一次。

你的代码应该是:

for (int i=0; i<10; i++)
    {
     randP = minP + (int)(Math.random()*(maxP));
     randNum = minN + (int)(Math.random()*(maxN));
        if(s1.getNumOfSticks() > randNum)
        {
        System.out.println("Computer player " + randP + " choose " + randNum + " sticks ");
        s1.remove(randNum);
        }
        else
        {
            System.out.println("Computer player " + randP + " wants to choose " + randNum + " sticks but is unable to.");
            System.out.println("Computer player " + randP + " loses ");
        }
    }

}

答案 1 :(得分:0)

首先,你选择了.player.outside the.loop,所以选择的任何内容都会一直运行

答案 2 :(得分:0)

您需要移动这两行代码:

randP = minP + (int)(Math.random()*(maxP));
randNum = minN + (int)(Math.random()*(maxN));

for循环开始时。这将确保在每次迭代时,您都可以选择一个新的播放器和一个新的阵列位置。

答案 3 :(得分:0)

我不确定这是否是您游戏的正确方法,但我希望您觉得它有用。

import java.util.*;

public class Main {

public static void main(String[] args) {

    Random rand = new Random();
    StickBag s1 = new StickBag(25);
    int total= s1.getNumOfSticks();

    System.out.println("Welcome to the game of sticks!");
    System.out.println("There are initially " + s1.getNumOfSticks() + " sticks on the board.");

    int randP = 0;
    int randNum;
    int P1=0,P2=0;


    for (int i=0; i<10; i++)
    {

          randP = rand.nextInt(2)+1;
        randNum = rand.nextInt(10)+1;


        if (s1.getNumOfSticks() - randNum > 0)
        {
        System.out.println("\n Computer player #" + randP + "  chooses " + randNum + " sticks and takes them. ");
        s1.remove(randNum);

        System.out.println(" Computer player #" + (!(randP == 2) ? 2 : 1 ) + " wants to choose " + randNum + " sticks but is unable to.");

        // Evaluate the score
        if (randP == 1)
            randP = (P1 = P1 + randNum);
        else
            randP = (P2 = P2 + randNum); 
        }
    }

    System.out.println("\n\n---------------------------------------------------------------------------");
    System.out.println("\t Player #1 has " + P1 + " sticks and Player #2 has " + P2 + " sticks. \n"  + ( (P1 > P2) ? "Player 1 wins" : "Player 2 wins"));
    System.out.println("The sticks remaining in the bag are: " + s1.getNumOfSticks());}}