IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

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

Tkinter Python Discussion :

Projet de bataille navale


Sujet :

Tkinter Python

  1. #21
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Salut,

    Et pourquoi ne pas essayez de modifiez le jeu des couleurs pour que la couleur ne change pas lorsque le joueur se plante?

    note: vous ne montrez pas assez de code pour que je puisse vous répondre sur le jeu de bataille navale. Et le peu que vous en montrez me semble passablement compliqué.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  2. #22
    Membre à l'essai Avatar de clemissile
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 33
    Points : 10
    Points
    10
    Par défaut
    Salut,

    Citation Envoyé par wiztricks Voir le message
    Et pourquoi ne pas essayez de modifiez le jeu des couleurs pour que la couleur ne change pas lorsque le joueur se plante?
    C'est bon j'ai réussi à modifier ce bout de code pour que cela fonctionne, j'ai effectivement jouer sur les couleurs comme vous l'avez dit.

    Citation Envoyé par wiztricks Voir le message
    note: vous ne montrez pas assez de code pour que je puisse vous répondre sur le jeu de bataille navale. Et le peu que vous en montrez me semble passablement compliqué.
    D'accord, j’essaierais d'être plus précis la prochaine fois que j'en posterais.

    Je me pose une nouvelle question, je ne sais pas comment m'y prendre pour savoir si un bateau est coulé ou non (pour le moment je gère seulement si un bateau est touché ou non). Si vous avez un idée pour me dire comment je devrais débuter, je suis preneur!

    Cordialement,
    Clemissile

  3. #23
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Citation Envoyé par clemissile Voir le message
    Je me pose une nouvelle question, je ne sais pas comment m'y prendre pour savoir si un bateau est coulé ou non (pour le moment je gère seulement si un bateau est touché ou non). Si vous avez un idée pour me dire comment je devrais débuter, je suis preneur!
    Un bateau est une liste de cases (i, j) occupées.

    Une case de l'ensemble des cases 10x10 est libre ou occupée par un bateau - i.e. la liste.
    Un tir sur la case (i, j) "touche" s'il y a un bateau associé et que sa liste de cases contient toujours (i, j).
    Dans ce cas, on supprime le (i, j) et on teste si la liste est vide: "coulé" ou pas: "touché".
    note: dans ce cas, les cases (i,j) correspondant au bateau pointent vers une même liste de cases éventuellement vide.


    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  4. #24
    Membre à l'essai Avatar de clemissile
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 33
    Points : 10
    Points
    10
    Par défaut
    Salut,

    Je ne vois pas comment je peux faire ça, étant donné que pour savoir où sont les bateaux, je mets chacune des cases dans une liste (bateauxActifsJ1 ou J2). Pour utiliser votre technique, il me semble qu'il faut une liste pour chaque bateaux.

    Pour l'instant voilà ma fonction qui tire une case pour l'ordinateur :

    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
     
    def tir_o(): #Fonction qui gère le torpillage aléatoire de l'ordinateur
        global casesTireesJ2
        global bateauxActifsJ1
        i,j=randint(0,nbcase-1),randint(0,nbcase-1)
        if [i,j] not in casesTireesJ2:
            casesTireesJ2+=[[i,j]]
            if [i,j] in bateauxActifsJ1:
                bateauxActifsJ1.remove([i,j])
                Tour.delete("0.0",END)
                Tour.insert(END,"Touché !")
                if i in range(nbcase) and j in range (nbcase):
                    can.create_rectangle(x0+case*j,y0+case*i,x0+case*(j+1),y0+case*(i+1),fill="red")
            else:
                Tour.delete("0.0",END)
                Tour.insert(END,"Raté !")
                if i in range(nbcase) and j in range (nbcase):
                    can.create_rectangle(x0+case*j,y0+case*i,x0+case*(j+1),y0+case*(i+1),fill="dark blue")
        else:
            Tour.delete("0.0",END)
            Tour.insert(END,"Case déjà tirée")
        fenetre.after(1000,jeu1)
    Ce n'est pas possible de savoir si un bateau est coulé avec une liste contenant toutes les coordonnées (i,j) de chaque bateau? J'imagine qu'il faudra créer une fonction est_coule qui retournera un booléen.

    Cordialement,
    Clemissile

  5. #25
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Citation Envoyé par clemissile Voir le message
    Je ne vois pas comment je peux faire ça, étant donné que pour savoir où sont les bateaux, je mets chacune des cases dans une liste (bateauxActifsJ1 ou J2). Pour utiliser votre technique, il me semble qu'il faut une liste pour chaque bateaux.
    Si vous ne stockez pas d'une façon ou d'une autre quels sont les (i, j) d'un bateau pas facile de savoir quand il sera "coulé".
    Reprenez votre liste bateauxActifsJ1: c'est l'ensemble des cases occupées par les parties d'un bateau.
    C'est une structure sympa. pour décider "touché" ou "à l'eau" mais insuffisant pour savoir ou en est chaque bateau.

    Inversez la logique: plutôt que d'avoir une liste de cases occupées, imaginez avoir une representation de toutes les cases.
    A un (i, j) donné, vous savez non seulement que la case est occupée mais en plus par quoi (quel bateau).
    Au départ, vos cases sont "libres", ce qu'on peut initialiser de la façon suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    >>> cases = dict()
     
    >>> for i in range(10):
    ...     for j in range(10):
    ...         cases[i, j] = False
    ...
    Puis, soit un bateau qui occupe les cases:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >>> b = [ (1,2), (1, 3) ]
    >>>
    Pour en rendre compte côté "cases":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >>> for i, j in b:
    ...     cases[i, j] = b
    ...
    => une case occupée contient un bateau (qui est aussi True.)
    Si on tire sur (1, 2), on récupéré le bateau
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >>> b= cases[1, 2]
    >>> b
    [(1, 2), (1, 3)]
    >>>
    on supprime la case du bateau (s'il en reste):
    Il y a certainement d'autres façons de coder çà.
    Mais si vous ne traduisez pas d'une façon ou d'une autre ce que sont les cases d'un bateau, pas facile de savoir quand il sera coulé ou pas.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  6. #26
    Membre à l'essai Avatar de clemissile
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 33
    Points : 10
    Points
    10
    Par défaut
    Salut,

    Pour ce que tu montres en première, avec les cases vides et qu'on remplit par un bateau b pour savoir si la case est occupée et par quoi : ça j'ai bien compris comment cela fonctionnait.

    Par contre, pour la phase du tir, je ne comprends pas. J'ai essayé de créer un petit programme pour essayer le tir et autres, voilà ce que ça donne :

    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
     
    cases=dict()
     
    for i in range(10):
        for j in range(10):
            cases[i, j] = False
     
    def ajout_bat(b):
        for i, j in b:
            cases[i, j] = b
     
    def tir(i,j):
        for x in cases.keys():
            if cases[i,j]==True:
                return cases[i,j]
    C'est au niveau de la fonction tir(), je ne vois pas comment la faire fonctionner convenablement, pour quelle retourne le bateau qu'on est entrain de tirer.

    Cordialement,
    Clemissile

  7. #27
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Un truc comme çà peut être:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    def tir(i, j):
         bateau = cases[i, j]
         if not bateau:
              return "plouf"
         if (i, j) in bateau:
              bateau.remove( (i, j) )
              if len(bateau):
                     return "touché"
              else:
                     return "coulé"
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  8. #28
    Membre à l'essai Avatar de clemissile
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 33
    Points : 10
    Points
    10
    Par défaut
    Je viens d'essayer votre fonction, lorsque je tire sur un bateau, elle ne retourne rien... Pourtant avec votre exemple, les cases (1,2) et (1,3) sont bel et bien occupées pour un tir sur l'un des cases ne retourne rien. Je ne vois d'où cela peut venir...

    Cordialement,
    Clemissile

  9. #29
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Citation Envoyé par clemissile Voir le message
    Je viens d'essayer votre fonction, lorsque je tire sur un bateau, elle ne retourne rien... Pourtant avec votre exemple, les cases (1,2) et (1,3) sont bel et bien occupées pour un tir sur l'un des cases ne retourne rien. Je ne vois d'où cela peut venir...

    Cordialement,
    Clemissile
    Je ne vois pas comment vous vous débrouillez: postez du code.
    Exemple:
    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
     
    >>> def tir(i, j):
    ...      bateau = cases[i, j]
    ...      if not bateau:
    ...           return "plouf"
    ...      if (i, j) in bateau:
    ...           bateau.remove( (i, j) )
    ...           if len(bateau):
    ...                  return "touché"
    ...           else:
    ...                  return "coulé"
    ...
    >>> cases=dict()
    >>> for i in range(10):
    ...     for j in range(10):
    ...         cases[i, j] = False
    ...
    >>> b = [ (1,2), (1, 3) ]
    >>> for i, j in b:
    ...     cases[i, j] = b
    ...
    >>> tir(1,1)
    'plouf'
    >>> tir(1,2)
    'touché'
    >>> tir(1,2)
    >>> tir(1,3)
    'coulé'
    >>>
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  10. #30
    Membre à l'essai Avatar de clemissile
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 33
    Points : 10
    Points
    10
    Par défaut
    C'est bon, j'ai rectifié cela ça marche dorénavant.

    J'ai essayé d'adapter ça à la bataille navale, voici ce que j'ai donc rajouté au début de mon programme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    casesJ2=dict()
    for i in range(nbcase):
        for j in range(nbcase):
            casesJ2[i, j] = False
    Voilà ce que ça donne pour la fonction qui gère les tirs du joueur :

    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
     
    def tir_j(event): #Fonction qui gère le clic sur la grille adverse
        global casesTireesJ1
        global casesJ2
        i,j=correspond_g2(event.x,event.y)
        if [i,j] not in casesTireesJ1: #On vérifie que la case n'a pas déjà été tirée
            casesTireesJ1+=[[i,j]]
            tir(i,j)
        else:
            Tour.delete("0.0",END)
            Tour.insert(END,"Case déjà tirée")
        fenetre.after(1000,jeu1)
     
    def tir(i,j):
         bateau = cases[i, j]
         if not bateau:
              Tour.delete("0.0",END)
              Tour.insert(END,"Raté !")
              if i in range(nbcase) and j in range (nbcase):
                    can.create_rectangle(x1+case*j,y1+case*i,x1+case*(j+1),y1+case*(i+1),fill="dark blue")
         if (i, j) in bateau:
              bateau.remove( (i, j) )
              if len(bateau):
                    Tour.delete("0.0",END)
                    Tour.insert(END,"Touché !")
                    if i in range(nbcase) and j in range (nbcase):
                        can.create_rectangle(x1+case*j,y1+case*i,x1+case*(j+1),y1+case*(i+1),fill="red")
              else:
                    Tour.delete("0.0",END)
                    Tour.insert(END,"Coulé !")
                    if i in range(nbcase) and j in range (nbcase):
                        can.create_rectangle(x1+case*j,y1+case*i,x1+case*(j+1),y1+case*(i+1),fill="red")
    Et voilà la fonction qui gère le placement des bateaux de l'ordinateur :

    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
     
    def place_o(): #Fonction qui choisit les coordonnées des bateaux de l'ordinateur
        global casesJ2
        orien=randint(0,1) #orientation du bateau: 0=vertical, 1=horizontal
        for y in dico_bat.values():
            if orien==0:
                while True:
                    a,b=randint(0,(nbcase-1)-y),randint(0,nbcase-1)
                    cases=create_cases(orien,a,b,y)
                    if est_placable(cases):
                        break
                for i,j in cases:
                    casesJ2[i,j]=cases
            else:
                while True:
                    a,b=randint(0,nbcase-1),randint(0,(nbcase-1)-y)
                    cases=create_cases(orien,a,b,y)
                    if est_placable(cases):
                        break
                for i,j in cases:
                    casesJ2[i,j]=cases
     
    def create_cases(orien,a,b,y): #Fonction qui créé les cases du bateau
        cases=[]
        if orien==0:
            for i in range(0,y):
                cases+=[[a+i,b]]
        else:
            for i in range(0,y):
                cases+=[[a,b+i]]
        return cases
     
    def est_placable(cases): #Fonction qui teste si un bateau est plaçable
        for case in cases:
            if case in casesJ2:
                return False
            return True
    Cependant, ça n'a pas l'air de bien fonctionner de cette façon. J'aimerais votre avis sur les choses à modifier pour que cela fonctionne.

    Cordialement,
    Clemissile

  11. #31
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Citation Envoyé par clemissile Voir le message
    Cependant, ça n'a pas l'air de bien fonctionner de cette façon. J'aimerais votre avis sur les choses à modifier pour que cela fonctionne
    "ça n'a pas l'air de bien fonctionner" se traduit comment "techniquement parlant"?

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  12. #32
    Membre à l'essai Avatar de clemissile
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 33
    Points : 10
    Points
    10
    Par défaut
    Salut,

    Hé bien, le programme ne se lance même plus et en réponds pas...

  13. #33
    Membre à l'essai Avatar de clemissile
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 33
    Points : 10
    Points
    10
    Par défaut
    Je me suis penché sur le code, et pour moi le problème vient de la fonction est_placable :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    def est_placable(cases): #Fonction qui teste si un bateau est palaçable
        for case in cases:
            if case in casesJ2:
                return False
            return True
    J'ai donc décidé de la modifier de cette façon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    def est_placable(cases): #Fonction qui teste si un bateau est palaçable
        for case in cases:
            if case in casesJ:
                 if case==True:
                     return False
                 return True
    De prime abord, cela semble fonctionner. Merci de me donner votre avis quand à la modification de cette fonction (si elle vous parait judicieuse ou non).

    Cordialement,
    Clemissile

  14. #34
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Salut,

    Pourquoi ne pas écrire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    def est_placable(bateau, cases):
         for pt in bateau:
              if cases[pt]:
                    return False
         return True
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  15. #35
    Membre à l'essai Avatar de clemissile
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 33
    Points : 10
    Points
    10
    Par défaut
    Salut,

    Par rapport à ma fonction place_o(), je ne vois pas à quoi l'argument "bateau" correspond. Il doit forcément être composé d'entier à cause du "cases[pt]" mais je ne vois ce qui peut faire l'affaire.

    Cordialement,
    Clemissile

  16. #36
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Essayez de donner des noms plus clairs à vos variables et fonctions:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
                    a,b=randint(0,(nbcase-1)-y),randint(0,nbcase-1)
                    bateau=create_bateau(orien,a,b,y)
                    if est_placable(bateau, casesJ2):
                             ...
    Ecrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    def est_placable(bateau, cases):
         for pt in bateau:
              if cases[pt]:
                    return False
         return True
    devrait être la même chose que:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    def est_placable(bateau, cases):
         for i, j in bateau:
              if cases[i, j]:
                    return False
         return True
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  17. #37
    Membre à l'essai Avatar de clemissile
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 33
    Points : 10
    Points
    10
    Par défaut
    Salut,

    C'est bon, j'ai modifié tout ça et cela fonctionne dorénavant.

    Maintenant, dans le cadre de notre projet, on a plusieurs "options" que l'on peut ajouter pour améliorer notre jeu. J'aimerais donc que l'utilisateur est la possibilité de faire varier la taille de grilles, le nombre de bateaux etc...
    Pour se faire, j'ai créé un menu dans voici le code :

    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
     
    #Création d'un widget Menu
    menubar = Menu(fenetre)
     
    menufichier = Menu(menubar, tearoff = 0) #création d'un sous-menu "Fichier"
    menufichier.add_command(label = "Nouveau jeu", command = new_game)
    menufichier.add_command(label = "Joueur contre l'ordinateur", command = jouer_contre_ordi)
    menufichier.add_separator() #trait de séparation
    menufichier.add_command(label = "Quitter", command = fenetre.destroy)
    menubar.add_cascade(label = "Fichier", menu = menufichier)
     
    menuoption = Menu(menubar, tearoff = 0) #création d'un sous-menu "Options"
    menuoption.add_command(label = "Règles du jeu", command = regles)
    menuoption.add_command(label = "Afficher les bateaux de l'ordinateur", command = triche)
    menubar.add_cascade(label = "Options", menu = menuoption)
     
    menuaide = Menu(menubar, tearoff = 0) #création d'un sous-menu "Aide"
    menuaide.add_command(label = "Aide", command = aide)
    menuaide.add_separator() #trait de séparation
    menuaide.add_command(label = "A propos", command = apropos)
    menubar.add_cascade(label = "?", menu = menuaide)
    Dans mon sous-menu "Options", j'aimerais ajouter une fonction Paramètres qui permettrait à l'utilisateur de sélectionner la taille de grille (avec un max et min), le nombres de bateau etc... Est-ce possible de mettre cela en place avec des boites de dialogues (que j'utilise pour certaines fonctions du menu) ? Ou alors, avez-vous une piste pour m'aider à commencer cette fonction ?

    Cordialement,
    Clemissile

  18. #38
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Salut,

    Citation Envoyé par clemissile Voir le message
    Est-ce possible de mettre cela en place avec des boites de dialogues (que j'utilise pour certaines fonctions du menu) ? Ou alors, avez-vous une piste pour m'aider à commencer cette fonction ?
    Il faut vous familiariser avec les boîtes de dialogues comme décrit ici.
    Et peut être ouvrir un nouveau sujet si vous ne vous en sortez pas.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  19. #39
    Membre à l'essai Avatar de clemissile
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 33
    Points : 10
    Points
    10
    Par défaut
    D'accord, je vais essayer de regarder tout cela, merci beaucoup pour votre aide en tout cas!

    Au fait, merci pour les cours et tutoriels pour apprendre Python et la FAQ Python, en particulier ce livre est génial : Apprendre à programmer avec Python 3 par Gérard Swinnen

    Cordialement,
    Clemissile

Discussions similaires

  1. projet de bataille navale
    Par tropicthunder dans le forum Général Python
    Réponses: 1
    Dernier message: 22/04/2015, 16h26
  2. Bataille navale projet
    Par lorli911 dans le forum Général Python
    Réponses: 2
    Dernier message: 01/04/2015, 15h44
  3. bataille navale, un projet bateau (haha)
    Par Dendrite dans le forum Débuter
    Réponses: 11
    Dernier message: 26/01/2010, 16h18
  4. Projet de bataille navale
    Par hichamtimberlake dans le forum C
    Réponses: 1
    Dernier message: 23/05/2009, 13h22
  5. [LG]Programme Bataille Navale en Pascal
    Par RaFaL dans le forum Langage
    Réponses: 21
    Dernier message: 10/06/2003, 21h22

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