Büyüdükçe, ilk konsol oyun sistemim Atari 2600'dü ve çocukken çok zevk aldığım oyunlardan her zaman bir sevgim olacak. Grafiklerin çoğu hala unutulmaz, hatta belki ikoniktir.
Bu spriteların çok basit bitmapler olduğu, değişken yükseklikte 8 piksel genişliğinde, ikili gösterimin piksellerin düzenlendiği olduğu ortaya çıktı.
Örneğin, onaltılık bayt 0x18, 0x24, 0x18 şöyle bir ham daire çizer:
0x18: 00011000
0x24: 00100100
0x18: 00011000
8 piksel genişliğinde oldukça küçük grafikler oluşturduğu için (Atari 2600 standartlarına göre), aynı görüntünün daha büyük (daha bloklu ve bozuk) bir versiyonunu oluşturmak için yüksekliği, genişliği veya her ikisini iki katına veya dörte katlamak yaygındı. Ayrıca, hem oyuncu sprite hem de playfield'ler için dikey veya yatay olarak çevrilirler. Oyun Combat buna güzel bir örnektir.
Buradaki zorluk, ASCII formunda bu grafikleri dikey, yatay veya her ikisini de uzatma veya döndürme yeteneğini içeren "grafikler" olarak görüntülemek için kod yazmaktır. Bu, tam bir program veya çağrılabilir işlev biçiminde olmalıdır.
Giriş:
- Her biri bu satır için yatay bitleri temsil eden bir bayt dizisi.
- Her yön için sıfır olmayan bir tamsayı değeri, bu boyut için ölçeklendirme faktörünü temsil eden yatay ve dikey.
- Negatif bir değer, boyutun kendi ekseni boyunca çevrilmesi gerektiğini gösterir.
Çıktı:
- Siyah (0) pikseller için bir boşluk karakteri ve beyaz (1) pikseller için seçtiğiniz herhangi bir yazdırılabilir, boşluksuz karakter için STDOUT veya yeni satırlarla ayrılmış bir dizeye ASCII gösterimi.
Test verisi:
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]
Not: Yukarıdaki örnekte bayt giriş dizileri altıgen olarak verilmiştir. Platformunuz bayt temsili için onaltılık değişmezleri kabul etmezse, onları yerel bayt eşdeğeri bir değişmeze dönüştürebilirsiniz.
Örnek çıktı:
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
--------------------------------
Not: Yukarıdaki ve altındaki yatay çizgiler, çıkışın başlangıcını ve sonunu göstermektir. Çıktıda gerekli değildirler, ancak gösterildiği gibi, başlangıç ve / veya sondaki boş satırlar (tüm sıfırlar / boşluklarla temsil edilir) gereklidir.
Not 2: Bu test bitmap'leri ilham aldı ve Wikipedia'da "adil kullanım" olarak etiketlenen oyun ekran görüntülerine dayanarak yeniden çizildi / kodlandı.