java - 如何让我的人机玩家轮流玩 Connect4 游戏?

标签 java eclipse oop

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

但是,如何确保人和计算机轮流执行我的主要方法?如果我当前运行此代码,它只允许玩家 1 玩直到他们赢了,然后转移到计算机上。

最佳答案

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

它没有完全实现,需要添加检查赢家的逻辑, Controller 也会随机化玩家顺序,它需要一个循环来进行玩家轮流,直到游戏板已满,没有赢家或找到赢家.

对于计算机策略,我的想法是从简单地开始,只是阻止任何可能的获胜 Action ,我将 ComputerStrategy 设为抽象类,因为它应该具有辅助方法,例如是否存在下一个潜在的获胜 Action ,如果是则返回该列。

这可能与您想象的不同,但如果您从中得到什么,请为我的回答点赞 :)

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

附言 这是当前状态下的输出,使用愚蠢的计算机策略有点错误,但 Controller 可以正常工作。

enter image description here

关于java - 如何让我的人机玩家轮流玩 Connect4 游戏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56003496/

相关文章:

java - 使用 Jpa 将相同的实体保存在不同的表(相同的架构)中

eclipse - Grails编译器不匹配

java - 在没有指针的情况下用 C 编写二叉搜索树

java - 使用 Hibernate 创建带有一额外列的临时表

java - 将嵌套对象从 Angular 发布到 Spring REST API 始终为 null

eclipse - 在 Eclipse 的文本编辑器中,是否可以让制表符看起来与空格不同

python - Eclipse 默认工作目录下的 Pydev

php - 如何在 PHP5 : $this->foo->bar->baz() 中链接对象

oop - 如何强制将struct中的所有字段像OOP中的构造器一样填充?

java - 字符串的哈希码是唯一的吗?