from random import * from kandinsky import * from time import * def creer_grille(size): return [[0 for _ in range(size)] for _ in range(size)] #création d'un tableau size*size de 0 ## Paramètres : direction=["vertical","horizontal"] #directions possibles tailles=[5,3,3,2,2] #tailles des bateaux ## Initialisation : grilleadvia=creer_grille(6) #création de la grille 6x6 de l'adversaire grillepersoia=creer_grille(6) #création de la grille 6x6 visible par l'adversaire grilleadvjoueur=creer_grille(6) #création de la grille 6x6 du joueur grillepersojoueur=creer_grille(6) #création de la grille 6x6 visible par le joueur bateauxia=[[] for _ in range(len(tailles)) ] #coordonnées des bateaux de l'IA bateauxjoueur=[[] for _ in range(len(tailles)) ] #coordonnées des bateaux du joueur jeu=False #Prend la valeur True lorsqu'un joueur gagne casesia=[[x,y] for x in range(6) for y in range(6)] #Coordonnées non-testés par l'IA def placement_bateau_aleatoire(taille,grille,n,bateaux): #placer un bateau de taille : taille positionnement=False while positionnement==False: positionnement=True dira=choice(direction) #direction du bâteau casex,casey=randint(0,5),randint(0,5) #coordonnées de la case aléatoire if dira== "horizontal": if casex+taille>5: positionnement=False if positionnement==True: for i in range(taille): if grille[casey][casex+i]!=0: positionnement=False if positionnement==True: for i in range(taille): grille[casey][casex+i]=1 bateaux[n].append([casex+i,casey]) if dira== "vertical": if casey+taille>5: positionnement=False if positionnement==True: for i in range(taille): if grille[casey+i][casex]!=0: positionnement=False if positionnement==True: for i in range(taille): grille[casey+i][casex]=1 bateaux[n].append([casex,casey+i]) return(grille,bateaux) def placement_bateaux(j,grille,tailles,bateaux): #placer les bateaux if j=="IA": for l in range(len(tailles)): placement_bateau_aleatoire(tailles[l],grille,l,bateaux) else: for l in range(len(tailles)): casex,casey,dira=int(input("Placement du bâteau de taille"+str(tailles[l])+". Choisissez la colonne")),int(input("Placement du bâteau de taille"+str(tailles[l])+". Choisissez la ligne")),input("Placement du bâteau de taille"+str(tailles[l])+". Choisissez la direction (horizontal/vertical)") if dira== "horizontal": for i in range(tailles[l]): grille[casey][casex+i]=1 bateaux[l].append([casex+i,casey]) if dira== "vertical": for i in range(tailles[l]): grille[casey+i][casex]=1 bateaux[l].append([casex,casey+i]) affichagegraphique(grille) return(grille,bateaux) def affichagegraphique(grille,x,y): xi=x for j in range(6): for i in range(6): if (j%2==0 and i%2==0) or (j%2!=0 and i%2!=0): if grille[j][i]==0: fill_rect(x,y,15,15,[225,225,225]) elif grille[j][i]==1: fill_rect(x,y,15,15,[0,0,0]) elif grille[j][i]==-1: fill_rect(x,y,15,15,[255,255,255]) else: fill_rect(x,y,15,15,[255,0,0]) else: if grille[j][i]==0: fill_rect(x,y,15,15,[185,185,185]) elif grille[j][i]==1: fill_rect(x,y,15,15,[0,0,0]) elif grille[j][i]==-1: fill_rect(x,y,15,15,[255,255,255]) else: fill_rect(x,y,15,15,[255,0,0]) x+=20 x=xi y+=20 sleep(2) def testbateaucoulé(bateauxadv,grilleperso): for i in range(len(bateauxadv)): coule==True for j in range(len(bateauxadv[i])): if grilleperso[bateauxadv[i][j][0][1]]!=1: coule=False #Le bateau n'a pas été touché en (x,y) ou a déjà été coulé pour le j-ème couple du bateau i break if coule==True: for j in range(len(bateauxadv[i])): grilleperso[bateauxadv[i][j][0][1]]=2 #Le bateau i est indiqué comme coulé return(coule,grilleperso) def test(x,y,grilleadv,grilleperso,bateauxadv): if grilleadv[y][x]==1: grilleperso[y][x]=1 coulé,grilleperso=testbateaucoulé(bateauxadv,grilleperso) if coulé==False: print("Touché") else: print("Coulé") else: grilleperso[y][x]=-1 print("Râté") return(grilleperso) #def testfindujeu(grille): doit renvoyer True si la grille est composée uniquement de 0 ou de 2 # for i in range(len(grille)): def ia_l1(cases): #IA Niveau - Jeu aléatoire coo=randint(0,len(cases)-1) x=cases[coo][0] y=cases[coo][1] del cases[coo] return(x,y,cases) grilleadvia,bateauxia=placement_bateaux("IA",grilleadvia,tailles,bateauxia) affichagegraphique(grilleadvia,0,0) #grilleadvjoueur=placement_bateaux("Joueur",grilleadvjoueur,tailles,bateauxjoueur) #ligne normale grilleadvjoueur,bateauxjoueur=placement_bateaux("IA",grilleadvjoueur,tailles,bateauxjoueur) #test affichagegraphique(grilleadvjoueur,160,0) while jeu==False: # Joueur : x,y=int(input("Coordonnée en x")),int(input("Coordonnées en y")) #coup du joueur grillepersojoueur=test(x,y,grilleadvia,grillepersojoueur,bateauxia) #jeu affichagegraphique(grillepersojoueur,0,100) # IA : x,y,casesia=ia_l1(casesia) grillepersoia=test(x,y,grilleadvjoueur,grillepersoia,bateauxjoueur) affichagegraphique(grillepersoia,160,100)