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

您的位置:首頁技術(shù)文章
文章詳情頁

pygame實(shí)現(xiàn)井字棋之第二步邏輯實(shí)現(xiàn)

瀏覽:36日期:2022-06-20 14:15:54
一、前言

我們?cè)谏弦黄┛椭袑?shí)現(xiàn)了九宮格的繪制,為我們打下了基礎(chǔ)。這次我們來實(shí)現(xiàn)基本的邏輯,比如判斷輸贏、玩家和電腦分別下棋的邏輯。

二、下棋2.1 玩家

我們之前在Lattice類中,有一個(gè)stats變量來表示格子的狀態(tài),

# 0表示初始,1表示個(gè)人-1表示電腦self.stats = 0

所以下棋本質(zhì)上就是修改這個(gè)變量。首先,我們是用鼠標(biāo)點(diǎn)擊的方式來實(shí)現(xiàn)下棋的,所以應(yīng)當(dāng)修改事件響應(yīng)部分:

for event in pygame.event.get():# 退出if event.type == pygame.QUIT: sys.exit()# 點(diǎn)擊鼠標(biāo)elif event.type == pygame.MOUSEBUTTONDOWN:# 獲得鼠標(biāo)點(diǎn)擊的位置 mouse_x, mouse_y = pygame.mouse.get_pos() for i in rect:# 確定玩家下了一步if not i.stats and i.rect.collidepoint(mouse_x,mouse_y):i.stats = -1

pygame.event模塊主要是負(fù)責(zé)游戲中的事件。第一個(gè)事件表示點(diǎn)擊界面的右上角關(guān)閉鍵,退出程序;第二個(gè)事件是鼠標(biāo)點(diǎn)擊,可以使用pygame.mouse.get_pos得到點(diǎn)擊位置。因?yàn)橹暗母褡樱↙attice類)中有一個(gè)rect類的實(shí)例,我們可以使用collidepoint函數(shù),傳入坐標(biāo)判斷是在哪個(gè)格子中。隨后我們需要判斷格子有沒有被占用,沒被占用,那么我們就可以修改stats。

2.2 電腦

對(duì)于電腦來說,實(shí)際情況差不多,不過我們選擇了隨機(jī)生成的方式:

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

我們先給出了所有沒有被占用的格子,使用列表解析形成列表。如果列表為空,沒位子下了,就說明平局(在每一次落子之后,都會(huì)有輸贏的判斷,后面再說);反之,我們就用random.choice函數(shù),在列表中選擇一個(gè)元素(這個(gè)元素為Lattice類的實(shí)例),將其stats修改為1。

judge這個(gè),是判斷是否結(jié)束游戲的標(biāo)志,初始為0。

三、輸贏判斷

這個(gè)可能會(huì)麻煩一點(diǎn)。這里,我的想法是每一個(gè)格子都有一個(gè)下標(biāo),將所有可能贏的格子組合的下標(biāo)都寫出來。

win_list = [ # 行[0, 1, 2],[3, 4, 5],[6, 7, 8],# 列[0, 3, 6],[1, 4, 7],[2, 5, 8],# 對(duì)角[0, 4, 8],[2, 4, 6] ]

pygame實(shí)現(xiàn)井字棋之第二步邏輯實(shí)現(xiàn)

隨后,我們同樣使用列表解析,將所有stats為1和-1的組成兩個(gè)列表:

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]

那么問題來了,stats1、2中,可能只有部分元素在win_list中,瞬間找到了被leecode支配的恐懼。

for i in win_list: # 取出每一個(gè)可能獲勝的條件if i == [j for j in i if j in stats1]: judge = 1 print('Computer win!') exit()elif i == [j for j in i if j in stats2]: judge = 1 print('You win!') exit()

我們的邏輯是對(duì)每一個(gè)獲勝可能組合,分別取出每一個(gè)元素,并在stats列表中查找,如果都能找到,列表解析式的結(jié)果就一定和原先的獲勝組合相同,此時(shí)我們就可以判斷一方獲勝。

四、一人一子

井字棋和五子棋的玩法差不多,所以必須做到在玩家下子后,電腦能下子。(正常電腦的反應(yīng),可是比玩家快多了。

當(dāng)然可以設(shè)置一個(gè)變量,0、1分別表示誰該下子了,但是我有更好的選擇——在玩家下子后進(jìn)行輸出。

if not i.stats and i.rect.collidepoint(mouse_x,mouse_y):# 玩家下棋i.stats = -1win_or_lose()# 電腦下棋computer()win_or_lose()

還有一個(gè)問題,就是不管哪方下子了,我們都需要對(duì)輸贏進(jìn)行判斷。

五、顯示問題

當(dāng)你完成了上述操作,會(huì)發(fā)現(xiàn),其實(shí)屏幕上什么都看不到。因?yàn)槲覀冞€沒有顯示格子的圖標(biāo)。這里我選擇使用經(jīng)典的’x’、‘o’,用渲染文字的方式實(shí)現(xiàn)。(這部分也可以自己找圖貼上去)

