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

主頁 > 知識庫 > pygame實現井字棋之第三步邏輯優化

pygame實現井字棋之第三步邏輯優化

熱門標簽:荊州云電銷機器人供應商 外呼不封號系統 悟空智電銷機器人6 電信營業廳400電話申請 江蘇房產電銷機器人廠家 遼寧400電話辦理多少錢 蘇州電銷機器人十大排行榜 溫州旅游地圖標注 幫人做地圖標注收費算詐騙嗎

一、前言

先說一下本期的目標。
首先我們在判斷出輸贏、平局的時候,只有一個控制臺輸出,很明顯不符合我們游戲的排面(doge
另外,之前的邏輯有一個漏洞,就是玩家一定是先手(就是第一個下棋的人,這個也需要修改)。
還有,有一個短暫的彈窗顯示到誰了,游戲的可玩性就會有提高。
最后一個就是,如果點擊位置有問題,我們需要顯示。

二、渲染問題

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

得,改吧。

首先,我們就不需要使用draw.rect方法創建矩形了,而是使用另外一個pygame.Rect函數。
同時,為了省去九行基本相同的代碼,我創建了一個元組來存儲。
格子創建最新版:

# 表示九個格子
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函數:
傳入x、y坐標以及高度寬度,就能創建一個rect對象。
這里需要解釋的是*rect_wh[i],后面的部分就是在元組列表中找到一個指定的元素,而星號的作用是將元組進行解封裝。

三、封裝和解封裝

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

當時記錄的筆記:

回到之前的格子問題,還有一個細節就是我們應該怎么顯示格子周圍的分割線,之前采用的是繪制矩形時自帶的,現在因為刷新的問題,不能再使用了(不然每刷新一次創建9個矩形并繪制,這誰頂得住)。
我的辦法是:減小了single的大小:

single = width/3 - 1

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

(原創不易,整這個眼睛都快要瞎了,還是沒有很完美 -_-||)
bg_color = (0, 0, 0), 黑色。
我們還有個draw.rect方法,傳入screen,(255, 255, 255),rect對象,我們就可以顯示一個白色的矩形了。
因為寬高小了一點,所以我們就能看到很棒的邊界(比我自己畫的好多了)

(啊,為什么是黃色的啊,因為我把bg_color改了……,問題不大)

當前的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后自己退出。

看過我大戰外星人系列應該知道,有一個很大的遺憾就是給定的button類有一點專用,導致我后來只能自己添加按鈕類。
這次,我自己寫的彈窗類的適用性會更高一些。

popup.py

"""在游戲過程中,添加各種彈窗"""
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)

傳入一個要顯示的信息,然后就可以渲染到屏幕上了。
方法都是之前的,看這篇博客。
(所以適用性高是不是因為基本上沒什么內容……)

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

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

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

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

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

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

哦對了,還有一個沒有講怎么實現

五、實現判斷點擊是否有效

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

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

六、update優化

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

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)

對于正常的刷新,只需要調用update(),如果是需要彈窗和延時的,就自己加變量來處理。

主循環部分:

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()
            # 判斷玩家是否點擊成功
            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函數部分:

def computer():
    """電腦的回合,隨機生成一個位置"""
    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()

七、先手問題

這個,還是交給隨機數。
使用random.randint(0,1)產生一個0/1,來判斷先手,
如果先手是電腦,使用(0,8)選擇一個將其stats置為1
代碼:

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

循環開始前調用一下就行了。

八、結語

整體的游戲就實現了,很簡單的一個,卻能加深對pygame模塊的使用。

往期博客:
pygame實現井字棋——1.繪制九宮格
pygame實現井字棋——2.邏輯實現

到此這篇關于pygame實現井字棋之第三步邏輯優化的文章就介紹到這了,更多相關pygame井字棋游戲內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

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

標簽:三沙 宿遷 喀什 臺灣 欽州 景德鎮 濟南 黃山

