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

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

pygame實現井字棋之第二步邏輯實現

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

一、前言

我們在上一篇博客中實現了九宮格的繪制,為我們打下了基礎。
這次我們來實現基本的邏輯,比如判斷輸贏、玩家和電腦分別下棋的邏輯。

二、下棋

2.1 玩家

我們之前在Lattice類中,有一個stats變量來表示格子的狀態,

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

所以下棋本質上就是修改這個變量。
首先,我們是用鼠標點擊的方式來實現下棋的,所以應當修改事件響應部分:

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()
            for i in rect:
                # 確定玩家下了一步
                if  not i.stats and i.rect.collidepoint(mouse_x,mouse_y):
                	i.stats = -1

pygame.event模塊主要是負責游戲中的事件。
第一個事件表示點擊界面的右上角關閉鍵,退出程序;
第二個事件是鼠標點擊,可以使用pygame.mouse.get_pos得到點擊位置。
因為之前的格子(Lattice類)中有一個rect類的實例,我們可以使用collidepoint函數,傳入坐標判斷是在哪個格子中。
隨后我們需要判斷格子有沒有被占用,沒被占用,那么我們就可以修改stats。

2.2 電腦

對于電腦來說,實際情況差不多,不過我們選擇了隨機生成的方式:

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

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

judge這個,是判斷是否結束游戲的標志,初始為0。

三、輸贏判斷

這個可能會麻煩一點。
這里,我的想法是每一個格子都有一個下標,將所有可能贏的格子組合的下標都寫出來。

 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]
    ]

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

 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:
    	# 取出每一個可能獲勝的條件
        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()

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

四、一人一子

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

當然可以設置一個變量,0、1分別表示誰該下子了,但是我有更好的選擇——在玩家下子后進行輸出。

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

還有一個問題,就是不管哪方下子了,我們都需要對輸贏進行判斷。

五、顯示問題

當你完成了上述操作,會發現,其實屏幕上什么都看不到。
因為我們還沒有顯示格子的圖標。
這里我選擇使用經典的'x'、‘o',用渲染文字的方式實現。(這部分也可以自己找圖貼上去)

渲染文字的步驟:

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

lattice.py文件:

import pygame
class Lattice():
    def __init__(self,rect,screen):
        self.rect = rect
        self.screen = screen
        # 0表示初始,1表示個人-1表示電腦
        self.stats = 0
        # 文本顏色
        self.text_color = (30, 30, 30)
        # 背景顏色,也就是我們screen渲染的顏色
        self.bg_color = (255, 255, 255)
        # 設置字體
        self.font = pygame.font.SysFont(None,48)

    def draw(self):
        # 按照狀態賦值文本信息
        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函數:
傳入參數:文本信息,Boolean(控制曲線是否光滑,沒試過),文本顏色,背景顏色(也就是我們screen渲染的顏色)
返回一個圖片類型。

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

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

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

在主模塊中:

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

如果只是在while循環的開始寫一個update,會發現實際上我們是不能及時看到結果的,這樣很明顯有影響,所以在每一次落子之后,我們都會進行一次刷新,然后再判斷輸贏。

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

六、結語

這樣,我們這個井字棋基本上就可以玩了,但是我們還是需要進行一些修改。
下一篇博客,我將對細節進行整改。

下一篇:pygame實現井字棋——3.邏輯優化
上一篇:pygame實現井字棋——1.繪制九宮格

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

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

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

巨人網絡通訊聲明:本文標題《pygame實現井字棋之第二步邏輯實現》,本文關鍵詞  pygame,實現,井字,棋之,第,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《pygame實現井字棋之第二步邏輯實現》相關的同類信息!
  • 本頁收集關于pygame實現井字棋之第二步邏輯實現的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    欧美精品在线观看播放| 国产麻豆精品一区二区| 中文字幕亚洲一区二区av在线| 久久综合丝袜日本网| 国产亚洲精品久| 国产肉丝袜一区二区| 中文字幕高清不卡| 一区二区三区在线看| 一区二区三区电影在线播| 亚洲一区在线观看免费 | 在线不卡欧美精品一区二区三区| 91免费视频大全| 在线观看日韩精品| 欧美一级黄色大片| 久久综合久久综合久久| 中文av字幕一区| 亚洲欧美激情插| 人人狠狠综合久久亚洲| 国产乱子伦一区二区三区国色天香| 国产真实乱对白精彩久久| 国产福利精品导航| 在线观看欧美日本| 欧美一区二区三区啪啪| 久久久.com| 亚洲国产精品一区二区久久| 青青草国产精品97视觉盛宴| 国产高清精品在线| 欧美性生交片4| 久久久噜噜噜久久中文字幕色伊伊 | 午夜精品福利一区二区蜜股av| 天天操天天干天天综合网| 国产一区二区三区日韩| 色综合久久综合| 久久综合色婷婷| 亚洲老妇xxxxxx| 韩国精品在线观看| 在线看日本不卡| 国产欧美日韩卡一| 婷婷久久综合九色综合绿巨人 | 欧美私模裸体表演在线观看| 日韩精品一区二区三区四区视频| 国产精品久久久久久久久搜平片| 亚洲高清久久久| 成人国产精品免费观看视频| 日韩视频免费观看高清完整版| 亚洲视频狠狠干| 国产精品综合一区二区| 欧美在线看片a免费观看| 日本一区二区三区国色天香| 视频一区二区三区在线| 色视频欧美一区二区三区| 2021久久国产精品不只是精品| 性感美女久久精品| 在线观看不卡一区| 国产精品高潮久久久久无| 久久国产精品99精品国产 | 夜夜嗨av一区二区三区网页| 国产成人久久精品77777最新版本| 88在线观看91蜜桃国自产| 一区二区在线观看免费视频播放| 国产成人在线视频网站| 国产午夜精品久久久久久免费视| 麻豆精品久久精品色综合| 欧美亚洲高清一区二区三区不卡| 国产精品久久久久久久午夜片| 美腿丝袜亚洲三区| 精品国精品国产| 精品无码三级在线观看视频| 91精品国产综合久久蜜臀| 丝袜亚洲另类欧美综合| 欧美日本在线观看| 日本在线观看不卡视频| 欧美视频一区在线| 亚洲国产一区二区三区| 欧美日韩午夜在线视频| 天堂午夜影视日韩欧美一区二区| 欧美性做爰猛烈叫床潮| 日日摸夜夜添夜夜添国产精品| 欧美日韩电影一区| 久久精品国产**网站演员| 精品区一区二区| 国产一区二区三区四| 亚洲欧洲另类国产综合| 欧美中文字幕亚洲一区二区va在线| 曰韩精品一区二区| 欧美福利一区二区| 国产在线精品一区二区三区不卡 | 成年人国产精品| 日韩美女啊v在线免费观看| 色综合久久久久综合| 香蕉成人伊视频在线观看| 精品嫩草影院久久| 成人高清免费观看| 亚洲国产成人tv| 精品精品国产高清a毛片牛牛 | 欧美吞精做爰啪啪高潮| 天天综合网 天天综合色| 精品国产一区二区三区久久影院| 成人黄色av电影| 视频在线观看一区| 久久久久久久综合狠狠综合| av电影一区二区| 视频一区二区欧美| 国产情人综合久久777777| 欧美伊人久久久久久久久影院 | 久久精品水蜜桃av综合天堂| 99精品国产热久久91蜜凸| 日韩和欧美一区二区| 国产精品人妖ts系列视频| 欧美色网站导航| 风流少妇一区二区| 天堂午夜影视日韩欧美一区二区| 欧美国产成人在线| 91精品国模一区二区三区| 99久久国产综合精品麻豆| 精品一区在线看| 亚洲香肠在线观看| 国产精品毛片高清在线完整版| 欧美老女人在线| 99久久久无码国产精品| 韩国一区二区三区| 日韩电影在线观看一区| 樱桃视频在线观看一区| 中文字幕欧美激情| 国产亚洲一区二区三区| 欧美电影免费观看高清完整版在线 | 亚洲国产精品成人综合| 欧美一区二区三区视频在线观看| 色综合久久久久网| eeuss鲁一区二区三区| 激情欧美日韩一区二区| 亚欧色一区w666天堂| 亚洲一区在线观看免费观看电影高清| 欧美激情中文字幕一区二区| 欧美精品一区男女天堂| 欧美一区二区福利在线| 欧美视频在线一区| 欧美日韩精品一区二区三区四区 | 最新不卡av在线| 国产亚洲人成网站| 欧美电视剧在线观看完整版| 欧美一区二区三区四区高清| 欧美电影一区二区三区| 欧美午夜精品久久久| 欧洲av在线精品| 在线观看日产精品| 欧美日韩视频在线第一区| 欧美午夜在线一二页| 色菇凉天天综合网| 在线免费观看日韩欧美| 欧美三级视频在线| 91精品国产91热久久久做人人 | 26uuu另类欧美亚洲曰本| 日韩欧美国产一区二区三区| 日韩一区二区影院| 久久综合国产精品| 国产欧美一区二区精品性色超碰 | 亚洲欧美另类在线| 亚洲亚洲精品在线观看| 日日摸夜夜添夜夜添国产精品| 一区二区三区欧美在线观看| 天天亚洲美女在线视频| 精品精品国产高清a毛片牛牛| 日日摸夜夜添夜夜添亚洲女人| 久久精品亚洲精品国产欧美 | 在线视频一区二区三| 欧美亚洲一区二区三区四区| 777久久久精品| 久久午夜电影网| 国产精品理伦片| 亚洲一区二区三区四区在线免费观看| 亚洲一级二级三级在线免费观看| 日韩成人一区二区| 国产一区二区h| 91啪亚洲精品| 日韩一区二区免费高清| 欧美激情一区不卡| 亚洲小少妇裸体bbw| 国产毛片一区二区| 欧美亚洲自拍偷拍| 久久综合成人精品亚洲另类欧美| 国产精品久久久久久久久免费桃花 | 欧美群妇大交群的观看方式| 欧美一区二区网站| 久久色在线视频| 一区二区三区不卡在线观看 | 欧美性一级生活| 欧美sm极限捆绑bd| 一区二区三区在线观看欧美| 老司机精品视频线观看86| www.欧美精品一二区| 欧美电影免费观看高清完整版在 | 日韩福利电影在线观看| 成人avav在线| 欧美videossexotv100| 亚洲成人免费电影| 91色porny在线视频| 国产调教视频一区| 国内成人精品2018免费看| 在线观看91精品国产麻豆|