最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python編寫五子棋游戲

 更新時(shí)間:2021年05月25日 09:32:42   作者:MiManchi729  
這篇文章主要為大家詳細(xì)介紹了python編寫五子棋游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

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

游戲代碼及部分注釋

import pygame        #導(dǎo)入pygame游戲模塊
import time           #調(diào)用time庫(kù)
import sys
from pygame.locals import *

initChessList = []          #保存的是棋盤坐標(biāo)
initRole = 1                #1:代表白棋; 2:代表黑棋
resultFlag = 0              #結(jié)果標(biāo)志

class StornPoint():
    def __init__(self,x,y,value):
        '''
        :param x: 代表x軸坐標(biāo)
        :param y: 代表y軸坐標(biāo)
        :param value: 當(dāng)前坐標(biāo)點(diǎn)的棋子:0:沒(méi)有棋子 1:白子 2:黑子
        '''
        self.x = x            #初始化成員變量
        self.y = y
        self.value = value

def initChessSquare(x,y):     #初始化棋盤
    for i in range(15):       # 每一行的交叉點(diǎn)坐標(biāo)
        rowlist = []
        for j in range(15):   # 每一列的交叉點(diǎn)坐標(biāo)
            pointX = x+ j*40
            pointY = y+ i*40
            sp = StornPoint(pointX,pointY,0)
            rowlist.append(sp)
        initChessList.append(rowlist)

def eventHander():            #監(jiān)聽各種事件
    for event in pygame.event.get():
        global initRole
        if event.type == QUIT:#事件類型為退出時(shí)
            pygame.quit()
            sys.exit()
        if event.type == MOUSEBUTTONDOWN: #當(dāng)點(diǎn)擊鼠標(biāo)時(shí)
            x,y = pygame.mouse.get_pos()  #獲取點(diǎn)擊鼠標(biāo)的位置坐標(biāo)
            i=0
            j=0
            for temp in initChessList:
                for point in temp:
                    if x>=point.x-10 and x<=point.x+10 and y>=point.y-10 and y<=point.y+10:
                        if point.value == 0 and initRole == 1:   #當(dāng)棋盤位置為空;棋子類型為白棋
                            point.value = 1             #鼠標(biāo)點(diǎn)擊時(shí),棋子為白棋
                            judgeResult(i,j,1)
                            initRole = 2                #切換角色
                        elif point.value == 0 and initRole ==2:  #當(dāng)棋盤位置為空;棋子類型為黑棋
                            point.value = 2             #鼠標(biāo)點(diǎn)擊時(shí),棋子為黑棋
                            judgeResult(i,j,2)
                            initRole = 1                #切換角色
                        break
                    j+=1
                i+=1
                j=0

