Jump to content

21 game: Difference between revisions

4,034 bytes added ,  1 year ago
Applesoft BASIC
(Ada version)
(Applesoft BASIC)
Line 428:
end Game_21;</lang>
 
=={{header|Applesoft BASIC}}==
{{trans|Commodore BASIC}}
Most comments are removed, see [[#Commodore_BASIC|Commodore BASIC]] for comments. The code is compacted, see the [[#Commodore_BASIC|Commodore BASIC]] listing for a line-by-line listing.
 
All text is upper case as only the the Apple IIe and later models have can display lower case on the text screen. Input is converted to upper case as the earlier models may not be able to enter lower case from the keyboard.
 
Commodore control codes are converted to the equivilent Applesoft BASIC command: ?CHR$(147); is HOME ?CHR$(18); is INVERSE and ?CHR$(146); is NORMAL. The code is adjusted when printing a numeric variables as Applesoft BASIC does not print any spaces. There are a few other changes: VAL function instead of ASC to convert number, FOR instead of GOTO or THEN, and
WAIT instead of GET in a loop.
 
<lang gwbasic> 5 DIM P$(2),HC(2),CA(4),CN$(6): READ CA(0),CA(1),CA(2),CA(3): FOR I = 1 TO 6: READ CN$(I): NEXT : DEF FN M(X) = (X - ( INT (X / 4)) * 4): DEF FN U(K) = K - (K > 95) * 32:L$ = " ":M$ = CHR$ (13): DATA 1,1,3,2
9 FOR PLAY = 0 TO 1
10 REM SET SCREEN COLORS HERE
11 LET C% = INT ( RND (1) * 16)
12 LET B% = INT ( RND (1) * 15 + C% + 1): IF B% > 15 THEN B% = B% - 16
13 POKE 49186,C% + B% * 16: REM FOREGROUND&BACKGROUND
14 POKE 49204, INT ( RND (1) * 16): REM BORDER
20 HOME : PRINT M$ SPC( 16);"21 GAME"M$M$" THE GOAL OF THIS GAME IS TO TAKE TURNS"M$" ADDING THE VALUE OF EITHER 1, 2, OR 3"M$" TO A RUNNING TOTAL. THE FIRST PLAYER"M$" TO BRING THE TOTAL TO 21..."M$M$ SPC( 10);"... WINS THE GAME!"M$
30 GOSUB 1000
40 FOR SETUP = 0 TO 1: HOME : PRINT
42 FOR P = 1 TO 2
44 PRINT M$"PLAYER";L$;P;", [H]UMAN OR [C]OMPUTER? ";
45 FOR K = 0 TO 1: GET K$:K$ = CHR$ ( FN U( ASC (K$))):K = K$ = "C" OR K$ = "H": NEXT K
46 PRINT K$M$M$"PLAYER";L$;P;",": PRINT "ENTER YOUR NAME";
50 LET HC(P) = (K$ = "C"): IF HC(P) THEN FOR PC = 0 TO 1:PN = INT ( RND (1) * 6) + 1:T$ = CN$(PN):PC = T$ < > P$(P - 1): NEXT PC:P$(P) = T$: PRINT "? ";P$(P)
52 IF NOT HC(P) THEN INPUT P$(P)
54 NEXT P
60 FOR P = 1 TO 2: PRINT M$L$;P;". ";P$(P);: NEXT P: PRINT M$M$"IS THIS CORRECT (Y/N)? ";: FOR K = 0 TO 1: GET K$:K$ = CHR$ ( FN U( ASC (K$))):K = K$ = "Y" OR K$ = "N": NEXT K: PRINT K$:SETUP = K$ < > "N"
70 NEXT SETUP
80 PRINT M$"WHO WILL PLAY FIRST (1 OR 2)? ";: FOR K = 0 TO 1: GET K$:K = K$ = "1" OR K$ = "2": NEXT K
90 FP = VAL (K$): PRINT K$M$M$"OKAY, ";P$(FP);" WILL PLAY FIRST."M$: GOSUB 1000
100 LET RT = 0:PI = FP - 1
110 FOR GAME = 0 TO 1
115 PI = PI * (PI < 2) + 1: HOME : PRINT "TOTAL SO FAR:";L$;RT;M$M$P$(PI);"'S TURN."
120 IF HC(PI) THEN PRINT M$"THINKING...";:TT = INT ( RND (1) * 10): FOR T = 1 TO TT: PRINT ".";: FOR I = 1 TO 250: NEXT I,T:RM = FN M(RT):AD = CA(RM): PRINT M$M$P$(PI);" ADDS";L$;CA(RM);".": FOR T = 1 TO 1000: NEXT T
125 IF NOT HC(PI) THEN FOR AMOUNT = 0 TO 1: PRINT MID$ (M$ + "ILLEGAL AMOUNT. TRY AGAIN." + M$,1,AMOUNT * 255)M$"HOW MUCH TO ADD,": INPUT "1, 2, OR 3 (0 TO QUIT) ?";AD:AMOUNT = AD > = 0 AND AD < = 3: NEXT AMOUNT
128 LET RT = RT + AD:GAME = RT > = 21 OR AD = 0
130 NEXT GAME
140 IF RT > 21 THEN PRINT M$P$(PI);" LOSES BY GOING OVER 21!!"
150 IF RT = 21 THEN PRINT M$"21! ";P$(PI);" WINS THE GAME!!!"
160 IF NOT AD THEN PRINT M$"GAME WAS ENDED BY ";P$(PI);".":PLAY = 1
210 IF AD THEN PRINT : PRINT "WOULD YOU LIKE TO PLAY AGAIN? ";: FOR K = 0 TO 1: GET K$:K$ = CHR$ ( FN U( ASC (K$))):K = K$ = "N" OR K$ = "Y": NEXT K: PRINT K$:PLAY = K$ = "N"
220 NEXT PLAY
230 IF AD THEN PRINT M$"OKAY, MAYBE ANOTHER TIME. BYE!"
240 END
1000 Z$ = " PRESS A KEY TO CONTINUE. ": PRINT SPC( 20 - INT ( LEN (Z$) / 2));: INVERSE : PRINT Z$;: NORMAL : WAIT 49152,128:K = PEEK (49168): RETURN
2010 DATA "APPLE IIE","APPLE II PLUS","APPLE IIC","APPLE II","APPLE IIGS","MACINTOSH LC"</lang>
=={{header|ARM Assembly}}==
{{works with|as|Raspberry Pi}}
413

edits

Cookies help us deliver our services. By using our services, you agree to our use of cookies.