我在java中制作Othello
游戏,并且在按下enter
时切换其他玩家有问题。我声明了全局变量public static int counter;
,它会在按下时递增。
Scanner s = new Scanner(System.in);
move = s.nextLine();
// enter to forfeit
if(move.equals("")){
if(counter%2 == 0){
whiteEnterForfeit = turn(board, "White", "W", "B");
printBoard(board);
counter++;
}
if(counter%2 == 1) {
blackEnterForfeit = turn(board, "Black", "B", "W");
printBoard(board);
counter++;
}
}
/* If coordinate is typed like 2,4 I will be recorded at right spot on the board.
else if(!move.equals("")){
StringTokenizer st = new StringTokenizer(move, ",");
rowMove = Integer.parseInt(st.nextToken());
colMove = Integer.parseInt(st.nextToken());
*/
因此,一旦我按行输入两次,就应该打印出Black-White-Black
。但是,我打印出Black-White-White.....
。我对static
全局变量的看法是任何类或方法都可以访问和修改它的值。
当每个玩家成功玩游戏时,我也会增加counter
。
由于其代码超过300行,您可以在github(https://github.com/misonam03/TIL/blob/master/Java/Othello.java)上找到它。
提前谢谢!
答案 0 :(得分:2)
你在这里有一个递归,然后你的计数器永远不会增加:
if(counter%2 == 0){
whiteEnterForfeit = turn(board, "White", "W", "B");
printBoard(board);
counter++;
}
如果在调用之前移动计数器++,则会获得正确的打印,但最终会因为实现递归的方式而得到StackOverflowError。
我认为这个视频系列可以为您提供很多帮助。这是一个C#GO游戏,但它与你正在做的非常相似:Roy Osherove - Building a Go Game Engine With TDD and Pair Programming - Part 1
答案 1 :(得分:0)
您需要使用else
关键字而不是if
。这将解决它,因为当前,计数器在偶数时会递增,这会使它变为奇数(因此第二个if
语句会运行)。
if(counter%2 == 0){
whiteEnterForfeit = turn(board, "White", "W", "B");
printBoard(board);
counter++;
} else {
blackEnterForfeit = turn(board, "Black", "B", "W");
printBoard(board);
counter++;
}
将第二个if
改为else
将阻止两者运行。
答案 2 :(得分:0)
我更愿意用这种方式编写代码:
Scanner s = new Scanner(System.in);
move = s.nextLine();
// enter to forfeit
if(move.equals("")){
if(counter%2 == 0){
whiteEnterForfeit = turn(board, "White", "W", "B");
}
if(counter%2 == 1) {
blackEnterForfeit = turn(board, "Black", "B", "W");
}
printBoard(board);
counter++;
}