奥赛罗 - 验证玩家移动

Othello - Validating player moves

提问人:Rum_Row 提问时间:2/8/2023 最后编辑:Ken WhiteRum_Row 更新时间:2/8/2023 访问量:61

问:

我正在使用 2D 数组重新创建奥赛罗/黑白棋。对于每个网格空间,我都存储了一个值(“Black”、“White”或“”)。从那里开始,我根据游戏规则的标准编写了应该和不应该是合法行为的代码。问题是我很难理解如何将规则转化为代码。你们中的任何人如何将奥赛罗的规则转化为基于 2D 阵列的游戏。

我对编码比较陌生,没有运气尝试翻译源代码,因为这个项目需要是我自己的 VB.net 2010 编码,任何建议都会有所帮助。

我已经尝试了所有方法,从长 if/elseif 语句、许多 2D 循环,甚至应该验证移动本身的单独数组。我尝试过的任何东西都无法在不以某种方式中断的情况下通过第一步。

vb.net visual-studio-2010 多维阵列 游戏开发

评论

0赞 ClearlyClueless 2/8/2023
您需要在此处提供一些示例代码。也许你试图重新创建的游戏规则以及你编写的代码不起作用,你正在努力解决
0赞 Ken White 2/8/2023
你们中有人会如何将这些规则转化为基于 2D 阵列的游戏?过于宽泛和模糊。此站点用于解决与编程(代码)或程序员工具使用相关的特定问题。包括您编写的代码,并提出与该代码相关的特定问题。如果您花一些时间参观并阅读帮助中心页面以了解该网站的工作原理,您会发现在开始发布之前,您在这里的体验会好得多。
0赞 Craig 2/8/2023
在这一点上,VS 2010 已经很古老了;VS 2022 免费供个人使用,您想使用过时版本的 IDE 是否有特殊原因?
0赞 David Makogon 2/9/2023
请看:为什么“有人能帮我吗?”不是一个实际的问题?

答:

0赞 teapot418 2/8/2023 #1

有一些伪代码。不知道那应该是什么编程语言,我当场编造了它。

is_valid_move(x,y,color): {
  if (board[x,y] != empty) return false;
  for dx = -1 to 1: {
    for dy = -1 to 1: { // cycle through all directions
      if (dx=0 && dy=0) next;
      xx = x+dx; yy = y+dy;
      while (valid_coords(xx, yy) && board[xx, yy]=enemy(color)): {
      // skipping over enemy stones, there has to be at least one

        xx = xx+dx; yy = yy+dy;
        if (valid_coords(xx, yy) && board[xx, yy]=color)
          return true; // this one is ours, we have captured something
      }
    }
  }
  return false; // no capture found, this is not a valid move
}