Algorithme pour tetris

velocity Messages postés 204 Date d'inscription   Statut Membre Dernière intervention   -  
Pacorabanix Messages postés 3248 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour à tous

Je suis en train de programmer Tetris en Java et là je suis à la phase de creer un joueur automatique mais je n'ai aucune piste sur quel algorithme utilisé.
Pour chaque pièce il doit déterminer la meilleurs position .
Le joueur ne connait que la pièce courant et suivante (en apercus) ,mais il doit aussi prendre en compte toutes les possibilités des pièce qui suivent (disant jusqu'a 5 pièces.
Si vous pouvez me donner quelques idées ou liens à suivre.

merci pour toutes aide que vous proposez.

5 réponses

Pacorabanix Messages postés 3248 Date d'inscription   Statut Membre Dernière intervention   663
 
Oui le truc de Char Snipeur est le plus simple : Pour une situation donnée et étant donné la pièce qu'il faut placer, tu calcules toutes les possibilités (disons dans un arbre trié, mais franchement, à part pour l'optimisation des calculs, dans ce cas ça n'a aucune importance) et tu leur associes un nombre. Ex : -1 s'il va y avoir un trou, -2 si ça va faire perdre la partie, 0 si tout va bien, +1 si tu vas remplir une ligne, +2 si tu vas remplir 2 lignes...

Toutes ces possibilités, c'est selon où tu poses la pièce (et sachant qu'il peut y avoir jusqu'à 4 possibilités pour chaque endroit selon comment elle est tournée, au moins). Ensuite, l'ordi choisi la configuration qui aura le meilleur score.
1
Pacorabanix Messages postés 3248 Date d'inscription   Statut Membre Dernière intervention   663
 
un algorithme classique pour ce genre de cas est l'algorithme "min-max", mais c'est plutot dur à apprendre, malgré que ce soit un algo pas très compliqué. Ce serait bien que tu aies des notions sur les arbres, et pour l'optimiser sur le hashage.

un lien parmis tant d'autre, si tu connais l'anglais : https://www.youtube.com/user/ucberkeley?blend=2&ob=4#p/c/4BBB74C7D2A1049C/15/Unh51VnD-hA

ça commence vers 2:00

le prof présente un exemple avec un jeu Tic-Tac-Toe (morpion)

Ceci dit, ce sera clairement différent nas le cas du tetris, mais tu pourras déjà avec ça apprendre pas mal de choses.
0
velocity
 
Bonjour ,
merci pour le liens , malheureusement j'ai un pb de son sous ubuntu, mais si tu peut me spécifire encore plus l'algorithme minx-max et m'expliquer un peut le hashage car je connais la structure d'arbremais la table de hashage j'en ai déjà entendu parlé sans l'avoir utilisée.
0
Apaachee Messages postés 248 Date d'inscription   Statut Membre Dernière intervention   47
 
Minmax pour un jeu à 1 joueur ? Je suis sceptique.
0
Pacorabanix Messages postés 3248 Date d'inscription   Statut Membre Dernière intervention   663
 
on minimaxise par rapport aux prochaines séries de pièces qu'on pourrait avoir. un peu comme s'il y avait un "joueur adverse" qui choisirait des pièces pour bloquer celui qui doit les mettre.

Je suis d'accord que ce n'est pas vraiment un min max simple dans ce cas, mais les idées de bases avec un arbre et une évaluation chemins possibles, selon si on peut être "mortellement bloqué" ou "avoir une case vide perdue sous les autres" (mauvais) est tout à fait possible.
0
velocity Messages postés 204 Date d'inscription   Statut Membre Dernière intervention   6
 
En fait c'est pour le multijoueur avec l'ordinateur comme adversaire.
0
Pacorabanix Messages postés 3248 Date d'inscription   Statut Membre Dernière intervention   663 > velocity Messages postés 204 Date d'inscription   Statut Membre Dernière intervention  
 
j'imaginais de mon coté que de toute façon l'"IA" ne prendrait pas en compte ce que fait le joueur humain (trop compliqué à gérer pour toi je pense)
0
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
J'aurai vu un truc plus simple. Je ne suis pas un expert en tetris, mais connaître la piece suivante, n'a pas énormément d'intéret je trouve, sauf lorsque que l'on veux enlever plein de lignes d'un coup.
Si on prend une pièce qui tombe, elle a (dans le cas général) 4 positions possible en rotation et x-largeur_piece (où x est le nombre de brique de gauche à droite). Donc tu as moins de 4*x possibilités pour chaque nouvelle pièce, c'est raisonnable.
Ce que je ferai c'est choisir la position donnant la plus grande compacité (éviter les trous) et la plus petite hauteur de l'ensemble.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
velocity
 
salut ,
merci pour vos interventions .
Je suis encore perdu, pouvez vous me spécifier un peu plus les algorithme que je peut utiliser . et quels sont les structure de données dont j'aurais besoin .

merci
0