濮阳杆衣贸易有限公司

主頁(yè) > 知識(shí)庫(kù) > Python五子棋小游戲?qū)嵗窒?/div>

Python五子棋小游戲?qū)嵗窒?/h1>

熱門標(biāo)簽:獲客智能電銷機(jī)器人 不錯(cuò)的400電話辦理 湛江電銷防封卡 鄭州智能外呼系統(tǒng)運(yùn)營(yíng)商 哈爾濱外呼系統(tǒng)代理商 南昌辦理400電話怎么安裝 徐州天音防封電銷卡 電話機(jī)器人適用業(yè)務(wù) 佛山防封外呼系統(tǒng)收費(fèi)

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

使用的庫(kù)

pygame、pyautogui

流程簡(jiǎn)述

1.畫(huà)棋盤

設(shè)置網(wǎng)格間隔40px ,留白 80 px ,與網(wǎng)格橫豎線數(shù)量 ,初定19 × 19 。

2.鼠標(biāo)點(diǎn)擊

鼠標(biāo)點(diǎn)擊取得坐坐標(biāo)(x0 , y0),再獲得最近的網(wǎng)格上的點(diǎn)(x1 , y1),再將每次動(dòng)作獲得的(x1 , y1 )放入列表 chess_location 中。

再通過(guò):

chess_location_b = chess_location[0::2]
chess_location_w = chess_location[1::2]

分別獲得黑棋和白棋所走過(guò)的坐標(biāo)。

3.判斷勝負(fù)

這一塊網(wǎng)上有很多不同的方法,我為了讓大家讀懂盡量寫的詳細(xì)了。
首先 ,我們要知道連五有四個(gè)方向:豎直 ,水平 ,右上左下 , 右下左上 。
每次將新落下的子分別進(jìn)行4個(gè)方向的判斷,判斷是否出現(xiàn)連五及以上。
我使用的方法是:

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)中的豎直方向從上往下檢查如果出現(xiàn)黑(白)棋 ,則將出現(xiàn)棋子的坐標(biāo)加入列表 score 中 , 如果出現(xiàn)異色棋子或者沒(méi)有棋子,則清空 score 中的元素 ,如果列表 score 中的元素?cái)?shù)量大于等于5個(gè) ,則分勝負(fù) 。
如果棋子填滿棋盤但是仍沒(méi)有分出勝負(fù) ,則平局 。

代碼及結(jié)果

代碼

import pygame,pyautogui
from pygame.locals import *
# 初始參數(shù)
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 = [] , [] , []
# 畫(huà)棋盤
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)
# 分勝負(fù)
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
# 主循環(huán)
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)
        # 判斷勝負(fù)
        if chess_location_b and result(chess_location_b) == 1:
            pyautogui.alert(text='黑棋勝',title='游戲結(jié)束')
            exit()
        elif chess_location_w and result(chess_location_w) == 1:
            pyautogui.alert(text='白棋勝',title='游戲結(jié)束')
            exit()
        elif chess_location_b and chess_location_w:
            if result(chess_location_b) or result(chess_location_w) == 2:
                pyautogui.alert(text='平局', title='游戲結(jié)束')
                exit()
        pygame.display.update()


if __name__ == '__main__':
    pygame.init()
    running()

輸出

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

您可能感興趣的文章:
  • python游戲?qū)崙?zhàn)項(xiàng)目之智能五子棋
  • python編寫五子棋游戲
  • python實(shí)現(xiàn)網(wǎng)絡(luò)五子棋
  • python實(shí)現(xiàn)雙人五子棋(終端版)
  • Python tkinter制作單機(jī)五子棋游戲
  • python實(shí)現(xiàn)簡(jiǎn)單的五子棋游戲
  • python游戲?qū)崙?zhàn)項(xiàng)目之智能五子棋簡(jiǎn)易版

標(biāo)簽:呂梁 廣西 蘭州 安康 懷化 紹興 吉安 蕪湖

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Python五子棋小游戲?qū)嵗窒怼罚疚年P(guān)鍵詞  Python,五子棋,小游戲,實(shí)例,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Python五子棋小游戲?qū)嵗窒怼废嚓P(guān)的同類信息!
  • 本頁(yè)收集關(guān)于Python五子棋小游戲?qū)嵗窒淼南嚓P(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    灵寿县| 新河县| 环江| 固阳县| 昌乐县| 淮南市| 乐东| 临沧市| 巴东县| 海盐县| 阿拉善右旗| 沙田区| 诸城市| 来宾市| 汾阳市| 湘乡市| 白水县| 辽源市| 蓝山县| 望谟县| 长武县| 若羌县| 岳普湖县| 榆社县| 乌拉特前旗| 台州市| 高淳县| 杨浦区| 外汇| 礼泉县| 平邑县| 庆云县| 辉南县| 丽江市| 通化市| 什邡市| 保定市| 浠水县| 宁陵县| 米易县| 腾冲县|