簡體   English   中英

Pygame TikTacToe Player 獲勝問題如何解決?

[英]Pygame TikTacToe Player Winning Problem How To Fix?

我正在制作一個 tiktactoe 並且我的玩家像游戲一樣獲勝,即使我沒有連續獲得 3 個並且我只是獲得VIDEO << 我沒有連續獲得 3 個事件它只是為玩家 2 贏得了比賽

我的按鈕位置

                   
white = (250,250,250)
greenbutton2 = button((0,255,0),190,215,100,100, '2')

greenbutton3 = button((0,255,0),335,215,100,100, '3')

greenbutton4 = button((0,255,0),71,215,100,100, '4')

greenbutton5 = button((0,255,0),71,350,100,100, '5')

greenbutton6 = button((0,255,0),190,350,100,100, '6')

greenbutton7 = button((0,255,0),335,350,100,100, '7')


greenbutton8 = button((0,255,0),70,90,100,100, '8')

greenbutton9 = button((0,255,0),190,90,100,100, '9')

greenbutton10 = button((0,255,0),335,90,100,100, '10')

greenbutton4 = button((0,255,0),71,215,100,100, '4')

我做了什么,例如用於第一個是215215215,如果我的partics是對那些應該的blit中獎形象,但它的blit另一個圖像IMAGE ,但它不是塊傳輸正確的圖像,而不是它的塊傳輸此視頻<<其同樣為所有的人它不斷閃爍錯誤的圖像,有時即使我沒有為 X 玩家或 O 敵人連續獲得 3 個,它也會說我贏了有沒有辦法解決這個問題?

這是給我的 X 播放器的

    # player 2 winning for the rows part
    count = sum([1 if partic.y in [215, 215, 215] else 0 for partic in partics])
    if count == 3:
        lines.append(line(0,0,0,0,white))



    count = sum([1 if partic.y in [90, 90, 90] else 0 for partic in partics])
    if count == 3:
        lines.append(lin(0,0,0,0,white))
   

    count = sum([1 if partic.y in [350, 350, 350] else 0 for partic in partics])
    if count == 3:
        lines.append(liner(0,0,0,0,white))



    count = sum([1 if partic.x in [335, 335, 335] else 0 for partic in partics])
    if count == 3:
        lines.append(low(0,0,0,0,white))


    count = sum([1 if partic.x in [190, 190, 190] else 0 for partic in partics])
    if count == 3:
        lines.append(lowe(0,0,0,0,white))


    count = sum([1 if partic.x in [71, 71, 70] else 0 for partic in partics])
    if count == 3:
        lines.append(lower(0,0,0,0,white))


    count = sum([1 if partic.y in [90, 215, 350] else 0 for partic in partics])
    if count == 3:
        lines.append(win(0,0,0,0,white))

    count = sum([1 if partic.x in [335, 71, 190] else 0 for partic in partics])
    if count == 3:
        lines.append(winner(0,0,0,0,white))




這是給我的 O 播放器的

    # player 1 winning for the rows part
    count = sum([1 if parti.y in [215, 215, 215] else 0 for parti in parts])
    if count == 3:
        lines.append(line(0,0,0,0,white))



    count = sum([1 if parti.y in [90, 90, 90] else 0 for parti in parts])
    if count == 3:
        lines.append(lin(0,0,0,0,white))
   

    count = sum([1 if parti.y in [350, 350, 350] else 0 for parti in parts])
    if count == 3:
        lines.append(liner(0,0,0,0,white))



    count = sum([1 if parti.x in [335, 335, 335] else 0 for parti in parts])
    if count == 3:
        lines.append(low(0,0,0,0,white))


    count = sum([1 if parti.x in [190, 190, 190] else 0 for parti in parts])
    if count == 3:
        lines.append(lowe(0,0,0,0,white))


    count = sum([1 if parti.x in [71, 71, 70] else 0 for parti in parts])
    if count == 3:
        lines.append(lower(0,0,0,0,white))


    count = sum([1 if parti.y in [90, 215, 350] else 0 for parti in parts])
    if count == 3:
        lines.append(win(0,0,0,0,white))

    count = sum([1 if parti.x in [335, 71, 190] else 0 for parti in parts])
    if count == 3:
        lines.append(winner(0,0,0,0,white))

我的完整代碼pastebin

我的建議是在button()類中簡單地使用.result的狀態。

class button():
    def __init__(self, color, x,y,width,height, text=''):
        # ...
        self.result = ''    # empty

    def getResult( self ):
        return self.result

    def setResult( self, value ):
        self.result = value

    def reset( self ):
        self.result = ''   # back to empty state

然后當您創建PartiPartic ,告訴按鈕記住結果:

if score == 2:
    if greenbutton4.isOver(pos):
        greenbutton4.setResult( 'x' )
        partics.append(Partic(71,215,100,100,white))

#  ... 

if score == 3:
    if greenbutton4.isOver(pos):
        greenbutton4.setResult( 'o' )
        parts.append(Parti(71,215,100,100,white))

只有 8 種方法可以在井字棋/零點游戲中獲勝:3x 水平、3x 垂直和 2x 對角線。 這是一個相當簡單的檢查:

def winner( b1, b2, b3, b4, b5, b6, b7, b8, b8 ):
    """ Given the buttons 1-9 in order from top-left to bottom right
        return whether 'x' or 'o' has won the game, or None and which
        line/row/vertical the win was made on """
    winner = ( None, None )
    # make a grid of the board-state for iteration
    board = [ [ b1.getResult(), b2.getResult(), b3.getResult() ],
              [ b4.getResult(), b5.getResult(), b6.getResult() ],
              [ b7.getResult(), b8.getResult(), b9.getResult() ] ]

    # EDIT: some debug code
    print( "BOARD IS: ")
    print( " %3s | %3s | %3s " % ( b1.getResult(), b2.getResult(), b3.getResult() ) )
    print( "-----+-----+-----" )
    print( " %3s | %3s | %3s " % ( b4.getResult(), b5.getResult(), b6.getResult() ) )
    print( "-----+-----+-----" )
    print( " %3s | %3s | %3s " % ( b7.getResult(), b8.getResult(), b9.getResult() ) )
    print( "" )


    # check the horizontals
    for row in range( 3 ):
        if ( board[row][0] != '' and
             board[row][0] == board[row][1] and board[row][0] == board[row][2] ):
            winner = ( board[row][0], 'h'+str( row ) )
            break
    # check the verticals
    for col in range( 3 ):
        if ( board[0][col] != '' and
             board[0][col] == board[1][col] and board[0][col] == board[2][col] ):
            winner = ( board[col][0], 'v'+str( col ) )
            break
    # diagonals
    if ( board[1][1] != '' ):
        if ( board[0][0] == board[1][1] and board[2][2] == board[1][1] ):
            winner = ( board[1][1], 'd1' )
        elif ( board[0][2] == board[1][1] and board[2][0] == board[1][1] ):
            winner = ( board[1][1], 'd2' )
    return winner

代碼似乎創建了以button2為中心的按鈕(基於視頻),因此對該函數的調用將類似於:

player_wins, row = winner( greenbutton8,  greenbutton9,  greenbutton10,   
                           greenbutton4,  greenbutton2,  greenbutton3,  
                           greenbutton5,  greenbutton6,  greenbutton7 )
if ( player_wins != None ):
    print( "Player "+ player_wins + " has won on " + row )

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM