欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python pygame實(shí)現(xiàn)五子棋小游戲

 更新時(shí)間:2020年10月26日 08:50:50   作者:披星戴月觀日  
這篇文章主要為大家詳細(xì)介紹了python pygame實(shí)現(xiàn)五子棋小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

今天學(xué)習(xí)了如何使用pygame來制作小游戲,下面是五子棋的代碼,我的理解都寫在注釋里了

import pygame
# 導(dǎo)入pygame模塊
print(pygame.ver)
# 檢查pygame的版本,檢查pygame有沒有導(dǎo)入成功

EMPTY = 0
BLACK = 1
WHITE = 2
# 定義三個(gè)常量函數(shù),用來表示白棋,黑棋,以及 空

black_color = [0, 0, 0]
# 定義黑色(黑棋用,畫棋盤)
white_color = [255, 255, 255]
# 定義白色(白棋用)

# 定義棋盤這個(gè)類
class RenjuBoard(object):

 def __init__(self):
 # self._board = board = [[EMPTY] * 15 for _ in range(15)]
 # 將棋盤每一個(gè)交叉點(diǎn)都看作列表的一個(gè)元素位,一共有15*15共225個(gè)元素
 self._board = [[]] * 15
 self.reset()
 #重置棋盤
 def reset(self):
 for row in range(len(self._board)):
 self._board[row] = [EMPTY] * 15
 #定義棋盤上的下棋函數(shù),row表示行,col表示列,is_black表示判斷當(dāng)前點(diǎn)位該下黑棋,還是白棋
 def move(self, row, col, is_black):
 if self._board[row][col] == EMPTY:
 self._board[row][col] = BLACK if is_black else WHITE
 return True
 return False
 # 給棋盤定義一個(gè)函數(shù)將自己在screen上面畫出來,使用pygame.draw()函數(shù)。并且順便將下了的棋子也畫出來
 def draw(self, screen):
 for h in range(1, 16):
 pygame.draw.line(screen, black_color,
  [40, h * 40], [600, h * 40], 1)
 pygame.draw.line(screen, black_color,
 # 給棋盤加一個(gè)外框,使美觀
 pygame.draw.rect(screen, black_color, [36, 36, 568, 568], 3)
 # 在棋盤上標(biāo)出,天元以及另外4個(gè)特殊點(diǎn)位
 pygame.draw.circle(screen, black_color, [320, 320], 5, 0)
 pygame.draw.circle(screen, black_color, [160, 160], 3, 0)
 pygame.draw.circle(screen, black_color, [160, 480], 3, 0)
 pygame.draw.circle(screen, black_color, [480, 160], 3, 0)
 pygame.draw.circle(screen, black_color, [480, 480], 3, 0)
 #做2次for循環(huán)取得棋盤上所有交叉點(diǎn)的坐標(biāo)
 for row in range(len(self._board)):
 for col in range(len(self._board[row])):
 # 將下在棋盤上的棋子畫出來
 if self._board[row][col] != EMPTY:
  ccolor = black_color \
  if self._board[row][col] == BLACK else white_color
  # 取得這個(gè)交叉點(diǎn)下的棋子的顏色,并將棋子畫出來
  pos = [40 * (col + 1), 40 * (row + 1)]
  # 畫出棋子
  pygame.draw.circle(screen, ccolor, pos, 18, 0)

# 定義函數(shù),傳入當(dāng)前棋盤上的棋子列表,輸出結(jié)果,不管黑棋白棋勝,都是傳回False,未出結(jié)果則為True
def is_win(board):
 for n in range(15):
 # 判斷垂直方向勝利
 flag = 0
 # flag是一個(gè)標(biāo)簽,表示是否有連續(xù)以上五個(gè)相同顏色的棋子
 for b in board._board:
 if b[n] == 1:
 flag += 1
 if flag == 5:
  print('黑棋勝')
  return False
 else:
 # else表示此時(shí)沒有連續(xù)相同的棋子,標(biāo)簽flag重置為0
 flag = 0

 flag = 0
 for b in board._board:
 if b[n] == 2:
 flag += 1
 if flag == 5:
  print('白棋勝')
  return False
 else:
 flag = 0

 # 判斷水平方向勝利
 flag = 0
 for b in board._board[n]:
 if b == 1:
 flag += 1
 if flag == 5:
  print('黑棋勝')
  return False
 else:
 flag = 0

 flag = 0
 for b in board._board[n]:
 if b == 2:
 flag += 1
 if flag == 5:
  print('白棋勝')
  return False
 else:
 flag = 0

 # 判斷正斜方向勝利

 for x in range(4, 25):
 flag = 0
 for i,b in enumerate(board._board):
 if 14 >= x - i >= 0 and b[x - i] == 1:
  flag += 1
  if flag == 5:
  print('黑棋勝')
  return False
 else:
  flag = 0

 for x in range(4, 25):
 flag = 0
 for i,b in enumerate(board._board):
 if 14 >= x - i >= 0 and b[x - i] == 2:
  flag += 1
  if flag == 5:
  print('白棋勝')
  return False
 else:
  flag = 0

 #判斷反斜方向勝利
 for x in range(11, -11, -1):
 flag = 0
 for i,b in enumerate(board._board):
 if 0 <= x + i <= 14 and b[x + i] == 1:
  flag += 1
  if flag == 5:
  print('黑棋勝')
  return False
 else:
  flag = 0

 for x in range(11, -11, -1):
 flag = 0
 for i,b in enumerate(board._board):
 if 0 <= x + i <= 14 and b[x + i] == 2:
  flag += 1
  if flag == 5:
  print('白棋勝')
  return False
 else:
  flag = 0

 return True


def main():
 # 創(chuàng)建棋盤對象
 board = RenjuBoard()
 # 用于判斷是下黑棋還是白棋
 is_black = True
 # pygame初始化函數(shù),固定寫法
 pygame.init()
 pygame.display.set_caption('五子棋') # 改標(biāo)題
 # pygame.display.set_mode()表示建立個(gè)窗口,左上角為坐標(biāo)原點(diǎn),往右為x正向,往下為y軸正向
 screen = pygame.display.set_mode((640,640))
 # 給窗口填充顏色,顏色用三原色數(shù)字列表表示
 screen.fill([125,95,24])
 board.draw(screen) # 給棋盤類發(fā)命令,調(diào)用draw()函數(shù)將棋盤畫出來
 pygame.display.flip() # 刷新窗口顯示

 running = True
 # while 主循環(huán)的標(biāo)簽,以便跳出循環(huán)
 while running:
 # 遍歷建立窗口后發(fā)生的所有事件,固定寫法
 for event in pygame.event.get():
 # 根據(jù)事件的類型,進(jìn)行判斷
 if event.type == pygame.QUIT:
 running = False

 elif event.type == pygame.KEYUP:
 pass
 # pygame.MOUSEBUTTONDOWN表示鼠標(biāo)的鍵被按下
 elif event.type == pygame.MOUSEBUTTONDOWN and \
  event.button == 1:# button表示鼠標(biāo)左鍵
 x, y = event.pos # 拿到鼠標(biāo)當(dāng)前在窗口上的位置坐標(biāo)
 # 將鼠標(biāo)的(x, y)窗口坐標(biāo),轉(zhuǎn)化換為棋盤上的坐標(biāo)
 row = round((y - 40) / 40) 
 col = round((x - 40) / 40)
 if board.move(row, col, is_black):
  is_black = not is_black
  screen.fill([125, 95, 24])
  board.draw(screen)
  pygame.display.flip()
  # 調(diào)用判斷勝負(fù)函數(shù)
  if not is_win(board):
  #break
  running = False
  # 這里我有個(gè)bug沒找到解決辦法,就是判斷出勝負(fù)后,使用break跳出事件遍歷的for循環(huán),但是老是不能跳出來,導(dǎo)致勝負(fù)分出來了還可以繼續(xù)下,這里我采用判斷勝負(fù)后就將running標(biāo)簽賦值為False,跳出主循環(huán),但是這樣棋盤的窗口也沒了。明天再找找bug在哪

 pygame.quit()

if __name__ == '__main__':
 main()

更多關(guān)于python游戲的精彩文章請點(diǎn)擊查看以下專題:

python俄羅斯方塊游戲集合

python經(jīng)典小游戲匯總

python微信跳一跳游戲集合

更多有趣的經(jīng)典小游戲?qū)崿F(xiàn)專題,分享給大家:

