其他分享
首页 > 其他分享> > 五子棋Lua实现

五子棋Lua实现

作者:互联网

Array = {row=0,col=0}
Chess={ipos=0,jpos=0,chessturn=0}
local array={}
local isWin=false
local isWhite=false
local isBlack=true
print("五子棋游戏开始:请输入你需要的棋盘的行数")
local maxRow =io.read()
print("你设定的行数为",maxRow)
print("五子棋游戏开始:请输入你需要的棋盘的列数")
local maxCol =io.read()
print("你设定的列数为",maxCol)
print("成功生成并打印五子棋棋盘")
--棋牌类基础方法new
function Array:new (o,row,col)
  o = o or {}
  setmetatable(o, self)
  self.__index = self
  row=row or 0
  col=col or 0
  self.row=row
  self.col=col
  return o
end
--棋子类基础方法new
function Chess:new (o,ipos,jpos,chessturn)
  o = o or {}
  setmetatable(o, self)
  self.__index = self
  ipos=ipos or 0
  jpos=jpos or 0
  chessturn=chessturn or 0
  self.ipos=ipos
  self.jpos=jpos
  self.chessturn=chessturn
  return o
end
--棋盘基础类方法 初始化棋盘
function Array:initArray()
    --初始化棋盘
    for row=1,self.row do
    array[row]={}
        for col=1,self.col do
            array[row][col]=0
            print("i:"..row..",J:"..col.."   arr:"..array[row][col])
        end
    end
end
--棋子类基础方法 下棋
function Chess:changeArray(functionWin)
    array[self.ipos][self.jpos]=self.chessturn
    for row=1,Array.row do
        for col=1,Array.col do
            print("i:"..row..",J:"..col.."   arr:"..array[row][col])
        end
    end
    functionWin(self.ipos,self.jpos,self.chessturn)
end

function initChess()
        print("轮到黑子,请输入要走的行数")
        newIpos =tonumber(io.read())
        print("轮到黑子,请输入要走的列数")
        newJpos =tonumber(io.read())
    if(isWhite) then
        newchessturn=2
        isWhite=false
        isBlack=true
    end
    if(isBlack) then
        newchessturn=1
        isWhite=true
        isBlack=false
    end
        mychess= Chess:new(nil,newIpos,newJpos,newchessturn)
        mychess:changeArra1y(Win)
end

--判断胜利逻辑方法 ipos是这次落子的X坐标 jpos是这次落子的y坐标 chessturn是这次落子的颜色 1是黑色 2是白色 返回值0是无人获胜 返回值1是黑色胜利 2是白色胜利
Win=function (ipos,jpos,chessturn)
    idir={0,0,1,-1,1,-1,1,-1}
    jdir={1,-1,0,0,1,-1,-1,1}
    for i=1,8 do
    count=0
    x=ipos
    y=jpos
        while(x>0 and y>0 and array[x][y]==chessturn) do
        count=count+1
            if(count==5) then
                isWin=true
                return chessturn
            end
        x=x+idir[i]
        y=y+jdir[i]
        end
    i=i+1
    if(i>8) then
        break
    end
    x=ipos+idir[i]
    y=jpos+jdir[i]
        while(x>0 and y>0 and array[x][y]==chessturn) do
            count=count+1
            if(count==5) then
            isWin=true
            if(chessturn==1) then
                isWhite=false
                print("黑色胜利")
            elseif (chessturn==2) then
                isBlack=false
                print("白色胜利")
            end
                return chessturn
        end
    x=x+idir[i]
    y=y+jdir[i]
        if(x<1 or y<1) then
            break
        end
    end
end
    print("无人胜利")
    return 0
end
--主循环方法
function main()
    while(isWin==false)    do
        if(isWhite)    then
            initChess()
        end
        if(isBlack) then
            initChess()
        end
    end
end

--创建对象
myarray = Array:new(nil,maxRow,maxCol)
--调用初始和打印方法
myarray:initArray()
--没得出结果之前循环落子
main()

应届生刚进公司分的小测试。。。。写的有点拉,随便看看吧

标签:end,实现,chessturn,self,五子棋,ipos,Lua,col,row
来源: https://www.cnblogs.com/YinXin1/p/15378566.html