巨人網絡通訊聲明:本文標題《pygame實現井字棋之第三步邏輯優化》,本文關鍵詞  pygame,實現,井字,棋之,第三步,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《pygame實現井字棋之第三步邏輯優化》相關的同類信息!
  • 本頁收集關于pygame實現井字棋之第三步邏輯優化的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    欧美视频日韩视频在线观看| 老司机免费视频一区二区三区| 69久久99精品久久久久婷婷| 成人精品高清在线| 亚洲va欧美va人人爽午夜| 国产精品美女久久久久久久网站| 欧美一区二区精美| 欧美顶级少妇做爰| 国产乱对白刺激视频不卡| 三级欧美在线一区| 亚洲影院免费观看| 亚洲综合网站在线观看| 日韩精品中文字幕一区| 欧美大片免费久久精品三p| 欧美日韩在线直播| 欧美日韩精品专区| 色狠狠一区二区| 一本色道亚洲精品aⅴ| 成人午夜视频福利| 99久久久无码国产精品| 色偷偷久久人人79超碰人人澡| 粉嫩高潮美女一区二区三区| 日韩精品视频网站| 免费观看成人av| 久久av资源网| 国产精品一区二区三区四区| 激情五月播播久久久精品| 国产又粗又猛又爽又黄91精品| 美国三级日本三级久久99| 美女视频一区二区| 免费成人av在线播放| 免费成人小视频| 国产酒店精品激情| 夫妻av一区二区| 国产成人精品一区二| 久久99国产乱子伦精品免费| 狠狠色伊人亚洲综合成人| 国产精品资源在线| 91黄色小视频| 欧美一级精品在线| 中文字幕欧美三区| 亚洲一区二区三区在线看| 美国三级日本三级久久99| 国产成人综合视频| 在线观看一区不卡| 欧美精品一区二区久久久| 国产精品少妇自拍| 午夜一区二区三区视频| 久久精品二区亚洲w码| 国产91丝袜在线观看| 91福利在线看| 精品国产一区二区三区久久影院 | 日韩美女主播在线视频一区二区三区| 久久久久国产免费免费| 国产精品福利电影一区二区三区四区| 一区二区三区中文免费| 韩国精品主播一区二区在线观看| 99久久精品情趣| 精品精品国产高清a毛片牛牛| 亚洲天堂免费看| 免费成人你懂的| 国产经典欧美精品| 精品视频在线免费观看| 国产精品―色哟哟| 美女一区二区视频| 色综合久久久久综合体| 久久久精品天堂| 亚洲与欧洲av电影| 久久99国产精品久久99| 在线免费观看一区| 国产精品国产三级国产普通话蜜臀 | 不卡av免费在线观看| 7777精品伊人久久久大香线蕉| 亚洲午夜视频在线| 欧美午夜一区二区三区免费大片| 亚洲欧美日韩一区| 色噜噜狠狠成人中文综合| 亚洲日本乱码在线观看| 91污在线观看| 亚洲国产综合色| 欧美日本国产视频| 美国一区二区三区在线播放| 欧美刺激午夜性久久久久久久| 韩国女主播成人在线观看| 中文字幕av一区二区三区高 | 精品在线视频一区| 国产亚洲精品超碰| jlzzjlzz国产精品久久| 亚洲一区二区三区三| 欧美一区二区三区播放老司机| 狠狠色狠狠色合久久伊人| 国产精品丝袜久久久久久app| eeuss鲁片一区二区三区在线看| 亚洲另类中文字| 欧美一区午夜视频在线观看| 国产露脸91国语对白| 亚洲精品免费在线| 日韩一区二区三区视频| 懂色一区二区三区免费观看| 亚洲男人的天堂网| 精品欧美一区二区久久| 成人高清免费观看| 日韩1区2区日韩1区2区| 久久精品男人天堂av| 91久久精品一区二区二区| 丝袜亚洲精品中文字幕一区| 久久精品视频免费| 欧美日韩美女一区二区| 国产91富婆露脸刺激对白| 亚洲一线二线三线久久久| 精品少妇一区二区三区视频免付费 | 91精品国产综合久久精品性色| 国产999精品久久| 亚洲宅男天堂在线观看无病毒| 精品久久久久久久人人人人传媒| 一道本成人在线| 国产东北露脸精品视频| 日韩电影一区二区三区四区| 综合久久给合久久狠狠狠97色| 日韩欧美一级在线播放| 色婷婷激情久久| 国产99久久久国产精品免费看| 日韩免费观看2025年上映的电影| 国产在线一区二区| 国产精品色在线| 日韩视频免费观看高清完整版 | 国产亚洲欧美一区在线观看| 欧美三级视频在线| 国产东北露脸精品视频| 美国一区二区三区在线播放| 亚洲国产成人高清精品| 国产精品入口麻豆原神| 2020日本不卡一区二区视频| 亚洲大型综合色站| 亚洲特黄一级片| 久久九九99视频| 精品国产免费一区二区三区四区| 在线电影欧美成精品| 欧美婷婷六月丁香综合色| 99在线热播精品免费| 成人性生交大片免费看在线播放| 久久精品噜噜噜成人88aⅴ| 免费在线观看不卡| 免费在线看成人av| 婷婷综合久久一区二区三区| 一二三区精品福利视频| 自拍偷拍欧美激情| 亚洲免费观看高清完整版在线| 国产精品久久综合| 亚洲欧洲在线观看av| 亚洲国产精品国自产拍av| 国产欧美一区二区三区鸳鸯浴 | 久久免费的精品国产v∧| 欧美日韩高清影院| 日韩一区二区高清| 欧美嫩在线观看| 欧美男男青年gay1069videost| 91在线视频在线| 日本国产一区二区| 欧美性生活久久| 欧美一区二区三区白人| 2021国产精品久久精品| 国产视频一区在线观看| 中文子幕无线码一区tr| 亚洲日本一区二区| 亚洲mv在线观看| 久久不见久久见免费视频1| 国产一区二区伦理片| 成人av在线影院| 欧美三级电影网| 日韩精品一区二区三区老鸭窝| 久久久久久久久99精品| 亚洲免费观看高清在线观看| 视频一区国产视频| 国产成人综合在线观看| 色综合久久88色综合天天6| 在线不卡的av| 国产丝袜欧美中文另类| 亚洲曰韩产成在线| 经典三级在线一区| 99久久99久久精品免费观看| 欧美人狂配大交3d怪物一区| 一区二区三区精品| 婷婷综合五月天| 国产一区在线精品| 欧美三级中文字幕| 国产亚洲一区二区三区四区| 亚洲三级免费观看| 精品一区在线看| 欧美性大战久久久久久久| 久久综合av免费| 午夜在线成人av| a亚洲天堂av| 亚洲精品一区二区三区香蕉| 成人免费视频在线观看| 国产一区在线观看视频| 欧美日韩国产三级| 国产精品少妇自拍| 国产一区不卡视频| 欧美一激情一区二区三区|