เมื่อโตขึ้นระบบเกมคอนโซลเครื่องแรกของฉันคืออาตาริ 2600 และฉันจะรักเกมเหล่านั้นบางเกมที่ฉันยังเด็ก กราฟิกจำนวนมากยังคงน่าจดจำหรืออาจเป็นสัญลักษณ์
ปรากฎว่าสไปรต์เหล่านี้เป็นบิตแมปแบบง่ายมากกว้าง 8 พิกเซลพร้อมความสูงของตัวแปรที่การแสดงแบบไบนารี่คือการจัดเรียงของพิกเซล
ตัวอย่างเช่น hex bytes 0x18, 0x24, 0x18 จะวาดวงกลมที่หยาบเช่น:
0x18: 00011000
0x24: 00100100
0x18: 00011000
เมื่อความกว้าง 8 พิกเซลสร้างกราฟิกขนาดเล็กพอสมควร (แม้ตามมาตรฐาน Atari 2600) มันเป็นเรื่องธรรมดาที่จะเพิ่มเป็นสองเท่าหรือสี่เท่าไม่ว่าจะเป็นความสูงความกว้างหรือทั้งสองอย่างเพื่อสร้างภาพที่มีขนาดใหญ่ขึ้น พวกเขามักจะถูกพลิกในแนวตั้งหรือแนวนอนสำหรับผู้เล่นทั้งสไปรต์และเพลย์ฟิลด์ เกมCombatเป็นตัวอย่างที่ดีของเรื่องนี้
ความท้าทายคือการเขียนโค้ดเพื่อแสดง sprites เหล่านี้เป็น "กราฟิก" ในรูปแบบ ASCII รวมถึงความสามารถในการยืดหรือพลิกแนวตั้งแนวนอนหรือทั้งสองอย่าง นี้จะต้องอยู่ในรูปแบบของโปรแกรมเต็มรูปแบบหรือฟังก์ชั่น callable
การป้อนข้อมูล:
- อาเรย์ของแต่ละไบต์แสดงถึงบิตแนวนอนสำหรับบรรทัดนั้น
- ค่าจำนวนเต็มไม่เป็นศูนย์สำหรับแต่ละทิศทางแนวนอนและแนวตั้งแสดงถึงตัวคูณสเกลสำหรับมิตินั้น
- ค่าลบแสดงว่ามิติควรพลิกตามแกนของมัน
เอาท์พุท:
- ASCII เป็นตัวแทนของ STDOUT หรือสตริงที่คั่นด้วยการขึ้นบรรทัดใหม่โดยใช้อักขระเว้นวรรคสำหรับสีดำ (0) พิกเซลและอักขระที่ไม่พิมพ์เว้นวรรคที่คุณต้องการสำหรับสีขาว (1) พิกเซล
ข้อมูลการทดสอบ:
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]
หมายเหตุ: ตัวอย่างข้างต้นอาร์เรย์อินพุตของไบต์มีให้เป็นฐานสิบหก หากแพลตฟอร์มของคุณไม่ยอมรับตัวอักษรฐานสิบหกสำหรับการแทนค่าไบต์คุณสามารถแปลงให้เป็นตัวอักษรที่เทียบเท่ากับไบต์ดั้งเดิม
ตัวอย่างผลลัพธ์:
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
--------------------------------
หมายเหตุ: เส้นแนวนอนด้านบนและด้านล่างเป็นการแสดงจุดเริ่มต้นและจุดสิ้นสุดของเอาต์พุต ไม่จำเป็นต้องใช้ในเอาต์พุตอย่างไรก็ตามบรรทัดว่าง (แสดงโดยศูนย์ / ช่องว่างทั้งหมด) ที่จุดเริ่มต้นและ / หรือสิ้นสุดตามที่แสดง
หมายเหตุ 2: บิตแมปการทดสอบเหล่านี้ได้รับแรงบันดาลใจจากและวาดใหม่ / เข้ารหัสตามภาพหน้าจอเกมที่ติดแท็กเป็น "การใช้งานที่เหมาะสม" ใน Wikipedia