如何在Java中交替转弯?
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/19826222/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
How to make alternating turns in Java?
提问by user2962905
I'm in 9th grade in AP computer science and we were given a project to make a game. I picked a simple Game of Chi thing that my teacher had suggested. But what I cannot figure out is how to make alternating turns between the computer and the player.
我在 AP 计算机科学专业 9 年级,我们得到了一个制作游戏的项目。我选择了老师建议的一个简单的气游戏。但是我想不通的是如何在计算机和播放器之间进行交替轮换。
import java.util.Scanner;
/**
* Game of Chi .. see main for gameplay
*
* @author .....
*/
public class GameOfChi {
private static int numStonesLeft = 0;
public static void main(String[] args) {
numStonesLeft = (int) (Math.random() * 16) + 15;// btw 15 & 30 stones
System.out.println("This is the Game of Chi.");
System.out.println("There is a pile of " + numStonesLeft
+ " stones between us.");
System.out.println("We alternate taking either 1,2 or 3 stones.");
System.out.println("The person who takes the last stone loses");
// Write a loop to alternate computerTurn() and playerTurn()
// checking after each turn see if there is a winner to print
// and to break the loop ... then output the winner
computerTurn(); // invoke the computerTurn() method
playerTurn(); // invoke the playerTurn() method
while (numStonesLeft> 0);
}
/**
* The computerTurn method chooses a random number from 1 to 3 if
* numStonesLeft is greater than or equal to 3, otherwise chooses a random
* number from 1 to numStonesLeft.
*
* Then decrements numStonesLeft appropriately and prints the turn.
*/
public static void computerTurn() {
int stonesChosen = 1 + (int) (Math.random() * Math
.min(3, numStonesLeft));
numStonesLeft -= stonesChosen;
System.out.println("\nI took " + stonesChosen + " stones.");
System.out.println("There are " + numStonesLeft + " stones left.");
}
/**
* The playerTurn method prompts the user for a valid number of stones to
* choose and reads an int value from the user and will repeat this action
* while the user input is invalid. (i.e. user must choose 1, 2 or 3 AND
* their choice must be less than or equal to numStonesLeft.)
*
* Also decrements numStonesLeft appropriately and prints the turn.
*/
public static void playerTurn() {
Scanner keyboard = new Scanner(System.in);
System.out.println("Number of stones you take this turn:");
int stonesChosen = 0;
stonesChosen = keyboard.nextInt();
while (stonesChosen > 3 || stonesChosen < 1) {
;
System.out.println("That is an invalid number of stones.");
stonesChosen = keyboard.nextInt();
}
if (stonesChosen <= 3 || stonesChosen >= 1)
;
{
System.out.println("\nYou took " + stonesChosen + " stones.");
System.out.println("There are " + (numStonesLeft - stonesChosen)
+ " stones left.");
}
stonesChosen = keyboard.nextInt();
}
}
采纳答案by SpiderShlong
in your main method create some form of while loop that checks if the game is over.
在你的 main 方法中创建某种形式的 while 循环来检查游戏是否结束。
while(!gameEnded)
{
playerTurn();
computerTurn();
}
unless you are asking how to make it the computer plays first then next turn player plays first. in that case add a counter to track who went last.
除非你问如何让电脑先播放,然后下一轮玩家先播放。在这种情况下,添加一个计数器来跟踪谁最后去了。
while(!gameEnded)
{
if(counter%2 = 0)
{
playerTurn();
computerTurn();
}
if(counter%2 = 1)
{
computerTurn();
playerTurn();
}
couter++;
}
To randomly select the player that goes first on turn one you can initialize the counter with an odd or even number.
要随机选择第一个回合的玩家,您可以用奇数或偶数初始化计数器。
int counter = Math.random()*2;
回答by John3136
do {
//
// Other code from above as required.
// ...
//
computerTurn(); // invoke the computerTurn() method
//
// Can numStonesLeft be 0 after the computer turn?
// If so, perhaps you need an extra check...
//
playerTurn(); // invoke the playerTurn() method
} while (numStonesLeft> 0);