繁体   English   中英

如何让人机交互玩家轮流参加Connect4游戏?

[英]How do I get my Human and Computer player to take turns in Connect4 game?

我刚刚实现了一个播放器界面,以使我的程序更加面向对象。 该游戏有一个计算机玩家和一个人类玩家,两者都可以从玩家界面实现。

但是,如何确保人和计算机轮流使用我的主要方法? 如果我当前运行此代码,则它只允许播放器1播放直到赢得,然后再移动到计算机上。

我采用了另一种方法,并将我的代码添加到了公共github存储库中。 总结中,我为BoardPositions创建了对象,为播放器创建了一个接口,该接口具有两个实现它的类,即Human Player和Computer Player。 Player接口具有方法makeMove(),在人类播放器实现中,它将以sysout,sysin的方式获取值。 我为计算机播放器创建了一个名为ComputerStrategy的抽象类,该类允许实现多个计算机策略,并且计算机播放器的makeMove方法委托给该策略。 我还创建了一个GameController,该游戏控制器在Main类的Main方法中实例化,它允许您通过询问多少个人玩家(然后是每个个人玩家的名称)和多少计算机玩家来设置游戏。 我还让每个人类玩家都选择一个独特的角色来代表他们在棋盘上的棋子。

它的实现方式尚未完全实现,需要添加检查获胜者的逻辑,控制器还可以随机分配玩家顺序,并且需要循环进行玩家轮换,直到游戏板上装满没有获胜者或找到获胜者为止。

对于计算机策略,我的想法是通过仅阻止任何潜在的获胜手法来简单地开始工作,我将ComputerStrategy设置为抽象类,因为它应该具有辅助方法,例如是否存在潜在的下一获胜手法,如果有则返回该列。

这可能与您想像的有所不同,但是如果您从中得到任何帮助,我的回答就可以了:)

GitHubRepo https://github.com/krebznet/connect4.git

PS这是当前状态下的输出,采用了笨拙的计算机策略,但有一些错误,但是控制器可以工作。

在此处输入图片说明

将您的游戏循环while在你的主要功能,否则就等着比赛结束中HumanPlayer.getUserInput() 另外,您应该添加一个函数来验证任一玩家是否获胜,因为它与getUserInput的定义不匹配。

HumanPlayer human = new HumanPlayer();
ComputerPlayer computer = new ComputerPlayer();

while(!human.hasWon() && !computer.hasWon()) { // Remove the loop from getUserInput() !!!
     human.getUserInput();
     computer.getUserInput();
}

函数public boolean hasWon()应该在Player定义,并在HumanPlayerComputerPlayer重写,以便对您已经拥有的代码进行数学运算,以验证它们是否获胜。


如果您还有其他问题,请告诉我。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM