Pygame TikTacToe玩家获胜问题如何解决



我正在制作一个tiktacoe,我对我的玩家像游戏一样获胜有问题,即使我没有连得3分,我只得到了视频<lt;我没有连得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')

例如,我对第一个图像所做的是2215215215如果我的粒子超过了这些粒子,它应该闪电攻击获胜的图像,但它闪电攻击另一个图像image,但它没有闪电攻击正确的图像,而是闪电攻击这个VIDEO<lt;对他们所有人来说都是一样的,它不断地闪电攻击错误的图像,有时即使我没有为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))

我的完整代码粘贴式

我的建议是简单地在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种获胜方式:3次水平、3次垂直和2次对角线。这是一个相当简单的检查:

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 )

最新更新