黄色网页视频 I 影音先锋日日狠狠久久 I 秋霞午夜毛片 I 秋霞一二三区 I 国产成人片无码视频 I 国产 精品 自在自线 I av免费观看网站 I 日本精品久久久久中文字幕5 I 91看视频 I 看全色黄大色黄女片18 I 精品不卡一区 I 亚洲最新精品 I 欧美 激情 在线 I 人妻少妇精品久久 I 国产99视频精品免费专区 I 欧美影院 I 欧美精品在欧美一区二区少妇 I av大片网站 I 国产精品黄色片 I 888久久 I 狠狠干最新 I 看看黄色一级片 I 黄色精品久久 I 三级av在线 I 69色综合 I 国产日韩欧美91 I 亚洲精品偷拍 I 激情小说亚洲图片 I 久久国产视频精品 I 国产综合精品一区二区三区 I 色婷婷国产 I 最新成人av在线 I 国产私拍精品 I 日韩成人影音 I 日日夜夜天天综合

python實(shí)現(xiàn)五子棋小程序

系統(tǒng) 2177 0

本文實(shí)例為大家分享了python實(shí)現(xiàn)五子棋小程序的具體代碼,供大家參考,具體內(nèi)容如下

一、結(jié)合書(shū)上例子,分三段編寫(xiě):

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) #顯示初始化的棋盤(pán)
 
 
who=True
while True:
  t=input("請(qǐng)輸入棋子的位置(x,y),現(xiàn)在由"+("O" if who else "X")+"方下子:").split(",")
  #輸入坐標(biāo)
  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) #顯示當(dāng)前棋盤(pán)
 
      win_not(qipan,x,y) #判斷有沒(méi)有人贏
    else:
      print("當(dāng)前位置已有棋子,請(qǐng)重新下子")
  else :
    print("輸入位置有誤,請(qǐng)輸入要下的位置,如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="") # 無(wú)棋子
      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]): # 向左統(tǒng)計(jì)連續(xù)棋子數(shù)
    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("斜向五子相連,勝利")
          

二、下面的代碼沒(méi)有驗(yàn)證

            
#coding:utf-8
import os
import pdb
import pickle
 
class Player(object):
  number=0
  def __init__(self,name=''):
    """
     玩家類構(gòu)造方法
     """
    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
 
 
#棋盤(pán)類
class Board(object):
  class Status(object):
    """
     狀態(tài)量,提供轉(zhuǎn)態(tài)常量
     """
    NONE=0
    WHITE=1
    BLACK=2
 
  def __init__(self,maxx=10,maxy=10):
    """
     棋盤(pán)類構(gòu)造方法 確定尺寸,以及創(chuàng)建棋盤(pán)成員對(duì)象
     """
    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):
    """
     玩家在某個(gè)位置落子
     """
    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):
    """
    玩家在某個(gè)位置落子
    """
    return xPoint
            
              =0 and\
        yPoint>=0
 
  def checkFiveInRow(self,xPoint,yPoint,xDir,yDir):
    """
    判斷以(xpoint,ypoiny)點(diǎn)(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)點(diǎn)為中心在四個(gè)方向分別判斷五子連珠
    """
    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):
    """
    打印棋盤(pán)
    """
    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("請(qǐng)輸入保持文件的路徑:")
    file=open(fpath,'w')
    pickle.dump(self,file)
    file.close()
 
  def load(self):
    """
    讀檔方法
    """
    pass
 
 
#游戲類
class GoBang(FileStatus):
 
  def __init__(self,qipan,white,black):
    """
    游戲類構(gòu)造方法
    創(chuàng)建成員變量
    """
    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):#判斷游戲是否結(jié)束
            print(self.white.name if\
               self.who else self.black.name)+'Win'
            break
          self.who=not self.who #切換游戲角色
    os.system('pause')
 
  def load(self):
    """
    重寫(xiě)讀檔方法
    """
    fpath=input("請(qǐng)輸入讀取文件的路徑")
    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()
            
          

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

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

【本文對(duì)您有幫助就好】

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論