Lua 在井字游戏中保存动作的算法
Lua Algorithm for saving moves in tic-tac-toe
所以,我正在 lua 编程,我正在尝试制作 AI。每次我 运行 代码,(我现在只有 AI 的移动代码)它给我在棋盘上绘制的随机点,但它不保存以前的移动。这是一个完全干净的板子,其中一个 space 被占用。有人可以帮我吗?如果是这样,将不胜感激!
代码:
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('The Opponent Chose',AImove)
--[[
removal of numbers from possibility to only provide legal moves0
]]--
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()
您需要存储游戏状态的东西。我会给你一个非常简单的快速和肮脏的例子。 table board
存储 9 个字段和一些允许我们操作和显示面板的函数。
这应该让您大致了解如何开始。
-- our board
local board = {
}
-- check a field on our board
function board:check(row, col, str)
board[row][col] = str
self:print()
end
-- print the board to the screen
function board:print()
print("---------")
for i,v in ipairs(self) do
print("| " .. table.concat(v, " ") .. " |")
end
print("---------")
end
-- init/clear the board
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")
所以,我正在 lua 编程,我正在尝试制作 AI。每次我 运行 代码,(我现在只有 AI 的移动代码)它给我在棋盘上绘制的随机点,但它不保存以前的移动。这是一个完全干净的板子,其中一个 space 被占用。有人可以帮我吗?如果是这样,将不胜感激! 代码:
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('The Opponent Chose',AImove)
--[[
removal of numbers from possibility to only provide legal moves0
]]--
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()
您需要存储游戏状态的东西。我会给你一个非常简单的快速和肮脏的例子。 table board
存储 9 个字段和一些允许我们操作和显示面板的函数。
这应该让您大致了解如何开始。
-- our board
local board = {
}
-- check a field on our board
function board:check(row, col, str)
board[row][col] = str
self:print()
end
-- print the board to the screen
function board:print()
print("---------")
for i,v in ipairs(self) do
print("| " .. table.concat(v, " ") .. " |")
end
print("---------")
end
-- init/clear the board
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")