En grandissant, mon premier système de jeu sur console était un Atari 2600 et j'aurai toujours un amour pour certains de ces jeux que j'aimais tant quand j'étais enfant. De nombreux graphiques sont toujours mémorables, peut-être même emblématiques.
Il s'avère que ces sprites sont des images bitmap très simplistes, de 8 pixels de large à hauteur variable où la représentation binaire est l'agencement des pixels.
Par exemple, les octets hexadécimaux 0x18, 0x24, 0x18 dessineraient un cercle brut comme ceci:
0x18: 00011000
0x24: 00100100
0x18: 00011000
Comme 8 pixels de large créent des graphiques assez petits (même selon les normes Atari 2600), il était courant de doubler ou quadrupler la hauteur, la largeur ou les deux pour créer une version plus grande (bien que plus en blocs et déformée) de la même image. Ils seraient généralement également inversés verticalement ou horizontalement pour les sprites des joueurs et les terrains de jeu. Le jeu Combat en est un bon exemple.
Le défi consiste à écrire du code pour afficher ces images-objets sous forme de «graphiques» sous forme ASCII, y compris la possibilité de les étirer ou de les retourner verticalement, horizontalement ou les deux. Cela doit être sous la forme d'un programme complet ou d'une fonction appelable.
Contribution:
- Un tableau d'octets, chacun représentant les bits horizontaux pour cette ligne.
- Une valeur entière non nulle pour chaque direction, horizontale et verticale représentant le facteur d'échelle pour cette dimension.
- Une valeur négative indique que la dimension doit également être inversée le long de son axe.
Sortie:
- Représentation ASCII en STDOUT ou une chaîne séparée par des sauts de ligne, en utilisant un caractère espace pour les pixels noirs (0) et tout caractère imprimable non espace de votre choix pour les pixels blancs (1).
Données de test:
bmp1 = [ 0x06, 0x0F, 0xF3, 0xFE, 0x0E, 0x04, 0x04, 0x1E, 0x3F, 0x7F, 0xE3, 0xC3, 0xC3, 0xC7, 0xFF, 0x3C, 0x08, 0x8F, 0xE1, 0x3F ]
bmp2 = [ 0x07, 0xFD, 0xA7 ]
bmp3 = [ 0x00, 0x8E, 0x84, 0xFF, 0xFF, 0x04, 0x0E, 0x00 ]
bmp4 = [ 0x00, 0xFC, 0xFC, 0x38, 0x3F, 0x38, 0xFC, 0xFC]
Remarque: Les tableaux d'entrée d'octets ci-dessus sont fournis sous forme hexadécimale. Si votre plate-forme n'accepte pas les littéraux hexadécimaux pour la représentation des octets, vous pouvez les convertir en un littéral équivalent octet natif.
Exemple de sortie:
f( bmp1, 1, 1 ) =>
--------
XX
XXXX
XXXX XX
XXXXXXX
XXX
X
X
XXXX
XXXXXX
XXXXXXX
XXX XX
XX XX
XX XX
XX XXX
XXXXXXXX
XXXX
X
X XXXX
XXX X
XXXXXX
--------
f( bmp1, -2, 1 ) =>
----------------
XXXX
XXXXXXXX
XXXX XXXXXXXX
XXXXXXXXXXXXXX
XXXXXX
XX
XX
XXXXXXXX
XXXXXXXXXXXX
XXXXXXXXXXXXXX
XXXX XXXXXX
XXXX XXXX
XXXX XXXX
XXXXXX XXXX
XXXXXXXXXXXXXXXX
XXXXXXXX
XX
XXXXXXXX XX
XX XXXXXX
XXXXXXXXXXXX
----------------
f( bmp2, 1, 2 ) =>
--------
XXX
XXX
XXXXXX X
XXXXXX X
X X XXX
X X XXX
--------
f( bmp2, 2, 1 ) =>
----------------
XXXXXX
XXXXXXXXXXXX XX
XX XX XXXXXX
----------------
f( bmp2, -2, -2 ) =>
----------------
XXXXXX XX XX
XXXXXX XX XX
XX XXXXXXXXXXXX
XX XXXXXXXXXXXX
XXXXXX
XXXXXX
----------------
f( bmp3, 1, -1 ) =>
--------
XXX
X
XXXXXXXX
XXXXXXXX
X X
X XXX
--------
f( bmp3, 3, 3 ) =>
------------------------
XXX XXXXXXXXX
XXX XXXXXXXXX
XXX XXXXXXXXX
XXX XXX
XXX XXX
XXX XXX
XXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXX
XXX
XXX
XXX
XXXXXXXXX
XXXXXXXXX
XXXXXXXXX
------------------------
f( bmp4, -1, -1 ) =>
--------
XXXXXX
XXXXXX
XXX
XXXXXX
XXX
XXXXXX
XXXXXX
--------
f( bmp4, 4, 2 ) =>
--------------------------------
XXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXX
XXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXX
XXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXX
--------------------------------
Remarque: les lignes horizontales au-dessus et en dessous doivent indiquer le début et la fin de la sortie. Ils ne sont pas requis dans la sortie, mais des lignes vides (représentées par tous les zéros / espaces) au début et / ou à la fin sont requises, comme indiqué.
Note 2: ces bitmaps de test ont été inspirés et recréés / codés sur la base de captures d'écran de jeu étiquetées comme "fair use" sur Wikipédia.