1. #1
    Membre averti
    Homme Profil pro
    ValueError
    Inscrit en
    avril 2016
    Messages
    267
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ValueError

    Informations forums :
    Inscription : avril 2016
    Messages : 267
    Points : 382
    Points
    382

    Par défaut Jeu de bataille navale

    Salut,

    Je poste ici mon petit jeu de bataille navale joueur vs ordinateur réalisé avec tkinter, donc au graphisme on ne peut plus basique.
    Il traîne sur mon pc depuis pas mal de temps, autant le partager ici même s'il y a encore des améliorations à faire, ça pourra éventuellement servir aux plus néophytes que moi.

    Le fichier à lancer est jeu.py soit dans une console/terminal, soit en l'ouvrant directement avec python (python 3.4 au minimum).

    Pardonnez mes erreurs de programmation ou de logique, je sais que certaines choses ne sont pas très propres, notamment le module config de l'application et le contrôleur, quelques redondances mineures dans le code, le modèle objet parfois pas très propre, le « réinventage » de roue sur des objets tkinter, mais cela m'a prit moins de temps à créer certaines choses plutôt qu'à essayer d'agrémenter les widgets de bases tkinter (ttk c'est clairement pas possible, trop limité) comme je le souhaitais.

    L'IA est entièrement issue de mon cerveau, et là autant dire que j'ai dû me creuser la tête et revoir, revoir encore et encore cette IA afin d'en faire quelque chose de performant au niveau jeu, le code, bon c'est certain qu'il y a de l'amélioration à faire.
    Toutefois je suis tout de même satisfait du résultat, puisqu'elle fonctionne pas trop mal.
    Et surtout je me suis bien amusé à faire ce jeu.

    J'ai essayé de commenter et nettoyer mon code comme j'ai pu afin qu'il ne reste pas trop obscure.

    Normalement il n'y a aucun problème majeur, (j'ai testé sur Debian et Windows7, Mac-os je ne sais pas), sauf sur un point avec Windows, la fermeture fenêtre lors du tirage au sort empêche le thread de pouvoir se terminer et gèle la fenêtre, alors qu'en passant par le menu pour quitter, ou en redémarrant la partie en plein tirage, le problème n'est pas là, donc j'en conclus que cela provient de Windows et non de tkinter, et comme cet os me donne des boutons, j'ai cessé mes investigations pour essayer de pallier le problème, je suis donc passé outre en tuant directement python depuis lui-même...

    Je suis preneur de tout conseil concernant les améliorations, optimisations au niveau du code, erreurs de logique, bibliothèques que j'aurais pu utiliser, etc.

    Ah aussi, pardonnez mes grossières erreurs de traductions français => anglais, je suis plus que médiocre en la matière

    Edit :

    On m'a remonté une erreur au niveau de l'ia en cas de pas indéterminé; j'ai corrigé, et je me suis également attelé à effectuer une meilleure traduction.

  2. #2
    Membre averti
    Homme Profil pro
    ValueError
    Inscrit en
    avril 2016
    Messages
    267
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ValueError

    Informations forums :
    Inscription : avril 2016
    Messages : 267
    Points : 382
    Points
    382

    Par défaut C'est lourd de ne pas pouvoir éditer nos propres messages

    Bon, y'avait encore un bug, du coup j'ai ajouté une journalisation basique pour l'IA en mode juxtaposé uniquement, la flemme d'en faire une pour toute l'appli.
    Fichiers attachés Fichiers attachés

  3. #3
    Membre averti
    Homme Profil pro
    ValueError
    Inscrit en
    avril 2016
    Messages
    267
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ValueError

    Informations forums :
    Inscription : avril 2016
    Messages : 267
    Points : 382
    Points
    382

    Par défaut

    Salut,

    J'avais du temps à perdre, puis comme j'ai toujours envie d'améliorer sans cesse les scripts que je fait, ce script n'y échappant pas, j'ai fait pas mal de modifications au niveau du code.

    Les modifications et ajouts majeurs :

    - Suppression du thread.
    La principale raison est un problème de persistance en mémoire d'objets qui me gonflait depuis pas mal de temps.
    Bon au moins cela m'aura servi d'expérience d'arriver à faire plus ou moins tourner tkinter avec.
    [EDIT]
    J'avais oublié de préciser aussi qu'à force de triturer tkinter, et était certainement dû au thread, j'ai quand même réussi à me choper une « erreur de segmentation » lorsque je tentais d'accéder à une var tkinter (inexistante) qui m'aurait normalement jeté un TclError, mais segmentation fault, autant dire que cette erreur était inattrapable puisque bas niveau, d'ailleurs je me demande si c'est un comportement normal d'obtenir ce genre d'erreur même en poussant une bibliothèque dans ses retranchements.

    - Possibilité de faire jouer le jeu en mode démo, c'est à dire avec 2 joueurs virtuels.
    Ça sert à rien, mais ça me fait toujours marrer de voir un jeu jouer tout seul.

    - Possibilité de créer jusqu'à 4 grilles personnelles.
    Cela a été le plus gros du morceau, car en bon psychopathe que je suis, j'ai voulu garder un système où toutes les fenêtres peuvent ouvertes en même temps, donc cela implique de la mise à jour en temps réel sur les fenêtres (scores, préférences).

    - Une légère amélioration du positionnement aléatoire pour éviter qu'il y ait top de bateaux agglutinés les uns aux autres.

    Bon sinon beaucoup de revue de code, quelques erreurs (sans conséquences) étaient glissées dedans.
    J'ai mit une licence, mais à vrai dire je m'en moque, car les licences c'est un bordel sans nom dans tout ce qui existe.

    Voilà, si y'en a qui passent par ici en se bouchant le nez, ôtez vos doigts de votre nez, et si y'a des trucs qui sentent vraiment pas bon, faites m'en part, j'essaierais de passer un coup de désodorisant dessus

    Le fichier à lancer est bistouille, car j'aime bien qu'on me lance , il y a possibilité de passer quelques arguments à la commande, notamment pour utiliser le mode demo.

    Note, j'ai pas testé sur windows, mais pas de raison que ça ne fonctionne pas, d'autant que y'a désormais plus de thread.

    Ah, je suis toujours aussi nul pour faire de la traduction, et le resterai toujours
    Fichiers attachés Fichiers attachés

  4. #4
    Expert confirmé Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    novembre 2010
    Messages
    2 203
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : novembre 2010
    Messages : 2 203
    Points : 5 944
    Points
    5 944

    Par défaut

    Citation Envoyé par bistouille Voir le message
    ôtez vos doigts de votre nez


    Note, j'ai pas testé sur windows, mais pas de raison que ça ne fonctionne pas, d'autant que y'a désormais plus de thread.
    oui mais voilà...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >>> os.name
    'nt'
    >>> locale.getlocale()
    (None, None)
    et là, c'est le drame :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    C:\...\bistouille_navale>py -3 bistouille.py
    Traceback (most recent call last):
      File "bistouille.py", line 31, in <module>
        import libs
      File "C:\...\bistouille_navale\libs.py", line 39, in <module>
        import config
      File "C:\...\bistouille_navale\config.py", line 139, in <module>
        'langue':'fr' if 'fr' in locale.getlocale()[0] else 'en',
    TypeError: argument of type 'NoneType' is not iterable
    edit: locale.getdefaultlocale() en revanche me retourne ('fr_FR', 'cp1252') comme attendu, si ça peut aider...
    Avant donc que d'écrire, apprenez à penser.
    Selon que notre idée est plus ou moins obscure, l'expression la suit, ou moins nette, ou plus pure.
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément.
                                                        - Nicolas Boileau, L'Art poétique

  5. #5
    Membre averti
    Homme Profil pro
    ValueError
    Inscrit en
    avril 2016
    Messages
    267
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ValueError

    Informations forums :
    Inscription : avril 2016
    Messages : 267
    Points : 382
    Points
    382

    Par défaut

    Merci,

    Je m'en doutais que j'aurais du tester sur windows, j'ai rectifié l'archive, et en même temps rectifié également 2 oublis

Discussions similaires

  1. Débutant cherche à créer un jeu de bataille navale
    Par korallly dans le forum Débuter
    Réponses: 5
    Dernier message: 16/05/2011, 10h46
  2. directx7 : Jeu de bataille navale
    Par yvanovitch dans le forum Vos contributions VB6
    Réponses: 0
    Dernier message: 31/10/2009, 09h50
  3. Implémentation d'un jeu de bataille navale
    Par bories81 dans le forum Débuter
    Réponses: 12
    Dernier message: 10/11/2008, 09h58
  4. aide pour jeu de la bataille navale
    Par Jeannot Alpin dans le forum Delphi
    Réponses: 17
    Dernier message: 19/11/2006, 20h33

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