자라면서, 나의 첫 콘솔 게임 시스템은 Atari 2600이었고, 나는 어렸을 때 좋아했던 게임들에 대해 항상 사랑할 것입니다. 많은 그래픽이 여전히 기억에 남으며 아마도 상징적입니다.
이 스프라이트는 이진 표현이 픽셀의 배열 인 가변 높이를 가진 8 픽셀 너비의 매우 단순한 비트 맵임을 알 수 있습니다.
예를 들어 16 진 바이트 0x18, 0x24, 0x18은 다음과 같이 원을 그립니다.
0x18: 00011000
0x24: 00100100
0x18: 00011000
너비가 8 픽셀이면 상당히 작은 그래픽 (Atari 2600 표준으로도)이 만들어 지므로 높이, 너비 또는 둘 모두를 두 배 또는 네 배로 늘려서 동일한 이미지의 더 큰 (더 블록적이고 왜곡 된) 버전을 만드는 것이 일반적이었습니다. 또한 플레이어 스프라이트와 플레이 필드 모두에서 수직 또는 수평으로 뒤집어집니다. Combat 게임 이 좋은 예입니다.
문제는 이러한 스프라이트를 세로, 가로 또는 양쪽으로 늘리거나 뒤집는 기능을 포함하여 이러한 스프라이트를 ASCII 형식으로 "그래픽"으로 표시하는 코드를 작성하는 것입니다. 이것은 전체 프로그램 또는 호출 가능한 함수의 형태 여야합니다.
입력:
- 각 줄의 가로 비트를 나타내는 바이트 배열입니다.
- 각 방향에 대한 0이 아닌 정수 값, 가로 및 세로는 해당 차원의 배율을 나타냅니다.
- 음수 값은 치수를 축을 따라 뒤집어 야 함을 나타냅니다.
산출:
- 검은 색 (0) 픽셀에 공백 문자를 사용하고 흰색 (1) 픽셀에 대해 선택 가능한 인쇄 가능하고 공백이 아닌 문자를 사용하여 STDOUT 또는 줄 바꿈으로 구분 된 문자열로 ASCII 표현.
테스트 데이터 :
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]
참고 : 위의 예제 입력 배열은 16 진수로 제공됩니다. 플랫폼이 바이트 표현을 위해 16 진 리터럴을 허용하지 않는 경우이를 바이트 단위의 고유 리터럴로 변환 할 수 있습니다.
출력 예 :
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
--------------------------------
참고 : 위와 아래의 수평선은 출력의 시작과 끝을 나타냅니다. 출력에는 필요하지 않지만 표시된대로 시작 및 / 또는 끝에 빈 줄 (모든 0 / 공백으로 표시)이 필요합니다.
참고 2 :이 테스트 비트 맵은 Wikipedia에서 "공정 사용"으로 표시된 게임 스크린 샷을 기반으로 영감을 얻은 후 다시 그려 지거나 코딩되었습니다.