def judgeResult(i,j,value):   #橫向判斷
    global resultFlag
    flag = False
    for  x in  range(j - 4, j + 5):  # 橫向有沒(méi)有出現(xiàn)5連(在邊緣依次逐一遍歷,是否五個(gè)棋子的類型一樣)
        if x >= 0 and x + 4 < 15 :
            if initChessList[i][x].value == value and \
                initChessList[i][x + 1].value == value and \
                initChessList[i][x + 2].value == value and \
                initChessList[i][x + 3].value == value and \
                initChessList[i][x + 4].value == value :
                flag = True
                break
                pass
    for x in range(i - 4, i + 5):  # 縱向有沒(méi)有出現(xiàn)5連(在邊緣依次逐一遍歷,是否五個(gè)棋子的類型一樣)
        if x >= 0 and x + 4 < 15:
            if initChessList[x][j].value == value and \
                    initChessList[x + 1][j].value == value and \
                    initChessList[x + 2][j].value == value and \
                    initChessList[x + 3][j].value == value and \
                    initChessList[x + 4][j].value == value:
                flag = True
                break
                pass

    # 先判斷東北方向的對(duì)角下輸贏 x 列軸, y是行軸 , i 是行 j 是列(右斜向)(在邊緣依次逐一遍歷,是否五個(gè)棋子的類型一樣)
    for x, y in zip(range(j + 4, j - 5, -1), range(i - 4, i + 5)):
        if x >= 0 and x + 4 < 15 and y + 4 >= 0 and y < 15:
            if initChessList[y][x].value == value and \
                    initChessList[y - 1][x + 1].value == value and \
                    initChessList[y - 2][x + 2].value == value and \
                    initChessList[y - 3][x + 3].value == value and \
                    initChessList[y - 4][x + 4].value == value:
                flag = True

    # 2、判斷西北方向的對(duì)角下輸贏 x 列軸, y是行軸 , i 是行 j 是列(左斜向)(在邊緣依次逐一遍歷,是否五個(gè)棋子的類型一樣)
    for x, y in zip(range(j - 4, j + 5), range(i - 4, i + 5)):
        if x >= 0 and x + 4 < 15 and y >= 0 and y + 4 < 15:
            if initChessList[y][x].value == value and \
                    initChessList[y + 1][x + 1].value == value and \
                    initChessList[y + 2][x + 2].value == value and \
                    initChessList[y + 3][x + 3].value == value and \
                    initChessList[y + 4][x + 4].value == value:
                flag = True


    if flag:               #如果條件成立,證明五子連珠
        resultFlag = value #獲取成立的棋子顏色
        print("白棋贏" if value ==1 else "黑棋贏")

# 加載素材
def main():
    global initChessList,resultFlag
    initChessSquare(27,27)
    pygame.init()     # 初始化游戲環(huán)境
    screen = pygame.display.set_mode((620,620),0,0)          # 創(chuàng)建游戲窗口 # 第一個(gè)參數(shù)是元組:窗口的長(zhǎng)和寬
    pygame.display.set_caption("陳曉超五子棋")                # 添加游戲標(biāo)題
    background = pygame.image.load("D:/cxc/4.png")          #加載背景圖片
    whiteStorn = pygame.image.load("D:/cxc/2.png") #加載白棋圖片
    blackStorn = pygame.image.load("D:/cxc/1.png") #加載黑棋圖片
    resultStorn = pygame.image.load("D:/cxc/3.png")#加載 贏 時(shí)的圖片
    rect = blackStorn.get_rect()

    while True:
        screen.blit(background,(0,0))
        for temp in initChessList:
            for point in temp:
                if point.value == 1:          #當(dāng)棋子類型為1時(shí),繪制白棋
                    screen.blit(whiteStorn,(point.x-18,point.y-18))
                elif point.value == 2:        #當(dāng)棋子類型為2時(shí),繪制黑棋
                    screen.blit(blackStorn,(point.x-18,point.y-18))

        if resultFlag >0:
            initChessList = []                 # 清空棋盤
            initChessSquare(27,27)             # 重新初始化棋盤
            screen.blit(resultStorn,(200,200)) #繪制獲勝時(shí)的圖片
        pygame.display.update()                #更新視圖

        if resultFlag >0:
            time.sleep(3)
            resultFlag = 0                     #置空之前的獲勝結(jié)果
        eventHander()                          #調(diào)用之前定義的事件函數(shù)
if __name__ == '__main__':
    main()        #調(diào)用主函數(shù)繪制窗口
    pass

運(yùn)行后就會(huì)出現(xiàn)游戲的窗口,像這樣:

我們可以任意的在棋盤上落子,像這樣:

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

