Crunchez vos adresses URL
|
Rejoignez notre discord
|
Hébergez vos photos
Affichage des résultats 1 à 3 sur 3
  1. #1
    Salut les canards développeurs !

    Je suis actuellement penché sur un projet de Tetris codé en langage C et à l'aide de la lib SDL2. Mon problème n'est pas lié au langage C ou à la lib et je souhaite poser la question à tous ceux qui ont déjà créé un Tetris que ce soit dans un autre langage ou avec Unity 3D car c'est un problème de programmation "gameplay" qui est commun à toute les technologies employés pour faire un clone de Tetris.

    En soi ce n'est pas un projet très difficile à priori et j'ai déjà un prototype fonctionnel avec quelques fonctionnalités de base mais qui en est toujours au stade de l'embryon (pas encore de comptage des points, de "hard drop", de réserve de pièce ou "hold", etc).
    J'ai aussi un système de rotation des pièces très basique et sans "kick". Or je voudrais justement implémenter le système Super Rotation System défini dans le "Tetris Guideline" que l'on trouve expliqué en anglais sur plusieurs sites/wiki dédiés à Tetris. Ex. : https://harddrop.com/wiki/SRS , et ici http://tetris.wikia.com/wiki/SRS ou encore là https://tetris.wiki/SRS. Comme vous pouvez le voir les explications sont identiques, chacun a recopié l'autre. L'ennui c'est que j'ai du mal à les comprendre. Du moins je ne suis pas sûr de bien comprendre les explications. Je suis bon en anglais mais là je cale un peu.

    La page la plus intéressante est celle de harddrop.com car elle est plus détaillé et précise que les autres. Malheureusement elle est aussi ambiguë car elle explique que SRS a un fonctionnement théorique et qu'en pratique elle marche différemment !
    De mon côté j'ai bien défini une représentation interne des tétrominos où chaque pièce a quatre positions, comme défini dans la description du SRS avec l'illustration suivante :

    Il s'agit des rotations dits "basiques". Je les ai défini en C avec des chaînes de caractères. Ça marche assez simplement et c'est suffisamment flexible pour créer n'importe quel forme à condition qu'on donne les informations correctes de longueur et de largeur du motif (la plupart sont en 3x3, le carré en 4x3 et la barre en 4x4 mais ça peut être autre chose). Quand je tourne une pièce je fais simplement un test de collision avec le motif de la rotation souhaité : si il n'y a pas de collision on passe la rotation, sinon... on ne fait rien ! Ben oui je n'ai pas encore implémenté le wall/floor kick Mais c'est à ce moment que l'on doit faire un enchaînement de tests sur 5 positions décalés avec des valeurs bien particulières qu'on trouve dans les tableaux proposés sur les wiki Tetris. En tout cas c'est ce que j'ai compris à ce stade !
    Là où ça coince c'est la partie "How Guideline SRS Really Work" que l'on trouve sur Harddrop.com. Car il est stipulé qu'en faite la représentation interne est en réalité différente de ce qui est donné en début d'article car elle est comme ça :

    Ce qui change complètement la rotation de la barre et du carré qui se met même à tourner alors qu'il ne devrait pas en pratique !
    En faite c'est ce changement de représentation pour le carré et la barre qui pose problème car les autres tetrominos ont la même représentation interne. Seulement ils donnent d'autres tableaux contenant des "offsets" qui sont utilisés mais je ne les comprends pas : il n'y a qu'une colonne pour le carré, la barre a ses propres valeurs et les autres tetrominos (les J,L,S et Z) ont des valeurs alors que je n'en vois pas l'utilité...

    Bref, j'aimerai comprendre et implémenter le système SRS mais je suis un peu dans les choux avec cette histoire d'offset que je ne saisis pas du tout et je ne sais pas par quel bout prendre. Si quelqu'un a déjà eu affaire à ce genre de problème d'implémentation ou qu'un mec plus doué que moi en anglais technique arrive à m'expliquer les subtilités du système et à me faire comprendre ce bazar je lui en serait très reconnaissant

  2. #2
    Pour la suite, lorsque je parle de pixel, il s'agit d'un morceau de tetromino. Chaque tetromino serait constitué de 4 pixels.

    Je connais pas le dev de tetris ou le système SRS, mais il y a un truc visible sur les 2 images : pour les barres et les carrés, sur la première image, le centre n'est pas sur un pixel, mais entre deux pixels. Ca donne une symmétrie axiale parfaite, mais par rapport à la "grille", pas par rapport à un pixel de tetromino donné. Or, ce sont ces pixels qui ont des coordonnées dans ton moteur.

    Sur de vieux systèmes, genre gameboy ou NES, j'imagine qu'il fallait avoir un pixel comme centre de la rotation. Et qu'il fallait donc une convention sur la façon dont la figure tourne, quand ce n'est pas totalement symmétrique, dans le cas des deux figures qui n'ont pas de pixel central (celles qui ne font pas 3 pixels de haut/large).

  3. #3
    C'est intéressant, j'avais écrit un tetris comme toi (il y a une vingtaine d'année, c'est un exercice très formateur), mais je ne connaissais pas ces subtilités.

    J'ai lu rapidement les liens que tu fournis.

    Si j'ai bien compris, ces tableaux d'offset sont données en cas d'échec du test initial.
    Le test initial (test 1) se fait sur la position normalement prévue (offset (0;0)). Si il est négatif, tu tests avec la position modifiée par l'offset fournis dans le test 2, s'il est négatif, tu le fais avec le test 3, etc...
    Attention, l'offset correspond à la position dans la matrice de jeu.

    Mon blog figurines: UglyMiniatures

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •