Lua算法:保存井字棋的走法

我现在正在用 Lua 编程,试图制作人工智能。每次我运行代码时(现在我仅仅有Ai的移动代码),它会随机将一个点绘制在棋盘上,但它并没有保存之前的走法。这是一个完全空白的棋盘,只有一个位置被占据。有谁可以帮我吗?如果可以的话,我会非常感激!

function moves()
local Possible = {'1,1','1,2','1,3','2,1','2,2','2,3','3,1','3,2','3,3'}
math.randomseed(os.time())
    math.random()
    local AImove = Possible[math.random( #Possible )]
print('对手选择了',AImove)
--[[
从可能性中去除数字,只提供合法走法0
]]--
if AImove == '1,1' then
    table.remove(Possible,1)
    print("_ _ _")
    print("_ _ _")
    print("X _ _")
end
if AImove == '1,2' then
    table.remove(Possible,2)
    print("___")
    print("X__")
    print("___")
end
if AImove == '1,3' then
    table.remove(Possible,3)
    print("X _ _")
    print("_ _ _")
    print("_ _ _")
end
if AImove == '2,1' then
    table.remove(Possible,4)
    print("_ _ _")
    print("_ _ _")
    print("_ X _")
end
if AImove == '2,2' then
    table.remove(Possible,5)
    print("_ _ _")
    print("_ X _")
    print("_ _ _")
end
if AImove == '2,3' then
    table.remove(Possible,6)
    print("_ X _")
    print("_ _ _")
    print("_ _ _")
end
if AImove == '3,1' then
    table.remove(Possible,7)
    print("_ _ _")
    print("_ _ _")
    print("_ _ X")
end
if AImove == '3,2' then
    table.remove(Possible,8)
    print("_ _ _")
    print("_ _ X")
    print("_ _ _")
end
if AImove == '3,3' then
    table.remove(Possible,9)
    print("_ _ X")
    print("_ _ _")
    print("_ _ _")
end
end
moves()

原文链接 https://stackoverflow.com/questions/70517521

点赞
stackoverflow用户2858170
stackoverflow用户2858170

你需要一个可以存储游戏状态的东西。我会给你一个非常简单和快速的例子,一个名为 board 的表格,它存储了 9 个字段以及一些函数,允许我们操作和显示棋盘。

这应该会给你一个开始的粗略想法。

-- 我们的棋盘
local board = {
}

-- 检查棋盘上的一个字段
function board:check(row, col, str)
  board[row][col] = str
  self:print()
end

-- 将棋盘打印到屏幕上
function board:print()
  print("---------")
  for i,v in ipairs(self) do
    print("| " .. table.concat(v, " ") .. " |")
  end
  print("---------")
end

-- 初始化 / 清除棋盘
function board:init()
  for row = 1, 3 do
    board[row] = {}
    for col = 1, 3 do
      board[row][col] = " "
    end
  end
  board:print()
end

board:init()
board:check(2,2,"X")
board:check(1,3,"O")
2021-12-29 13:57:51