渲染文字的步驟:

self.font = pygame.font.SysFont設(shè)置字體 self.font.render函數(shù),生成一個(gè)含有文本信息的圖像 將圖像使用get_rect方法處理成矩形,進(jìn)行對(duì)齊 使用blit方法渲染

lattice.py文件:

import pygameclass Lattice(): def __init__(self,rect,screen):self.rect = rectself.screen = screen# 0表示初始,1表示個(gè)人-1表示電腦self.stats = 0# 文本顏色self.text_color = (30, 30, 30)# 背景顏色,也就是我們screen渲染的顏色self.bg_color = (255, 255, 255)# 設(shè)置字體self.font = pygame.font.SysFont(None,48) def draw(self):# 按照狀態(tài)賦值文本信息msg = ''if self.stats == -1: msg = 'x'elif self.stats == 1: msg = 'o'if msg: self.msg_image = self.font.render(msg,True,self.text_color,self.bg_color) self.msg_rect = self.msg_image.get_rect() self.msg_rect.center = self.rect.center self.screen.blit(self.msg_image,self.msg_rect)

render函數(shù):傳入?yún)?shù):文本信息,Boolean(控制曲線是否光滑,沒試過),文本顏色,背景顏色(也就是我們screen渲染的顏色)返回一個(gè)圖片類型。

get_rect()方法:將圖片處理成矩形,pygame有一點(diǎn)很好,就是不管什么樣的圖形都能當(dāng)成矩形處理

rect對(duì)象,有centerx、centery、x、y等一系列屬性,方便我們進(jìn)行對(duì)齊操作,在這里不展開說了。

blit方法:輸入圖片和矩形(這里的矩形實(shí)質(zhì)上是給方法指明顯示的坐標(biāo)),在screen上顯示。

在主模塊中:

def update(): for i in rect:i.draw() # 將界面顯示 pygame.display.flip()

如果只是在while循環(huán)的開始寫一個(gè)update,會(huì)發(fā)現(xiàn)實(shí)際上我們是不能及時(shí)看到結(jié)果的,這樣很明顯有影響,所以在每一次落子之后,我們都會(huì)進(jìn)行一次刷新,然后再判斷輸贏。

if not i.stats and i.rect.collidepoint(mouse_x,mouse_y):# 玩家下棋i.stats = -1update()win_or_lose()# 電腦下棋computer()update()win_or_lose()六、結(jié)語

這樣,我們這個(gè)井字棋基本上就可以玩了,但是我們還是需要進(jìn)行一些修改。下一篇博客,我將對(duì)細(xì)節(jié)進(jìn)行整改。

下一篇:pygame實(shí)現(xiàn)井字棋——3.邏輯優(yōu)化上一篇:pygame實(shí)現(xiàn)井字棋——1.繪制九宮格

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

標(biāo)簽: pygame
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日韩avvvv在线播放| 久久狠狠婷婷| 日韩制服丝袜av| 亚洲无线观看| 国产亚洲一区| a天堂资源在线| 激情婷婷综合| 青青草国产成人99久久| 日本不卡一区二区| 国产精品久久久久av蜜臀| 欧美aa在线视频| 日韩在线二区| 午夜在线播放视频欧美| 国产探花一区在线观看| 毛片在线网站| 亚洲理论在线| 精品日本视频| 爽好久久久欧美精品| 欧美激情 亚洲a∨综合| 久久精品青草| 日本va欧美va精品| 国产 日韩 欧美一区| 影音先锋久久精品| 日韩高清一区在线| 日本美女一区| 日韩高清在线一区| 美女网站视频一区| 日韩激情中文字幕| 四虎4545www国产精品| 日韩欧美一区二区三区在线观看| 久久久久久美女精品| 午夜亚洲福利| av资源中文在线| 欧美天堂视频| 日本va欧美va精品发布| 在线精品亚洲欧美日韩国产| 男人天堂欧美日韩| 麻豆国产精品777777在线| 美女在线视频一区| 国产精品99视频| 精精国产xxxx视频在线野外| 亚洲激情不卡| 久久尤物视频| 伊人久久亚洲影院| 久久精品一区二区国产| 久久亚洲风情| 伊人网在线播放| 国产欧美啪啪| 夜夜嗨网站十八久久| 中文字幕一区久| 国产日韩一区二区三区在线| 免费毛片在线不卡| 高清一区二区| 日韩欧美美女在线观看| 欧美激情网址| 久久久久.com| 国产精品中文字幕制服诱惑| 午夜宅男久久久| 亚洲精品永久免费视频| 国产亚洲欧美日韩在线观看一区二区 | 影音国产精品| 日韩二区在线观看| 超碰在线99| 精品伊人久久| 91欧美极品| 亚洲精品观看| 麻豆亚洲精品| 五月天久久网站| 日韩伦理在线一区| 国内精品伊人| 精品无人区麻豆乱码久久久| 国产精品香蕉| 国产免费久久| 国产欧美在线| 日韩精品免费观看视频| 亚洲涩涩av| 国产精品女主播一区二区三区| 国产精品久久久免费| 日韩高清不卡一区二区| 美日韩精品视频| 国产视频一区在线观看一区免费| 日韩一区二区三区免费| 日韩精品永久网址| 波多野结衣久久精品| 日本不良网站在线观看| 国产不卡一区| 久久精品国产网站| 精品久久99| 国精品产品一区| 国产一区二区三区日韩精品| 麻豆视频久久| 久久97久久97精品免视看秋霞| 亚洲精品美女| 日本综合视频| 日本视频中文字幕一区二区三区| 色综合视频一区二区三区日韩 | 亚洲精品系列| 无码日韩精品一区二区免费| 亚洲精品影视| 日韩高清在线不卡| 欧美精品aa| 韩日一区二区| 国产欧美一区二区三区精品酒店| 日韩电影二区| 9久re热视频在线精品| 欧美99久久| 蜜臀av一区二区三区| 日韩av中文字幕一区| 国产精品亚洲二区| 国产成人免费视频网站视频社区| 免费看av不卡| 99riav1国产精品视频| 美日韩精品视频| 69堂精品视频在线播放| 麻豆91小视频| 久久久久蜜桃| 最新亚洲国产| 精品国产18久久久久久二百| 日韩久久电影| 麻豆亚洲精品| 亚洲啊v在线免费视频| 免费一区二区三区在线视频| 神马久久午夜| 日韩精品一级二级| 日韩黄色在线观看| 精品国产乱码| 亚洲美洲欧洲综合国产一区 | 日韩av二区在线播放| 精品黄色一级片| 亚洲女同一区| 国产精品日本一区二区不卡视频| 精精国产xxxx视频在线播放| 日韩专区一卡二卡| 国产一区二区三区四区五区传媒| 国产一区二区色噜噜| 亚洲精品2区| 国产精品综合色区在线观看| 久久久噜噜噜| 91精品国产自产精品男人的天堂| 超碰99在线| 日精品一区二区三区| 日本不卡免费高清视频在线| 亚洲a级精品| 久久国产直播| 久久爱www.| 午夜av一区| 美女久久久久久 | 精品日韩一区| 免费看日韩精品| 日韩精品91| 国产精品一区二区三区美女 | 国产日韩欧美| 亚洲欧洲一区| 国产精品入口久久| 在线 亚洲欧美在线综合一区| 麻豆传媒一区二区三区| 蜜臀va亚洲va欧美va天堂| 国产欧美一区二区三区精品酒店| 日韩三级一区| 在线日韩视频| 精品久久久中文字幕| 日韩视频一区| 国产精选在线| 欧美欧美黄在线二区| 婷婷成人在线| 丁香婷婷久久| 国产伦乱精品| 在线国产精品一区| 亚洲一级网站| 欧美交a欧美精品喷水| 日韩综合一区二区| 亚洲制服少妇| 91精品在线观看国产| 精品视频在线观看网站| 亚洲日本在线观看视频| 激情欧美一区| 手机在线电影一区| 国产精品调教| 亚洲精品极品| 一级欧美视频| 久热综合在线亚洲精品| 偷拍欧美精品| 国产主播一区| 欧美成人a交片免费看| 日韩精品成人| 丝袜脚交一区二区| 亚洲激情五月| 久久一区二区三区电影| 日韩一区电影| 色在线中文字幕| 久久只有精品| 美女精品久久| 免费看一区二区三区| 国产精品22p| 麻豆国产一区| 精品一区二区三区的国产在线观看| 国产精品v亚洲精品v日韩精品| 国产精品任我爽爆在线播放| 国产精品magnet| 国产视频一区二|