日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

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

瀏覽:167日期:2022-06-20 14:10:11
一、前言

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

二、渲染問題

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

得,改吧。

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

# 表示九個格子rect = [0]*9rect_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首先,我們將后面的兩個變量封裝成一個元組,從而賦值給等號前面的部分;而前面為兩個變量,所以我們還需要進行解封裝,也就是將一個元組拆分成一個個的變量。

當時記錄的筆記:

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

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

single = width/3 - 1

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

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

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

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

(啊,為什么是黃色的啊,因為我把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 pygameclass Popup(): def __init__(self, screen,msg):self.msg = msgself.screen = screenself.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.centerself.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
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产农村妇女精品一二区 | 久久国产三级| 综合激情网站| 中文字幕免费一区二区| 综合在线一区| 91九色综合| 国产激情一区| 日韩成人精品一区| 欧美午夜精彩| 蜜臀久久99精品久久久久久9| 亚洲精品观看| 婷婷视频一区二区三区| 亚洲精品中文字幕99999| 日韩黄色免费网站| 美女久久精品| 日本久久成人网| 欧美日韩精品免费观看视频完整| 国产一级久久| 日韩欧美中文字幕一区二区三区| 日本欧美一区二区| 你懂的亚洲视频| 免费高潮视频95在线观看网站| 亚洲v在线看| 日韩专区欧美专区| 国产另类在线| 四季av一区二区凹凸精品| 国产精品国产三级国产在线观看| 精品国产欧美日韩一区二区三区| 日韩天堂在线| 亚洲欧美久久久| 国产欧美日韩精品一区二区免费| 国产精品精品| 午夜在线视频一区二区区别| 国产欧美日韩精品高清二区综合区| 麻豆理论在线观看| 玖玖玖国产精品| 久久av网站| 亚洲二区在线| 日韩视频1区| 日韩一区自拍| 中文字幕av亚洲精品一部二部 | 麻豆久久精品| 国产精品4hu.www| 91精品国产自产在线观看永久∴| 日韩影院精彩在线| 美女视频黄 久久| 99成人在线| 国产精品第一国产精品| 激情综合激情| 国产乱人伦精品一区| 久久一区二区三区喷水| 日韩高清欧美激情| 久久男人av资源站| 美女网站久久| 国产在视频一区二区三区吞精| 国产一区亚洲| 国产精品久久久一区二区| 欧美特黄一级大片| 欧美日本精品| 亚洲精品中文字幕乱码| 精品三级国产| 亚洲精品九九| 91精品婷婷色在线观看| 国产精品巨作av| 亚洲免费影视| 午夜影院一区| 欧美一区成人| 免费精品国产的网站免费观看| 欧美另类中文字幕| 亚洲欧美视频| 成人免费电影网址| 久久亚洲人体| 日本成人在线不卡视频| 欧美在线网站| 午夜av不卡| 国产乱人伦丫前精品视频| 99在线|亚洲一区二区| 高清一区二区三区av| 香蕉成人久久| 国产欧美69| 噜噜噜躁狠狠躁狠狠精品视频| 精品国产亚洲日本| 日韩在线黄色| 日本一二区不卡| 88久久精品| 热久久久久久久| 影视先锋久久| а√在线中文在线新版| 国产亚洲观看| 亚洲人成网站在线在线观看| 久久精品91| 国产一区二区三区不卡视频网站 | 亚洲精品在线国产| 亚洲天堂黄色| 久久久一本精品| 国产在线一区不卡| 国产精品成人国产| 亚洲精品美女91| 日韩中文字幕1| 99亚洲视频| 偷拍欧美精品| 免费久久久久久久久| 日韩一区二区三区在线免费观看| 久久不见久久见国语| 91午夜精品| 亚洲毛片视频| 首页国产欧美久久| 日韩亚洲精品在线| 亚洲国产成人精品女人| 999久久久91| 99精品在线观看| 日韩精品首页| 91精品推荐| 久久国产中文字幕| 91精品亚洲| 香蕉精品视频在线观看| 九九综合九九| 日韩午夜精品| 久久亚洲一区| 中文字幕日韩亚洲| 亚洲欧美日本日韩| 视频一区二区中文字幕| 伊人久久一区| 日韩av资源网| 国产精品任我爽爆在线播放| 国产精品一卡| 精品女同一区二区三区在线观看| 欧美国产专区| 久久中文字幕一区二区三区| 麻豆91精品91久久久的内涵| 9999国产精品| 欧美日韩一区二区三区视频播放| 999国产精品视频| 99日韩精品| 日韩一区二区三免费高清在线观看| 蜜芽一区二区三区| 日韩1区2区3区| 国产精品任我爽爆在线播放 | 蜜乳av另类精品一区二区| 一区二区亚洲视频| 日韩二区三区在线观看| 国产日韩1区| 色婷婷综合网| 欧美91精品| 中文字幕日韩欧美精品高清在线| 日韩手机在线| 欧美aaaaaa午夜精品| 激情综合五月| 久久亚洲国产| 天堂av在线一区| 日韩欧美激情| 精品一区二区三区在线观看视频| 日韩精品91| 狠狠色综合网| 日本欧美久久久久免费播放网| 久久超级碰碰| 久久三级福利| 蜜桃av一区二区| 你懂的国产精品永久在线| 国产精品久久久久av电视剧| 99国产精品久久久久久久| 欧美中文高清| 国产一区二区三区国产精品| 欧美日韩国产精品一区二区亚洲| 亚洲免费一区三区| 国产aⅴ精品一区二区四区| 精品91久久久久| 国产视频一区二| 五月天av在线| 亚洲精品乱码| 国产成人精选| 亚洲一区二区免费看| 国产精品99久久免费观看| 激情久久久久久| 91精品丝袜国产高跟在线| 亚洲永久av| 色8久久久久| 国内在线观看一区二区三区| 国产一区二区高清| 久久精品毛片| 鲁大师影院一区二区三区| 激情久久99| 亚洲精品激情| 久久青草久久| 国产日韩高清一区二区三区在线| 视频福利一区| 日本少妇精品亚洲第一区| 久久精品免费一区二区三区| 日韩精品久久理论片| 久久久精品网| 国产乱码精品| 久久午夜视频| 福利欧美精品在线| 亚洲人亚洲人色久| 秋霞影视一区二区三区| 国产情侣久久| 久久成人国产| 91精品一区二区三区综合| 国产精品日本一区二区三区在线 | 亚洲3区在线|