我必须为一个项目制作一个Tictactoe,虽然我知道代码不好,但我看不出错误是什么,该值被分配给dict,如果我打印最后一个播放的键,它会正确地显示我是X还是O,但该值没有在板的最后一次打印中表示
def tateti():
juego_terminado = False
first_player = 'X'
second_player = 'O'
turn = 0
tablero = {'ArribaIzquierda' : ' ','ArribaCentro' : ' ', 'ArribaDerecha' : ' ',
'CentroIzquierda' : ' ', 'CentroCentro' : ' ', 'CentroDerecha' : ' ',
'AbajoIzquierda' : ' ', 'AbajoCentro' : ' ','AbajoDerecha' : ' '}
#Loop principal
#Instrucciones
print('Para jugar, usa el numepad como si fuera el tablero de tateti\no elegi una posicion en el tablero con las primeras dos iniciales de la fila\ny la primer letra de la posicion dentro de la fila.\nPor ejemplo para ponerla arriba al centro es: arc (AR-riba C-entro). \n\n')
print('TA TE TI')
while juego_terminado == False:
abd = tablero['AbajoDerecha']
arc = tablero['ArribaCentro']
ard = tablero['ArribaDerecha']
cei = tablero['CentroIzquierda']
cec = tablero['CentroCentro']
ced = tablero['CentroDerecha']
ari = tablero['ArribaIzquierda']
abi = tablero['AbajoIzquierda']
abc = tablero['AbajoCentro']
#Separando los turnos
if turn % 2 == 0:
player = first_player
else:
player = second_player
print('|{}|{}|{}|\n- - - -\n|{}|{}|{}|\n- - - -\n|{}|{}|{}|'.format(ari, arc, ard, cei, cec, ced, abi, abc, abd))
#Pedirle al jugador donde quiero poner su figura
jugada = str(input('¿Donde queres poner la {}?: '.format(player)))
#Asignando cruz o cicedulo al dicecionario
if jugada == 'ari' or jugada == '7':
if tablero['ArribaIzquierda'] == ' ':
tablero['ArribaIzquierda'] = player
else:
print('Este posición ya fue ocupada, por favor elegi otra')
continue
elif jugada == 'arc' or jugada == '8':
if tablero['ArribaCentro'] == ' ':
tablero['ArribaCentro'] = player
else:
print('Este posición ya fue ocupada, por favor elegi otra')
continue
elif jugada == 'ard' or jugada == '9':
if tablero['ArribaDerecha'] == ' ':
tablero['ArribaDerecha'] = player
else:
print('Este posición ya fue ocupada, por favor elegi otra')
continue
elif jugada == 'cei' or jugada == '4':
if tablero['CentroIzquierda'] == ' ':
tablero['CentroIzquierda'] = player
else:
print('Este posición ya fue ocupada, por favor elegi otra')
continue
elif jugada == 'cec' or jugada == '5':
if tablero['CentroCentro'] == ' ':
tablero['CentroCentro'] = player
else:
print('Este posición ya fue ocupada, por favor elegi otra')
continue
elif jugada == 'ced' or jugada == '6':
if tablero['CentroDerecha'] == ' ':
tablero['CentroDerecha'] = player
else:
print('Este posición ya fue ocupada, por favor elegi otra')
continue
elif jugada == 'abi' or jugada == '1':
if tablero['AbajoIzquierda'] == ' ':
tablero['AbajoIzquierda'] = player
else:
print('Este posición ya fue ocupada, por favor elegi otra')
continue
elif jugada == 'abc' or jugada == '2':
if tablero['AbajoCentro'] == ' ':
tablero['AbajoCentro'] = player
else:
print('Este posición ya fue ocupada, por favor elegi otra')
continue
elif jugada == 'abd' or jugada == '3' :
if tablero['AbajoDerecha'] == ' ':
tablero['AbajoDerecha'] = player
else:
print('Este posición ya fue ocupada, por favor elegi otra')
continue
else:
print('Jugada invalida, por favor realice una jugada valida')
continue
#Condiciones para ganar
if tablero['AbajoDerecha'] == tablero['AbajoCentro'] and tablero['AbajoCentro'] == tablero['AbajoIzquierda'] and tablero['AbajoDerecha'] != ' ' :
juego_terminado = True
elif tablero['CentroDerecha'] == tablero['CentroCentro'] and tablero['CentroCentro'] == tablero['CentroIzquierda'] and tablero['CentroDerecha'] != ' ' :
juego_terminado = True
elif tablero['ArribaDerecha'] == tablero['ArribaCentro'] and tablero['ArribaCentro'] == tablero['ArribaIzquierda'] and tablero['ArribaDerecha'] != ' ':
juego_terminado = True
elif tablero['ArribaDerecha'] == tablero['CentroCentro'] and tablero['CentroCentro'] == tablero['AbajoIzquierda'] and tablero['ArribaDerecha'] != ' ':
juego_terminado = True
elif tablero['ArribaIzquierda'] == tablero['CentroCentro'] and tablero['CentroCentro'] == tablero['AbajoDerecha'] and tablero['ArribaIzquierda'] != ' ':
juego_terminado = True
elif tablero['ArribaDerecha'] == tablero['CentroDerecha'] and tablero['CentroDerecha'] == tablero['AbajoDerecha'] and tablero['ArribaDerecha'] != ' ':
juego_terminado = True
elif tablero['ArribaIzquierda'] == tablero['CentroIzquierda'] and tablero['CentroIzquierda'] == tablero['AbajoIzquierda'] and tablero['ArribaIzquierda'] != ' ':
juego_terminado = True
elif tablero['ArribaCentro'] == tablero['CentroCentro'] and tablero['CentroCentro'] == tablero['AbajoCentro'] and tablero['ArribaCentro'] != ' ':
juego_terminado = True
#Si el tablero esta lleno
if turn == 8 and juego_terminado == False:
print('Empate')
print('|{}|{}|{}|\n- - - -\n|{}|{}|{}|\n- - - -\n|{}|{}|{}|'.format(ari, arc, ard, cei, cec, ced, abi, abc, abd))
break
elif juego_terminado == True:
print('{} gano'.format(player))
print('|{}|{}|{}|\n- - - -\n|{}|{}|{}|\n- - - -\n|{}|{}|{}|'.format(ari, arc, ard, cei, cec, ced, abi, abc, abd))
turn += 1
tateti()
提前谢谢
您正在将新的
X
或O
分配给tablero['algo']
。如果游戏未在此处结束,则将tablero
的内容分配给ari
、arc
等,但仅在下一个循环开始时分配因此,如果游戏在那次移动后结束,您将打印旧的
ari
、arc
等,这些内容尚未更新以反映最新的移动当然,还有很多其他的问题需要解决(很多重复都是可以避免的),但是游戏确实可以正常运行
一些建议:
我会用一个简单的列表来处理董事会
tablero = [" "] * 9
创建九个空格字符的列表。这样就可以简化很多工作。例如,要打印电路板,您只需执行以下操作请注意,列表的第一个元素由
0
索引,因此我们需要考虑这一点完成后,您可以创建另一个列表来处理快捷方式:
现在处理输入要容易得多,因为您可以重用相同的代码,而不是大量的
if/elif
语句:现在我们在
casilla
中有了一个数字,让我们看看它是否在范围内,如果在范围内,让我们填充电路板,如果我们可以:获胜条件也可以简化:
有了理解,这可以缩短得更多:
我还没有测试过这个,所以如果你遇到问题,请告诉我
相关问题 更多 >
编程相关推荐