我对如何解决一些问题感到困惑。我正在尝试使用组装程序来创建井字游戏,并且试图将计算机作为播放器来实现。我正在寻找主要将数据保存到变量的方法,例如可以在变量字符串后添加每个玩家玩的游戏单元的所有变量。
我将如何做到这一点,有什么办法可以说创建一个数组来保存可以动态更改和分配的信息?。
答案 0 :(得分:0)
我建议将调用堆栈用作堆栈数据结构,或更简单地创建递归函数。
自然,递归自然地对可能的举动进行了详尽的搜索,修剪了任何导致强迫失败的分支。正式地,这称为Minimax搜索(以查找下一步)。 https://www.cs.cornell.edu/courses/cs312/2002sp/lectures/rec21.htm
如果您找到获胜的举动,则返回该事实,而主叫方知道所考虑的棋盘位置可以让对手强制获胜。您希望自己的功能避免让对手强行获胜,而如果有机会,则打出会导致自己强制获胜的举动。例如Tic Tac Toe recursive algorithm。
我建议使用固定大小的数据结构表示板状态。您的好选择是
一个9字节的字符数组,例如空格,“ X”和“ O”(填充为12,因此您可以用3x lw
复制它)。即在C中struct board { alignas(4) char b[9]; };
。您可以复制整个结构。
2个位图(一个用于X,一个用于O),称为“位板”。 (在国际象棋引擎中,一个64位位图在板上的每个方块都有一个位。在3x3井字游戏中,整个板只需要9位的寄存器)。然后,您可以提出位黑客技术来测试3合3,例如b & 0b111 == 0b111
(带有andi
和beq
)来检查最上面一行是否全部是一个标记。
您可以通过执行X|O
并查找仍为零的位来找到板上剩余的空位。
单个位板,每个位置2位(总共18位,大于MIPS立即数)。这样,在第3个空位的连续位置中查找2可能会更容易。