Partage
  • Partager sur Facebook
  • Partager sur Twitter

Voltorb Flip sous Python

    18 mai 2013 à 15:09:18

    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 :
    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

    -
    Edité par MrGalactique 18 mai 2013 à 15:17:45

    • Partager sur Facebook
    • Partager sur Twitter
      18 mai 2013 à 16:11:56

      Salut

      Voici quelques conseils, idées données en vrac :

      - Utilises plutôt une matrice pour représenter les cases :

      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]]
               

      Tu pourras alors y accéder très facilement : la case sur la ligne i et la colonne j est cases[i][j]. Cela te force à réécrire ton code, mais il sera bien plus facile de calculer les indications sur les colonnes et les lignes.

      - La ligne 54 ne serait-elle pas plutôt :

      s = reduce(add, cases[:4])

      - Le type booléen n'existe pas en python. Utilises un entier à 0 (false) ou 1 (true).

      - Pour les indices i et j, appelons les colonne_add, ligne_add, colonne_zero et ligne_zero :

      colonne_add = [0, 0, 0, 0, 0]
      colonne_zero = [0, 0, 0, 0, 0]
      ligne_add = [0, 0, 0, 0, 0]
      ligne_zero = [0, 0, 0, 0, 0]

      Il faut alors les remplir avec les bonnes valeurs : pour chaque ligne (resp. colonne), tu ajoutes les valeurs contenus dans la ligne (resp. colonne) et tu compte le nombre de zéros.

      - Ne serait-il pas plus adapté d'utiliser des boutons (au lieu des Label) pour afficher tes cases ?

      Bon courage pour la suite.




      • Partager sur Facebook
      • Partager sur Twitter
      Anonyme
        18 mai 2013 à 16:22:17

        Des réponses avaient déjà été données sur ce lien... et cela sans réponse de la part du PO concernant les remarques.

        • Partager sur Facebook
        • Partager sur Twitter
          18 mai 2013 à 16:37:25

          Oui, j'avoue que je triche un peu en combinant les remarques des uns et des autres chez ces deux forums.

          Tant pis, lockez ce topic dans ce cas.

          D'abord je m'occupe de régler ce problème sur mon ordi qui est d'afficher correctement python.

          -
          Edité par MrGalactique 18 mai 2013 à 16:39:50

          • Partager sur Facebook
          • Partager sur Twitter

          Voltorb Flip sous Python

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown