欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

python實現五子棋小程序

系統 1897 0

本文實例為大家分享了python實現五子棋小程序的具體代碼,供大家參考,具體內容如下

一、結合書上例子,分三段編寫:

wuziqi.py

            
#coding:utf-8
from win_notwin import *
from show_qipan import *
 
maxx=10 #10行10列
maxy=10
qipan=[[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=True
while 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("\n")
          

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-8
import os
import pdb
import pickle
 
class 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
            
              =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()
            
          

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 亚洲精品一区二区三区99 | 丁香婷婷在线观看 | 成人福利在线视频 | 亚洲精品福利 | 日本欧美中文字幕 | 深夜日韩| 天天久 | 天天久 | 欧美视频在线观看 | 波多野结衣在线看片 | 一个色综合亚洲色综合 | 久久综合久久综合久久综合 | 欧美日韩一区二区三区免费视频 | 在线视频不卡国产在线视频不卡 | 久久久久在线观看 | www.嫩草影院.com | 国产在线综合网 | 免费欧美黄色网址 | 小宝与康熙粤语 | 午夜亚洲| www.欧美.com | 欧美精品一区二区在线观看 | 久久久久久国产精品久久 | 精品国产视频 | 黄视频在线观看网站 | 日本看片一区二区三区高清 | 久久久成人精品视频 | 亚洲午夜日韩高清一区 | 国产日韩精品一区 | 欧美一级特黄毛片免费 | 久久天天躁夜夜躁狠狠 | 性夜影院爽黄e爽在线观看 苏晓晖个人简介军衔 | 日本吻胸捏胸激烈床戏视频 | 天天干天天在线 | 亚洲午夜久久久精品影院 | 亚洲午夜综合网 | 激情丁香婷婷 | 一级毛片在线免费观看 | 色婷婷一区二区三区四区 | 欧美无乱码久久久免费午夜一区 | jzzjlzz亚洲乱熟在线播放 |