Bonjour à tous,
Je suis en Terminale option ISN et je dois présenter un jeu de bataille navale sous Python. C'est un jeu opposant 2 joueurs (pas contre l'ordinateur) et le placement des bateaux est manuel.
Malheureusement, il plante à la mise en place des bateaux. Merci de votre aide

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
#Grille comportant les bateaux
 
carte = [ #Grille du joueur B
          [ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],  # x = 0
            [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],  # x = 1
            [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],  # x = 2
            [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],  # ...
            [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
            [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
            [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
            [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
            [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
            [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
      #y-->  0  1  2  3  4 ...
          ],
          #Grille joueur A
          [ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
            [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
            [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
            [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
            [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
            [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
            [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
            [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
            [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
            [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
          ]
        ]
#Liste des bateaux avec leur longueur
# Bateau n 1 ==> longueur = 5
# Bateau n 2 ==> longueur = 4
# ...
# correspond au nombre de coup restant aÃÃâ€*’‚ÂÂÂÂÂ* couler
bateaux = [[0,5,4,3,2,1],
           [0,2,3,0,0,0]]
 
#Fonction sommant le nb de coup restant aÂÂÂÂ* couler
def fct_non_trouve(grille):
    total=0
    for reste in grille:
        total = total + reste
    return(total)
import random
#print(fct_non_trouve(bateaux))
#Debut du jeu
 
#Saisie des noms des joueurs
Nom_joueur_A = input("Nom du joueur A: ")
Nom_joueur_B = input("Nom du joueur B: ")
 
#determination qui commence le jeu
liste_joueurs = [Nom_joueur_A, Nom_joueur_B]
Qui_joue = random.choice(liste_joueurs)
index_joueur = liste_joueurs.index(Qui_joue)
#-------------------------------------------------------------------------------
def ajouter(point, vecteur):
    x, y = point
    dx, dy = vecteur
    return x+dx, y+dy
 
 
def construire_bateau (pt, dir, lg):
    x, y = pt
    dx, dy = dir
    bateau = [pt]
    pt = ajouter(pt,dir)
    for i in range (lg-1):
        bateau.append(pt)
        pt = ajouter(pt,dir)
    return bateau
 
 
print("Joueur ",Nom_joueur_A," place ces bateaux")
for tour_placement in range(4):
    position1 = int(input("X"))
    position2 = int(input("Y"))
    orientation = int( input("orientation 6 = Est / 4 = Ouest / 8 = Nord / 2 = Sud"))
    if orientation == 6:
        coucou = 0,1
    elif orientation == 4:
        coucou = 0,-1
    elif orientation == 8:
        coucou = -1,0
    elif orientation == 2:
        coucou = 1,0
 
    if tour_placement == 0:
        bateau_1 = construire_bateau((position1,position2),(coucou),2)
        carte[0][bateau_1[0][0]][bateau_1[0][1]] = 5
        carte[0][bateau_1[1][0]][bateau_1[1][1]] = 5
 
    if tour_placement == 1:
        bateau_2 = construire_bateau((position1,position2),(coucou),3)
        carte[0][bateau_2[0][0]][bateau_2[0][1]] = 4
        carte[0][bateau_2[1][0]][bateau_2[1][1]] = 4
        carte[0][bateau_2[2][0]][bateau_2[2][1]] = 4
 
    if tour_placement == 2:
        bateau_3 = construire_bateau((position1,position2),(coucou),3)
        carte[0][bateau_3[0][0]][bateau_3[0][1]] = 3
        carte[0][bateau_3[1][0]][bateau_3[1][1]] = 3
        carte[0][bateau_3[2][0]][bateau_3[2][1]] = 3
 
    if tour_placement == 3:
        bateau_4 = construire_bateau((position1,position2),(coucou),4)
        carte[0][bateau_4[0][0]][bateau_4[0][1]] = 2
        carte[0][bateau_4[1][0]][bateau_4[1][1]] = 2
        carte[0][bateau_4[2][0]][bateau_4[2][1]] = 2
        carte[0][bateau_4[3][0]][bateau_4[3][1]] = 2
 
    if tour_placement == 4:
        bateau_5 = construire_bateau((position1,position2),(coucou),5)
        carte[0][bateau_5[0][0]][bateau_5[0][1]] = 1
        carte[0][bateau_5[1][0]][bateau_5[1][1]] = 1
        carte[0][bateau_5[2][0]][bateau_5[2][1]] = 1
        carte[0][bateau_5[3][0]][bateau_5[3][1]] = 1
        carte[0][bateau_5[4][0]][bateau_5[4][1]] = 1
 
 
    tour_placement = tour_placement + 1
 
 
 
print(carte[0])
#-------------------------------------------------------------------------------
 
 
 
 
while True:
    print("Joueur ",Qui_joue, " joue")
    tir_x = int(input("Position x: (entrer une valeur entre: 0-9) "))
    while tir_x > 9 or tir_x < 0 :
        tir_x = int(input("La position x entre n est pas dans la grille: (entrer une valeur entre: 0-9) "))
    tir_y = int(input("Position y: (entrer une valeur entre: 0-9) "))
    while tir_y > 9 or tir_y < 0 :
        tir_y = int(input("La position y pas dans la grille: (entrer une valeur entre: 0-9) "))
    num_bateau = carte[index_joueur][tir_x][tir_y]
    # toucher pas toucher
    if num_bateau > 0 :
        bateaux[index_joueur][num_bateau] -= 1
        print("touche!!!!!")
        if bateaux[index_joueur][num_bateau] == 0:
            print("bateau num", num_bateau ," coule")
        carte[index_joueur][tir_x][tir_y] = -carte[index_joueur][tir_x][tir_y]
    else:
        print("plouf...")
        carte[index_joueur][tir_x][tir_y] = carte[index_joueur][tir_x][tir_y] - 10
 
 
    #Controle fin de partie
    if fct_non_trouve(bateaux[index_joueur]) == 0:
        break
 
    #changer de joueur
    if carte[index_joueur][tir_x][tir_y] < -10 :
        Qui_joue = Qui_joue
    else:
        if index_joueur == 0 :
            Qui_joue = liste_joueurs[1]
        else:
            Qui_joue = liste_joueurs[0]
    index_joueur = liste_joueurs.index(Qui_joue)
    print(carte)
print("Joueur ", Qui_joue, " a coule tous les bateaux ennemis!!!")