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

Python Discussion :

Création du jeu Voltorb Flip sous Python


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2013
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mai 2013
    Messages : 22
    Par défaut Création du jeu Voltorb Flip sous Python
    Bonjour, dans le cadre de mes études, je me suis donné pour projet de réaliser le jeu Voltorb Flip en language Python.
    Peut-être ne connaissez-vous pas ce jeu, aussi, si les curieux souhaite y jeter un oeil, sachez que je l'ai trouvé en Javascript sur ce lien ci-dessous :
    http://www.mwyann.com/voltorbflip.html

    Avant de vous copier/coller ce que j'ai commencé comme programme, j'aimerais vous expliquer très rapidement les règles du jeu afin de vous dire ce qu'il me reste à faire (et également ce que je n'arrive pas à faire).

    Nous avons un tableau 5x5 dont chaque case renferme une valeur contenue dans un intervalle fermé de 0 à 3. Si le joueur retourne une case contenant un 0, il perd la partie. Le but du jeu est de retourner toutes les cases contenant des 2 et des 3. Pour que la réussite de la partie ne s'applique pas par pur hasard, des indices servent à aider le joueur quant aux probables positions des 0, 1, 2 et 3. Ces indices sont caractérisés par des chiffres se trouvant à droite et en bas du tableau du jeu. Il existe deux types d'indices pour ce jeu :
    _ un chiffre donnant la somme des chiffres présentes sur une ligne/colonne.
    _ un chiffre donnant le nombre de 0 présents sur une ligne/colonne.

    Voici maintenant mon début de programme :

    from Tkinter import *
    import random
    from operator import add

    # création de la fenetre principale sous TKinter

    Fenetre = Tk()
    Fenetre.title('LeJeu')

    nombre_de_mine = 6
    nombre_de_un = 14
    nombre_de_deux = 3
    nombre_de_trois = 2
    k = -1
    r = random.randint(0,24)
    n = 0
    s = 0

    cases = [k , k , k , k , k , k , k , k , k , k , k , k , k , k , k , k , k , k , k , k , k , k , k , k , k]

    compteur = 0
    while compteur < nombre_de_mine:
    r = random.randint(0,24)
    if cases[r] == -1:
    cases[r] = 0
    compteur = compteur + 1

    compteur = 0
    while compteur < nombre_de_deux:
    r = random.randint(0,24)
    if cases[r] == -1:
    cases[r] = 2
    compteur = compteur + 1

    compteur = 0
    while compteur < nombre_de_trois:
    r = random.randint(0,24)
    if cases[r] == -1:
    cases[r] = 3
    compteur = compteur + 1

    for r in range (25):
    if cases [r] == -1:
    cases[r] = 1

    print cases

    for i in range(5):
    for j in range(5):

    l = Label(text= cases[n], relief=RIDGE)
    l.grid(row=i, column=j, sticky=NSEW)
    n = n + 1
    reduce(add, cases[:4])
    print s

    Fenetre.mainloop()
    Avec ceci, j'arrive à créer mon tableau 5x5 sur Tkinter. J'ai également fais en sorte que les valeurs allant de 0 à 3 soient placés de manière aléatoire sur celui-ci.
    Sauf que j'ai fais le plus facile (du moins je pense) et il me reste à faire ceci :
    _ créer les indices i et j avec : i qui donne la somme des valeurs présentes sur chaque ligne et colonne; j qui donne le nombre de 0 présents sur chaque ligne et colonne
    _ créer un booléen (je pense que c'est ça) qui me permet de faire en sorte que chaque case soit au début du jeu face cachée et créer une fonction qui me permettra de retourner les cases en cliquant dessus
    _ définir les conditions d'arrêt du jeu.

    Je ne suis pas très doué en language Python (ni dans les autres languages d'ailleurs) et j'ai cherché sur internet à créer mon booléen. Je me suis rendu sur des sites où je pouvais télécharger des Démineur écrit en Python, mais même avec ça je n'ai pas su trouver les lignes de programmation qui m'intéressais.
    Quant à la création des indices i et j, je suppose qu'il me faut créer ces variables, les définir et mettre dans mon programme des conditions (même si mes essais ont été des échecs, j'imagine que ma piste est tout de même une bonne piste)

    Je serai infiniment reconnaissant si une âme charitable pouvait m'aider dans les trois différentes tâches qui me reste à faire.
    En vous remerciant d'avance pour vos réponses,
    MrGalactique

  2. #2
    Membre émérite

    Homme Profil pro
    Ingénieur
    Inscrit en
    Août 2010
    Messages
    662
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2010
    Messages : 662
    Par défaut
    Salut,

    Si j'étais toi j'écrirais la grille sous forme matricielle au lieu d'une simple liste:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    import numpy as np
     
    # Crée une matrice 5*5 vide
    cases = np.zeros((5,5))
    Dans ce cas tu peux aisément accéder à la case souhaité comme ceci:

    Pour compter la somme des nombre d'une ligne tu peux faire des boucles:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    # Somme des nombres de la première ligne:
    s = 0
    for k in range(5):
        s += cases[0][k]
    Et ainsi de suite...

  3. #3
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 062
    Par défaut
    Bonjour,

    @Julien N
    Numpy n'est semble-t-il pas forcément utile pour faire ce genre de chose, on peut travailler avec la lib standard, c'est amplement suffisant et aussi simple.

    @MrGalactique
    Avant Tkinter résoudre ton problème (algorithme) est plus logique.
    La partie graphique est juste une couche supplémentaire et simple lorsqu'on a déjà bien travaillé sur le problème.

    Je te conseille donc de refaire le code propre et sans Tkinter.

    Tu pourrais travailler avec les fonctions pour découper et retrouver chaque étape de résolution.

    exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    >>> def create(row, column, k):
    ...     return [[k for i in range(column)] for j in range(row)]
    ... 
    >>> create(5, 5, -1)
    [[-1, -1, -1, -1, -1], [-1, -1, -1, -1, -1], [-1, -1, -1, -1, -1], [-1, -1, -1, -1, -1], [-1, -1, -1, -1, -1]]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    >>> cases = create(5, 5, -1)
    >>> for line in cases:
    ...     print(line)
    ... 
    [-1, -1, -1, -1, -1]
    [-1, -1, -1, -1, -1]
    [-1, -1, -1, -1, -1]
    [-1, -1, -1, -1, -1]
    [-1, -1, -1, -1, -1]
    Ça demande donc peut-être une réflexion sur papier...

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mai 2013
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mai 2013
    Messages : 22
    Par défaut
    J'ai suivi les procédures mais avant cela je tiens à signaler un autre problème.

    Jusqu'à maintenant, je travaillais sur Geany sur un poste de mon lycée.
    J'ai téléchargé Geany ainsi que Python 2.7.5 sur mon ordinateur puis ai commencé mon programme.

    Message d'erreur sur cmd.exe :
    'python' n'est pas reconnu en tant que commande interne ou externe, un programme exécutable ou un fichier de commandes.

    Est-il nécessaire pour moi de me diriger vers un autre topic où puis-je rester sur celui-ci ?

  5. #5
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 062

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mai 2013
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mai 2013
    Messages : 22
    Par défaut
    J'arrive désormais à faire marcher Geany convenablement.

    Pour appliquer la somme des valeurs inscrits sur chaque ligne et chaque colonne, je comprend qu'il soit normale de modifier la manière de créer mon tableau. J'ai donc inscrit ce code sur le programme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    >>> def create(row, column, k):
    ...     return [[k for i in range(column)] for j in range(row)]
    >>> create(5, 5, -1)
     
    cases = create(5, 5, -1)
     
    >>> for line in cases:
    ...     print(line)
    Cela fait en effet plus propre mais en procédant ainsi je ne vois pas comment je peux remplacer les -1 par les valeurs souhaitées.
    Je tente de conserver le système avec le compteur, pour cela, il me semble que je dois conserver mon r = random.randint (0 , 24), seulement, mes conditions ne marcheront plus de la même manière. En effet, je ne peux pas écrire "if cases[r] == -1" étant donné que "cases" a été défini de la manière suivante : "cases = create(5, 5, -1)"
    Le problème est donc là : comment, pour créer mes conditions, puis-je sélectionné une case aléatoirement (grâce à la valeur r) et répéter l'opération jusqu'à ce que toutes mes valeurs aient été prise en compte (en utilisant mes boucles while).

Discussions similaires

  1. Création d'un jeu de test sous MVS
    Par Ullysse dans le forum z/OS
    Réponses: 2
    Dernier message: 23/04/2014, 19h56
  2. création d'un fichier xml sous python
    Par hajara dans le forum Tkinter
    Réponses: 0
    Dernier message: 06/06/2012, 19h03
  3. Jeu saccadé: Timer ? Thread? sous python.
    Par pagugu dans le forum Programmation multimédia/Jeux
    Réponses: 6
    Dernier message: 18/04/2010, 16h50
  4. Existe-t-il un rad sous python?
    Par sloshy dans le forum EDI/RAD
    Réponses: 6
    Dernier message: 03/10/2005, 09h26
  5. probleme pour un jeu de dames en python
    Par doudou152 dans le forum Général Python
    Réponses: 7
    Dernier message: 22/04/2005, 14h53

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