我正在制作一个骰子游戏,并且需要知道如何设置一个类来存储前一回合的骰子滚动数字,以便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 () {
}
}
}
答案 0 :(得分:1)
如果您以后需要使用,可以使用ArrayList并为每个播放器保存每个卷筒。
或者,如果您以后不想使用它们,您可以使用2个辅助变量,例如lastUserDie
和lastComputerDie
,这些变量在您检查它们是否相同后会更新。
在这个例子中,我使用了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...
}
}