Partage
  • Partager sur Facebook
  • Partager sur Twitter

Help pour programmer un jeu !

    15 novembre 2010 à 1:40:17

    Bonjour à tous, voilà j'essaye de faire un programme, mais plusieurs difficultés me font face :D, je voudrais donc un peu d'aide :).

    Je dois créer une fonction qui prend deux paramètres n et m et qui crée et renvoi un plateau(qui est une matrice) de dimensions n x m. Ce plateau doit contenir un lapin(qu'on peut représenter par R dans le plateau) et des "statues". le paramètre n représente en fait le nombre de statues. Ainsi, si on rentre la valeur 5 pour n, il y aura 5 statues dans le plateau qui seront numéroté de 1 à 5 et placé bien évidemment aléatoirement. Le lapin aussi doit être placé aléatoirement dans le plateau.

    Un exemple pour illustrer le jeu:
    La fonction prend 5 comme valeur pour n et 5 pour m, nous donne ceci:

    Image utilisateur


    Donc voilà ce que j'ai réussi à faire:

    Image utilisateur

    Donc voilà mon problème. Comme vous le voyez, je n'arrive pas à mettre les statues ni le lapin.
    Est ce que quelqu'un pourrait me venir en aide ?
    Merci d'avance.
    • Partager sur Facebook
    • Partager sur Twitter
      15 novembre 2010 à 9:55:44

      utilises random.sample() sur la liste des coordonnées disponibles ...
      • Partager sur Facebook
      • Partager sur Twitter

      Python c'est bon, mangez-en. 

        15 novembre 2010 à 11:35:15

        Bonjour,

        si j'aurai un conseil à te donner se serait celui-ci:

        - Utilise une liste à deux dimensions, c'est déjà plus simple et ça te permettra d'ajouter/supprimer/remplacer des éléments très facilement.

        Un exemple:

        maListe = []
        for i in range(5):
             maListe.append(['0'] * 5) #Ou [ ] pour une liste vierge
        


        >>>[['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'],]


        Ici maListe[0][1] correspond à ma première ligne, élément numéro 2 (Car on commence à zéro)

        Voici quelque chose de pas très propre car difficilement réalisable pour une liste à deux dimensions de 500 x 500:
        maListe[0][1] = 'R' #Ajout d'un lapin. Ligne n°1, colonne n°2
        


        Pour créer des bords (Mur?), tu parcours tes listes (attention liste à deux dimensions) et à chaque début et fin de liste tu rajoutes des 'X'.

        Un exemple que tu devras compléter:
        for i in range(len(maListe)):
        	for j in range(len(maListe)):
        		maListe[i][0] = 'X'
        		maListe[0][i] = 'X'
        


        [['X', 'X', 'X', 'X', 'X'], 
         ['X', '0', '0', '0', '0'], 
         ['X', '0', '0', '0', '0'], 
         ['X', '0', '0', '0', '0'], 
         ['X', '0', '0', '0', '0']]


        Bonne chance pour la suite.
        Realmagma.


        • Partager sur Facebook
        • Partager sur Twitter
          15 novembre 2010 à 11:55:39

          Bonjour Realmagma.
          Merci de ta réponse
          Ce que tu m'as donné est un moyen d'ajouter le lapin dans le plateau, mais moi j'ai besoin d'un code qui place le lapin aléatoirement dans le plateau :)

          Josmiley, je ne peux pas utiliser random.sample, juste random.randint
          • Partager sur Facebook
          • Partager sur Twitter
            15 novembre 2010 à 12:23:04

            i = random.randrange(0, len(maListe))
            j = random.randrange(0, len(maListe))
            
            maListe[i][j] = 'R' #<= Edit
            
            • Partager sur Facebook
            • Partager sur Twitter
              15 novembre 2010 à 13:40:58

              merci de ta réponse realmagma, j'ai refait tout mon code pour un peu le rendre plus clair, voilà ce que j'ai:
              >>> def creer_plateau(n, m):
                  import random
                  jardin = []
                  
                  for i in range(n+2):
                      jardin.append([0 for j in range(m+2)])
              
                  for i in range(n+2):
                      jardin[i][0] = 'x'
                      jardin[i][m+1] = 'x'
                      
                  for i in range(m+2):
                      jardin[0][i] = 'x'
                      jardin[n+1][i] = 'x'
              
                  r=random.randint(1,n)
                  g=random.randint(1,m)
                  jardin[r][g]='r'
              
                  
                  
                  return jardin
              
              >>> def print_plateau(jardin):
                      for i in range(len(jardin)):
                          for j in range(len(jardin[i])):
                              if jardin[i][j]==0:
                                  print " ",
                              else:
                                  print jardin[i][j],
                          print
              
                          
              >>> print_plateau(creer_plateau(5,5))
              x x x x x x x
              x           x
              x           x
              x           x
              x     r     x
              x           x
              x x x x x x x
              



              Voilà, donc j'ai réussi à placer aléatoirement le lapin mais les statues est une chose plus difficile.
              Donc j'aurais besoin d'aide pour placer aléatoirement les statues qui seront au nombre de 1 à n.
              Il faut aussi prendre en compte le fait que les statues et le lapin ne peuvent pas être placer au même endroit et aussi que deux statues ne peuvent pas avoir même emplacement.

              voilà Merci d'avance
              • Partager sur Facebook
              • Partager sur Twitter
                15 novembre 2010 à 14:07:19

                Si ça peut t'aider :


                >>> casefilter = lambda plateau: filter(lambda x: x not in ['x', 'r'] + [n for n in range(1, 10)], plateau)
                >>> for x in creer_plateau(5, 5):
                	casefilter(x)
                
                []
                [0, 0, 0, 0]
                [0, 0, 0, 0, 0]
                [0, 0, 0, 0, 0]
                [0, 0, 0, 0, 0]
                [0, 0, 0, 0, 0]
                []
                
                >>> [casefilter(x) for x in creer_plateau(5, 5)]
                [[], [0, 0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], []]
                
                • Partager sur Facebook
                • Partager sur Twitter
                  16 novembre 2010 à 15:06:39

                  Il y a plusieurs façons de procéder. J'en propose une:

                  import itertools as it
                  import random as rd
                  
                  # on commence par créer une liste du type [(1,1), (1,2), .., (2,1), (2,2), .., (n,1), (n,2), .., (n,n)]
                  statue_possible_coord = list(it.product(range(n), repeat=2))
                  
                  # ensuite, on mélange la liste
                  rd.shuffle(statue_possible_coord)
                  
                  # on elimine de la liste les coordonnées du lapin
                  statue_possible_coord.remove(lapin_coord)
                  
                  # on prend n éléments dans la liste (à ce stade, étant donné que la liste a été mélangée, on peut prendre les n premiers)
                  statue_coord_list = statue_possible_coord[:n]
                  


                  Il y a d'autres moyens bien sur, mais cette methode est assez concise.
                  • Partager sur Facebook
                  • Partager sur Twitter

                  Help pour programmer un jeu !

                  × 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