我正试图写一个关于棋盘游戏的好表现以及围绕它的玩家的动作。棋盘是一块瓷砖,玩家可以向上,向下,向左或向右移动。几组连续的瓦片组合在一起成为命名区域。墙壁阻挡了一些瓷砖之间的移动。
基本上就是这样。如果所有的球员都是人为控制的话,我想我知道从哪里开始,但我正在努力解决计算机控制球员的问题。我希望玩家能够对自己说:“我在x方面,我想去R区域,我想稍微去区域S.我有6个动作,所以我应该操作“
我不知道从哪里开始。有任何想法吗?这将是一种现代的OO语言。
编辑:我不关心(还)电路板的图形表示,更多的是路线搜索部分。
答案 0 :(得分:3)
我会说使用表示每个可能移动的树结构。 您可以使用Minimax类型算法来确定计算机应采取的措施。
答案 1 :(得分:1)
有一个Player类,它具有将Squares与在那里移动的概率相关联的Map字段,即Map< Square,Double>如果你将它们表示为0..1双。
有一个Board类封装了一系列Squares。每个Square都有四个布尔值或类似的标记,它有一个墙,它的坐标,以及哪个播放器(如果有的话)在它上面。
答案 2 :(得分:1)
如果问题出在寻路上,那里有很多寻路算法。
Wikipedia article on Pathfinding有一个路径寻找算法列表。游戏中常用的一种是A* search algorithm,它可以做得很好。 A *可以说明通过不同类型区域的成本(例如难以穿透的墙壁,需要更长时间旅行的瓷砖等)。
在许多情况下,电路板可以用二维数组表示,其中每个元素代表一种类型的磁贴。但是,对区域的要求可能会使尝试解决更有趣。
答案 3 :(得分:1)
我可以告诉你在商业棋盘游戏风格产品上对我有用的东西。
将棋盘和核心游戏逻辑的表示分解为它自己的模块,并为游戏的其余部分提供定义良好的界面。我们有bool IsValidMove(origin,dest)和bool PerformMove(origin,dest)等函数,以及返回GUI的接口,如AnimateMove(gamePieceID,origin,dest,animInfo)。
董事会和规则只知道董事会的状态,以及有效的事情。它对渲染,AI,动画,声音,输入或其他任何东西都不了解。每个帧,我们将在GUI级处理来自用户的输入,将命令发送到板/游戏状态代码,然后完成。游戏状态代码将获得命令,解决它们是否有效,更新游戏状态和板,然后将消息发送回GUI以直观地表示板的新状态。这些更新由可视化表示系统排队,因此我们可以批量生成一系列动画。
关于这一点的好处是董事会不了解或关心人与AI的玩家。你的AI可以是一个独立的子模块,它可以作用于它。它可以发送与人类玩家相同的命令,游戏逻辑和视觉结果将是相同的。你需要有一个关于游戏板状态的本地每AI信息,或者从游戏逻辑中暴露一些BoardSnapshot()功能,让AI“看到”棋盘,但就是这样。或者,您可以在游戏状态下将每个AI注册为观察者模式,这样当他们需要进行任何复杂的实时规划时,他们也会在电路板更新时得到通知。
将游戏的每个部分分开并隔离将有助于单元测试,并提供更强大的系统。定义良好的界面是你的朋友。
答案 4 :(得分:0)
如果您正在寻找游戏的内存表示(以及它的状态),矩阵是最简单的。但是,根据董事会的复杂程度,策略,您可能需要维护状态列表。
如果您的意思是屏幕上的表示,那么您首先需要一些图形库。