C++經(jīng)典小游戲匯總

JavaScript經(jīng)典游戲 玩不停

java經(jīng)典小游戲匯總

javascript經(jīng)典小游戲匯總

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

相關(guān)文章

  • 教你Pycharm安裝使用requests第三方庫的詳細(xì)教程

    教你Pycharm安裝使用requests第三方庫的詳細(xì)教程

    PyCharm安裝第三方庫是十分方便的,無需pip或其他工具,平臺就自帶了這個(gè)功能而且操作十分簡便,今天通過本文帶領(lǐng)大家學(xué)習(xí)Pycharm安裝使用requests第三方庫的詳細(xì)教程,感興趣的朋友一起看看吧
    2021-07-07
  • 基于Python檢測動態(tài)物體顏色過程解析

    基于Python檢測動態(tài)物體顏色過程解析

    這篇文章主要介紹了基于Python檢測動態(tài)物體顏色過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • win7下python3.6安裝配置方法圖文教程

    win7下python3.6安裝配置方法圖文教程

    這篇文章主要為大家詳細(xì)介紹了win7下python3.6安裝配置方法圖文教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-07-07
  • Python 靜態(tài)方法和類方法實(shí)例分析

    Python 靜態(tài)方法和類方法實(shí)例分析

    這篇文章主要介紹了Python 靜態(tài)方法和類方法,結(jié)合實(shí)例形式分析了Python類、實(shí)例、靜態(tài)方法等相關(guān)概念、原理與使用技巧,需要的朋友可以參考下
    2019-11-11
  • opencv+python識別七段數(shù)碼顯示器的數(shù)字(數(shù)字識別)

    opencv+python識別七段數(shù)碼顯示器的數(shù)字(數(shù)字識別)

    本文主要介紹了opencv+python識別七段數(shù)碼顯示器的數(shù)字(數(shù)字識別),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • Python獲取Cookie的方法總結(jié)

    Python獲取Cookie的方法總結(jié)

    在Web開發(fā)中,Cookie是一種常用的技術(shù),用于在Web服務(wù)器和瀏覽器之間存儲和傳輸數(shù)據(jù),本文將詳細(xì)介紹Python中獲取Cookie的方法,包括HTTP請求、Web框架和Cookie管理庫的用法,同時(shí)提供示例代碼來演示這些方法的實(shí)際應(yīng)用,需要的朋友可以參考下
    2023-11-11
  • Pandas讀取Excel文件的六種方法

    Pandas讀取Excel文件的六種方法

    Pandas 是一個(gè) Python 數(shù)據(jù)分析庫,可以用來讀取 Excel 文件,Pandas提供了多種讀取Excel文件的方法,本文將給大家分享一些官方推薦的6種方法,代碼示例講解得非常詳細(xì),需要的朋友可以參考下
    2023-11-11
  • 15行Python代碼實(shí)現(xiàn)網(wǎng)易云熱門歌單實(shí)例教程

    15行Python代碼實(shí)現(xiàn)網(wǎng)易云熱門歌單實(shí)例教程

    這篇文章主要給大家介紹了關(guān)于利用15行Python代碼實(shí)現(xiàn)網(wǎng)易云熱門歌單的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者使用python具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • Pycharm配置導(dǎo)入torch報(bào)錯(cuò)Traceback的問題及解決

    Pycharm配置導(dǎo)入torch報(bào)錯(cuò)Traceback的問題及解決

    這篇文章主要介紹了Pycharm配置導(dǎo)入torch報(bào)錯(cuò)Traceback的問題及解決方案,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • python的繼承詳解

    python的繼承詳解

    這篇文章主要介紹了Python中繼承的的相關(guān)資料,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2021-10-10

最新評論