欧美三区_成人在线免费观看视频_欧美极品少妇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久久精品费精品国产一区二区 | 国产一区 | 国产精品美女久久久久久久网站 | 日韩高清免费在线观看 | 青娱乐久草 | 中文字幕在线观看第一页 | 日本黄色网址视频 | 高潮岳喷我一脸 | 男人的天堂亚洲 | 91精品久久 | 日本黄色不卡视频 | 日韩一区精品视频 | 2一3sex性hd | 夜夜操天天射 | 精品久久久久区二区8888 | 成人在线小视频 | 成人欧美日韩视频一区 | 亚洲高清一区二区三区 | 日本人与黑人xxxx | 国产精品单位女同事在线 | 黄色短视频在线免费观看 | 久久成人18免费网站 | 欧美成年性h版影视中文字幕 | 美女久草 | 男人阁久久 | 激情六月丁香婷婷 | 午夜精品一区二区三区在线观看 | 综合色区| 操久久| 色综合天天综合高清网国产 | 亚洲久久久久 | 三级特黄视频 | 久久久久久国产精品免费免费狐狸 | 天天干影视 | 一区二区三区四区高清视频 | 视频成人永久免费视频 | aⅴ在线免费观看 |