相關(guān)文章

  • Python使用微信SDK實(shí)現(xiàn)的微信支付功能示例

    Python使用微信SDK實(shí)現(xiàn)的微信支付功能示例

    這篇文章主要介紹了Python使用微信SDK實(shí)現(xiàn)的微信支付功能,結(jié)合實(shí)例形式分析了Python調(diào)用微信SDK接口實(shí)現(xiàn)微信支付功能的具體步驟與相關(guān)操作技巧,需要的朋友可以參考下
    2017-06-06
  • Python數(shù)據(jù)分析之雙色球中藍(lán)紅球分析統(tǒng)計(jì)示例

    Python數(shù)據(jù)分析之雙色球中藍(lán)紅球分析統(tǒng)計(jì)示例

    這篇文章主要介紹了Python數(shù)據(jù)分析之雙色球中藍(lán)紅球分析統(tǒng)計(jì),結(jié)合實(shí)例形式較為詳細(xì)的分析了Python針對(duì)雙色球藍(lán)紅球中獎(jiǎng)數(shù)據(jù)分析的相關(guān)操作技巧,需要的朋友可以參考下
    2018-02-02
  • Python高效處理大文件的方法詳解

    Python高效處理大文件的方法詳解

    在這篇文章中,我們將學(xué)習(xí)如何使用multiprocessing、joblib和tqdm?Python包減少大文件的處理時(shí)間。這是一個(gè)簡(jiǎn)單的教程,可以適用于任何文件、數(shù)據(jù)庫(kù)、圖像、視頻和音頻,感興趣的可以了解一下
    2022-07-07
  • 淺談Python中的可變對(duì)象和不可變對(duì)象

    淺談Python中的可變對(duì)象和不可變對(duì)象

    下面小編就為大家?guī)?lái)一篇淺談Python中的可變對(duì)象和不可變對(duì)象。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-07-07
  • python用plt畫圖時(shí),cmp設(shè)置方法

    python用plt畫圖時(shí),cmp設(shè)置方法

    今天小編就為大家分享一篇python用plt畫圖時(shí),cmp設(shè)置方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-12-12
  • python編程通過(guò)蒙特卡洛法計(jì)算定積分詳解

    python編程通過(guò)蒙特卡洛法計(jì)算定積分詳解

    這篇文章主要介紹了python編程通過(guò)蒙特卡洛法計(jì)算定積分詳解,具有一定借鑒價(jià)值,需要的朋友可以參考下。
    2017-12-12
  • Django使用中間鍵實(shí)現(xiàn)csrf認(rèn)證詳解

    Django使用中間鍵實(shí)現(xiàn)csrf認(rèn)證詳解

    這篇文章主要介紹了Django使用中間鍵實(shí)現(xiàn)csrf認(rèn)證詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-07-07
  • 對(duì)python多線程中Lock()與RLock()鎖詳解

    對(duì)python多線程中Lock()與RLock()鎖詳解

    今天小編就為大家分享一篇對(duì)python多線程中Lock()與RLock()鎖詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-01-01
  • 一篇文章帶你了解python標(biāo)準(zhǔn)庫(kù)--datetime模塊

    一篇文章帶你了解python標(biāo)準(zhǔn)庫(kù)--datetime模塊

    這篇文章主要為大家介紹了python中的datetime模塊,datetime模塊的接口則更直觀、更容易調(diào)用,想要了解datetime模塊的朋友可以參考一下
    2021-08-08
  • 利用anaconda作為python的依賴庫(kù)管理方法

    利用anaconda作為python的依賴庫(kù)管理方法

    今天小編就為大家分享一篇利用anaconda作為python的依賴庫(kù)管理方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-08-08

最新評(píng)論

定安县| 滨海县| 巴南区| 额敏县| 珠海市| 北流市| 泰和县| 铜鼓县| 孟津县| 曲松县| 府谷县| 田东县| 定西市| 阳江市| 林芝县| 龙川县| 合肥市| 汽车| 阿勒泰市| 灯塔市| 昌吉市| 丰顺县| 乌兰察布市| 黄平县| 枞阳县| 隆德县| 东乡族自治县| 新民市| 工布江达县| 大姚县| 莱阳市| 陵水| 淅川县| 云和县| 墨竹工卡县| 嘉鱼县| 永寿县| 太原市| 天台县| 新宁县| 梁河县|