Le but de ce projet est de programmer un tetris-like en java.
Voici quelques unes des fonctionnalités visées :
- multi-joueur (de 1 à 4)
- permettre de configurer facilement le jeu : look de l'interface mais aussi choisir quelles pieces utilisées, choisir son mode de jeu : points, lignes ou autres...
- choisir avec combien de lignes trouées on commence
- eventuellement : un bonus à chaque tetris (favorisant le joueur ou pénalisant l'adversaire)
- eventuellement : musique et sons
Comment marche le jeu, en gros :
- une classe Block qui définit un "carré" : abscisse, ordonnée et couleur
- une classe Piece : quatre carré forme une pièce (par defaut il y en a 7)
- une classe Grid : quand la piece courante, celle qui descend et qu'on bouge, s'immobilise, elle se fait "manger" par la grille. Cette grille est en fait un tableau bidimensionnelle d'entiers, chacun étant associé à une couleur, et non pas de Block, malgré le fait que graphiquement, cela ne se voit pas (utiliser des block serait plus lourd et inutile, les coordonnées du carré sont deja les indices du tableau.
- une classe Board : c'est elle qui lie la grille a la piece courante, et qui définit comment fonctionnera le jeu.
- une classe Game : c'est elle qui garde le Timer, ainsi que les instances de Board (une instance par joueur).
- une classe Tetris : c'est la classe "principale" (celle qui est lancée par la page html).
- une classe Options qui étend JPanel... c'est l'"écran" de configuration du jeu.
Plus en détails :
Au début du jeu, la grille est vide et on ne commence qu'avec une piece courante.
On peut déplacer une piece et la faire tourner autour d'un de ses quatre blocs, celui qui a été
définit comme le bloc central. En fait, même lorsqu'un déplacement n'est
pas permi, les modifications de ses coordonnées ont bien lieu... Eh oui,
il faut bien les calculer avant de les tester. Et donc, si le test
échoue, on rétablit les coordonnees precedentes en faisant l'operation
inverse (opération = deplacement ou bien rotation, les deux sont gérés
presque de la meme facon). Une position est jugée incorrecte si :
- la piece dépasse les bords de la grille
- la piece touche le sol ou un carre de la grille (elle se fait alors manger par la grille et une nouvelle piece apparait).
De plus, a chaque fois qu'une piece se fait manger, on verifie s'il n'y
a pas de ligne et on modifie les points/level en fonctions. On regarde
aussi si le jeu n'est pas terminé (lorsque la grille depasse sa hauteur
maximale).
Ce qui a deja ete fait :
Ce qui reste a faire :
- le reste des fonctionnalites decrites plus haut
- assurer la cohérence des options ! Par exemple, si on joue à 4, un bloc ne pourra pas etre aussi gros que pour un jeu solo.
Bugs connus :
- pas trop genant, a verifier : quand la grille est remplit, et donc le jeu finis, la piece suivante vient s'afficher sur le haut du tableau en "écrasant" les anciennes déjà présentes.