本文實例為大傢分享瞭Python實現五子棋小遊戲的具體程式碼,供大傢參考,具體內容如下
使用的庫
pygame、pyautogui
流程簡述
1.畫棋盤
設置網格間隔40px ,留白 80 px ,與網格橫豎線數量 ,初定19 × 19 。
2.鼠標點擊
鼠標點擊取得坐坐標(x0 , y0),再獲得最近的網格上的點(x1 , y1),再將每次動作獲得的(x1 , y1 )放入列表 chess_location 中。
再通過:
chess_location_b = chess_location[0::2] chess_location_w = chess_location[1::2]
分別獲得黑棋和白棋所走過的坐標。
3.判斷勝負
這一塊網上有很多不同的方法,我為瞭讓大傢讀懂盡量寫的詳細瞭。
首先 ,我們要知道連五有四個方向:豎直 ,水平 ,右上左下 , 右下左上 。
每次將新落下的子分別進行4個方向的判斷,判斷是否出現連五及以上。
我使用的方法是:
def result(x): # x 為 chess_location_b 或者 chess_location_w # 豎直 score = [] for i in range(cell_num): #cell_num = 19 if [x[-1][0], i ] in x: score.append([x[-1][0], i ]) if score.__len__() >= 5: return 1 else: score =[]
大概意思就是最新落下的(x1 , y1)中的豎直方向從上往下檢查如果出現黑(白)棋 ,則將出現棋子的坐標加入列表 score 中 , 如果出現異色棋子或者沒有棋子,則清空 score 中的元素 ,如果列表 score 中的元素數量大於等於5個 ,則分勝負 。
如果棋子填滿棋盤但是仍沒有分出勝負 ,則平局 。
程式碼及結果
程式碼
import pygame,pyautogui from pygame.locals import * # 初始參數 cell_size = 40 space = 80 cell_num = 19 grid_size = (cell_num - 1)*cell_size + space*2 screen = pygame.display.set_mode([grid_size,grid_size],0,32) chess_location , chess_location_w , chess_location_b = [] , [] , [] # 畫棋盤 def grid(): screen.fill([208,173,108]) font = pygame.font.SysFont("arial", 20) i = 0 for x in range(0, cell_size * cell_num , cell_size): i += 1 text_surface = font.render("{}".format(i), True, (0, 0, 0)) screen.blit(text_surface,[(space - font.get_height()) - 10,(space - font.get_height()/2) + cell_size*(i -1 )]) pygame.draw.line(screen, (0, 0, 0), (x + space, 0 + space), (x + space, cell_size * (cell_num - 1) + space), 2) i = 0 for y in range(0, cell_size * cell_num, cell_size): i += 1 text_surface = font.render("{}".format(chr(64 + i)), True, (0, 0, 0)) screen.blit(text_surface,[(space + cell_size * (i - 1)) -5, (space - font.get_height() / 2) - 20]) pygame.draw.line(screen, (0,0,0), (0 + space, y + space),(cell_size * (cell_num - 1) + space, y + space), 2) # 分勝負 def result(x): # 豎直 score = [] for i in range(cell_num): if [x[-1][0], i ] in x: score.append([x[-1][0], i ]) if score.__len__() >= 5: return 1 else: score =[] # 水平 score = [] for i in range(cell_num): if [i , x[-1][1]] in x: score.append([i , x[-1][1]]) if score.__len__() >= 5: return 1 else: score = [] # 右上左下 score = [] for i in range(cell_num): if [i,x[-1][0] + x[-1][1] - i] in x: score.append([i,x[-1][0] + x[-1][1] - i]) if score.__len__() >= 5: return 1 else: score = [] # 右下左上 score = [] for i in range(cell_num): if [x[-1][0] - x[-1][1] + i,i] in x: score.append([x[-1][0] - x[-1][1] + i,i]) if score.__len__() >= 5: return 1 else: score = [] # 平局 if chess_location.__len__() == cell_num * cell_num : return 2 # 主循環 def running(): global chess_location_w , chess_location_b while True: grid() for event in pygame.event.get(): if event.type == QUIT: exit() # 落子 if event.type == MOUSEBUTTONDOWN: x0 , y0 = pygame.mouse.get_pos() if x0 > space and y0 > space and x0 < space + cell_size*(cell_num - 1) and y0 < space + cell_size * (cell_num - 1): x1 = round((x0 - space) / cell_size) y1 = round((y0 - space) / cell_size) if [x1 , y1] not in chess_location: chess_location.append([x1 , y1]) # 悔棋 elif event.type == KEYDOWN: if event.key == K_LEFT: chess_location.pop(-1) chess_location_b = chess_location[0::2] chess_location_w = chess_location[1::2] # 黑棋 for i in chess_location_b: pygame.draw.circle(screen, [ 0 , 0 , 0 ], [i[0]* cell_size + space, i[1]* cell_size + space], 15, 0) # 白棋 for i in chess_location_w: pygame.draw.circle(screen, [255,255,255], [i[0]* cell_size + space, i[1]* cell_size + space], 15, 0) # 判斷勝負 if chess_location_b and result(chess_location_b) == 1: pyautogui.alert(text='黑棋勝',title='遊戲結束') exit() elif chess_location_w and result(chess_location_w) == 1: pyautogui.alert(text='白棋勝',title='遊戲結束') exit() elif chess_location_b and chess_location_w: if result(chess_location_b) or result(chess_location_w) == 2: pyautogui.alert(text='平局', title='遊戲結束') exit() pygame.display.update() if __name__ == '__main__': pygame.init() running()
輸出
以上就是本文的全部內容,希望對大傢的學習有所幫助,也希望大傢多多支援。
You may also like
相关贴文:
近期文章
- 8個最佳WooCommerce SEO插件用於更好的排名(2025)
- 為什麼Shopify擊敗電子商務的WordPress
- 我希望在使用WooCommerce之前我知道的5件事
- 停止在WooCommerce插件上浪費$ 1000!嘗試變體怪物$ 59解決方案
- 如何使用免費的WooCommerce禮品卡產品(使用免費插件)來提高銷售
- WooCommerce的動態定價和折扣規則,用於銷售技術
- 免費的WooCommerce產品搜索插件 – 電子商務網站的設置Advance WooSearch | AJAX搜索
- Shopify vs WooCommerce:在線商店的最佳電子商務平台🔍
- 啟動專業,功能豐富的超級智能電子商務網站| Merto -WooCommerce WordPress主題
標籤雲
Dropshipping
ecommerce
JavaScript
Joomla
OSCHINA博客
python
REBELLION
Shopify
Shopify 商店設置
Shopify 直銷
Woocommerce
WordPress
代發貨
刀塔2
和
商店
商業
喬姆拉
在
如何創建 Shopify 商店
如何在
如何建立 Shopify 商店
如何開始代出貨
年
店舖教學
店鋪化
店鋪培訓
教學
獲獎產品
直銷 Shopify
直銷教程
科技資訊
程式碼
網路業務
網路賺錢
臉書廣告
與
行銷
詳解
購物
跨平台
運輸船
適合初學者的 Shopify 教學課程
適合初學者的直銷
電子商務