婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁(yè) > 知識(shí)庫(kù) > pygame實(shí)現(xiàn)井字棋之第三步邏輯優(yōu)化

pygame實(shí)現(xiàn)井字棋之第三步邏輯優(yōu)化

熱門標(biāo)簽:荊州云電銷機(jī)器人供應(yīng)商 外呼不封號(hào)系統(tǒng) 悟空智電銷機(jī)器人6 電信營(yíng)業(yè)廳400電話申請(qǐng) 江蘇房產(chǎn)電銷機(jī)器人廠家 遼寧400電話辦理多少錢 蘇州電銷機(jī)器人十大排行榜 溫州旅游地圖標(biāo)注 幫人做地圖標(biāo)注收費(fèi)算詐騙嗎

一、前言

先說(shuō)一下本期的目標(biāo)。
首先我們?cè)谂袛喑鲚斱A、平局的時(shí)候,只有一個(gè)控制臺(tái)輸出,很明顯不符合我們游戲的排面(doge
另外,之前的邏輯有一個(gè)漏洞,就是玩家一定是先手(就是第一個(gè)下棋的人,這個(gè)也需要修改)。
還有,有一個(gè)短暫的彈窗顯示到誰(shuí)了,游戲的可玩性就會(huì)有提高。
最后一個(gè)就是,如果點(diǎn)擊位置有問題,我們需要顯示。

二、渲染問題

翻車了,之前的邏輯是將九宮格背景顏色寫死,而且之前都是直接在之前的基礎(chǔ)上渲染,但是我們的彈窗需要在結(jié)束后及時(shí)撤下來(lái),所以需要我們不斷的重新渲染界面。

得,改吧。

首先,我們就不需要使用draw.rect方法創(chuàng)建矩形了,而是使用另外一個(gè)pygame.Rect函數(shù)。
同時(shí),為了省去九行基本相同的代碼,我創(chuàng)建了一個(gè)元組來(lái)存儲(chǔ)。
格子創(chuàng)建最新版:

# 表示九個(gè)格子
rect = [0]*9
rect_wh = [
    (1,1), (single+3,1), (single*2+5,1), 
    (1,single+3), (single+3,single+3), (single*2+5,single+3),
    (1,single*2+5), (single+3,single*2+5), (single*2+5,single*2+5)
    ]
for i in range(len(rect)):
    rect[i] = pygame.Rect(*rect_wh[i],single,single)
    rect[i] = Lattice(rect[i],screen)

Rect函數(shù):
傳入x、y坐標(biāo)以及高度寬度,就能創(chuàng)建一個(gè)rect對(duì)象。
這里需要解釋的是*rect_wh[i],后面的部分就是在元組列表中找到一個(gè)指定的元素,而星號(hào)的作用是將元組進(jìn)行解封裝。

三、封裝和解封裝

a, b = 1, 2
首先,我們將后面的兩個(gè)變量封裝成一個(gè)元組,從而賦值給等號(hào)前面的部分;
而前面為兩個(gè)變量,所以我們還需要進(jìn)行解封裝,也就是將一個(gè)元組拆分成一個(gè)個(gè)的變量。

當(dāng)時(shí)記錄的筆記:

回到之前的格子問題,還有一個(gè)細(xì)節(jié)就是我們應(yīng)該怎么顯示格子周圍的分割線,之前采用的是繪制矩形時(shí)自帶的,現(xiàn)在因?yàn)樗⑿碌膯栴},不能再使用了(不然每刷新一次創(chuàng)建9個(gè)矩形并繪制,這誰(shuí)頂?shù)米。?br /> 我的辦法是:減小了single的大小:

single = width/3 - 1

應(yīng)該會(huì)注意到的,元組列表中我修改了(x,y)的值,這樣我們就能繪制出這樣的一個(gè)圖形:

(原創(chuàng)不易,整這個(gè)眼睛都快要瞎了,還是沒有很完美 -_-||)
bg_color = (0, 0, 0), 黑色。
我們還有個(gè)draw.rect方法,傳入screen,(255, 255, 255),rect對(duì)象,我們就可以顯示一個(gè)白色的矩形了。
因?yàn)閷捀咝×艘稽c(diǎn),所以我們就能看到很棒的邊界(比我自己畫的好多了)

(啊,為什么是黃色的啊,因?yàn)槲野裝g_color改了……,問題不大)

當(dāng)前的update方法:

def update():
    screen.fill((255,228,181))
    for i in rect:
        pygame.draw.rect(screen,(255, 255, 255),i.rect)
        i.draw()

四、彈窗顯示

