Bataille Navale Python

Navigation

Inscrivez-vous gratuitementpour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

  • Vous n'êtes pas encore inscrit sur Developpez.com ? Inscrivez-vous gratuitement !
  • Recherche avancée
  • Accueil
  • Forum
  • Autres langages
  • Python
  • Général Python
  • bataille navale Python
+ Répondre à la discussion Python Discussion : bataille navale Python Sujet :

Python

  • Outils de la discussion
    • Afficher une version imprimable
    • S'abonner à cette discussion…
  • Affichage
    • Mode linéaire
    • Choisir le mode hybride
    • Choisir le mode arborescent
  1. 09/05/2018, 10h21 #1 bigben38 bigben38 est déconnecté Nouveau candidat au Club Homme Profil pro LycéenInscrit enMai 2018Messages1Détails du profilInformations personnelles :Sexe : HommeLocalisation : France, Isère (Rhône Alpes)Informations professionnelles :Activité : LycéenInformations forums :Inscription : Mai 2018Messages : 1 Par défaut bataille navale Python
    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
    123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165#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!!!")
    Répondre avec citation Répondre avec citation 0 0
  2. 09/05/2018, 11h45 #2 lg_53 lg_53 est déconnecté Membre Expert Homme Profil pro Ingénieur calcul scientifiqueInscrit enMars 2013Messages1 229Détails du profilInformations personnelles :Sexe : HommeLocalisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)Informations professionnelles :Activité : Ingénieur calcul scientifiqueInformations forums :Inscription : Mars 2013Messages : 1 229 Par défaut
    Chez moi ca fonctionne à part que tu ne demande pas au 2eme joueur de placer lui aussi ses bateaux ... A part ce point, diverse remarques : 1) Ca serait bien de préciser la taille du bateau que tu demandes de placer pour plus de clareté pour l'utilisateur. 2) Pour être plus sympa côté utilisateur, plutot que de demander et X et Y, on pourrait juste demander la position (par exemple, l'utilisateur entre A1, on laisse sous forme chaine de caractère), et toi tu retraduis que ca correspond à X=0 et Y=0 Suffit de te faire une fonction pour ca, qui prendrait le premier caractère puis le passerais à ce dico par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {'A':0,'B':1, ... etc ... } , et pour le chiffre après, juste transformer le caractère en chiffre et retrancher 1 (pour que l'utilisateur commence à 1, et que python comprenne 0). 3) Ensuite il y a des choses immondes dans ton code ! Par exemple tu écris des choses dont la structure est comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1234567891011for tour_placement in range(4): if tour_placement == 0: tache if tour_placement == 1: autre_tache if tour_placement == 2: encore_une_autre_tache if tour_placement == 3: etc ... if tour_placement == 4: etc ..
    Si tu dois tester à chaque fois l'indice de ta boucle alors quel est l'intéret de la boucle ? Pourquoi ne pas écrire directement la suite des taches à faires comme ceci ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    123456 tache autre_tache encore_une_autre_tache etc ... etc ..
    Et là plus besoin de boucle ni de if. Ensuite ca, ca serait si tes taches étaient vraiment différentes les unes des autres. Là non pas du tout, ca fait juste mettre un bateau sur une carte. Fais toi une fonction du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    123def ajoute_bateau_sur_carte(num_carte, bateau, code_bateau) : for position in bateau : carte[num_carte][position[0]][position[1]] = code_bateau
    et après simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    123456789101112131415for tour_placement,longueur_bateau in enumerate([2,3,3,4,5]): 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 bateau = construire_bateau((position1,position2),(coucou),longueur_bateau) ajoute_bateau_sur_carte(0, bateau, 5-tour_placement)
    4) Autre chose qui ne va pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    123for tour_placement in range(4): ## ... tour_placement = tour_placement + 1
    Non! La structure for va déjà incrémenter toute seule la variable tour_placement ! Suffit d'écrire ceci pour s'en rendre compte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    12for i in range(4): print(i)
    5) Fait toi également une fonction qui affiche en console la grille de manière sympa (plutot que d'avoir juste ta liste de liste brut). Ca pourrait afficher qqch comme ca par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    123456789101112 | A B C D E F G H I J ----+-------------------------------- 1 | -5 0 0 0 0 0 0 0 0 0 2 | 5 0 0 0 0 0 0 0 0 0 3 | 0 0 4 0 0 0 0 0 0 0 4 | 0 0 4 0 0 0 0 0 0 0 5 | 0 0 4 0 3 0 0 0 0 0 6 | 0 0 0 0 3 0 0 0 0 0 7 | 0 0 0 0 3 0 2 0 0 0 8 | 0 0 0 0 0 0 2 0 0 0 9 | 0 0 0 0 0 0 2 0 0 0 10 | 0 0 0 0 0 0 2 0 0 0
    Répondre avec citation Répondre avec citation 0 0
+ Répondre à la discussion
ActualitésF.A.Q PYTHONTUTORIELS PYTHONSOURCES PYTHONOUTILS PYTHONLIVRES PYTHONPyQt
  • Accueil
  • Forum
  • Autres langages
  • Python
  • Général Python
  • bataille navale Python
« Discussion précédente | Discussion suivante »

Discussions similaires

  1. Bataille navale c Par idealj78 dans le forum C Réponses: 5 Dernier message: 07/12/2006, 00h42
  2. aide pour jeu de la bataille navale Par Jeannot Alpin dans le forum Delphi Réponses: 17 Dernier message: 19/11/2006, 21h33
  3. bataille navale Par keenurives dans le forum C Réponses: 7 Dernier message: 21/11/2005, 13h15
  4. [LG]Programme Bataille Navale en Pascal Par RaFaL dans le forum Langage Réponses: 21 Dernier message: 10/06/2003, 22h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo

Tag » Code Bataille Navale Python