Java如何启动游戏转码类以存储转弯数据

时间:2017-01-05 23:22:34

标签: java class dice

我正在制作一个骰子游戏,并且需要知道如何设置一个类来存储前一回合的骰子滚动数字,以便if语句可以显示某些东西。 I.E.如果computerDie == 1&& userDie == 4连续出现两次。有什么建议?

public static void main( String [] args ){
    Random random = new Random();
    int totalNumberOfTurns = 1;
    int computerDie;
    int userDie;
    int computerScore = 0;
    int userScore = 0;


    for( int turn = 1; turn <= totalNumberOfTurns; turn++ ) {
        computerDie = random.nextInt( 6 ) + 1;
        userDie = random.nextInt( 6 ) + 1;

        if () {
}
}
}

2 个答案:

答案 0 :(得分:1)

如果您以后需要使用,可以使用ArrayList并为每个播放器保存每个卷筒。

或者,如果您以后不想使用它们,您可以使用2个辅助变量,例如lastUserDielastComputerDie,这些变量在您检查它们是否相同后会更新。

在这个例子中,我使用了1-3之间的随机值,使得更有可能获得相同的滚动,只需将其再次更改为6

import java.util.Random;

public class SaveLastDiceRoll {
    public static void main(String[] args) {
        Random random = new Random();

        int totalNumberOfTurns = 10;

        int computerDie = 0;
        int userDie = 0;
        int computerScore = 0;
        int userScore = 0;
        int lastUserDie = 0;
        int lastComputerDie = 0;

        for (int i = 0; i < totalNumberOfTurns; i++) {
            computerDie = random.nextInt(3) + 1;
            userDie = random.nextInt(3) + 1;
            System.out.println("UserRoll: " + userDie);
            System.out.println("ComputerRoll: " + computerDie);
            System.out.println("------------");
            if (sameRoll(lastUserDie, userDie, lastComputerDie, computerDie)) {
                System.out.println("GAME OVER, SAME ROLL TWICE");
                break;
            }
            lastComputerDie = computerDie;
            lastUserDie = userDie;
        }
    }

    public static boolean sameRoll(int lastUserDie, int currentUserDie, int lastComputerDie, int currentComputerDie) {
        if (lastUserDie == currentUserDie && lastComputerDie == currentComputerDie) {
            return true;
        }
        return false;
    }
}

一些示例输出:

UserRoll: 1
ComputerRoll: 1
------------
UserRoll: 1
ComputerRoll: 1
------------
GAME OVER, SAME ROLL TWICE

UserRoll: 3
ComputerRoll: 1
------------
UserRoll: 2
ComputerRoll: 3
------------
UserRoll: 2
ComputerRoll: 2
------------
UserRoll: 2
ComputerRoll: 1
------------
UserRoll: 2
ComputerRoll: 1
------------
GAME OVER, SAME ROLL TWICE

答案 1 :(得分:1)

看起来你需要进行OOP大修。

对于面向对象的编程,您希望以可重用的方式封装信息和相关功能。对于您的场景,您拥有用户和计算机,但这两组信息都可以被视为播放器(以及相关信息)。这意味着创建一个Player类来存储为该播放器制作的得分和滚动:

public class Player {
    private int score;
    private List<Integer> diceRolls;
}

从那里,我们向类Player添加方法,允许变异和检索存储的信息。

public class Player {
    private int score;
    // Rolls are stored in chronological order. Last element is most recent.
    private List<Integer> diceRolls;

    public Player() {
        score = 0;
        diceRolls = new ArrayList<Integer>();
    }

    public int getScore() {
        return score;
    }

    public int addRoll(int roll) {
        diceRolls.add(roll);
    }

    public int getMostRecentRoll() {
        return diceRolls.get(diceRolls.size() - 1);
    }

    public boolean mostRecentTwoRollsMatch() {
        return diceRolls.size() >= 2 && 
            diceRolls.get(diceRolls.size() - 1).equals(diceRolls.get(diceRolls.size() - 2));

    public List<Integer> getAllRolls() {
        return new ArrayList<>(diceRolls); // copied for safety
    }
}

从那里开始,使用main方法对逻辑进行编码变得更加简单易懂。

public static void main( String [] args ){
    Random random = new Random();
    int totalNumberOfTurns = 10;
    Player user = new Player();
    Player computer = new Player();

    for(int turn = 0; turn < totalNumberOfTurns; turn++ ) {
       user.addRoll(random.nextInt(6) + 1);
       computer.addRoll(random.nextInt(6) + 1);

       if (user.mostRecentTwoRollsMatch()) {
           System.out.println("User rolled " + user.getMostRecentRoll() + " twice!");
       }

       // etc etc...
    }
}