[英]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
然后當您創建Parti
或Partic
,告訴按鈕記住結果:
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.