ATARI ARCHIVES - REVERSE
Sept 28, 2010 19:15:32 GMT 1
Post by Pjot on Sept 28, 2010 19:15:32 GMT 1
For fun, I have ported an old BASIC game from 1978 to BaCon. I have tried to leave the original code as original as possible. There were three changes:
(1) BaCon has no GOSUB, instead I have used SUB.
(2) BaCon does not use line numbers, so for every GOTO I have created a LABEL with a linenumber.
(3) BaCon has a different RANDOM implementation so this was changed slightly.
The URL of the original game is: www.atariarchives.org/basicgames/showpage.php?page=135
Regards
Peter
(1) BaCon has no GOSUB, instead I have used SUB.
(2) BaCon does not use line numbers, so for every GOTO I have created a LABEL with a linenumber.
(3) BaCon has a different RANDOM implementation so this was changed slightly.
The URL of the original game is: www.atariarchives.org/basicgames/showpage.php?page=135
Regards
Peter
PRINT TAB$(32), "REVERSE"
PRINT TAB$(15), "CREATEIVE COMPUTING MORRISTOWN, NEW JERSEY"
PRINT:PRINT:PRINT
PRINT "REVERSE -- A GAME OF SKILL": PRINT
DECLARE A[20]
REM *** N-NUMBER OF NUMBERS
N=9
PRINT "DO YOU WANT THE RULES ";
INPUT A$
IF EQUAL(A$, "NO") THEN GOTO _210
CALL GOSUB710
REM MAKE A RANDOM LIST A[1] TO A[N]
LABEL _210
FOR K=1 TO N
LABEL _230: A[K]=RANDOM(N-1)+1
FOR J=1 TO K-1
IF A[K] IS A[J] THEN GOTO _230
NEXT J: NEXT K
REM *** PRINT ORIGINAL LIST AND START GAME
PRINT: PRINT "HERE WE GO ... THE LIST IS:"
T=0
CALL GOSUB610
LABEL _330: PRINT "HOW MANY SHALL I REVERSE ";
INPUT R
IF R IS 0 THEN GOTO _520
IF R<=N THEN GOTO _390
PRINT "OOPS! TOO MANY! I CAN REVERSE AT MOST ", N: GOTO _330
LABEL _390: T=T+1
REM *** REVERSE R NUMBERS AND PRINT NEW LIST
FOR K=1 TO INT(R/2)
Z=A[K]
A[K]=A[R-K+1]
A[R-K+1]=Z
NEXT K
CALL GOSUB610
REM CHECK FOR A WIN
FOR K=1 TO N
IF A[K] NE K THEN GOTO _330
NEXT K
PRINT "YOU WON IT IN ", T, " MOVES!!": PRINT
LABEL _520: PRINT
PRINT "TRY AGAIN (YES OR NO) ";
INPUT A$
IF EQUAL(A$, "YES") THEN GOTO _210
PRINT: PRINT "O.K. HOPE YOU HAD FUN!!": GOTO _999
SUB GOSUB610
REM *** SUBROUTINE TO PRINT LIST
PRINT: FOR K=1 TO N: PRINT A[K], " ";: NEXT K
PRINT: PRINT
END SUB
SUB GOSUB710
REM *** SUBROUTINE TO PRINT THE RULES
PRINT: PRINT "THIS IS THE GAME OF 'REVERSE'. TO WIN, ALL YOU HAVE"
PRINT "TO DO IS ARRANGE A LIST OF NUMBERS (1 THROUGH ", N, ")"
PRINT "IN NUMERICAL ORDER FROM LEFT TO ROGHT. TO MOVE, YOU"
PRINT "TELL ME HOW MANY NUMBERS (COUNTING FROM THE LEFT) TO"
PRINT "REVERSE. FOR EXAMPLE, IF THE CURRENT LIST IS:"
PRINT: PRINT "2 3 4 5 1 6 7 8 9"
PRINT: PRINT "AND YOU REVERSE $< THE RESULT WILL BE:"
PRINT: PRINT "5 4 3 2 1 6 7 8 9"
PRINT: PRINT "NOW IF YOU REVERSE 5, YOU WIN!"
PRINT: PRINT "1 2 3 4 5 6 7 8 9": PRINT
PRINT "NO DOUBT YOU WILL LIKE THIS GAME, BUT"
PRINT "IF YOU WANT TO QUIT, REVERSE 0 (ZERO).": PRINT
END SUB
LABEL _999: END