溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

python怎么實(shí)現(xiàn)五子棋算法

發(fā)布時(shí)間:2022-05-05 10:12:36 來(lái)源:億速云 閱讀:167 作者:iii 欄目:開發(fā)技術(shù)

本文小編為大家詳細(xì)介紹“python怎么實(shí)現(xiàn)五子棋算法”,內(nèi)容詳細(xì),步驟清晰,細(xì)節(jié)處理妥當(dāng),希望這篇“python怎么實(shí)現(xiàn)五子棋算法”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來(lái)學(xué)習(xí)新知識(shí)吧。

if (j+4<n && A[i][j]==A[i][j+1] && A[i][j]==A[i][j+2] && A[i][j]==A[i][j+3] && A[i][j]==A[i][j+4])//向右搜索 
                win = A[i][j];

上面是c語(yǔ)言五子連珠算法的一部分,這種算法會(huì)經(jīng)常遇到游戲出錯(cuò)的情況,很不全面。

于是我們就就原創(chuàng)一個(gè)算法來(lái)改進(jìn),全面整改。

#贏法
    def IsWinner(p,index,fun):
        chessValue = 0 #為>=4就會(huì)贏棋

        if index - fun < 0 or pos[index-fun][2] != p[2]: #當(dāng)前點(diǎn)擊的格子是第一行 或 不在第一行,在假設(shè)的首個(gè)格子中
            print('----------第一個(gè)格子')
            for i in range(1,5): # (1-4)
                if index + (fun * i) <= 191 and pos[index + (fun*i)][2] == p[2]:
                    chessValue = chessValue + 1
            if chessValue >= 4:
                if p[2] == 1:
                    print('最后一下為第一個(gè)格子--黑贏')
                    ShowAllChess()#顯示所有已經(jīng)放置了的棋子
                    ResultShow(1)
                if p[2] == 2:
                    print('最后一下為第一個(gè)格子--白贏')
                    ShowAllChess()#顯示所有已經(jīng)放置了的棋子
                    ResultShow(2)

        elif index + fun > 191 or pos[index + fun][2] != p[2]: #當(dāng)前點(diǎn)擊的格子是最后一行 或 不在最后一行,在最后個(gè)格子中
            print('----------最后一個(gè)格子')
            for i in range(1,5): # (1-4)
                if pos[index - (fun * i)][2] == p[2]:
                    chessValue = chessValue + 1
            if chessValue >= 4:
                if p[2] == 1:
                    print('最后一下為最后一個(gè)格子--黑贏')
                    ShowAllChess()#顯示所有已經(jīng)放置了的棋子
                    ResultShow(1)
                if p[2] == 2:
                    print('最后一下為最后一個(gè)格子--白贏')
                    ShowAllChess()#顯示所有已經(jīng)放置了的棋子
                    ResultShow(2)

        else: #不是第一個(gè)和不是最后一個(gè),那就是當(dāng)前點(diǎn)擊的是五子連珠的中間的棋子了
            print('----------中間一個(gè)格子')
            '''
            第一個(gè)循環(huán)檢測(cè)中上部分位置的格子是否有同類棋子
            '''
            for i in range(1,4): #(1-3) 三個(gè)循環(huán) 
                if index - (fun * i) >= 0 and pos[index - (fun * i)][2] == p[2]: 
                    chessValue = chessValue + 1
                elif index - (fun * i) >= 0 and (pos[index - (fun * i)][2] != p[2] \
                and pos[index - (fun * i)][2] != 0): #這里的邏輯就是上方為對(duì)手棋子
                    chessValue = 0 #連珠數(shù)歸零
            '''
            第二個(gè)循環(huán)檢測(cè)中下部分位置的格子是否有同類棋子
            '''
            for i in range(1,4): #(1-3) 三個(gè)循環(huán)
                if index + (fun * i) <= 191 and pos[index + (fun * i)][2] == p[2]: 
                    chessValue = chessValue + 1
                elif index + (fun * i) <= 191 and (pos[index + (fun * i)][2] != p[2] \
                and pos[index + (fun * i)][2] != 0): #這里的邏輯就是上方為對(duì)手棋子
                    chessValue = 0 #連珠數(shù)歸零

            if chessValue >= 4:
                if p[2] == 1:
                    print('最后一下為中間一個(gè)格子--黑贏')
                    ShowAllChess()#顯示所有已經(jīng)放置了的棋子
                    ResultShow(1)
                if p[2] == 2:
                    print('最后一下為中間一個(gè)格子--白贏')
                    ShowAllChess()#顯示所有已經(jīng)放置了的棋子
                    ResultShow(2)

    #贏棋入口
    def WinChess(p):
        ''' 此算法預(yù)測(cè)是不是在合適的條件下,如果是就響應(yīng),如果不是就不響應(yīng)
            1.p為當(dāng)前最后按下的棋子坐標(biāo),不管是黑子還是白子
            2.pos為棋盤上所有的坐標(biāo) 一個(gè)坐標(biāo)有[x坐標(biāo),y坐標(biāo),status狀態(tài)]'''
        #首先查找棋盤中對(duì)應(yīng)值的下標(biāo)
        index = 0
        for po in pos:
            if [po[0],po[1]] == [p[0],p[1]]:
                break #找到了下標(biāo)為index 退出
            index = index + 1

        #【反斜杠查找法 、豎向查找法、斜杠查找法、橫向查找法】
        for fun in [17,16,15,1]:
            IsWinner(p, index, fun) #當(dāng)前的坐標(biāo) ,當(dāng)前的下標(biāo),當(dāng)前的查找算法

如上就是我自己根據(jù)python原創(chuàng)出來(lái)的“五子連珠”算法,通過(guò)四中子算法分析所有下棋的方式?!痉葱备懿檎曳?、豎向查找法、斜杠查找法、橫向查找法】
反斜杠查找法:"" 顧名思義就是根據(jù)坐上的棋子往右下查找判斷是否大于五子。
斜杠查找法:“/” 和反斜杠類似。
豎向查找法:"|" 顧名思義就是從上往下查找,最簡(jiǎn)單。
橫向查找法:“&mdash;” 和豎向一樣只是變成了橫向。

通過(guò)這四種算法就可以全面覆蓋棋盤下子方式,而且不會(huì)有遺漏產(chǎn)生。

python怎么實(shí)現(xiàn)五子棋算法

讀到這里,這篇“python怎么實(shí)現(xiàn)五子棋算法”文章已經(jīng)介紹完畢,想要掌握這篇文章的知識(shí)點(diǎn)還需要大家自己動(dòng)手實(shí)踐使用過(guò)才能領(lǐng)會(huì),如果想了解更多相關(guān)內(nèi)容的文章,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI