Lớn lên, hệ thống trò chơi console đầu tiên của tôi là Atari 2600 và tôi sẽ luôn yêu thích một số trò chơi mà tôi rất thích khi còn nhỏ. Nhiều đồ họa vẫn còn đáng nhớ, thậm chí có thể mang tính biểu tượng.
Nó chỉ ra rằng các sprite này là bitmap rất đơn giản, rộng 8 pixel với chiều cao thay đổi trong đó biểu diễn nhị phân là sự sắp xếp của các pixel.
Ví dụ: các byte hex 0x18, 0x24, 0x18 sẽ vẽ một vòng tròn thô như vậy:
0x18: 00011000
0x24: 00100100
0x18: 00011000
Vì chiều rộng 8 pixel tạo ra đồ họa khá nhỏ (thậm chí theo tiêu chuẩn Atari 2600), thông thường sẽ tăng gấp đôi hoặc gấp bốn lần chiều cao, chiều rộng hoặc cả hai để tạo ra một phiên bản lớn hơn (mặc dù nhiều khối và méo hơn) của cùng một hình ảnh. Chúng thường cũng được lật theo chiều dọc hoặc ngang cho cả họa tiết người chơi và sân chơi. Trò chơi Combat là một ví dụ tốt về điều này.
Thách thức là, viết mã để hiển thị các họa tiết này dưới dạng "đồ họa" ở dạng ASCII bao gồm khả năng kéo dài hoặc lật chúng theo chiều dọc, chiều ngang hoặc cả hai. Điều này phải ở dạng một chương trình đầy đủ hoặc chức năng có thể gọi được.
Đầu vào:
- Một mảng byte, mỗi byte đại diện cho các bit ngang cho dòng đó.
- Giá trị nguyên khác không cho mỗi hướng, ngang và dọc biểu thị hệ số tỷ lệ cho kích thước đó.
- Giá trị âm biểu thị rằng kích thước cũng nên được lật dọc theo trục của nó.
Đầu ra:
- Biểu diễn ASCII thành STDOUT hoặc chuỗi phân tách dòng mới, sử dụng ký tự khoảng trắng cho pixel (0) màu đen và bất kỳ ký tự không phải không gian có thể in nào bạn chọn cho pixel (1) màu trắng.
Dữ liệu kiểm tra:
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]
Lưu ý: Ví dụ về mảng đầu vào của byte được cung cấp dưới dạng hex. Nếu nền tảng của bạn không chấp nhận các ký tự hex để biểu diễn byte, bạn có thể chuyển đổi chúng thành một ký tự tương đương byte gốc.
Kết quả ví dụ:
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
--------------------------------
Lưu ý: các đường ngang bên trên và bên dưới là để hiển thị đầu và cuối của đầu ra. Chúng không được yêu cầu trong đầu ra, tuy nhiên các dòng trống (được biểu thị bằng tất cả các số 0 / khoảng trắng) ở đầu và / hoặc cuối là bắt buộc, như được hiển thị.
Lưu ý 2: các bitmap thử nghiệm này được lấy cảm hứng và được vẽ lại / mã hóa dựa trên ảnh chụp màn hình trò chơi được gắn thẻ là "sử dụng hợp lý" trên Wikipedia.