添加的彈窗:
輸贏、平局彈窗,3s后退出程序;
哪方下棋、下棋的位置有問題,0.3s后自己退出。

看過(guò)我大戰(zhàn)外星人系列應(yīng)該知道,有一個(gè)很大的遺憾就是給定的button類有一點(diǎn)專用,導(dǎo)致我后來(lái)只能自己添加按鈕類。
這次,我自己寫的彈窗類的適用性會(huì)更高一些。

popup.py

"""在游戲過(guò)程中,添加各種彈窗"""
import pygame
class Popup():
    def __init__(self, screen,msg):
        self.msg = msg
        self.screen = screen
        self.bg_color = (0, 0, 0)
        self.text_color = (230, 230, 230)
        self.font = pygame.font.SysFont(None,48)
        self.msg_image = self.font.render(msg,True,self.text_color,self.bg_color)
        self.msg_rect = self.msg_image.get_rect()
        self.screen_rect = self.screen.get_rect()
        self.msg_rect.center = self.screen_rect.center
        self.screen.blit(self.msg_image,self.msg_rect)

傳入一個(gè)要顯示的信息,然后就可以渲染到屏幕上了。
方法都是之前的,看這篇博客。
(所以適用性高是不是因?yàn)榛旧蠜]什么內(nèi)容……)

第一種情況(以平局為例):

Popup(screen,"draw")
pygame.display.flip()
time.sleep(3)
exit()

調(diào)用類(調(diào)用一次就完了,不需要再使用實(shí)例)
顯示屏幕
掛起三秒
退出程序

第二種情況下,我選擇"computer choice”作為案例,也就是輪到電腦操作:

Popup(srceeen,"computer choice”)
pygame.display.filp()
time.sleep(0.3)

但這樣,彈窗是不會(huì)自己消失的,所以我們還需要在后面跟一個(gè)update方法。

哦對(duì)了,還有一個(gè)沒有講怎么實(shí)現(xiàn)

五、實(shí)現(xiàn)判斷點(diǎn)擊是否有效

elif event.type == pygame.MOUSEBUTTONDOWN:
            mouse_x, mouse_y = pygame.mouse.get_pos()
            # 判斷玩家是否點(diǎn)擊成功
            success = 0
            for i in rect:
                if  not i.stats and i.rect.collidepoint(mouse_x,mouse_y):
                	# 如果點(diǎn)擊有效,將變量置為1

            if not success:
                update(0.3,"you can't choose here!")

六、update優(yōu)化

看了一下,基本上只有兩種情況,一個(gè)是正常的update,另一個(gè)是需要跟彈窗和延時(shí)。

def update(time_sleep=0,msg=""):
    screen.fill((255,228,181))
    for i in rect:
        pygame.draw.rect(screen,(255, 255, 255),i.rect)
        i.draw()
    if msg:
        Popup(screen,msg)
    pygame.display.flip()
    if time_sleep:
        time.sleep(time_sleep)

對(duì)于正常的刷新,只需要調(diào)用update(),如果是需要彈窗和延時(shí)的,就自己加變量來(lái)處理。

主循環(huán)部分:

while not judge:
    update()
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()
        elif event.type == pygame.MOUSEBUTTONDOWN:
            mouse_x, mouse_y = pygame.mouse.get_pos()
            # 判斷玩家是否點(diǎn)擊成功
            success = 0
            for i in rect:
                # 確定玩家下了一步
                if  not i.stats and i.rect.collidepoint(mouse_x,mouse_y):
                    success = 1
                    # 玩家下棋
                    i.stats = -1
                    update()
                    win_or_lose()
                    # 電腦下棋
                    update(0.3,"Computer choice!")
                    computer()
                    update()
                    win_or_lose()
                    update(0.3,"your choice!")

            if not success:
                update(0.3,"you can't choose here!")

computer函數(shù)部分:

def computer():
    """電腦的回合,隨機(jī)生成一個(gè)位置"""
    global judge
    random_num = [i for i in range(len(rect)) if not rect[i].stats]
    # 沒位子下了,平局
    if not random_num:
        update(3,"draw")
        exit()
    rect[random.choice(random_num)].stats = 1

判斷輸贏部分:

def win_or_lose():
    global judge
    stats1 = [i for i in range(len(rect)) if rect[i].stats == 1]
    stats2 = [i for i in range(len(rect)) if rect[i].stats == -1]
    win_list = [
        [0, 1, 2], [3, 4, 5], [6, 7, 8],
        [0, 3, 6], [1, 4, 7], [2, 5, 8],
        [0, 4, 8], [2, 4, 6]
    ]
    for i in win_list:
        if i == [j for j in i if j in stats1]:
            update(3,"Computer win!")
            exit()
        elif i == [j for j in i if j in stats2]:
            update(3,"You win!")
            exit()

七、先手問題

這個(gè),還是交給隨機(jī)數(shù)。
使用random.randint(0,1)產(chǎn)生一個(gè)0/1,來(lái)判斷先手,
如果先手是電腦,使用(0,8)選擇一個(gè)將其stats置為1
代碼:

def first_hand():
    """判斷先手,如果隨機(jī)數(shù)為1,則電腦先手"""
    x = random.randint(0,1)
    if x:
        x = random.randint(0,8)
        rect[x].stats = 1

循環(huán)開始前調(diào)用一下就行了。

八、結(jié)語(yǔ)

整體的游戲就實(shí)現(xiàn)了,很簡(jiǎn)單的一個(gè),卻能加深對(duì)pygame模塊的使用。

往期博客:
pygame實(shí)現(xiàn)井字棋——1.繪制九宮格
pygame實(shí)現(xiàn)井字棋——2.邏輯實(shí)現(xiàn)

到此這篇關(guān)于pygame實(shí)現(xiàn)井字棋之第三步邏輯優(yōu)化的文章就介紹到這了,更多相關(guān)pygame井字棋游戲內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • pygame實(shí)現(xiàn)井字棋之第二步邏輯實(shí)現(xiàn)
  • pygame實(shí)現(xiàn)井字棋之第一步繪制九宮格
  • pygame可視化幸運(yùn)大轉(zhuǎn)盤實(shí)現(xiàn)
  • pygame多種方式實(shí)現(xiàn)屏保操作(自動(dòng)切換、鼠標(biāo)切換、鍵盤切換)
  • 詳解pygame捕獲鍵盤事件的兩種方式
  • python+pygame實(shí)現(xiàn)代碼雨(黑客帝國(guó)既視感)
  • Pygame做一期吃豆子游戲的示例代碼
  • Python3+Pygame實(shí)現(xiàn)射擊游戲完整代碼

標(biāo)簽:三沙 宿遷 喀什 臺(tái)灣 欽州 景德鎮(zhèn) 濟(jì)南 黃山

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《pygame實(shí)現(xiàn)井字棋之第三步邏輯優(yōu)化》,本文關(guān)鍵詞  pygame,實(shí)現(xiàn),井字,棋之,第三步,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《pygame實(shí)現(xiàn)井字棋之第三步邏輯優(yōu)化》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于pygame實(shí)現(xiàn)井字棋之第三步邏輯優(yōu)化的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    国产成人精品www牛牛影视| 日韩精品一区二区三区四区视频| 不卡视频在线看| 欧美日韩视频在线一区二区| 中文字幕乱码日本亚洲一区二区| 久久不见久久见中文字幕免费| 538在线一区二区精品国产| 日韩精品乱码免费| 精品久久人人做人人爽| 久久精品免费看| 久久久精品日韩欧美| 国产99精品国产| 亚洲天堂精品在线观看| 91视频在线观看| 亚洲电影中文字幕在线观看| 91麻豆精品国产91久久久久久久久| 久久国产精品免费| 欧美国产日本韩| 色av成人天堂桃色av| 亚洲成年人网站在线观看| 日韩视频在线你懂得| 国产高清亚洲一区| 亚洲色图制服诱惑| 日韩片之四级片| 91伊人久久大香线蕉| 美女精品自拍一二三四| 欧美国产一区二区在线观看| 日本高清不卡一区| 国产麻豆午夜三级精品| 亚洲男人的天堂在线观看| 欧美日韩极品在线观看一区| 粉嫩高潮美女一区二区三区| 亚洲主播在线播放| 国产欧美日韩精品在线| 欧美日韩成人高清| www.爱久久.com| 国产精品一线二线三线精华| 午夜a成v人精品| 亚洲丝袜自拍清纯另类| 日韩网站在线看片你懂的| 91色婷婷久久久久合中文| 久久精品国产澳门| 亚洲成人精品一区二区| 国产片一区二区三区| 欧美高清激情brazzers| 97se亚洲国产综合自在线不卡| 美女网站一区二区| 亚洲激情网站免费观看| 久久在线免费观看| 综合电影一区二区三区| 精品噜噜噜噜久久久久久久久试看| 91色porny蝌蚪| 99精品视频在线播放观看| 国产一区二区三区| 亚洲成a人片在线不卡一二三区| 久久精品亚洲乱码伦伦中文| 制服丝袜一区二区三区| 欧美日韩国产首页在线观看| 色综合久久天天| 色噜噜偷拍精品综合在线| 成人av综合在线| 国产伦精品一区二区三区视频青涩| 性欧美疯狂xxxxbbbb| 洋洋av久久久久久久一区| 樱花影视一区二区| 亚洲综合一区二区三区| 一区二区三区四区在线免费观看| 亚洲天堂精品视频| 亚洲免费大片在线观看| 一级做a爱片久久| 自拍偷拍欧美精品| 欧美国产日本视频| 久久久九九九九| 久久精品夜色噜噜亚洲a∨| 久久综合九色综合97婷婷| 国产亚洲精品福利| 欧美激情一区不卡| 亚洲天堂免费在线观看视频| 欧美视频在线一区二区三区| 欧美日韩欧美一区二区| 日韩一区二区三区电影在线观看| 精品国产欧美一区二区| 欧美极品少妇xxxxⅹ高跟鞋| 亚洲欧美色图小说| 日韩av电影免费观看高清完整版在线观看| 美女爽到高潮91| 国产一区二区三区精品欧美日韩一区二区三区 | 老色鬼精品视频在线观看播放| 青青草伊人久久| 国产成人亚洲综合a∨婷婷图片| 成人午夜在线免费| 国模冰冰炮一区二区| 亚洲欧美在线视频| 久久精品视频一区二区| 2021久久国产精品不只是精品| 欧美不卡一二三| 日韩免费电影网站| 精品99999| 国产性天天综合网| 久久久精品免费观看| 久久久国产一区二区三区四区小说| 欧美成人在线直播| 欧美一区二区三区系列电影| 天天亚洲美女在线视频| 一区二区三区小说| 亚洲精品成人天堂一二三| 亚洲人成在线观看一区二区| 亚洲三级小视频| 亚洲综合激情小说| 日韩福利视频网| 免费在线观看一区二区三区| 奇米色一区二区三区四区| 日本在线不卡一区| 韩日av一区二区| 国产福利不卡视频| aaa欧美大片| 在线一区二区三区| 欧美福利视频一区| 久久免费国产精品| 国产精品久久久久久一区二区三区| 亚洲日本丝袜连裤袜办公室| 亚洲综合一区二区三区| 午夜精品视频一区| 蜜桃视频免费观看一区| 国产成人av一区二区| 91亚洲精品一区二区乱码| 欧美在线免费观看视频| 欧美一级久久久| 久久一区二区视频| 欧美激情一区二区| 亚洲一卡二卡三卡四卡无卡久久| 五月天一区二区| 国产精品中文字幕一区二区三区| 97久久人人超碰| 欧美一区二区三区啪啪| 久久久久久久一区| 欧美视频在线播放| 视频一区二区三区入口| 在线不卡一区二区| 免费高清在线一区| 欧美大片日本大片免费观看| 美女视频一区二区| 久久天天做天天爱综合色| 国产成人综合在线观看| 国产精品二三区| 色88888久久久久久影院按摩| 亚洲一区在线视频| 欧美日韩国产123区| 日产精品久久久久久久性色| 精品国产麻豆免费人成网站| 国产一区二区三区国产| 国产精品卡一卡二| 91福利国产精品| 日韩和欧美一区二区| 精品国产乱码久久久久久久久 | 亚洲成人激情av| 欧美一区二区三区的| 精品一二三四在线| 国产精品久久久久9999吃药| 在线观看亚洲专区| 精品一区二区精品| 国产精品理论片| 欧美酷刑日本凌虐凌虐| 蜜臀av性久久久久av蜜臀妖精| 欧美成人精品二区三区99精品| 国产精品一二三区在线| 综合激情成人伊人| 欧美电影精品一区二区| 91老师国产黑色丝袜在线| 日韩av午夜在线观看| 欧美激情在线观看视频免费| 亚洲人成精品久久久久久| 不卡一区二区在线| 天天综合网 天天综合色| 精品精品欲导航| 99re这里都是精品| 黄色精品一二区| 一区二区三区在线免费视频| 欧美精品一区二区精品网| 欧美日韩在线三级| 国产激情视频一区二区三区欧美 | 色婷婷国产精品综合在线观看| 日本人妖一区二区| 亚洲精品亚洲人成人网| 欧美www视频| 欧美三电影在线| 国产91精品入口| 轻轻草成人在线| 亚洲自拍偷拍九九九| 国产精品美女久久久久久久久久久| 91精品麻豆日日躁夜夜躁| 99国产欧美另类久久久精品| 韩国视频一区二区| 麻豆精品在线播放| 五月开心婷婷久久| 一区二区三区欧美日| 亚洲欧美日韩中文播放| 国产日韩欧美综合一区| 久久久美女毛片| 久久精品无码一区二区三区|