CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

Manipulation de listes Python 3 pour le 2048

tuuki
tuuki
Niveau 5
14 avril 2017 à 23:45:49

Bonsoir,

Je suis entrain de faire le jeu du 2048 (je pense que tous le monde connait) et j'ai un soucis avec les fonctions déplacement. J'ai celle-ci :


def gauche(g):
    affiche(g)
    t=0
    while t<=len(g)-1:
        for l in range(len(g)):
            for c in range(1,len(g[l])):
                if 0==g[l][c-1]:
                    g[l][c-1]=g[l][c]
                    g[l][c]=0
                elif g[l][c]==g[l][c-1]:
                    g[l][c-1]=(g[l][c])*2
                    g[l][c]=0
        t+=1  
    return g

Mais lorsque je lance :
gauche([[2, 2, 2, 2],[2, 2, 2, 2],[2, 2, 2, 2],[2, 2, 2, 2]])

j’obtiens : [[8, 0, 0, 0], [8, 0, 0, 0], [8, 0, 0, 0], [8, 0, 0, 0]]
au lieux de [[4, 4, 0, 0], [4, 4, 0, 0], [4, 4, 0, 0], [4, 4, 0, 0]] comme dans le jeux original.
Si quelqu'un aurait une idée, je butte vraiment sur ce soucis...

Lairv
Lairv
Niveau 9
15 avril 2017 à 00:17:13

Je crois avoir capté ton problème .
En gros, cette boucle :

for l in range(len(g)):
            for c in range(1,len(g[l])):
                if 0==g[l][c-1]:
                    g[l][c-1]=g[l][c]
                    g[l][c]=0
                elif g[l][c]==g[l][c-1]:
                    g[l][c-1]=(g[l][c])*2
                    g[l][c]=0

Te permet de "tout décaler" vers la gauche de 1 cran. Or cette instruction tu la répète (len(g)-1) fois, donc dans ton exemple, 3 fois. Du coup quand tu exécute ton code, ta liste va prendre ces valeurs :

[[2, 2, 2, 2],[2, 2, 2, 2],[2, 2, 2, 2],[2, 2, 2, 2]]

t = 0 <= (len(g)-1)

[[4, 0, 4, 0],[4, 0, 4, 0],[4, 0, 4, 0],[4, 0, 4, 0]]

t = 1 <= (len(g)-1)

[[4, 4, 0, 0],[4, 4, 0, 0],[4, 4, 0, 0],[4, 4, 0, 0]]

t = 2 <= (len(g)-1)

[[8, 0, 0, 0],[8, 0, 0, 0],[8, 0, 0, 0],[8, 0, 0, 0]]

t = 3 <= (len(g)-1)

[[8, 0, 0, 0],[8, 0, 0, 0],[8, 0, 0, 0],[8, 0, 0, 0]]

t = 4 condition n'est plus vérifiée, arret de l'algo.

Voila [[sticker:p/1kki]]

Message édité le 15 avril 2017 à 00:18:24 par Lairv
Lairv
Lairv
Niveau 9
15 avril 2017 à 00:27:58

PS : Au passage, ta boucle for me semble un peu lourde (for c in range(1,len(g[l])), ca me parait un peu lourd pour itérer une liste), j'aurais plutot écrit un truc dans ce style:

g = list()
for k in g:
    previous = None
    for c in k:
        if previous == 0:
            previous = c
            c = 0
        elif previous == c:
            previous += c
            c = 0
        previous = c

Je peut me tromper, mais ca me parait plus clair

tuuki
tuuki
Niveau 5
15 avril 2017 à 00:52:16

La boucle for un peu lourde c'est à cause de ce que j'ai vu en cours malheureusement...
Sinon j'avais bien compris le fonctionnement de ma boucle mais je cherche plutôt une condition d’arrêt

Comme tu l'expliques bien dans ton exemple c'est quand t=1 que j'ai le résultat attendu

tuuki
tuuki
Niveau 5
15 avril 2017 à 20:36:19

Personne?

Sous forums
  • Aide à l'achat Mac
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment