微信小程序> python练手——五子棋小程序

python练手——五子棋小程序

浏览量:2802 时间: 来源:浅度学习

一、结合书上例子,分三段编写:

wuziqi.py

#coding:utf-8from win_notwin import *from show_qipan import *maxx=10 #10行10列maxy=10qipan=[[0,0,0,0,1,0,0,2,0,0],[0,1,2,1,1,0,2,0,0,0],[0,0,0,0,1,1,0,2,0,0],[0,0,0,0,2,0,0,1,0,0],       [0,0,0,1,1,1,2,0,0,0],[0,0,0,2,0,0,0,2,0,0],[0,0,1,2,0,2,2,0,1,0],[0,0,0,2,0,0,0,1,0,0],[0,0,0,0,0,0,1,1,0,0],       [0,0,0,0,0,0,0,0,0,0]]sqipan(qipan)  #显示初始化的棋盘who=Truewhile True:    t=input("请输入棋子的位置(x,y),现在由"+("O" if who else "X")+"方下子:").split(",")    #输入坐标    if len(t)==2:        x=int(t[0])        y=int(t[1])        if qipan[x][y]==0:            qipan[x][y]=1 if who else 2            who=not who            sqipan(qipan) #显示当前棋盘            win_not(qipan,x,y) #判断有没有人赢        else:            print("当前位置已有棋子,请重新下子")    else :        print("输入位置有误,请输入要下的位置,如1,1")

show_qipan.py

def sqipan(qipan):    maxx=10    maxy=10    print("   O  一  二  三  四   五  六  七  八  九")    for i in range(maxx):        print(i, " ", end="")        for j in range(maxy):            if qipan[i][j] == 0:                print("+", "  ", end="")  # 无棋子            elif qipan[i][j] == 1:                print("O", "  ", end="")  # 白色            elif qipan[i][j] == 2:                print("X", "  ", end="")  # 黑色        print("")

win_notwin.py

def win_not(qipan,x,y):    maxx=10    maxy=10    flag=qipan[x][y]    xPoint = x    yPoint = y    # 横向    count = 0    # x=xPoint    # y=yPoint    while (x >= 0 and flag == qipan[x][y]):  # 向左统计连续棋子数        count += 1        x -= 1    x = xPoint    y = yPoint    while (x >= 0 and flag == qipan[x][y]):        count += 1        x += 1    if (count > 5): print("纵向五子棋相连,胜利!")    count = 0    x = xPoint    y = yPoint    while (y >= 0 and flag == qipan[x][y]):        count += 1        y -= 1    y = yPoint    while (y <= maxy and flag == qipan[x][y]):        count += 1        y += 1    if (count > 5): print("横向五子相连,胜利")    # 斜向    # 左下    count = 0    x = xPoint    y = yPoint    while (x >= 0 and y < maxy and flag == qipan[x][y]):        count += 1        x -= 1        y += 1    x = xPoint    y = yPoint    # 右上    while (x < maxx and y >= 0 and flag == qipan[x][y]):        count += 1        x += 1        y -= 1    if (count > 5): print("斜向五子棋相连,胜利")    # 斜上    count = 0    x = xPoint    y = yPoint    # 左上    while (x >= 0 and y >= 0 and flag == qipan[x][y]):        count += 1        x -= 1        y -= 1    x = xPoint    y = yPoint    while (x < maxx and y < maxy and flag == qipan[x][y]):        count += 1        x += 1        y += 1    if (count > 5):        print("斜向五子相连,胜利")

二、下面的代码没有验证

#coding:utf-8import osimport pdbimport pickleclass Player(object):    number=0    def __init__(self,name=''):        """          玩家类构造方法          """        if not name:            Player.number+=1            name='Player%d'% Player.number        self.name=name    def play(self):        """         玩家输入下一步落子位置         """        t=input('Please input(x,y),now is'+self.name+':')              return t#棋盘类class Board(object):    class Status(object):        """         状态量,提供转态常量         """        NONE=0        WHITE=1        BLACK=2    def __init__(self,maxx=10,maxy=10):        """         棋盘类构造方法  确定尺寸,以及创建棋盘成员对象         """        self.maxx,self.maxy=maxx,maxy        self.qipan=[[0]*maxy for i in range(maxx)]    def hasChaessman(self,xPoint,yPoint):        """         判断是否有棋子存在         """        return self.qipan[xPoint][yPoint]!=Board.Status.NONE    def downPawn(self,xPoint,yPoint,who):        """         玩家在某个位置落子         """        if self.hasChaessman(xPoint,yPoint):            return False        else:            self.qipan[xPoint][yPoint]=Board.Status.WHITE if who else Board.Status.BLACK            return True    def inRange(self,xPoint,yPoint):        """        玩家在某个位置落子        """        return xPoint<self.maxx and                yPoint<self.maxy and                xPoint>=0 and                yPoint>=0    def checkFiveInRow(self,xPoint,yPoint,xDir,yDir):        """        判断以(xpoint,ypoiny)点(xDir,yDir)方向上是否五子连珠        """        count = 0        t=self.qipan[xPoint][yPoint]        x,y=xPoint,yPoint        while (self.inRange(x,y) and t==self.qipan[x][y]):            count += 1            x+=yDir            y+=yDir        x, y = xPoint, yPoint        while (self.inRange(x, y) and t == self.qipan[x][y]):            count += 1            x -= yDir            y -= yDir        return count>5    def isWin(self,xPoint,yPoint):        """        以(xpoint,ypoiny)点为中心在四个方向分别判断五子连珠        """        pdb.set_trace()#####################        return self.checkFiveInRow(xPoint,yPoint,1,0) or                 self.checkFiveInRow(xPoint, yPoint, 0,1) or                 self.checkFiveInRow(xPoint, yPoint, 1,1) or                 self.checkFiveInRow(xPoint, yPoint, 1,-1)    def printQp(self):        """        打印棋盘        """        qiType=["十","O","X"]        print('   O  一  二  三  四   五  六  七  八  九')        for i in range(self.maxx):            print(i," ",end='')            print('  '.join(qiType[x] for x in self.qipan[i]))#文件存读档类class FileStatus(object):    def save(self):        """        存档方法        """        fpath=input("请输入保持文件的路径:")        file=open(fpath,'w')        pickle.dump(self,file)        file.close()    def load(self):        """        读档方法        """        pass#游戏类class GoBang(FileStatus):    def __init__(self,qipan,white,black):        """        游戏类构造方法        创建成员变量        """        self.qipan=qipan        self.white=white        self.black=black        self.who=True    def start(self):        """        游戏主流方法        """        os.system('cls')        self.printQp()        while True:            t=(self.white if self.who else self.black).play()            if t=='S':                self.save()                continue            if t=='L':                self.load()                continue            t.split(',')            if len(t)==2:                x,y=int(t[0]).int(t[1])                if self.qipan.downPawn(x,y,self.who):                    os.system('cls')                    self.printQp()                    if self.qipan.isWin(x,y):#判断游戏是否结束                        print(self.white.name if                              self.who else self.black.name)+'Win'                        break                    self.who=not self.who #切换游戏角色        os.system('pause')    def load(self):        """        重写读档方法        """        fpath=input("请输入读取文件的路径")        file=open(fpath,'r')        status=pickle.load(file)        file.close()        #读档 拷贝        self.qipan=status.qipan        self.white=status.white        self.black=status.black        self.who=status.who        os.system('cls')        self.printQp()    def printQp(self):        """       打印        """        self.qipan.printQp()        print("按L读取,S保存")if __name__=='__main__':    t=GoBang(Board(),Player(),Player())    t.start()

 

版权声明

即速应用倡导尊重与保护知识产权。如发现本站文章存在版权问题,烦请提供版权疑问、身份证明、版权证明、联系方式等发邮件至197452366@qq.com ,我们将及时处理。本站文章仅作分享交流用途,作者观点不等同于即速应用观点。用户与作者的任何交易与本站无关,请知悉。

产品经理

手机 : 13312967497

擅长 : 小程序流量变现

扫码领取礼包

最新资讯

热门模板

  • 头条
  • 搜狐
  • 微博
  • 百家
  • 一点资讯
  • 知乎