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

Algorithmes et structures de données Discussion :

Implémenter le jeu "same game"


Sujet :

Algorithmes et structures de données

  1. #1
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    décembre 2019
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 20
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : décembre 2019
    Messages : 3
    Points : 3
    Points
    3
    Par défaut Implémenter le jeu "same game"
    Bonjour,
    Pour un projet, je dois implémenter le jeu Same game. J'ai commence par réaliser le noyau du jeu, sans interface graphique comme demandé par mon professeur. Tout marche sauf la fin de mon algorithme qui est censé repérer les colonnes vides et les remplacer par la colonne juste avant. Comme vous pouvez le voir, la fonction parcourt bien ma grille, fait bien ce qu'elle est censé faire une première fois mais ne continue pas alors qu'elle a reperé une autre colonne vide. J'ai tout essayé, mais je ne vois pas le problème. J'ai joint mon code, la capture du début où on voit la grille avec là colonne à 0, et la capture de fin quand le programme s'arrête. Merci d'avance pour vos réponses. Nom : Capture d’écran 2019-12-23 à 00.50.24.png
Affichages : 151
Taille : 160,5 KoNom : Capture d’écran 2019-12-23 à 00.51.00.png
Affichages : 141
Taille : 36,9 KoNom : Capture d’écran 2019-12-23 à 00.51.15.png
Affichages : 144
Taille : 21,6 Ko

  2. #2
    Membre habitué
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    février 2013
    Messages
    222
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : février 2013
    Messages : 222
    Points : 176
    Points
    176
    Par défaut
    Poste le code entier entre les balises (icône "#" du bandeau supérieur de la fenêtre de réponse) car le soucis doit être dans la connexion de tes fonctions
    Savoir pour comprendre et vice versa.

  3. #3
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    décembre 2019
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 20
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : décembre 2019
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Bonjour, merci pour la réponse.
    D'accord, voici le code :

    Code Python : 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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    from ezCLI import *
    from random import randrange
    # ------------------------------------------------------------------------------
    class Noyau(object):
        # ----------------------------------------------------------------------------
        def __init__(self, height, width, nb_colors):      
            self.height = height
            self.width = width
            self.nb_colors = nb_colors
            self.mat = [[0 for j in range (self.width)] for i in range (self.height)]
            for i in range (self.height):
               for j in range (self.width) :
                   self.mat[i][j] =  randrange(1,nb_colors+1)
            print (grid(self.mat))
            while self.mat[self.height-1][self.width-1] != 0 :
                x = input("x = ")
                y = input("y= ")
                x= int(x)
                y=int(y)
                c= self.mat[x][y]
                self.voisin(x,y,c,True)
                print(grid(self.mat))
                self.gravitelignes()
                self.gravitecolonnes()
                print (grid(self.mat))
     
        def voisin(self,x,y,c, first):
            self.x = x
            self.y = y
            self.c = c  
            if self.mat[x][y] == c and c != 0 :
                    if not first: self.mat[x][y] = 0
                    if x >0 : self.voisin (x-1,y,c,False)
                    if x < (self.height - 1 ) : self.voisin (x+1,y,c, False)
                    if y > 0 : self.voisin (x,y-1,c,False)
                    if y < (self.width - 1)  : self.voisin (x,y+1,c,False)
            #print(grid(self.mat))
     
     
        def gravitelignes (self) : 
            for j in range (self.width) :
                for i in range (self.height-1,-1,-1) :
                    if self.mat[i][j] == 0 :
                        for k in range(i-1, -1, -1):
                            if self.mat[k][j] == 0: continue
                            self.mat[i][j] = self.mat[k][j]
                            self.mat[k][j] = 0
                            #print (i, j, k, grid(self.mat))
                            break
     
        def gravitecolonnes (self):
            for j in range (self.width) :
                if self.mat[self.height-1][j] == 0 :
                    print (j) 
                    for k in range(j+1,self.width-2) :
                        if self.mat[self.height-1][k] == 0 :continue
                        else :
                            for i in range (self.height) :
                                self.mat[i][j] = self.mat[i][k]
                                self.mat[i][k] = 0
                                print (i, j, k, grid(self.mat))
     
     
     
     
    if __name__ == "__main__":
     n=Noyau(6,6,3)

  4. #4
    Membre habitué
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    février 2013
    Messages
    222
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : février 2013
    Messages : 222
    Points : 176
    Points
    176
    Par défaut
    Sans rien y comprendre je dirais qu'il faut que tu incrémente x (si tu lis en colonnes) quelque part entre deux fonctions.
    Les experts t'en diront plus et mieux, patience, ils doivent êtres occupés aux festivités.
    Savoir pour comprendre et vice versa.

  5. #5
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    décembre 2013
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : décembre 2013
    Messages : 2 738
    Points : 5 972
    Points
    5 972
    Par défaut
    Il aurait fallu que tu expliques le principe du jeu, je l'ai recherché, et le voici.

    On a une grille, remplie avec des symboles différents. Par exemple 4 symboles différents, pour une grille 12*12
    Quand on 'clique' sur une case, le programme teste si parmi les voisins de cette case, on a au moins 2 cases avec le même symbole (2 en tout, en incluant la case cliquée). Si ce n'est pas le cas, le mouvement est invalide.
    Si c'est le cas, on supprime du jeu tous les jetons en question.
    Puis les jetons qui étaient en dessus tombent, en restant sur la même colonne. Et si on se retrouve avec une colonne vide, on décale les colonnes de droite, pour ne plus avoir de colonne vide.

    Dans ce genre de programme, quand on doit supprimer un élément au milieu d'un tableau (ici supprimer une colonne), il y a une erreur très courante.

    L'erreur classique c'est : On a une boucle pour i = 1 a n , si colonne i est vide, alors décaler les colonnes suivantes.
    La bonne pratique, c'est de faire une boucle : pour i = n à 1 pas -1, si colonne i est vide, alors décaler les colonnes suivantes.
    Dans ton cas, si j'ai bien suivi, c'est dans la ligne 52 qu'il faudrait inverser l'ordre de parcours.

    C'est une configuration très courante, et pas uniquement dans les jeux.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  6. #6
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    décembre 2019
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 20
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : décembre 2019
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    D'accord, merci beaucoup. Je saurais pour la prochaine fois. Effectivement, cela a fonctionne. Merci beaucoup !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Implémentation "scénario jeu"
    Par Alba.1337 dans le forum Général Java
    Réponses: 3
    Dernier message: 15/07/2012, 23h29
  2. Implémentation de jeu de dames
    Par khaled_prg dans le forum AWT/Swing
    Réponses: 7
    Dernier message: 08/04/2012, 02h36
  3. jeu bridge - game
    Par ccinfonews dans le forum Développement 2D, 3D et Jeux
    Réponses: 2
    Dernier message: 13/01/2009, 21h37
  4. Implémentation du jeu Sudoku
    Par DDartz dans le forum MATLAB
    Réponses: 1
    Dernier message: 28/05/2007, 19h04
  5. [PROJET DUT] jeu same
    Par bigtyler dans le forum C
    Réponses: 4
    Dernier message: 15/12/2006, 20h19

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