Quarantine challenge

sly*m

Retro Addict
Messages
551
Reaction score
1,409
Points
103
Δεν μπορώ πλέον να διαβάσω τίποτα χωρίς indentation και coding conventions

Γλώσσα χωρίς curly braces δεν είναι γλώσσα! :lol:

Το Basic Computer Games είναι ένα βιβλίο του 1978 με πολλά listings.
Τι λέτε για βελάκια; BullsEye

edit: η γραμμή 190 θα έπρεπε να είναι
Code:
190 ON T GOTO 200, 210, 220

View attachment 19703


Atari 8-bit Basic

Του έχω βάλει σάλτσες.

Η atari basic δεν έχει array από strings και το DIM STRING$(NUMBER) δηλώνει πόσοι (NUMBER) χαρακτήρες είναι σε ένα string.
Προβλέπονται 6 χαρακτήρες για κάθε όνομα. Έτσι το string A$(120) δηλώνεται με μήκος 6 x 20 παίκτες=120 χαρακτήρες.

Το κάθε όνομα παίρνεται σαν substring με την έννοια A$(θέση αρχής,θέση τέλους), δηλαδή στις θέσεις 1,6 ... 7,12 ... 13,18 κλπ. στην υπορουτίνα
550 REM --- PLAYER NAMES ---

Μετά ήθελα να δίνω αναφορά σε κάθε γύρο όπως και στο τέλος, λίστα με το σκορ όλων των παικτών.
Η λίστα τυπώνεται στην υπορουτίνα
580 REM --- PRINT SCORE TABLE ---

Τα ονόματα και τα σκορς για εκτύπωση τα στοιχίζω δεξιά για ομορφιά!

19707

Αν δεν δοθεί όνομα παίκτη το πρόγραμμα θα βάλει default το 'PL-' και τον αύξοντα αριθμό.

19711

Στο τέλος κάθε γύρου βγάζει λίστα με τα σκορς.

19712

Στο τέλος τυπώνωνται πρώτα οι νικητές (όσοι έχουν από 200 πόντους και πάνω) και μετά οι υπόλοιποι.

19710

Code:
100 REM -----------------------------
110 REM BULLSEYE FOR ATARI 800
120 REM SLY*M 3/5/2020
130 REM CHANGE PTS FOR WINNING POINTS
140 REM -----------------------------
150 POKE 82,0:PTS=200:? "}               BULLSEYE"
160 ? "          CREATIVE COMPUTING           "
170 ? "        MORRISTOWN, NEW JERSEY         "
180 ? 
190 ? "  IN THIS GAME, UP TO 20 PLAYERS THROW "
200 ? " DARTS AT A TARGET WITH 10, 20, 30, AND"
210 ? "40 POINT ZONES. THE OBJECTIVE IS TO GET"
220 ? "             ";PTS;" POINTS.":? 
230 ? "THROW 1-3,DESCRIPTION:PROBABLE SCORE"
240 ? "1 FAST OVERARM:BULSEYE OR COMPLETE MISS"
250 ? "2 CONTROLLED OVERARM:10,20 OR 30 POINTS"
260 ? "3 UNDERARM:ANYTHING":? 
270 DIM N$(6),TMP$(6),A$(120),T$(1),S(20),W(20):M=0:R=0
280 FOR I=1 TO 20:S(I)=0:W(I)=0:NEXT I
290 ? "HOW MANY PLAYERS";:INPUT N$:IF N$="" THEN N$="0"
300 N=VAL(N$):IF N<1 OR N>20 THEN ? "1 TO 20":GOTO 290
310 FOR I=1 TO N:GOSUB 550:NEXT I:? 
320 R=R+1:? "---------":? " ROUND";R:? "---------"
330 FOR I=1 TO N:ST=(I-1)*6
340 ? A$(ST+1,ST+6);"'S THROW";:INPUT T$:IF T$="" THEN T$="0"
350 T=VAL(T$):IF T<1 OR T>3 THEN ? "INPUT 1, 2, OR 3!":GOTO 340
360 ON T GOTO 370,380,390
370 P1=0.65:P2=0.55:P3=0.5:P4=0.5:GOTO 400
380 P1=0.99:P2=0.77:P3=0.43:P4=0.01:GOTO 400
390 P1=0.95:P2=0.75:P3=0.45:P4=0.05
400 U=RND(RND(0)*100)
410 IF U>=P1 THEN ? "BULLSEYE! 40 POINTS! ";:B=40:GOTO 460
420 IF U>=P2 THEN ? "30-POINT ZONE!       ";:B=30:GOTO 460
430 IF U>=P3 THEN ? "20-POINT ZONE        ";:B=20:GOTO 460
440 IF U>=P4 THEN ? "WHEW!  10 POINTS.    ";:B=10:GOTO 460
450 ? "... MISSED! TOO BAD. ";:B=0
460 S(I)=S(I)+B:? "TOTAL SCORE =";S(I):? :NEXT I
470 FOR I=1 TO N:IF S(I)>=PTS THEN M=M+1:W(M)=I
480 NEXT I:IF M=0 THEN FOR I=1 TO 200:NEXT I:GOSUB 580:GOTO 320
490 FOR I=1 TO 200:NEXT I
500 ? :? "*** WE HAVE A WINNER! ***":? "-------------------------"
510 FOR I=1 TO M:? A$((W(I)-1)*6+1,(W(I)-1)*6+6);" SCORED ";S(W(I));" POINTS.":NEXT I
520 ? "-------------------------":GOSUB 580
530 IF N<20 THEN FOR I=N TO 19:? :NEXT I
540 ? "  THANKS FOR THE GAME!";:? "    [return]";:INPUT T$:POKE 82,2:END 
550 REM --- PLAYER NAMES ---
560 ? "NAME OF PLAYER #";I;:INPUT N$:IF N$="" THEN N$="PL-":N$(4,6)=STR$(I)
570 TMP$="      ":TMP$(6-LEN(N$)+1,6)=N$:A$((I-1)*6+1)=TMP$:RETURN 
580 REM --- PRINT SCORE TABLE ---
590 X=1:FOR I=1 TO N:IF I=W(X) THEN X=X+1:GOTO 620
600 TMP$="   ":N$=STR$(S(I)):TMP$(3-LEN(N$)+1,3)=N$
610 ? A$((I-1)*6+1,(I-1)*6+6);" SCORED ";TMP$;" POINTS."
620 NEXT I:RETURN
 
Last edited:
Top