在游戏中实现暂停切换动作

问题描述:

我想知道更好的方法来实现在小游戏中在计算机和人之间交替切换棋步。 电脑通过点击一些按钮,再次计算机,再次人类等在游戏中实现暂停切换动作

frame.computerPlaysRandom(); 
while(!frame.end) 
{ 
//if(frame.alreadyExecuted) 
// { 
frame.computerPlaysRandom(); 

// } 
// frame.computerPlaysRandom(); 
} 

我想过把布尔变量alreadyExecuted在 humanPlays方法结束,但它不工作起着第一,比人的戏剧。

public void computerPlaysRandom() 
{ 
    ...... 
    if(activeColour == RED) 
    { 
    ..... 
    } 
    activeColour = YELLOW;  
} 

我不喜欢这样,首先它着眼于完全相同的时间不自然的像人类和电脑游戏。另一个它不断循环。

我尽我所能解释,请给我建议更好的方法来做到这一点。

+2

一个**游戏模型**应该跟踪谁的游戏。不是像上面那样制作一个'游戏循环'(循环会阻止事件调度线程),而是确保游戏对GUI中的事件做出反应。 –

作为@安德鲁汤普森comments,“游戏模型应该跟踪谁的游戏。”一个简单的MVC示例游戏被检查here。在这个更为复杂的回合制中,当一个键被按下时,玩家会移动以逃避前进的敌人。关键的处理器,看到here,调用博弈模型的move()方法与给定Key

game.move(k.getMove()); 

博弈模型的move()方法更新玩家的位置,并相应地移动的敌人。模型然后在moveBots()的电话中触发更新事件。每个监听视图然后呈现其新游戏状态的一部分。例如,RCView绘制新玩家/敌人位置,其他视图更新得分和状态显示。

如果您的模型的游戏逻辑过于复杂,则可能会减慢event dispatch thread。如果是这样,请在SwingWorker的背景下运行该模型。

+1

我粗暴地试图沟通,但有了更多的细节和实际的代码来备份它。谢谢TG! –

+0

@trashgod感谢MVC的建议。无论如何,如果两个玩家都是机器人,我就不会有while循环,如何在没有循环的情况下实现游戏流。当至少有一名球员是人类时,我可以管理它,因为我会比通过以下actionPerformed方法控制(在球员按下按钮之后)? –

+1

游戏使用'javax.swing.Timer'来调整模型的串行调用;按下'A'在使用鼠标查看效果时切换动画 – trashgod