Skip to content
  • Home
  • Python教學
  • 科技新聞資訊
  • 網站開發教學
Copyright 網絡設計教學 2025
Theme by ThemeinProgress
Proudly powered by WordPress
  • Home
  • Python教學
  • 科技新聞資訊
  • 網站開發教學
網絡設計教學網絡設計教學,網站網頁教學,軟體使用教學
  • You are here :
  • Home
  • python網頁教學
  • Python五子棋小遊戲實例分享 python 程式碼
python網頁教學

Python五子棋小遊戲實例分享 python 程式碼

Jiking 2022-11-01 Article

本文實例為大傢分享瞭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

Shopify 直營店 | Tapswap 程式碼 |如何快速輕鬆地建立 Shopify 直銷商店

Shopify 直銷業務藍圖 | Tapswap 程式碼 | Shopify Dropshipping 藍圖:完整教學

這是 eBay 和 Shopify 上的「商店」Prismatic Evolutions 預購詐騙嗎?特雷科TCG

Shopify 上的直銷業務 | Tapswap 程式碼 |立即開始在 Shopify 上進行代發貨:完整設定教學

Shopify 上的直銷業務 | Tapswap 程式碼 |立即開始在 Shopify 上進行代發貨:完整設定教學

Shopify 直營店 | Tapswap 程式碼 |如何快速輕鬆地建立 Shopify 直銷商店

相关贴文:

  1. Python貪吃蛇小遊戲實例分享 python 程式碼
  2. Python數字/字符串補零操作實例代碼 python 程式碼
  3. Python Pandas pandas.read sql函數實例用法 python 程式碼
  4. python數據可視化plt庫實例詳解 python 程式碼
  5. OpenCV簡單標準數字識別的完整實例 python 程式碼
  6. 教你使用一行Python代碼玩遍童年的小遊戲 python 程式碼
  7. php memcached的實例用法詳解 python 程式碼
  8. 通過Python收集匯聚MySQL 表信息的實例詳解 python 程式碼
Tags: python, 實例, 小遊戲, 程式碼

近期文章

  • 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 教學課程 適合初學者的直銷 電子商務

Copyright 網絡設計教學 2025