Retro Game & PC/매뉴얼 팁 작업

More Basic Computer Games - Blackbox

smores 2015. 1. 27. 05:20

처음 컴퓨터를 접하던 시절 배웠던 언어가 BASIC 이었다. 때문에 개인적으로는 BASIC 이 무척 친근하고 추억도 많은 언어이다. 우연히 옛 컴퓨터 책자 (라고는 해도 PDF 다운로드 받은 것이지만) 들을 뒤적이다가 David H. Ahl 이 저술한 Basic Computer Games / More Basic Computer Games 라는 책을 보게 되었다. 



      



여기에는 예전 마이크로컴퓨터 시절의 텍스트 기반 (그래픽 전혀 지원 없이) BASIC 게임 소스 코드들이 나오는 책이다. 문번호까지 착실히(?) 붙어있는 정말 옛날 코드들이다. 조금 넘기다가 보니 blackbox 라는 게임이 있다. 말 그대로 blackbox 안에 몇개인가의 원자를 임의의 위치에 넣고 박스 사방에서 빛을 넣어서 나오는 결과 (reflection, deflection, absorption 원리에 의한)를 보고 위치를 추정하는 고전적인 게임이다. 






헌데 이렇게 간단해 보이는 게임조차 머리를 써야 하는 것이어서인지 생각보다 꽤 재미있었다. 게임 원리/룰은 위키에 그림과 함께 잘 나온다.


http://en.wikipedia.org/wiki/Black_Box_(game)


그리고 이 게임은 컴퓨터 기술이 너무도 발달한 오늘날에도 일부 웹 베이스 게임으로 재현해 놓고 있다. 


http://www.bibeault.org/blackbox/






게임 편의성 면에서는 역시 오늘날의 화려한 그래픽과 편리한 유저 인터페이스를 제공하는 웹게임이 훨씬 낫다. 하지만 레트로 컴퓨터/게임을 즐기는 측면에서는 아무래도 텍스트로 입력을 해 가며 해 보는 옛 스타일의 코드를 직접 돌려보고 싶었다. Basic Computer Games 의 경우는 전체 프로그램 소스를 쉽게 구할 수 있는데 (microcomputer code 및 GW-BASIC 포팅판 모두) More Basic Computer Games 의 코드들은 좀처럼 인터넷에서 구하기 힘들었다. 해서 한 30여분 걸려서 일일히 PDF 이미지 보고 코드를 에디터에 입력해서 AppleWin 에뮬레이터에서 돌려보았다.



100 PRINT TAB(25); "BLACKBOX"

110 PRINT TAB(20); "CREATIVE COMPUTING"

120 PRINT TAB(10); "MORRISTOWN, NEW JERSEY"

130 PRINT: PRINT: PRINT

140 DEF FN R(Z)=INT(8*RND(1)+1)

150 PRINT "NO. OF ATOMS";: INPUT N

160 FOR J=0 TO 9: FOR I=0 TO 9: B(I,J)=0: NEXT I,J

170 FOR I=1 TO N

180 X=FN R(1): Y=FN R(1): IF B(X,Y)<>0 THEN 180

190 B(X,Y)=1: NEXT I

200 S=0: C=0

210 PRINT: PRINT "RAY ";: INPUT R: IF R<1 THEN 480

220 ON INT((R-1)/8)+1 GOTO 240,250,260,270

230 PRINT "ERROR": GOTO 210

240 X=0: Y=R: U=1: V=0: GOTO 280

250 X=R-8: Y=9: U=0: V=-1: GOTO 280

260 X=9: Y=25-R: U=-1: V=0: GOTO 280

270 X=33-R: Y=0: U=0: V=1

280 X1=X+U: Y1=Y+V

290 IF U=0 THEN X2=X1-1: X3=X1+1: Y2=Y1: Y3=Y1: GOTO 310

300 Y2=Y1-1: Y3=Y1+1: X2=X1: X3=X1

310 ON 8*B(X1,Y1)+B(X2,Y2)+2*B(X3,Y3)+1 GOTO 330,340,350,340

320 PRINT "ABSORBED": S=S+1: GOTO 210

330 X=X1: Y=Y1: GOTO 380

340 Z=1: GOTO 360

350 Z=-1

360 IF U=0 THEN U=Z: V=0: GOTO 380

370 U=0: V=Z

380 ON INT((X+15)/8) GOTO 420,400,430

390 STOP

400 ON INT((Y+15)/8) GOTO 440,280,450

410 STOP

420 Z=Y: GOTO 460

430 Z=25-Y: GOTO 460

440 Z=33-X: GOTO 460

450 Z=8+X

460 IF Z=R THEN PRINT "REFECTED": S=S+1: GOTO 210

470 PRINT "TO"; Z: S=S+2: GOTO 210

480 PRINT: PRINT "NOW TELL ME, WHERE DO YOU THINK THE ATOMS ARE?"

490 PRINT "(IN ROW, COLUMN FORMAT PLEASE.)": PRINT

500 FOR Q=1 TO N

510 PRINT "ATOM # "; Q;

520 INPUT I,J

530 if B(J,I)<1 THEN S=S+5: GOTO 540

532 B(J,I)=2

535 C=C+1

540 NEXT Q

550 PRINT: FOR J=1 TO 8: FOR I=1 TO 8

560 IF B(I,J)=0 THEN PRINT " .";: GOTO 580

570 PRINT " *";

580 NEXT I: PRINT: NEXT J: PRINT

590 PRINT "YOU GUESSED "; C; " OUT OF "; N; " ATOMS CORRECTLY!!"

600 PRINT "YOUR SCORE FOR THIS ROUND WAS "; S; " POINTS."

605 PRINT

610 INPUT "CARE TO TRY AGAIN"; A$

620 IF LEFT$(A$,1)="Y" THEN PRINT: GOTO 150

630 END




잘 된다. 아래의 엑셀 시트는 게임을 하면서 위치를 쉽게 추정하기 위해 사용한 간단한 메모이다. 이 짓을 하다보니 리눅스에서도 이러한 게임 코드들을 돌려보고 싶은 생각이 든다.







이런 고전 게임(?)을 즐기다 보면 역시 게임의 재미는 화려한 비주얼보다는 아이디어가 더 중요한 것이 아닌가 싶은 생각이 든다.