24 game: Difference between revisions
Content deleted Content added
No edit summary |
Applesoft BASIC |
||
Line 919: | Line 919: | ||
nope |
nope |
||
</pre> |
</pre> |
||
=={{header|Applesoft BASIC}}== |
|||
This was taken from both the [[#Commodore_BASIC|Commodore BASIC]] and [[#ZX_Spectrum_BASIC|ZX Spectrum BASIC]] solutions. |
|||
<lang ApplesoftBasic> 0 BH = PEEK (104):BL = PEEK (103) |
|||
1 GOSUB 1200: CALL - 868 |
|||
10 LET N$ = "" |
|||
20 R = RND ( - ( PEEK (78) + PEEK (79) * 256)): REM RANDOMIZE |
|||
30 FOR I = 1 TO 4 |
|||
40 LET N$ = N$ + STR$ ( INT ( RND (1) * 9) + 1) |
|||
50 NEXT I |
|||
60 PRINT " PRESS A KEY TO CONTINUE. ";: GET A$ |
|||
65 LET I$ = "": LET F$ = "": LET P$ = "" |
|||
70 HOME |
|||
80 PRINT M$M$ SPC( 16)"24 GAME" |
|||
90 PRINT M$"ALLOWED CHARACTERS:"M$ |
|||
100 LET I$ = N$ + "+-*/()" |
|||
110 HTAB 20 |
|||
120 FOR I = 1 TO 10 |
|||
130 PRINT MID$ (I$,I,1)" "; |
|||
140 NEXT I |
|||
150 PRINT M$ TAB( 7)"0 TO END"M$ |
|||
160 INPUT "ENTER THE FORMULA: ";F$ |
|||
170 IF F$ = "0" THEN END : GOTO 65 |
|||
180 PRINT M$ TAB( 7)F$" = "; |
|||
190 FOR I = 1 TO LEN (F$) |
|||
200 LET C$ = MID$ (F$,I,1) |
|||
210 IF C$ = " " THEN LET F$ = MID$ (F$,1,I - 1) + MID$ (F$,I + 1): GOTO 250 |
|||
220 IF C$ = "+" OR C$ = "-" OR C$ = "*" OR C$ = "/" THEN LET P$ = P$ + "O": GOTO 250 |
|||
230 IF C$ = "(" OR C$ = ")" THEN LET P$ = P$ + C$: GOTO 250 |
|||
240 LET P$ = P$ + "N" |
|||
250 NEXT I |
|||
260 RESTORE |
|||
270 FOR I = 1 TO 11 |
|||
280 READ T$ |
|||
290 IF T$ = P$ THEN LET I = 11 |
|||
300 NEXT I |
|||
310 IF T$ < > P$ THEN INVERSE : PRINT "BAD CONSTRUCTION!"G$M$: NORMAL : GOTO 60 |
|||
320 FOR I = 1 TO LEN (F$) |
|||
330 FOR J = 1 TO 10 |
|||
340 IF ( MID$ (F$,I,1) = MID$ (I$,J,1)) AND MID$ (F$,I,1) > "0" AND MID$ (F$,I,1) < = "9" THEN LET I$ = MID$ (I$,1,J - 1) + " " + MID$ (I$,J + 1, LEN (I$)) |
|||
350 NEXT J,I |
|||
370 IF MID$ (I$,1,4) < > " " THEN INVERSE : PRINT "INVALID ARGUMENTS!"G$M$: NORMAL : GOTO 60 |
|||
380 GOSUB 600: REM LET R = VAL(F$) |
|||
390 PRINT R" "; |
|||
400 IF R < > 24 THEN INVERSE : PRINT "WRONG!"G$M$: NORMAL : GOTO 60 |
|||
410 INVERSE : PRINT "CORRECT!"M$: NORMAL : GOTO 10 |
|||
420 DATA"NONONON" |
|||
430 DATA"(NON)ONON" |
|||
440 DATA"NONO(NON)" |
|||
450 DATA"NO(NO(NON))" |
|||
460 DATA"((NON)ON)ON" |
|||
470 DATA"NO(NON)ON" |
|||
480 DATA"(NON)O(NON)" |
|||
485 DATA"NO((NON)ON)" |
|||
490 DATA"(NONON)ON" |
|||
495 DATA"(NO(NON))ON" |
|||
500 DATA"NO(NONON)" |
|||
600 REMGET BASIC TO EVALUATE OUR EXPRESSION |
|||
605 A$ = "R=" + F$: GOSUB 1440 |
|||
610 FOR I = 1 TO LEN (A$) |
|||
615 REMSIMPLE TOKEN TRANSLATION |
|||
620 B = ASC ( MID$ (A$,I,1)) |
|||
625 IF (B > 41 AND B < 48) OR B = 61 OR B = 94 THEN B = T(B) |
|||
630 POKE (AD + I - 1),B |
|||
635 NEXT |
|||
640 GOSUB 2000 |
|||
645 REM GOSUB 1440:REM UNCOMMENT TO CLEAR EVALUATION LINE AFTER USE |
|||
650 RETURN |
|||
1200 M$ = CHR$ (13) |
|||
1210 G$ = CHR$ (7) |
|||
1220 HOME |
|||
1230 PRINT SPC( 16)"24 GAME" |
|||
1240 PRINT M$" THE GOAL OF THIS GAME IS TO FORMULATE" |
|||
1250 PRINT M$" AN ARITHMETIC EXPRESSION THAT" |
|||
1260 PRINT M$" EVALUATES TO A VALUE OF 24, HOWEVER" |
|||
1270 PRINT M$" YOU MAY USE ONLY THE FOUR NUMBERS" |
|||
1280 PRINT M$" GIVEN AT RANDOM BY THE COMPUTER AND" |
|||
1290 PRINT M$" THE STANDARD ARITHMETIC OPERATIONS OF" |
|||
1300 PRINT M$" ADD, SUBTRACT, MULTIPLY, AND DIVIDE." |
|||
1310 PRINT M$" EACH DIGIT MUST BE USED BY ITSELF. " |
|||
1320 PRINT M$" (E.G. IF GIVEN 1, 2, 3, 4, YOU CANNOT" |
|||
1330 PRINT M$" COMBINE 1 AND 2 TO MAKE 12.)" |
|||
1340 PRINT M$ |
|||
1350 PRINT "INITIALIZING..."; |
|||
1360 HTAB 1 |
|||
1400 DIM T(94) |
|||
1401 T( ASC ("+")) = 200: REM $C8 |
|||
1402 T( ASC ("-")) = 201: REM $C9 |
|||
1403 T( ASC ("*")) = 202: REM $CA |
|||
1404 T( ASC ("/")) = 203: REM $CB |
|||
1405 T( ASC ("=")) = 208: REM $D0 |
|||
1406 T( ASC ("^")) = 204: REM $CC |
|||
1409 REMLOCATE LINE 2005 IN RAM |
|||
1410 LH = BH:LL = BL:NH = 0:NL = 0 |
|||
1415 AD = LH * 256 + LL |
|||
1420 LH = PEEK (AD + 1):LL = PEEK (AD) |
|||
1425 NL = PEEK (AD + 2):NH = PEEK (AD + 3):N = NH * 256 + NL |
|||
1430 IF N < > 2005 THEN GOTO 1415 |
|||
1435 AD = AD + 4: RETURN |
|||
1440 FOR J = AD TO AD + 12: POKE J, ASC (":"): NEXT |
|||
1445 RETURN |
|||
2000 REMPUT 13 COLONS ON THE NEXT LINE |
|||
2005 ::::::::::::: |
|||
2010 RETURN |
|||
</lang> |
|||
=={{header|Argile}}== |
=={{header|Argile}}== |