【发布时间】:2022-01-15 16:31:53
【问题描述】:
程序是一个简单的井字游戏(游戏逻辑已经过测试) 我应该让每个玩家都有自己的线程,但我不知道为什么我的情况会陷入僵局
每个玩家都有一个名为 myTurn 的布尔值,由静态游戏管理器对象控制 运行方法如下
public void run()
{
while(true)
{
if(myTurn )
{
playTurn();
Game.g.switchTurn();
}
}
}
我的playTurn方法如下:
private synchronized void playTurn()
{
System.out.println(board);
getTurn();
board.incTurnCount();
Game.g.checkGameEnd(type);
}
最后是开关转法
public void switchTurn()
{
p1.setMyTurn(!p1.isMyTurn());
p2.setMyTurn(!p2.isMyTurn());
}
主要方法
public class Game {
public static GameLogicHandler g;
public static void main(String[] args) {
MenusHandler m = new MenusHandler();
Board b = new Board(3);
HumanPlayer p1 = new HumanPlayer("a", true, b);
HumanPlayer p2 = new HumanPlayer("b", false, b);
g = new GameLogicHandler(p1, p2, b);
p1.start();
p2.start();
System.out.println(b);
}
}
Game.g 有一个 p1 和 p2 的实例,在调试时它们确实会发生变化并在运行时工作,但我会陷入死锁
这个想法是,游戏对象在每个回合都会改变两个玩家的回合状态,使他们能够进入关于自己回合的 if 条件。 p1s myTurn 启动为 true
【问题讨论】:
标签: multithreading tic-tac-toe turn