Bonjour à tous,

Dans le cadre de ma première année de Licence Informatique, je dois réaliser une bataille navale en python. J'ai bien avancé mais j'ai un problème qui subsiste : quand je place les bateaux de l'ordinateur aléatoirement, malgré une fonction test, je me retrouve avec des bateaux qui se chevauche. Je vous met les deux fonctions qui pause problème :

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
 
def place_o(): #Fonction qui choisit les coordonnées des bateaux de l'ordinateur
    global bateauxActifsOrdi
    global test
    for y in dico_bat.values():
        orien=randint(0,1) #orientation du bateau: 0=vertical, 1=horizontal
        if orien==0:
            a,b=randint(0,(nbcase-1)-y),randint(0,nbcase-1) 
            while test==False:
                res=est_placable(orien,a,b,y)
                test,a,b=res[0],res[1],res[2]
            for i in range (0,y):
                bateauxActifsOrdi+=[[a+i,b]]
        else:
            a,b=randint(0,nbcase-1),randint(0,(nbcase-1)-y)
            while test==False:
                res=est_placable(orien,a,b,y)
                test,a,b=res[0],res[1],res[2]
            for i in range (0,y):
                bateauxActifsOrdi+=[[a,b+i]]
 
def afficheBat():
    for i in range(len(bateauxActifsOrdi)):
        a=bateauxActifsOrdi[i][0]
        b=bateauxActifsOrdi[i][1]
        can.create_rectangle(x1+case*b,y1+case*a,x1+case*(b+1),y1+case*(a+1),fill="red")
 
def est_placable(z,x,y,taille): #Fonction qui teste si un bateau en recouvrira un autre
    global test
    test=False
    if z==0:
        for i in range (0,taille):
            if [x+i,y] in bateauxActifsOrdi:
                x,y=randint(0,(nbcase-1)-taille),randint(0,nbcase-1)
                est_placable(z,x,y,taille)
            else:
                test=True
                return [test,x,y]
    else:
        for i in range (0,taille):
            if [x,y+i] in bateauxActifsOrdi:
                x,y=randint(0,nbcase-1),randint(0,(nbcase-1)-taille)
                est_placable(z,x,y,taille)
            else:
                test=True
                return [test,x,y]
Si vous pouviez m'expliquer d'où vient le problème, et m'aiguillez sur une solution se serait parfait!
Merci d'avance.

Cordialement,
Clemissile