Python - problema con 3 en raya en python3

 
Vista:

problema con 3 en raya en python3

Publicado por BL4D3 (1 intervención) el 01/07/2022 00:16:23
buenos dias hoy estoy un poco frustrado y me vendria bien su ayuda si me periten escribire mi codigo el cual me dice que gano alguien sin ser eso verdad y no lo comprendo gracias
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
tablon1 = [' ', ' ', ' ']
tablon2 = [' ', ' ', ' ']
tablon3 = [' ', ' ', ' ']
 
name = input('1º player name: ')
name2 = input('2º player name: ')
 
print(4 * ' ' + '1' + 4 * ' ' + '2' + 4 * ' ' + '3')
print('1', tablon1)
print('2', tablon2)
print('3', tablon3)
print(20 * '-')
while True:
    #  PLAYER 1
    Y = int(input(f'{name} escoga la coordenada vertical: '))
    X = int(input(f'{name} escoga la coordenada horizontal: ')) - 1
    if Y == 1:
        tablon1.pop(X)
        tablon1.insert(X, 'X')
    if Y == 2:
        tablon2.pop(X)
        tablon2.insert(X, 'X')
    if Y == 3:
        tablon3.pop(X)
        tablon3.insert(X, 'X')
 
    print(4 * ' ' + '1' + 4 * ' ' + '2' + 4 * ' ' + '3')
    print('1', tablon1)
    print('2', tablon2)
    print('3', tablon3)
    print(20 * '-')
 
    #________________________________________________#
 
    #  PLAYER 2
    Y = int(input(f'{name2} escoga la coordenada vertical: '))
    X = int(input(f'{name2} escoga la coordenada horizontal: ')) - 1
    if Y == 1:
        tablon1.pop(X)
        tablon1.insert(X, 'O')
    if Y == 2:
        tablon2.pop(X)
        tablon2.insert(X, 'O')
    if Y == 3:
        tablon3.pop(X)
        tablon3.insert(X, 'O')
 
 
    print(4 * ' ' + '1' + 4 * ' ' + '2' + 4 * ' ' + '3')
    print('1', tablon1)
    print('2', tablon2)
    print('3', tablon3)
    print(20 * '-')
 
    # formas de ganar:
 
    # 1º
    if tablon1[0] and tablon1[1] and tablon1[2] == 'X':
        print(f'{name} ¡¡Ganaste!!')
        exit()
    elif tablon1[0] and tablon1[1] and tablon1[2] == 'O':
        print(f'{name2} ¡¡Ganaste!!')
        exit()
 
    if tablon2[0] and tablon2[1] and tablon2[2] == 'X':
        print(f'{name} ¡¡Ganaste!!')
        exit()
    elif tablon2[0] and tablon2[1] and tablon2[2] == 'O':
        print(f'{name2} ¡¡Ganaste!!')
        exit()
 
    if tablon3[0] and tablon3[1] and tablon3[2] == 'X':
        print(f'{name} ¡¡Ganaste!!')
        exit()
    elif tablon3[0] and tablon3[1] and tablon3[2] == 'O':
        print(f'{name2} ¡¡Ganaste!!')
        exit()
 
    #2º
    if tablon1[0] and tablon2[0] and tablon3[0] == 'X':
        print(f'{name} ¡¡Ganaste!!')
        exit()
    elif tablon1[0] and tablon2[0] and tablon3[0] == 'O':
        print(f'{name2} ¡¡Ganaste!!')
        exit()
 
    if tablon1[1] and tablon2[1] and tablon3[1] == 'X':
        print(f'{name} ¡¡Ganaste!!')
        exit()
    elif tablon1[1] and tablon2[1] and tablon3[1] == 'O':
        print(f'{name2} ¡¡Ganaste!!')
        exit()
 
    if tablon1[2] and tablon2[2] and tablon3[2] == 'X':
        print(f'{name} ¡¡Ganaste!!')
        exit()
    elif tablon1[2] and tablon2[2] and tablon3[2] == 'O':
        print(f'{name2} ¡¡Ganaste!!')
        exit()
 
    #3º
    if tablon1[0] and tablon2[1] and tablon3[2] == 'X':
        print(f'{name} ¡¡Ganaste!!')
        exit()
    elif tablon1[0] and tablon2[1] and tablon3[2] == 'O':
        print(f'{name2} ¡¡Ganaste!!')
        exit()
 
    if tablon1[2] and tablon2[1] and tablon3[0] == 'X':
        print(f'{name} ¡¡Ganaste!!')
        exit()
    elif tablon1[2] and tablon2[1] and tablon3[0] == 'O':
        print(f'{name2} ¡¡Ganaste!!')
        exit()
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Antoni Masana
Val: 121
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

problema con 3 en raya en python3

Publicado por Antoni Masana (67 intervenciones) el 01/07/2022 16:16:40
Primer problema que veo es que no se ponen los datos en el sitio indicado:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
1º player name: Antonio
2º player name: Mariano
    1    2    3
1 [' ', ' ', ' ']
2 [' ', ' ', ' ']
3 [' ', ' ', ' ']
--------------------
 
' ---&--- Primera jugara correcta, tampoco da pie a equivocacion
Antonio escoga la coordenada vertical: 2
Antonio escoga la coordenada horizontal: 2
    1    2    3
1 [' ', ' ', ' ']
2 [' ', 'X', ' ']
3 [' ', ' ', ' ']
--------------------
' ---&--- segunda jugara correcta, tampoco da pie a equivocacion
 
Mariano escoga la coordenada vertical: 1
Mariano escoga la coordenada horizontal: 1
    1    2    3
1 ['O', ' ', ' ']
2 [' ', 'X', ' ']
3 [' ', ' ', ' ']
--------------------
 
' ---&--- Tercera jugara ERRONEA, deberia estar debajo de la anterior
Antonio escoga la coordenada vertical: 1
Antonio escoga la coordenada horizontal: 3
    1    2    3
1 ['O', ' ', 'X']
2 [' ', 'X', ' ']
3 [' ', ' ', ' ']
--------------------
' ---&--- Cuarta jugara PEOR que la anterior. No se puede tirar en una casilla ocupara.
 
Mariano escoga la coordenada vertical: 1
Mariano escoga la coordenada horizontal: 3
    1    2    3
1 ['O', ' ', 'O']
2 [' ', 'X', ' ']
3 [' ', ' ', ' ']
--------------------
 
' ---&--- Paso de saber por que falla llegados a este punto.
Mariano ¡¡Ganaste!!

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 121
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

problema con 3 en raya en python3

Publicado por Antoni Masana (67 intervenciones) el 01/07/2022 16:58:45
Habían varias cosas que no me cuadran y al final las he descifrado.
A parte de lo comentado anteriormente ¿Por que no da ganador al Game 1 antes de la jugada del gamer 2?
Otro error, no es escoga, es escoja
Programa arreglado.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
#!/usr/bin/python
# -*- coding: latin-1 -*-
 
tablon1 = [' ', ' ', ' ']
tablon2 = [' ', ' ', ' ']
tablon3 = [' ', ' ', ' ']
 
name1 = input('1º player name: ')
name2 = input('2º player name: ')
 
print(4 * ' ' + '1' + 4 * ' ' + '2' + 4 * ' ' + '3')
print('1', tablon1)
print('2', tablon2)
print('3', tablon3)
print(20 * '-')
SW=0
while True:
 
    # ==== PLAYER 1 ======================================================
 
    Ver = int(input(f'{name1} escoja la coordenada vertical  : ')) - 1
    Hor = int(input(f'{name1} escoja la coordenada horizontal: '))
    if Hor == 1:
        if tablon1[Ver] != ' ':
            print("JUGADA ERRONEA - La casilla no esta vacia\n")
        else:
            tablon1.pop(Ver)
            tablon1.insert(Ver, 'X')
    if Hor == 2:
        if tablon2[Ver] != ' ':
            print("JUGADA ERRONEA - La casilla no esta vacia\n")
        else:
            tablon2.pop(Ver)
            tablon2.insert(Ver, 'X')
    if Hor == 3:
        if tablon3[Ver] != ' ':
            print("JUGADA ERRONEA - La casilla no esta vacia\n")
        else:
            tablon3.pop(Ver)
            tablon3.insert(Ver, 'X')
 
    print(4 * ' ' + '1' + 4 * ' ' + '2' + 4 * ' ' + '3')
    print('1', tablon1)
    print('2', tablon2)
    print('3', tablon3)
    print(20 * '-')
 
    # ===== formas de ganar: ===== Jugador 1 -----------------------------
 
    # --- Horizontal
    if tablon1[0] == 'X' and tablon1[1] == 'X' and tablon1[2] == 'X': SW=1
    if tablon2[0] == 'X' and tablon2[1] == 'X' and tablon2[2] == 'X': SW=1
    if tablon3[0] == 'X' and tablon3[1] == 'X' and tablon3[2] == 'X': SW=1
 
    # --- Vertical
    if tablon1[0] == 'X' and tablon2[0] == 'X' and tablon3[0] == 'X': SW=1
    if tablon1[1] == 'X' and tablon2[1] == 'X' and tablon3[1] == 'X': SW=1
    if tablon1[2] == 'X' and tablon2[2] == 'X' and tablon3[2] == 'X': SW=1
 
    # --- Diagonal
    if tablon1[0] == 'X' and tablon2[1] == 'X' and tablon3[2] == 'X': SW=1
    if tablon1[2] == 'X' and tablon2[1] == 'X' and tablon3[0] == 'X': SW=1
 
    if SW == 1:
        print(f'{name1} ¡¡Ganaste!!')
        exit()
 
    # ==== PLAYER 2 ======================================================
 
    Ver = int(input(f'{name2} escoja la coordenada vertical: ')) - 1
    Hor = int(input(f'{name2} escoja la coordenada horizontal: '))
    if Hor == 1:
        if tablon1[Ver] != ' ':
            print("JUGADA ERRONEA - La casilla no esta vacia\n")
        else:
            tablon1.pop(Ver)
            tablon1.insert(Ver, 'O')
    if Hor == 2:
        if tablon2[Ver] != ' ':
            print("JUGADA ERRONEA - La casilla no esta vacia\n")
        else:
            tablon2.pop(Ver)
            tablon2.insert(Ver, 'O')
    if Hor == 3:
        if tablon3[Ver] != ' ':
            print("JUGADA ERRONEA - La casilla no esta vacia\n")
        else:
            tablon3.pop(Ver)
            tablon3.insert(Ver, 'O')
 
    print(4 * ' ' + '1' + 4 * ' ' + '2' + 4 * ' ' + '3')
    print('1', tablon1)
    print('2', tablon2)
    print('3', tablon3)
    print(20 * '-')
 
    # ===== formas de ganar: ===== Jugador 2 -----------------------------
 
    # --- Horizontal
    if tablon1[0] == 'O' and tablon1[1] == 'O' and tablon1[2] == 'O': SW=2
    if tablon2[0] == 'O' and tablon2[1] == 'O' and tablon2[2] == 'O': SW=2
    if tablon3[0] == 'O' and tablon3[1] == 'O' and tablon3[2] == 'O': SW=2
 
    # --- Vertical
    if tablon1[0] == 'O' and tablon2[0] == 'O' and tablon3[0] == 'O': SW=2
    if tablon1[1] == 'O' and tablon2[1] == 'O' and tablon3[1] == 'O': SW=2
    if tablon1[2] == 'O' and tablon2[2] == 'O' and tablon3[2] == 'O': SW=2
 
    # --- Diagonal
    if tablon1[0] == 'O' and tablon2[1] == 'O' and tablon3[2] == 'O': SW=2
    if tablon1[2] == 'O' and tablon2[1] == 'O' and tablon3[0] == 'O': SW=2
 
    if SW == 2:
        print(f'{name2} ¡¡Ganaste!!')
        exit()

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

problema con 3 en raya en python3

Publicado por Rolando José (43 intervenciones) el 02/07/2022 03:50:48
Yo le veo de problema que no hay una solucion heuristica sino una casi de fuerza bruta donde revisas las combinaciones y no creo que sea la forma de abordar el problema, no se si sea correcto, pero te doy una idea de como aborde este mismo problema en una competencia de programacion en 1991, cuando estaba en la universidad.

Si igualas las 9 posiciones del tablero y lo igualas al cuadro magico 3x3 cuya suma por calquier sentido es 15, resuelves mas facil los dosproblemas, tanto el de saber cuando un jugador ganacomo saber cual es el siguiente movimiento para neutralizar al adversario.

El cuadro magico es :

816
357
492

Sin importar donde lo mires los 3 en raya sumarian 15. Luego el jugador debe buscar 3 numeros que sumen 15 y ubicarlos en el tablero para ganar, o puedes saber si un jugador gana si tres de los numeros donde ha jugado suman 15.

Entonces reduces el problema a una funcion que revisa las jugadas y te dice si ya ganaste o donde debes jugar para alcanzar 15, si dependiendo de quien tenga el turno puede o ganarse el juego o neutralizarlo.

No se si me hice entender pero asi lo hice ya hace bastante tiempo y realmente asi tambien lo uso para jugar, miro las pocisiones donde juego y las cambio por los numeros del cuadro magico y con una sustraccion desde 15 logro saber cual es la mejor jugada siguiente de mi contrincante para neutralizarlo o para ganar.


Los dos vectores van acumulando las posiciones donde se juega con los numeros del cuadro magico.

Por ejemplo si A juega en el centro y B juega en una esquina 8 6 o 4 o 2 finalmente restando de 15 la solucion de la proxima jygada puede ser:

A 5 8 =5+8=13, LA MEJOR RESPUESTA ES 2 PARA DETENER ESA JUGADA Y EVITAR QUE TENGA 3 EN RAYA QUE SUMEN 15. UANDO HAY VARIAS OPCIONES ESA DECISION YA ES ALEATORIA.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar