mirror of
https://github.com/coding-horror/basic-computer-games.git
synced 2025-12-12 07:40:50 -08:00
add 00_Alternate_Langage folder and move alternate ports there
This commit is contained in:
13
00_Alternate_Languages/01_Acey_Ducey/README.md
Normal file
13
00_Alternate_Languages/01_Acey_Ducey/README.md
Normal file
@@ -0,0 +1,13 @@
|
||||
Please refer to the `readme.md` in the parent folder.
|
||||
|
||||
Each subfolder represents a port of this program to a language which is _not_ one of the agreed upon 10 languages, which are intended to meet these three criteria:
|
||||
|
||||
1. Popular (by TIOBE index)
|
||||
2. Memory safe
|
||||
3. Generally considered a 'scripting' language
|
||||
|
||||
We welcome additional ports, but these additional ports are for educational purposes only.
|
||||
|
||||
#### External Links
|
||||
- Common Lisp: https://github.com/koalahedron/lisp-computer-games/blob/master/01%20Acey%20Ducey/common-lisp/acey-deucy.lisp
|
||||
- PowerShell: https://github.com/eweilnau/basic-computer-games-powershell/blob/main/AceyDucey.ps1
|
||||
100
00_Alternate_Languages/01_Acey_Ducey/aceyducey.bas
Normal file
100
00_Alternate_Languages/01_Acey_Ducey/aceyducey.bas
Normal file
@@ -0,0 +1,100 @@
|
||||
10 PRINT TAB(26);"ACEY DUCEY CARD GAME"
|
||||
20 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY"
|
||||
21 PRINT
|
||||
22 PRINT
|
||||
30 PRINT"ACEY-DUCEY IS PLAYED IN THE FOLLOWING MANNER "
|
||||
40 PRINT"THE DEALER (COMPUTER) DEALS TWO CARDS FACE UP"
|
||||
50 PRINT"YOU HAVE AN OPTION TO BET OR NOT BET DEPENDING"
|
||||
60 PRINT"ON WHETHER OR NOT YOU FEEL THE CARD WILL HAVE"
|
||||
70 PRINT"A VALUE BETWEEN THE FIRST TWO."
|
||||
80 PRINT"IF YOU DO NOT WANT TO BET, INPUT A 0"
|
||||
100 N=100
|
||||
110 Q=100
|
||||
120 PRINT "YOU NOW HAVE ";Q;" DOLLARS."
|
||||
130 PRINT
|
||||
140 GOTO 260
|
||||
210 Q=Q+M
|
||||
220 GOTO 120
|
||||
240 Q=Q-M
|
||||
250 GOTO 120
|
||||
260 PRINT"HERE ARE YOUR NEXT TWO CARDS: "
|
||||
270 A=INT(14*RND(1))+2
|
||||
280 IF A<2 THEN 270
|
||||
290 IF A>14 THEN 270
|
||||
300 B=INT(14*RND(1))+2
|
||||
310 IF B<2 THEN 300
|
||||
320 IF B>14 THEN 300
|
||||
330 IF A>=B THEN 270
|
||||
350 IF A<11 THEN 400
|
||||
360 IF A=11 THEN 420
|
||||
370 IF A=12 THEN 440
|
||||
380 IF A=13 THEN 460
|
||||
390 IF A=14 THEN 480
|
||||
400 PRINT A
|
||||
410 GOTO 500
|
||||
420 PRINT"JACK"
|
||||
430 GOTO 500
|
||||
440 PRINT"QUEEN"
|
||||
450 GOTO 500
|
||||
460 PRINT"KING"
|
||||
470 GOTO 500
|
||||
480 PRINT"ACE"
|
||||
500 IF B<11 THEN 550
|
||||
510 IF B=11 THEN 570
|
||||
520 IF B=12 THEN 590
|
||||
530 IF B=13 THEN 610
|
||||
540 IF B=14 THEN 630
|
||||
550 PRINT B
|
||||
560 GOTO 650
|
||||
570 PRINT"JACK"
|
||||
580 GOTO 650
|
||||
590 PRINT"QUEEN"
|
||||
600 GOTO 650
|
||||
610 PRINT"KING"
|
||||
620 GOTO 650
|
||||
630 PRINT"ACE"
|
||||
640 PRINT
|
||||
650 PRINT
|
||||
660 INPUT"WHAT IS YOUR BET";M
|
||||
670 IF M<>0 THEN 680
|
||||
675 PRINT"CHICKEN!!"
|
||||
676 PRINT
|
||||
677 GOTO 260
|
||||
680 IF M<=Q THEN 730
|
||||
690 PRINT"SORRY, MY FRIEND, BUT YOU BET TOO MUCH."
|
||||
700 PRINT"YOU HAVE ONLY ";Q;" DOLLARS TO BET."
|
||||
710 GOTO 650
|
||||
730 C=INT(14*RND(1))+2
|
||||
740 IF C<2 THEN 730
|
||||
750 IF C>14 THEN 730
|
||||
760 IF C<11 THEN 810
|
||||
770 IF C=11 THEN 830
|
||||
780 IF C=12 THEN 850
|
||||
790 IF C=13 THEN 870
|
||||
800 IF C=14 THEN 890
|
||||
810 PRINT C
|
||||
820 GOTO 910
|
||||
830 PRINT"JACK"
|
||||
840 GOTO 910
|
||||
850 PRINT"QUEEN"
|
||||
860 GOTO 910
|
||||
870 PRINT"KING"
|
||||
880 GOTO 910
|
||||
890 PRINT "ACE"
|
||||
900 PRINT
|
||||
910 IF C>A THEN 930
|
||||
920 GOTO 970
|
||||
930 IF C>=B THEN 970
|
||||
950 PRINT"YOU WIN!!!"
|
||||
960 GOTO 210
|
||||
970 PRINT"SORRY, YOU LOSE"
|
||||
980 IF M<Q THEN 240
|
||||
990 PRINT
|
||||
1000 PRINT
|
||||
1010 PRINT"SORRY, FRIEND, BUT YOU BLEW YOUR WAD."
|
||||
1015 PRINT:PRINT
|
||||
1020 INPUT"TRY AGAIN (YES OR NO)";A$
|
||||
1025 PRINT:PRINT
|
||||
1030 IF A$="YES" THEN 110
|
||||
1040 PRINT"O.K., HOPE YOU HAD FUN!"
|
||||
1050 END
|
||||
9
00_Alternate_Languages/02_Amazing/README.md
Normal file
9
00_Alternate_Languages/02_Amazing/README.md
Normal file
@@ -0,0 +1,9 @@
|
||||
Please refer to the `readme.md` in the parent folder.
|
||||
|
||||
Each subfolder represents a port of this program to a language which is _not_ one of the agreed upon 10 languages, which are intended to meet these three criteria:
|
||||
|
||||
1. Popular (by TIOBE index)
|
||||
2. Memory safe
|
||||
3. Generally considered a 'scripting' language
|
||||
|
||||
We welcome additional ports, but these additional ports are for educational purposes only.
|
||||
143
00_Alternate_Languages/02_Amazing/amazing.bas
Normal file
143
00_Alternate_Languages/02_Amazing/amazing.bas
Normal file
@@ -0,0 +1,143 @@
|
||||
10 PRINT TAB(28);"AMAZING PROGRAM"
|
||||
20 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY"
|
||||
30 PRINT:PRINT:PRINT:PRINT
|
||||
100 INPUT "WHAT ARE YOUR WIDTH AND LENGTH";H,V
|
||||
102 IF H<>1 AND V<>1 THEN 110
|
||||
104 PRINT "MEANINGLESS DIMENSIONS. TRY AGAIN.":GOTO 100
|
||||
110 DIM W(H,V),V(H,V)
|
||||
120 PRINT
|
||||
130 PRINT
|
||||
140 PRINT
|
||||
150 PRINT
|
||||
160 Q=0:Z=0:X=INT(RND(1)*H+1)
|
||||
165 FOR I=1 TO H
|
||||
170 IF I=X THEN 173
|
||||
171 PRINT ".--";:GOTO 180
|
||||
173 PRINT ". ";
|
||||
180 NEXT I
|
||||
190 PRINT "."
|
||||
195 C=1:W(X,1)=C:C=C+1
|
||||
200 R=X:S=1:GOTO 260
|
||||
210 IF R<>H THEN 240
|
||||
215 IF S<>V THEN 230
|
||||
220 R=1:S=1:GOTO 250
|
||||
230 R=1:S=S+1:GOTO 250
|
||||
240 R=R+1
|
||||
250 IF W(R,S)=0 THEN 210
|
||||
260 IF R-1=0 THEN 530
|
||||
265 IF W(R-1,S)<>0 THEN 530
|
||||
270 IF S-1=0 THEN 390
|
||||
280 IF W(R,S-1)<>0 THEN 390
|
||||
290 IF R=H THEN 330
|
||||
300 IF W(R+1,S)<>0 THEN 330
|
||||
310 X=INT(RND(1)*3+1)
|
||||
320 ON X GOTO 790,820,860
|
||||
330 IF S<>V THEN 340
|
||||
334 IF Z=1 THEN 370
|
||||
338 Q=1:GOTO 350
|
||||
340 IF W(R,S+1)<>0 THEN 370
|
||||
350 X=INT(RND(1)*3+1)
|
||||
360 ON X GOTO 790,820,910
|
||||
370 X=INT(RND(1)*2+1)
|
||||
380 ON X GOTO 790,820
|
||||
390 IF R=H THEN 470
|
||||
400 IF W(R+1,S)<>0 THEN 470
|
||||
405 IF S<>V THEN 420
|
||||
410 IF Z=1 THEN 450
|
||||
415 Q=1:GOTO 430
|
||||
420 IF W(R,S+1)<>0 THEN 450
|
||||
430 X=INT(RND(1)*3+1)
|
||||
440 ON X GOTO 790,860,910
|
||||
450 X=INT(RND(1)*2+1)
|
||||
460 ON X GOTO 790,860
|
||||
470 IF S<>V THEN 490
|
||||
480 IF Z=1 THEN 520
|
||||
485 Q=1:GOTO 500
|
||||
490 IF W(R,S+1)<>0 THEN 520
|
||||
500 X=INT(RND(1)*2+1)
|
||||
510 ON X GOTO 790,910
|
||||
520 GOTO 790
|
||||
530 IF S-1=0 THEN 670
|
||||
540 IF W(R,S-1)<>0 THEN 670
|
||||
545 IF R=H THEN 610
|
||||
547 IF W(R+1,S)<>0 THEN 610
|
||||
550 IF S<>V THEN 560
|
||||
552 IF Z=1 THEN 590
|
||||
554 Q=1:GOTO 570
|
||||
560 IF W(R,S+1)<>0 THEN 590
|
||||
570 X=INT(RND(1)*3+1)
|
||||
580 ON X GOTO 820,860,910
|
||||
590 X=INT(RND(1)*2+1)
|
||||
600 ON X GOTO 820,860
|
||||
610 IF S<>V THEN 630
|
||||
620 IF Z=1 THEN 660
|
||||
625 Q=1:GOTO 640
|
||||
630 IF W(R,S+1)<>0 THEN 660
|
||||
640 X=INT(RND(1)*2+1)
|
||||
650 ON X GOTO 820,910
|
||||
660 GOTO 820
|
||||
670 IF R=H THEN 740
|
||||
680 IF W(R+1,S)<>0 THEN 740
|
||||
685 IF S<>V THEN 700
|
||||
690 IF Z=1 THEN 730
|
||||
695 Q=1:GOTO 710
|
||||
700 IF W(R,S+1)<>0 THEN 730
|
||||
710 X=INT(RND(1)*2+1)
|
||||
720 ON X GOTO 860,910
|
||||
730 GOTO 860
|
||||
740 IF S<>V THEN 760
|
||||
750 IF Z=1 THEN 780
|
||||
755 Q=1:GOTO 770
|
||||
760 IF W(R,S+1)<>0 THEN 780
|
||||
770 GOTO 910
|
||||
780 GOTO 1000
|
||||
790 W(R-1,S)=C
|
||||
800 C=C+1:V(R-1,S)=2:R=R-1
|
||||
810 IF C=H*V+1 THEN 1010
|
||||
815 Q=0:GOTO 260
|
||||
820 W(R,S-1)=C
|
||||
830 C=C+1
|
||||
840 V(R,S-1)=1:S=S-1:IF C=H*V+1 THEN 1010
|
||||
850 Q=0:GOTO 260
|
||||
860 W(R+1,S)=C
|
||||
870 C=C+1:IF V(R,S)=0 THEN 880
|
||||
875 V(R,S)=3:GOTO 890
|
||||
880 V(R,S)=2
|
||||
890 R=R+1
|
||||
900 IF C=H*V+1 THEN 1010
|
||||
905 GOTO 530
|
||||
910 IF Q=1 THEN 960
|
||||
920 W(R,S+1)=C:C=C+1:IF V(R,S)=0 THEN 940
|
||||
930 V(R,S)=3:GOTO 950
|
||||
940 V(R,S)=1
|
||||
950 S=S+1:IF C=H*V+1 THEN 1010
|
||||
955 GOTO 260
|
||||
960 Z=1
|
||||
970 IF V(R,S)=0 THEN 980
|
||||
975 V(R,S)=3:Q=0:GOTO 1000
|
||||
980 V(R,S)=1:Q=0:R=1:S=1:GOTO 250
|
||||
1000 GOTO 210
|
||||
1010 IF Z=1 THEN 1015
|
||||
1011 X=INT(RND(1)*H+1)
|
||||
1012 IF V(X,V)=0 THEN 1014
|
||||
1013 V(X,V)=3: GOTO 1015
|
||||
1014 V(X,V)=1
|
||||
1015 FOR J=1 TO V
|
||||
1016 PRINT "I";
|
||||
1017 FOR I=1 TO H
|
||||
1018 IF V(I,J)<2 THEN 1030
|
||||
1020 PRINT " ";
|
||||
1021 GOTO 1040
|
||||
1030 PRINT " I";
|
||||
1040 NEXT I
|
||||
1041 PRINT
|
||||
1043 FOR I=1 TO H
|
||||
1045 IF V(I,J)=0 THEN 1060
|
||||
1050 IF V(I,J)=2 THEN 1060
|
||||
1051 PRINT ": ";
|
||||
1052 GOTO 1070
|
||||
1060 PRINT ":--";
|
||||
1070 NEXT I
|
||||
1071 PRINT "."
|
||||
1072 NEXT J
|
||||
1073 END
|
||||
9
00_Alternate_Languages/03_Animal/README.md
Normal file
9
00_Alternate_Languages/03_Animal/README.md
Normal file
@@ -0,0 +1,9 @@
|
||||
Please refer to the `readme.md` in the parent folder.
|
||||
|
||||
Each subfolder represents a port of this program to a language which is _not_ one of the agreed upon 10 languages, which are intended to meet these three criteria:
|
||||
|
||||
1. Popular (by TIOBE index)
|
||||
2. Memory safe
|
||||
3. Generally considered a 'scripting' language
|
||||
|
||||
We welcome additional ports, but these additional ports are for educational purposes only.
|
||||
71
00_Alternate_Languages/03_Animal/animal.bas
Normal file
71
00_Alternate_Languages/03_Animal/animal.bas
Normal file
@@ -0,0 +1,71 @@
|
||||
10 PRINT TAB(32);"ANIMAL"
|
||||
20 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY"
|
||||
30 PRINT: PRINT: PRINT
|
||||
40 PRINT "PLAY 'GUESS THE ANIMAL'"
|
||||
45 PRINT
|
||||
50 PRINT "THINK OF AN ANIMAL AND THE COMPUTER WILL TRY TO GUESS IT."
|
||||
60 PRINT
|
||||
70 DIM A$(200)
|
||||
80 FOR I=0 TO 3
|
||||
90 READ A$(I)
|
||||
100 NEXT I
|
||||
110 N=VAL(A$(0))
|
||||
120 REM MAIN CONTROL SECTION
|
||||
130 INPUT "ARE YOU THINKING OF AN ANIMAL";A$
|
||||
140 IF A$="LIST" THEN 600
|
||||
150 IF LEFT$(A$,1)<>"Y" THEN 120
|
||||
160 K=1
|
||||
170 GOSUB 390
|
||||
180 IF LEN(A$(K))=0 THEN 999
|
||||
190 IF LEFT$(A$(K),2)="\Q" THEN 170
|
||||
200 PRINT "IS IT A ";RIGHT$(A$(K),LEN(A$(K))-2);
|
||||
210 INPUT A$
|
||||
220 A$=LEFT$(A$,1)
|
||||
230 IF LEFT$(A$,1)="Y" THEN PRINT "WHY NOT TRY ANOTHER ANIMAL?": GOTO 120
|
||||
240 INPUT "THE ANIMAL YOU WERE THINKING OF WAS A ";V$
|
||||
250 PRINT "PLEASE TYPE IN A QUESTION THAT WOULD DISTINGUISH A"
|
||||
260 PRINT V$;" FROM A ";RIGHT$(A$(K),LEN(A$(K))-2)
|
||||
270 INPUT X$
|
||||
280 PRINT "FOR A ";V$;" THE ANSWER WOULD BE ";
|
||||
290 INPUT A$
|
||||
300 A$=LEFT$(A$,1): IF A$<>"Y" AND A$<>"N" THEN 280
|
||||
310 IF A$="Y" THEN B$="N"
|
||||
320 IF A$="N" THEN B$="Y"
|
||||
330 Z1=VAL(A$(0))
|
||||
340 A$(0)=STR$(Z1+2)
|
||||
350 A$(Z1)=A$(K)
|
||||
360 A$(Z1+1)="\A"+V$
|
||||
370 A$(K)="\Q"+X$+"\"+A$+STR$(Z1+1)+"\"+B$+STR$(Z1)+"\"
|
||||
380 GOTO 120
|
||||
390 REM SUBROUTINE TO PRINT QUESTIONS
|
||||
400 Q$=A$(K)
|
||||
410 FOR Z=3 TO LEN(Q$)
|
||||
415 IF MID$(Q$,Z,1)<>"\" THEN PRINT MID$(Q$,Z,1);: NEXT Z
|
||||
420 INPUT C$
|
||||
430 C$=LEFT$(C$,1)
|
||||
440 IF C$<>"Y" AND C$<>"N" THEN 410
|
||||
450 T$="\"+C$
|
||||
455 FOR X=3 TO LEN(Q$)-1
|
||||
460 IF MID$(Q$,X,2)=T$ THEN 480
|
||||
470 NEXT X
|
||||
475 STOP
|
||||
480 FOR Y=X+1 TO LEN(Q$)
|
||||
490 IF MID$(Q$,Y,1)="\" THEN 510
|
||||
500 NEXT Y
|
||||
505 STOP
|
||||
510 K=VAL(MID$(Q$,X+2,Y-X-2))
|
||||
520 RETURN
|
||||
530 DATA "4","\QDOES IT SWIM\Y2\N3\","\AFISH","\ABIRD"
|
||||
600 PRINT:PRINT "ANIMALS I ALREADY KNOW ARE:"
|
||||
605 X=0
|
||||
610 FOR I=1 TO 200
|
||||
620 IF LEFT$(A$(I),2)<>"\A" THEN 650
|
||||
624 PRINT TAB(15*X);
|
||||
630 FOR Z=3 TO LEN(A$(I))
|
||||
640 IF MID$(A$(I),Z,1)<>"\" THEN PRINT MID$(A$(I),Z,1);: NEXT Z
|
||||
645 X=X+1: IF X=4 THEN X=0: PRINT
|
||||
650 NEXT I
|
||||
660 PRINT
|
||||
670 PRINT
|
||||
680 GOTO 120
|
||||
999 END
|
||||
9
00_Alternate_Languages/04_Awari/README.md
Normal file
9
00_Alternate_Languages/04_Awari/README.md
Normal file
@@ -0,0 +1,9 @@
|
||||
Please refer to the `readme.md` in the parent folder.
|
||||
|
||||
Each subfolder represents a port of this program to a language which is _not_ one of the agreed upon 10 languages, which are intended to meet these three criteria:
|
||||
|
||||
1. Popular (by TIOBE index)
|
||||
2. Memory safe
|
||||
3. Generally considered a 'scripting' language
|
||||
|
||||
We welcome additional ports, but these additional ports are for educational purposes only.
|
||||
70
00_Alternate_Languages/04_Awari/awari.bas
Normal file
70
00_Alternate_Languages/04_Awari/awari.bas
Normal file
@@ -0,0 +1,70 @@
|
||||
5 PRINT TAB(34);"AWARI"
|
||||
7 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY"
|
||||
10 DATA 0
|
||||
15 DIM B(13),G(13),F(50):READ N
|
||||
20 PRINT:PRINT:E=0
|
||||
25 FOR I=0 TO 12:B(I)=3:NEXT I
|
||||
30 C=0:F(N)=0:B(13)=0:B(6)=0
|
||||
35 GOSUB 500
|
||||
40 PRINT "YOUR MOVE";:GOSUB 110
|
||||
45 IF E=0 THEN 80
|
||||
50 IF M=H THEN GOSUB 100
|
||||
55 IF E=0 THEN 80
|
||||
60 PRINT "MY MOVE IS ";:GOSUB 800
|
||||
65 IF E=0 THEN 80
|
||||
70 IF M=H THEN PRINT ",";:GOSUB 800
|
||||
75 IF E>0 THEN 35
|
||||
80 PRINT:PRINT"GAME OVER"
|
||||
85 D=B(6)-B(13):IF D<0 THEN PRINT "I WIN BY";-D;"POINTS":GOTO 20
|
||||
90 N=N+1:IF D=0 THEN PRINT "DRAWN GAME":GOTO 20
|
||||
95 PRINT "YOU WIN BY";D;"POINTS":GOTO 20
|
||||
100 PRINT "AGAIN";
|
||||
110 INPUT M:IF M<7 THEN IF M>0 THEN M=M-1:GOTO 130
|
||||
120 PRINT "ILLEGAL MOVE":GOTO 100
|
||||
130 IF B(M)=0 THEN 120
|
||||
140 H=6:GOSUB 200
|
||||
150 GOTO 500
|
||||
200 K=M:GOSUB 600
|
||||
205 E=0:IF K>6 THEN K=K-7
|
||||
210 C=C+1:IF C<9 THEN F(N)=F(N)*6+K
|
||||
215 FOR I=0 TO 5:IF B(I)<>0 THEN 230
|
||||
220 NEXT I
|
||||
225 RETURN
|
||||
230 FOR I=7 TO 12:IF B(I)<>0 THEN E=1:RETURN
|
||||
235 GOTO 220
|
||||
500 PRINT:PRINT" ";
|
||||
505 FOR I=12 TO 7 STEP -1:GOSUB 580
|
||||
510 NEXT I
|
||||
515 PRINT:I=13:GOSUB 580
|
||||
520 PRINT " ";:PRINT B(6):PRINT " ";
|
||||
525 FOR I=0 TO 5:GOSUB 580
|
||||
530 NEXT I
|
||||
535 PRINT:PRINT:RETURN
|
||||
580 IF B(I)<10 THEN PRINT " ";
|
||||
585 PRINT B(I);:RETURN
|
||||
600 P=B(M):B(M)=0
|
||||
605 FOR P=P TO 1 STEP -1:M=M+1:IF M>13 THEN M=M-14
|
||||
610 B(M)=B(M)+1:NEXT P
|
||||
615 IF B(M)=1 THEN IF M<>6 THEN IF M<>13 THEN IF B(12-M)<>0 THEN 625
|
||||
620 RETURN
|
||||
625 B(H)=B(H)+B(12-M)+1:B(M)=0:B(12-M)=0:RETURN
|
||||
800 D=-99:H=13
|
||||
805 FOR I=0 TO 13:G(I)=B(I):NEXT I
|
||||
810 FOR J=7 TO 12:IF B(J)=0 THEN 885
|
||||
815 Q=0:M=J:GOSUB 600
|
||||
820 FOR I=0 TO 5:IF B(I)=0 THEN 845
|
||||
825 L=B(I)+I:R=0
|
||||
830 IF L>13 THEN L=L-14:R=1:GOTO 830
|
||||
835 IF B(L)=0 THEN IF L<>6 THEN IF L<>13 THEN R=B(12-L)+R
|
||||
840 IF R>Q THEN Q=R
|
||||
845 NEXT I
|
||||
850 Q=B(13)-B(6)-Q:IF C>8 THEN 875
|
||||
855 K=J:IF K>6 THEN K=K-7
|
||||
860 FOR I=0 TO N-1:IF F(N)*6+K=INT(F(I)/6^(7-C)+.1) THEN Q=Q-2
|
||||
870 NEXT I
|
||||
875 FOR I=0 TO 13:B(I)=G(I):NEXT I
|
||||
880 IF Q>=D THEN A=J:D=Q
|
||||
885 NEXT J
|
||||
890 M=A:PRINT CHR$(42+M);:GOTO 200
|
||||
900 FOR I=0 TO N-1:PRINT B(I):NEXT I
|
||||
999 END
|
||||
9
00_Alternate_Languages/05_Bagels/README.md
Normal file
9
00_Alternate_Languages/05_Bagels/README.md
Normal file
@@ -0,0 +1,9 @@
|
||||
Please refer to the `readme.md` in the parent folder.
|
||||
|
||||
Each subfolder represents a port of this program to a language which is _not_ one of the agreed upon 10 languages, which are intended to meet these three criteria:
|
||||
|
||||
1. Popular (by TIOBE index)
|
||||
2. Memory safe
|
||||
3. Generally considered a 'scripting' language
|
||||
|
||||
We welcome additional ports, but these additional ports are for educational purposes only.
|
||||
81
00_Alternate_Languages/05_Bagels/bagels.bas
Normal file
81
00_Alternate_Languages/05_Bagels/bagels.bas
Normal file
@@ -0,0 +1,81 @@
|
||||
5 PRINT TAB(33);"BAGELS"
|
||||
10 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY":PRINT:PRINT
|
||||
15 REM *** BAGLES NUMBER GUESSING GAME
|
||||
20 REM *** ORIGINAL SOURCE UNKNOWN BUT SUSPECTED TO BE
|
||||
25 REM *** LAWRENCE HALL OF SCIENCE, U.C. BERKELY
|
||||
30 DIM A1(3),A(3),B(3)
|
||||
40 Y=0:T=255
|
||||
50 PRINT:PRINT:PRINT
|
||||
70 INPUT "WOULD YOU LIKE THE RULES (YES OR NO)";A$
|
||||
90 IF LEFT$(A$,1)="N" THEN 150
|
||||
100 PRINT:PRINT "I AM THINKING OF A THREE-DIGIT NUMBER. TRY TO GUESS"
|
||||
110 PRINT "MY NUMBER AND I WILL GIVE YOU CLUES AS FOLLOWS:"
|
||||
120 PRINT " PICO - ONE DIGIT CORRECT BUT IN THE WRONG POSITION"
|
||||
130 PRINT " FERMI - ONE DIGIT CORRECT AND IN THE RIGHT POSITION"
|
||||
140 PRINT " BAGELS - NO DIGITS CORRECT"
|
||||
150 FOR I=1 TO 3
|
||||
160 A(I)=INT(10*RND(1))
|
||||
165 IF I-1=0 THEN 200
|
||||
170 FOR J=1 TO I-1
|
||||
180 IF A(I)=A(J) THEN 160
|
||||
190 NEXT J
|
||||
200 NEXT I
|
||||
210 PRINT:PRINT "O.K. I HAVE A NUMBER IN MIND."
|
||||
220 FOR I=1 TO 20
|
||||
230 PRINT "GUESS #";I,
|
||||
240 INPUT A$
|
||||
245 IF LEN(A$)<>3 THEN 630
|
||||
250 FOR Z=1 TO 3:A1(Z)=ASC(MID$(A$,Z,1)):NEXT Z
|
||||
260 FOR J=1 TO 3
|
||||
270 IF A1(J)<48 THEN 300
|
||||
280 IF A1(J)>57 THEN 300
|
||||
285 B(J)=A1(J)-48
|
||||
290 NEXT J
|
||||
295 GOTO 320
|
||||
300 PRINT "WHAT?"
|
||||
310 GOTO 230
|
||||
320 IF B(1)=B(2) THEN 650
|
||||
330 IF B(2)=B(3) THEN 650
|
||||
340 IF B(3)=B(1) THEN 650
|
||||
350 C=0:D=0
|
||||
360 FOR J=1 TO 2
|
||||
370 IF A(J)<>B(J+1) THEN 390
|
||||
380 C=C+1
|
||||
390 IF A(J+1)<>B(J) THEN 410
|
||||
400 C=C+1
|
||||
410 NEXT J
|
||||
420 IF A(1)<>B(3) THEN 440
|
||||
430 C=C+1
|
||||
440 IF A(3)<>B(1) THEN 460
|
||||
450 C=C+1
|
||||
460 FOR J=1 TO 3
|
||||
470 IF A(J)<>B(J) THEN 490
|
||||
480 D=D+1
|
||||
490 NEXT J
|
||||
500 IF D=3 THEN 680
|
||||
505 IF C=0 THEN 545
|
||||
520 FOR J=1 TO C
|
||||
530 PRINT "PICO ";
|
||||
540 NEXT J
|
||||
545 IF D=0 THEN 580
|
||||
550 FOR J=1 TO D
|
||||
560 PRINT "FERMI ";
|
||||
570 NEXT J
|
||||
580 IF C+D<>0 THEN 600
|
||||
590 PRINT "BAGELS";
|
||||
600 PRINT
|
||||
605 NEXT I
|
||||
610 PRINT "OH WELL."
|
||||
615 PRINT "THAT'S TWENTY GUESSES. MY NUMBER WAS";100*A(1)+10*A(2)+A(3)
|
||||
620 GOTO 700
|
||||
630 PRINT "TRY GUESSING A THREE-DIGIT NUMBER.":GOTO 230
|
||||
650 PRINT "OH, I FORGOT TO TELL YOU THAT THE NUMBER I HAVE IN MIND"
|
||||
660 PRINT "HAS NO TWO DIGITS THE SAME.":GOTO 230
|
||||
680 PRINT "YOU GOT IT!!!":PRINT
|
||||
690 Y=Y+1
|
||||
700 INPUT "PLAY AGAIN (YES OR NO)";A$
|
||||
720 IF LEFT$(A$,1)="Y" THEN 150
|
||||
730 IF Y=0 THEN 750
|
||||
740 PRINT:PRINT "A";Y;"POINT BAGELS BUFF!!"
|
||||
750 PRINT "HOPE YOU HAD FUN. BYE."
|
||||
999 END
|
||||
9
00_Alternate_Languages/06_Banner/README.md
Normal file
9
00_Alternate_Languages/06_Banner/README.md
Normal file
@@ -0,0 +1,9 @@
|
||||
Please refer to the `readme.md` in the parent folder.
|
||||
|
||||
Each subfolder represents a port of this program to a language which is _not_ one of the agreed upon 10 languages, which are intended to meet these three criteria:
|
||||
|
||||
1. Popular (by TIOBE index)
|
||||
2. Memory safe
|
||||
3. Generally considered a 'scripting' language
|
||||
|
||||
We welcome additional ports, but these additional ports are for educational purposes only.
|
||||
94
00_Alternate_Languages/06_Banner/banner.bas
Normal file
94
00_Alternate_Languages/06_Banner/banner.bas
Normal file
@@ -0,0 +1,94 @@
|
||||
10 INPUT "HORIZONTAL";X
|
||||
20 INPUT "VERTICAL";Y
|
||||
21 INPUT "CENTERED";L$
|
||||
22 G1=0:IF L$>"P" THEN G1=1
|
||||
23 INPUT "CHARACTER (TYPE 'ALL' IF YOU WANT CHARACTER BEING PRINTED)";M$
|
||||
29 PRINT "STATEMENT";
|
||||
30 INPUT A$
|
||||
35 INPUT "SET PAGE";O$
|
||||
40 A=ASC(LEFT$(A$,1))
|
||||
50 REM
|
||||
60 REM
|
||||
70 FOR T=1 TO LEN(A$)
|
||||
80 P$=MID$(A$,T,1)
|
||||
90 FOR O=1 TO 50
|
||||
95 READ S$,S(1),S(2),S(3),S(4),S(5),S(6),S(7)
|
||||
96 IF P$=" " THEN 812
|
||||
100 IF P$=S$ THEN 200
|
||||
120 NEXT O
|
||||
200 RESTORE
|
||||
201 X$=M$
|
||||
202 IF M$="ALL" THEN X$=S$
|
||||
205 FOR U=1 TO 7
|
||||
210 FOR K=8 TO 0 STEP -1
|
||||
230 IF 2^K<S(U) THEN 270
|
||||
240 J(9-K)=0
|
||||
250 GOTO 280
|
||||
270 J(9-K)=1: S(U)=S(U)-2^K
|
||||
272 IF S(U)=1 THEN 815
|
||||
280 NEXT K
|
||||
445 FOR T1=1 TO X
|
||||
447 PRINT TAB((63-4.5*Y)*G1/(LEN(X$))+1);
|
||||
450 FOR B=1 TO F(U)
|
||||
460 IF J(B)=0 THEN 500
|
||||
465 FOR I=1 TO Y: PRINT X$;: NEXT I
|
||||
470 GOTO 600
|
||||
500 FOR I=1 TO Y
|
||||
510 FOR I1=1 TO LEN(X$)
|
||||
520 PRINT " ";: NEXT I1
|
||||
530 NEXT I
|
||||
600 NEXT B
|
||||
620 PRINT
|
||||
630 NEXT T1
|
||||
700 NEXT U
|
||||
750 FOR H=1 TO 2*X: PRINT: NEXT H
|
||||
800 NEXT T
|
||||
806 FOR H=1 TO 75: PRINT: NEXT H
|
||||
810 END
|
||||
812 FOR H=1 TO 7*X: PRINT: NEXT H
|
||||
813 GOTO 800
|
||||
815 F(U)=9-K: GOTO 445
|
||||
899 DATA " ",0,0,0,0,0,0,0
|
||||
900 DATA "A",505,37,35,34,35,37,505
|
||||
901 DATA "G",125,131,258,258,290,163,101
|
||||
902 DATA "E",512,274,274,274,274,258,258
|
||||
903 DATA "T",2,2,2,512,2,2,2
|
||||
904 DATA "W",256,257,129,65,129,257,256
|
||||
905 DATA "L",512,257,257,257,257,257,257
|
||||
906 DATA "S",69,139,274,274,274,163,69
|
||||
907 DATA "O",125,131,258,258,258,131,125
|
||||
908 DATA "N",512,7,9,17,33,193,512
|
||||
909 DATA "F",512,18,18,18,18,2,2
|
||||
910 DATA "K",512,17,17,41,69,131,258
|
||||
911 DATA "B",512,274,274,274,274,274,239
|
||||
912 DATA "D",512,258,258,258,258,131,125
|
||||
913 DATA "H",512,17,17,17,17,17,512
|
||||
914 DATA "M",512,7,13,25,13,7,512
|
||||
915 DATA "?",5,3,2,354,18,11,5
|
||||
916 DATA "U",128,129,257,257,257,129,128
|
||||
917 DATA "R",512,18,18,50,82,146,271
|
||||
918 DATA "P",512,18,18,18,18,18,15
|
||||
919 DATA "Q",125,131,258,258,322,131,381
|
||||
920 DATA "Y",8,9,17,481,17,9,8
|
||||
921 DATA "V",64,65,129,257,129,65,64
|
||||
922 DATA "X",388,69,41,17,41,69,388
|
||||
923 DATA "Z",386,322,290,274,266,262,260
|
||||
924 DATA "I",258,258,258,512,258,258,258
|
||||
925 DATA "C",125,131,258,258,258,131,69
|
||||
926 DATA "J",65,129,257,257,257,129,128
|
||||
927 DATA "1",0,0,261,259,512,257,257
|
||||
928 DATA "2",261,387,322,290,274,267,261
|
||||
929 DATA "*",69,41,17,512,17,41,69
|
||||
930 DATA "3",66,130,258,274,266,150,100
|
||||
931 DATA "4",33,49,41,37,35,512,33
|
||||
932 DATA "5",160,274,274,274,274,274,226
|
||||
933 DATA "6",194,291,293,297,305,289,193
|
||||
934 DATA "7",258,130,66,34,18,10,8
|
||||
935 DATA "8",69,171,274,274,274,171,69
|
||||
936 DATA "9",263,138,74,42,26,10,7
|
||||
937 DATA "=",41,41,41,41,41,41,41
|
||||
938 DATA "!",1,1,1,384,1,1,1
|
||||
939 DATA "0",57,69,131,258,131,69,57
|
||||
940 DATA ".",1,1,129,449,129,1,1
|
||||
1000 STOP
|
||||
1002 END
|
||||
9
00_Alternate_Languages/07_Basketball/README.md
Normal file
9
00_Alternate_Languages/07_Basketball/README.md
Normal file
@@ -0,0 +1,9 @@
|
||||
Please refer to the `readme.md` in the parent folder.
|
||||
|
||||
Each subfolder represents a port of this program to a language which is _not_ one of the agreed upon 10 languages, which are intended to meet these three criteria:
|
||||
|
||||
1. Popular (by TIOBE index)
|
||||
2. Memory safe
|
||||
3. Generally considered a 'scripting' language
|
||||
|
||||
We welcome additional ports, but these additional ports are for educational purposes only.
|
||||
196
00_Alternate_Languages/07_Basketball/basketball.bas
Normal file
196
00_Alternate_Languages/07_Basketball/basketball.bas
Normal file
@@ -0,0 +1,196 @@
|
||||
5 PRINT TAB(31);"BASKETBALL"
|
||||
7 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY"
|
||||
8 PRINT:PRINT:PRINT
|
||||
10 PRINT "THIS IS DARTMOUTH COLLEGE BASKETBALL. YOU WILL BE DARTMOUTH"
|
||||
20 PRINT " CAPTAIN AND PLAYMAKER. CALL SHOTS AS FOLLOWS: 1. LONG"
|
||||
30 PRINT " (30 FT.) JUMP SHOT; 2. SHORT (15 FT.) JUMP SHOT; 3. LAY"
|
||||
40 PRINT " UP; 4. SET SHOT."
|
||||
60 PRINT "BOTH TEAMS WILL USE THE SAME DEFENSE. CALL DEFENSE AS"
|
||||
70 PRINT "FOLLOWS: 6. PRESS; 6.5 MAN-TO MAN; 7. ZONE; 7.5 NONE."
|
||||
72 PRINT "TO CHANGE DEFENSE, JUST TYPE 0 AS YOUR NEXT SHOT."
|
||||
76 INPUT "YOUR STARTING DEFENSE WILL BE";D:IF D<6 THEN 2010
|
||||
79 PRINT
|
||||
80 INPUT "CHOOSE YOUR OPPONENT";O$
|
||||
370 PRINT "CENTER JUMP"
|
||||
390 IF RND(1)> 3/5 THEN 420
|
||||
400 PRINT O$;" CONTROLS THE TAP."
|
||||
410 GOTO 3000
|
||||
420 PRINT "DARTMOUTH CONTROLS THE TAP."
|
||||
425 PRINT
|
||||
430 INPUT "YOUR SHOT";Z
|
||||
440 P=0
|
||||
445 IF Z<>INT(Z) THEN 455
|
||||
446 IF Z<0 OR Z>4 THEN 455
|
||||
447 GOTO 460
|
||||
455 PRINT "INCORRECT ANSWER. RETYPE IT. ";:GOTO 430
|
||||
460 IF RND(1)<.5 THEN 1000
|
||||
480 IF T<100 THEN 1000
|
||||
490 PRINT
|
||||
491 IF S(1)<>S(0) THEN 510
|
||||
492 PRINT:PRINT " ***** END OF SECOND HALF *****":PRINT
|
||||
493 PRINT "SCORE AT END OF REGULATION TIME:"
|
||||
494 PRINT " DARTMOUTH:";S(1);" ";O$;":";S(0)
|
||||
495 PRINT
|
||||
496 PRINT "BEGIN TWO MINUTE OVERTIME PERIOD"
|
||||
499 T=93
|
||||
500 GOTO 370
|
||||
510 PRINT " ***** END OF GAME *****"
|
||||
515 PRINT "FINAL SCORE: DARTMOUTH:";S(1);" ";O$;":";S(0)
|
||||
520 STOP
|
||||
600 PRINT
|
||||
610 PRINT " *** TWO MINUTES LEFT IN THE GAME ***"
|
||||
620 PRINT
|
||||
630 RETURN
|
||||
1000 ON Z GOTO 1040,1040
|
||||
1030 GOTO 1300
|
||||
1040 T=T+1
|
||||
1041 IF T=50 THEN 8000
|
||||
1042 IF T=92 THEN 1046
|
||||
1043 GOTO 1050
|
||||
1046 GOSUB 600
|
||||
1050 PRINT "JUMP SHOT"
|
||||
1060 IF RND(1)>.341*D/8 THEN 1090
|
||||
1070 PRINT "SHOT IS GOOD."
|
||||
1075 GOSUB 7000
|
||||
1085 GOTO 3000
|
||||
1090 IF RND(1)>.682*D/8 THEN 1200
|
||||
1100 PRINT "SHOT IS OFF TARGET."
|
||||
1105 IF D/6*RND(1)>.45 THEN 1130
|
||||
1110 PRINT "DARTMOUTH CONTROLS THE REBOUND."
|
||||
1120 GOTO 1145
|
||||
1130 PRINT "REBOUND TO ";O$
|
||||
1140 GOTO 3000
|
||||
1145 IF RND(1)>.4 THEN 1158
|
||||
1150 GOTO 1300
|
||||
1158 IF D=6 THEN 5100
|
||||
1160 PRINT "BALL PASSED BACK TO YOU. ";
|
||||
1170 GOTO 430
|
||||
1180 IF RND(1)>.9 THEN 1190
|
||||
1185 PRINT "PLAYER FOULED, TWO SHOTS."
|
||||
1187 GOSUB 4000
|
||||
1188 GOTO 3000
|
||||
1190 PRINT "BALL STOLEN. ";O$;"'S BALL."
|
||||
1195 GOTO 3000
|
||||
1200 IF RND(1)>.782*D/8 THEN 1250
|
||||
1210 PRINT "SHOT IS BLOCKED. BALL CONTROLLED BY ";
|
||||
1230 IF RND(1)>.5 THEN 1242
|
||||
1235 PRINT "DARTMOUTH."
|
||||
1240 GOTO 430
|
||||
1242 PRINT O$;"."
|
||||
1245 GOTO 3000
|
||||
1250 IF RND(1)>.843*D/8 THEN 1270
|
||||
1255 PRINT "SHOOTER IS FOULED. TWO SHOTS."
|
||||
1260 GOSUB 4000
|
||||
1265 GOTO 3000
|
||||
1270 PRINT "CHARGING FOUL. DARTMOUTH LOSES BALL."
|
||||
1280 GOTO 3000
|
||||
1300 T=T+1
|
||||
1301 IF T=50 THEN 8000
|
||||
1302 IF T=92 THEN 1304
|
||||
1303 GOTO 1305
|
||||
1304 GOSUB 600
|
||||
1305 IF Z=0 THEN 2010
|
||||
1310 IF Z>3 THEN 1700
|
||||
1320 PRINT "LAY UP."
|
||||
1330 IF 7/D*RND(1)>.4 THEN 1360
|
||||
1340 PRINT "SHOT IS GOOD. TWO POINTS."
|
||||
1345 GOSUB 7000
|
||||
1355 GOTO 3000
|
||||
1360 IF 7/D*RND(1)>.7 THEN 1500
|
||||
1370 PRINT "SHOT IS OFF THE RIM."
|
||||
1380 IF RND(1)>2/3 THEN 1415
|
||||
1390 PRINT O$;" CONTROLS THE REBOUND."
|
||||
1400 GOTO 3000
|
||||
1415 PRINT "DARTMOUTH CONTROLS THE REBOUND."
|
||||
1420 IF RND(1)>.4 THEN 1440
|
||||
1430 GOTO 1300
|
||||
1440 PRINT "BALL PASSED BACK TO YOU.";
|
||||
1450 GOTO 430
|
||||
1500 IF 7/D*RND(1)>.875 THEN 1600
|
||||
1510 PRINT "SHOOTER FOULED. TWO SHOTS."
|
||||
1520 GOSUB 4000
|
||||
1530 GOTO 3000
|
||||
1600 IF 7/D*RND(1)>.925 THEN 1630
|
||||
1610 PRINT "SHOT BLOCKED. ";O$;"'S BALL."
|
||||
1620 GOTO 3000
|
||||
1630 PRINT "CHARGING FOUL. DARTMOUTH LOSES THE BALL."
|
||||
1640 GOTO 3000
|
||||
1700 PRINT "SET SHOT."
|
||||
1710 GOTO 1330
|
||||
2010 INPUT "YOUR NEW DEFENSIVE ALLIGNMENT IS";D
|
||||
2030 IF D<6 THEN 2010
|
||||
2040 GOTO 425
|
||||
3000 P=1
|
||||
3005 T=T+1
|
||||
3008 IF T=50 THEN 8000
|
||||
3012 GOTO 3018
|
||||
3015 GOSUB 600
|
||||
3018 PRINT
|
||||
3020 Z1=10/4*RND(1)+1
|
||||
3030 IF Z1>2 THEN 3500
|
||||
3040 PRINT "JUMP SHOT."
|
||||
3050 IF 8/D*RND(1)>.35 THEN 3100
|
||||
3060 PRINT "SHOT IS GOOD."
|
||||
3080 GOSUB 6000
|
||||
3090 GOTO 425
|
||||
3100 IF 8/D*RND(1)>.75 THEN 3200
|
||||
3105 PRINT "SHOT IS OFF RIM."
|
||||
3110 IF D/6*RND(1)>.5 THEN 3150
|
||||
3120 PRINT "DARTMOUTH CONTROLS THE REBOUND."
|
||||
3130 GOTO 425
|
||||
3150 PRINT O$;" CONTROLS THE REBOUND."
|
||||
3160 IF D=6 THEN 5000
|
||||
3165 IF RND(1)>.5 THEN 3175
|
||||
3168 PRINT "PASS BACK TO ";O$;" GUARD."
|
||||
3170 GOTO 3000
|
||||
3175 GOTO 3500
|
||||
3200 IF 8/D*RND(1)>.9 THEN 3310
|
||||
3210 PRINT "PLAYER FOULED. TWO SHOTS."
|
||||
3220 GOSUB 4000
|
||||
3230 GOTO 425
|
||||
3310 PRINT "OFFENSIVE FOUL. DARTMOUTH'S BALL."
|
||||
3320 GOTO 425
|
||||
3500 IF Z1>3 THEN 3800
|
||||
3510 PRINT "LAY UP."
|
||||
3520 IF 7/D*RND(1)>.413 THEN 3600
|
||||
3530 PRINT "SHOT IS GOOD."
|
||||
3540 GOSUB 6000
|
||||
3550 GOTO 425
|
||||
3600 PRINT "SHOT IS MISSED."
|
||||
3610 GOTO 3110
|
||||
3800 PRINT "SET SHOT."
|
||||
3810 GOTO 3520
|
||||
4000 REM FOUL SHOOTING
|
||||
4010 IF RND(1)>.49 THEN 4050
|
||||
4020 PRINT "SHOOTER MAKES BOTH SHOTS."
|
||||
4030 S(1-P)=S(1-P)+2
|
||||
4040 GOSUB 6010
|
||||
4041 RETURN
|
||||
4050 IF RND(1)>.75 THEN 4100
|
||||
4060 PRINT "SHOOTER MAKES ONE SHOT AND MISSES ONE."
|
||||
4070 S(1-P)=S(1-P)+1
|
||||
4080 GOTO 4040
|
||||
4100 PRINT "BOTH SHOTS MISSED."
|
||||
4110 GOTO 4040
|
||||
5000 IF RND(1)>.75 THEN 5010
|
||||
5005 GOTO 3165
|
||||
5010 PRINT "BALL STOLEN. EASY LAY UP FOR DARTMOUTH."
|
||||
5015 GOSUB 7000
|
||||
5030 GOTO 3000
|
||||
5100 IF RND(1)>.6 THEN 5120
|
||||
5110 GOTO 1160
|
||||
5120 PRINT "PASS STOLEN BY ";O$;" EASY LAYUP."
|
||||
5130 GOSUB 6000
|
||||
5140 GOTO 425
|
||||
6000 S(0)=S(0)+2
|
||||
6010 PRINT "SCORE: ";S(1);"TO";S(0)
|
||||
6020 RETURN
|
||||
7000 S(1)=S(1)+2
|
||||
7010 GOSUB 6010
|
||||
7020 RETURN
|
||||
8000 PRINT:PRINT " ***** END OF FIRST HALF *****":PRINT
|
||||
8010 PRINT "SCORE: DARTMOUTH:";S(1);" ";O$;":";S(0)
|
||||
8015 PRINT
|
||||
8016 PRINT
|
||||
8020 GOTO 370
|
||||
9999 END
|
||||
9
00_Alternate_Languages/08_Batnum/README.md
Normal file
9
00_Alternate_Languages/08_Batnum/README.md
Normal file
@@ -0,0 +1,9 @@
|
||||
Please refer to the `readme.md` in the parent folder.
|
||||
|
||||
Each subfolder represents a port of this program to a language which is _not_ one of the agreed upon 10 languages, which are intended to meet these three criteria:
|
||||
|
||||
1. Popular (by TIOBE index)
|
||||
2. Memory safe
|
||||
3. Generally considered a 'scripting' language
|
||||
|
||||
We welcome additional ports, but these additional ports are for educational purposes only.
|
||||
90
00_Alternate_Languages/08_Batnum/batnum.bas
Normal file
90
00_Alternate_Languages/08_Batnum/batnum.bas
Normal file
@@ -0,0 +1,90 @@
|
||||
10 PRINT TAB(33);"BATNUM"
|
||||
20 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY"
|
||||
30 PRINT:PRINT:PRINT
|
||||
110 PRINT "THIS PROGRAM IS A 'BATTLE OF NUMBERS' GAME, WHERE THE"
|
||||
120 PRINT "COMPUTER IS YOUR OPPONENT."
|
||||
130 PRINT
|
||||
140 PRINT "THE GAME STARTS WITH AN ASSUMED PILE OF OBJECTS. YOU"
|
||||
150 PRINT "AND YOUR OPPONENT ALTERNATELY REMOVE OBJECTS FROM THE PILE."
|
||||
160 PRINT "WINNING IS DEFINED IN ADVANCE AS TAKING THE LAST OBJECT OR"
|
||||
170 PRINT "NOT. YOU CAN ALSO SPECIFY SOME OTHER BEGINNING CONDITIONS."
|
||||
180 PRINT "DON'T USE ZERO, HOWEVER, IN PLAYING THE GAME."
|
||||
190 PRINT "ENTER A NEGATIVE NUMBER FOR NEW PILE SIZE TO STOP PLAYING."
|
||||
200 PRINT
|
||||
210 GOTO 330
|
||||
220 FOR I=1 TO 10
|
||||
230 PRINT
|
||||
240 NEXT I
|
||||
330 INPUT "ENTER PILE SIZE";N
|
||||
350 IF N>=1 THEN 370
|
||||
360 GOTO 330
|
||||
370 IF N<>INT(N) THEN 220
|
||||
380 IF N<1 THEN 220
|
||||
390 INPUT "ENTER WIN OPTION - 1 TO TAKE LAST, 2 TO AVOID LAST: ";M
|
||||
410 IF M=1 THEN 430
|
||||
420 IF M<>2 THEN 390
|
||||
430 INPUT "ENTER MIN AND MAX ";A,B
|
||||
450 IF A>B THEN 430
|
||||
460 IF A<1 THEN 430
|
||||
470 IF A<>INT(A) THEN 430
|
||||
480 IF B<>INT(B) THEN 430
|
||||
490 INPUT "ENTER START OPTION - 1 COMPUTER FIRST, 2 YOU FIRST ";S
|
||||
500 PRINT:PRINT
|
||||
510 IF S=1 THEN 530
|
||||
520 IF S<>2 THEN 490
|
||||
530 C=A+B
|
||||
540 IF S=2 THEN 570
|
||||
550 GOSUB 600
|
||||
560 IF W=1 THEN 220
|
||||
570 GOSUB 810
|
||||
580 IF W=1 THEN 220
|
||||
590 GOTO 550
|
||||
600 Q=N
|
||||
610 IF M=1 THEN 630
|
||||
620 Q=Q-1
|
||||
630 IF M=1 THEN 680
|
||||
640 IF N>A THEN 720
|
||||
650 W=1
|
||||
660 PRINT "COMPUTER TAKES";N;"AND LOSES."
|
||||
670 RETURN
|
||||
680 IF N>B THEN 720
|
||||
690 W=1
|
||||
700 PRINT "COMPUTER TAKES";N;"AND WINS."
|
||||
710 RETURN
|
||||
720 P=Q-C*INT(Q/C)
|
||||
730 IF P>=A THEN 750
|
||||
740 P=A
|
||||
750 IF P<=B THEN 770
|
||||
760 P=B
|
||||
770 N=N-P
|
||||
780 PRINT "COMPUTER TAKES";P;"AND LEAVES";N
|
||||
790 W=0
|
||||
800 RETURN
|
||||
810 PRINT:PRINT "YOUR MOVE ";
|
||||
820 INPUT P
|
||||
830 IF P<>0 THEN 870
|
||||
840 PRINT "I TOLD YOU NOT TO USE ZERO! COMPUTER WINS BY FORFEIT."
|
||||
850 W=1
|
||||
860 RETURN
|
||||
870 IF P<>INT(P) THEN 920
|
||||
880 IF P>=A THEN 910
|
||||
890 IF P=N THEN 960
|
||||
900 GOTO 920
|
||||
910 IF P<=B THEN 940
|
||||
920 PRINT "ILLEGAL MOVE, REENTER IT ";
|
||||
930 GOTO 820
|
||||
940 N=N-P
|
||||
950 IF N<>0 THEN 1030
|
||||
960 IF M=1 THEN 1000
|
||||
970 PRINT "TOUGH LUCK, YOU LOSE."
|
||||
980 W=1
|
||||
990 RETURN
|
||||
1000 PRINT "CONGRATULATIONS, YOU WIN."
|
||||
1010 W=1
|
||||
1020 RETURN
|
||||
1030 IF N>=0 THEN 1060
|
||||
1040 N=N+P
|
||||
1050 GOTO 920
|
||||
1060 W=0
|
||||
1070 RETURN
|
||||
1080 END
|
||||
9
00_Alternate_Languages/09_Battle/README.md
Normal file
9
00_Alternate_Languages/09_Battle/README.md
Normal file
@@ -0,0 +1,9 @@
|
||||
Please refer to the `readme.md` in the parent folder.
|
||||
|
||||
Each subfolder represents a port of this program to a language which is _not_ one of the agreed upon 10 languages, which are intended to meet these three criteria:
|
||||
|
||||
1. Popular (by TIOBE index)
|
||||
2. Memory safe
|
||||
3. Generally considered a 'scripting' language
|
||||
|
||||
We welcome additional ports, but these additional ports are for educational purposes only.
|
||||
196
00_Alternate_Languages/09_Battle/battle.bas
Normal file
196
00_Alternate_Languages/09_Battle/battle.bas
Normal file
@@ -0,0 +1,196 @@
|
||||
5 PRINT TAB(33);"BATTLE"
|
||||
7 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY"
|
||||
10 REM -- BATTLE WRITTEN BY RAY WESTERGARD 10/70
|
||||
20 REM COPYRIGHT 1971 BY THE REGENTS OF THE UNIV. OF CALIF.
|
||||
30 REM PRODUCED AT THE LAWRENCE HALL OF SCIENCE, BERKELEY
|
||||
40 DIM F(6,6),H(6,6),A(4),B(4),C(6),L(3)
|
||||
50 FOR X=1 TO 6
|
||||
51 FOR Y=1 TO 6
|
||||
52 F(X,Y)=0
|
||||
53 NEXT Y
|
||||
54 NEXT X
|
||||
60 FOR I=1 TO 3
|
||||
70 N=4-I
|
||||
80 FOR J=1 TO 2
|
||||
90 A=INT(6*RND(1)+1)
|
||||
100 B=INT(6*RND(1)+1)
|
||||
110 D=INT(4*RND(1)+1)
|
||||
120 IF F(A,B)>0 THEN 90
|
||||
130 M=0
|
||||
140 ON D GOTO 150,340,550,740
|
||||
150 B(1)=B
|
||||
160 B(2)=7:B(3)=7
|
||||
170 FOR K=1 TO N
|
||||
180 IF M>1 THEN 240
|
||||
190 IF B(K)=6 THEN 230
|
||||
200 IF F(A,B(K)+1)>0 THEN 230
|
||||
210 B(K+1)=B(K)+1
|
||||
220 GOTO 280
|
||||
230 M=2
|
||||
240 IF B(1)<B(2) AND B(1)<B(3) THEN Z=B(1)
|
||||
242 IF B(2)<B(1) AND B(2)<B(3) THEN Z=B(2)
|
||||
244 IF B(3)<B(1) AND B(3)<B(2) THEN Z=B(3)
|
||||
250 IF Z=1 THEN 90
|
||||
260 IF F(A,Z-1)>0 THEN 90
|
||||
270 B(K+1)=Z-1
|
||||
280 NEXT K
|
||||
290 F(A,B)=9-2*I-J
|
||||
300 FOR K=1 TO N
|
||||
310 F(A,B(K+1))=F(A,B)
|
||||
320 NEXT K
|
||||
330 GOTO 990
|
||||
340 A(1)=A
|
||||
350 B(1)=B
|
||||
360 A(2)=0:A(3)=0:B(2)=0:B(3)=0
|
||||
370 FOR K=1 TO N
|
||||
380 IF M>1 THEN 460
|
||||
390 IF A(K)=1 OR B(K)=1 THEN 450
|
||||
400 IF F(A(K)-1,B(K)-1)>0 THEN 450
|
||||
410 IF F(A(K)-1,B(K))>0 AND F(A(K)-1,B(K))=F(A(K),B(K)-1) THEN 450
|
||||
420 A(K+1)=A(K)-1
|
||||
430 B(K+1)=B(K)-1
|
||||
440 GOTO 530
|
||||
450 M=2
|
||||
460 IF A(1)>A(2) AND A(1)>A(3) THEN Z1=A(1)
|
||||
462 IF A(2)>A(1) AND A(2)>A(3) THEN Z1=A(2)
|
||||
464 IF A(3)>A(1) AND A(3)>A(2) THEN Z1=A(3)
|
||||
470 IF B(1)>B(2) AND B(1)>B(3) THEN Z2=B(1)
|
||||
474 IF B(2)>B(1) AND B(2)>B(3) THEN Z2=B(2)
|
||||
476 IF B(3)>B(1) AND B(3)>B(2) THEN Z2=B(3)
|
||||
480 IF Z1=6 OR Z2=6 THEN 90
|
||||
490 IF F(Z1+1,Z2+1)>0 THEN 90
|
||||
500 IF F(Z1,Z2+1)>0 AND F(Z1,Z2+1)=F(Z1+1,Z2) THEN 90
|
||||
510 A(K+1)=Z1+1
|
||||
520 B(K+1)=Z2+1
|
||||
530 NEXT K
|
||||
540 GOTO 950
|
||||
550 A(1)=A
|
||||
560 A(2)=7:A(3)=7
|
||||
570 FOR K=1 TO N
|
||||
580 IF M>1 THEN 640
|
||||
590 IF A(K)=6 THEN 630
|
||||
600 IF F(A(K)+1,B)>0 THEN 630
|
||||
610 A(K+1)=A(K)+1
|
||||
620 GOTO 680
|
||||
630 M=2
|
||||
640 IF A(1)<A(2) AND A(1)<A(3) THEN Z=A(1)
|
||||
642 IF A(2)<A(1) AND A(2)<A(3) THEN Z=A(2)
|
||||
644 IF A(3)<A(1) AND A(3)<A(2) THEN Z=A(3)
|
||||
650 IF Z=1 THEN 90
|
||||
660 IF F(Z-1,B)>0 THEN 90
|
||||
670 A(K+1)=Z-1
|
||||
680 NEXT K
|
||||
690 F(A,B)=9-2*I-J
|
||||
700 FOR K=1 TO N
|
||||
710 F(A(K+1),B)=F(A,B)
|
||||
720 NEXT K
|
||||
730 GOTO 990
|
||||
740 A(1)=A
|
||||
750 B(1)=B
|
||||
760 A(2)=7:A(3)=7
|
||||
770 B(2)=0:B(3)=0
|
||||
780 FOR K=1 TO N
|
||||
790 IF M>1 THEN 870
|
||||
800 IF A(K)=6 OR B(K)=1 THEN 860
|
||||
810 IF F(A(K)+1,B(K)-1)>0 THEN 860
|
||||
820 IF F(A(K)+1,B(K))>0 AND F(A(K)+1,B(K))=F(A(K),B(K)-1) THEN 860
|
||||
830 A(K+1)=A(K)+1
|
||||
840 B(K+1)=B(K)-1
|
||||
850 GOTO 940
|
||||
860 M=2
|
||||
870 IF A(1)<A(2) AND A(1)<A(3) THEN Z1=A(1)
|
||||
872 IF A(2)<A(1) AND A(2)<A(3) THEN Z1=A(2)
|
||||
874 IF A(3)<A(1) AND A(3)<A(2) THEN Z1=A(3)
|
||||
880 IF B(1)>B(2) AND B(1)>B(3) THEN Z2=B(1)
|
||||
882 IF B(2)>B(1) AND B(2)>B(3) THEN Z2=B(2)
|
||||
884 IF B(3)>B(1) AND B(3)>B(2) THEN Z2=B(3)
|
||||
890 IF Z1=1 OR Z2=6 THEN 90
|
||||
900 IF F(Z1-1,Z2+1)>0 THEN 90
|
||||
910 IF F(Z1,Z2+1)>0 AND F(Z1,Z2+1)=F(Z1-1,Z2) THEN 90
|
||||
920 A(K+1)=Z1-1
|
||||
930 B(K+1)=Z2+1
|
||||
940 NEXT K
|
||||
950 F(A,B)=9-2*I-J
|
||||
960 FOR K=1 TO N
|
||||
970 F(A(K+1),B(K+1))=F(A,B)
|
||||
980 NEXT K
|
||||
990 NEXT J
|
||||
1000 NEXT I
|
||||
1010 PRINT
|
||||
1020 PRINT "THE FOLLOWING CODE OF THE BAD GUYS' FLEET DISPOSITION"
|
||||
1030 PRINT "HAS BEEN CAPTURED BUT NOT DECODED:"
|
||||
1040 PRINT
|
||||
1050 FOR I=1 TO 6
|
||||
1051 FOR J=1 TO 6
|
||||
1052 H(I,J)=F(J,I)
|
||||
1053 NEXT J
|
||||
1054 NEXT I
|
||||
1060 FOR I=1 TO 6
|
||||
1061 FOR J=1 TO 6
|
||||
1062 PRINT H(I,J);
|
||||
1063 NEXT J
|
||||
1064 PRINT
|
||||
1065 NEXT I
|
||||
1070 PRINT
|
||||
1080 PRINT "DE-CODE IT AND USE IT IF YOU CAN"
|
||||
1090 PRINT "BUT KEEP THE DE-CODING METHOD A SECRET."
|
||||
1100 PRINT
|
||||
1110 FOR I=1 TO 6
|
||||
1111 FOR J=1 TO 6
|
||||
1112 H(I,J)=0
|
||||
1113 NEXT J
|
||||
1114 NEXT I
|
||||
1120 FOR I=1 TO 3
|
||||
1121 L(I)=0
|
||||
1122 NEXT I
|
||||
1130 C(1)=2:C(2)=2
|
||||
1140 C(3)=1:C(4)=1
|
||||
1150 C(5)=0:C(6)=0
|
||||
1160 S=0:H=0
|
||||
1170 PRINT "START GAME"
|
||||
1180 INPUT X,Y
|
||||
1190 IF X<1 OR X>6 OR INT(X)<>ABS(X) THEN 1210
|
||||
1200 IF Y>0 AND Y<7 AND INT(Y)=ABS(Y) THEN 1230
|
||||
1210 PRINT "INVALID INPUT. TRY AGAIN."
|
||||
1220 GOTO 1180
|
||||
1230 R=7-Y
|
||||
1240 C=X
|
||||
1250 IF F(R,C)>0 THEN 1290
|
||||
1260 S=S+1
|
||||
1270 PRINT "SPLASH! TRY AGAIN."
|
||||
1280 GOTO 1180
|
||||
1290 IF C(F(R,C))<4 THEN 1340
|
||||
1300 PRINT "THERE USED TO BE A SHIP AT THAT POINT, BUT YOU SUNK IT."
|
||||
1310 PRINT "SPLASH! TRY AGAIN."
|
||||
1320 S=S+1
|
||||
1330 GOTO 1180
|
||||
1340 IF H(R,C)>0 THEN 1420
|
||||
1350 H=H+1
|
||||
1360 H(R,C)=F(R,C)
|
||||
1370 PRINT "A DIRECT HIT ON SHIP NUMBER";F(R,C)
|
||||
1380 C(F(R,C))=C(F(R,C))+1
|
||||
1390 IF C(F(R,C))>=4 THEN 1470
|
||||
1400 PRINT "TRY AGAIN."
|
||||
1410 GOTO 1180
|
||||
1420 PRINT "YOU ALREADY PUT A HOLE IN SHIP NUMBER";F(R,C);
|
||||
1430 PRINT "AT THAT POINT."
|
||||
1440 PRINT "SPLASH! TRY AGAIN."
|
||||
1450 S=S+1
|
||||
1460 GOTO 1180
|
||||
1470 L((INT(F(R,C)-1)/2)+1)=L((INT(F(R,C)-1)/2)+1)+1
|
||||
1480 PRINT "AND YOU SUNK IT. HURRAH FOR THE GOOD GUYS."
|
||||
1490 PRINT "SO FAR, THE BAD GUYS HAVE LOST"
|
||||
1500 PRINT L(1);"DESTROYER(S),";L(2);"CRUISER(S), AND";
|
||||
1510 PRINT L(3);"AIRCRAFT CARRIER(S)."
|
||||
1520 PRINT "YOUR CURRENT SPLASH/HIT RATIO IS";S/H
|
||||
1530 IF (L(1)+L(2)+L(3))<6 THEN 1180
|
||||
1540 PRINT
|
||||
1550 PRINT "YOU HAVE TOTALLY WIPED OUT THE BAD GUYS' FLEET"
|
||||
1560 PRINT "WITH A FINAL SPLASH/HIT RATIO OF";S/H
|
||||
1570 IF S/H>0 THEN 1590
|
||||
1580 PRINT "CONGRATULATIONS -- A DIRECT HIT EVERY TIME."
|
||||
1590 PRINT
|
||||
1600 PRINT "****************************"
|
||||
1610 PRINT
|
||||
1620 GOTO 50
|
||||
1630 END
|
||||
9
00_Alternate_Languages/10_Blackjack/README.md
Normal file
9
00_Alternate_Languages/10_Blackjack/README.md
Normal file
@@ -0,0 +1,9 @@
|
||||
Please refer to the `readme.md` in the parent folder.
|
||||
|
||||
Each subfolder represents a port of this program to a language which is _not_ one of the agreed upon 10 languages, which are intended to meet these three criteria:
|
||||
|
||||
1. Popular (by TIOBE index)
|
||||
2. Memory safe
|
||||
3. Generally considered a 'scripting' language
|
||||
|
||||
We welcome additional ports, but these additional ports are for educational purposes only.
|
||||
321
00_Alternate_Languages/10_Blackjack/blackjack.bas
Normal file
321
00_Alternate_Languages/10_Blackjack/blackjack.bas
Normal file
@@ -0,0 +1,321 @@
|
||||
2 PRINT TAB(31);"BLACK JACK"
|
||||
4 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY"
|
||||
6 PRINT:PRINT:PRINT
|
||||
10 DEF FNA(Q)=Q+11*(Q>=22)
|
||||
20 DIM P(15,12),Q(15),C(52),D(52),T(8),S(7),B(15)
|
||||
30 DIM R(15)
|
||||
40 REM--P(I,J) IS THE JTH CARD IN HAND I, Q(I) IS TOTAL OF HAND I
|
||||
50 REM--C IS THE DECK BEING DEALT FROM, D IS THE DISCARD PILE,
|
||||
60 REM--T(I) IS THE TOTAL FOR PLAYER I, S(I) IS THE TOTAL THIS HAND FOR
|
||||
70 REM--PLAYER I, B(I) IS TH BET FOR HAND I
|
||||
80 REM--R(I) IS THE LENGTH OF P(I,*)
|
||||
90 GOTO 1500
|
||||
100 REM--SUBROUTINE TO GET A CARD. RESULT IS PUT IN X.
|
||||
110 IF C<51 THEN 230
|
||||
120 PRINT "RESHUFFLING"
|
||||
130 FOR D=D TO 1 STEP -1
|
||||
140 C=C-1
|
||||
150 C(C)=D(D)
|
||||
160 NEXT D
|
||||
170 FOR C1=52 TO C STEP -1
|
||||
180 C2=INT(RND(1)*(C1-C+1))+C
|
||||
190 C3=C(C2)
|
||||
200 C(C2)=C(C1)
|
||||
210 C(C1)=C3
|
||||
220 NEXT C1
|
||||
230 X=C(C)
|
||||
240 C=C+1
|
||||
250 RETURN
|
||||
300 REM--SUBROUTINE TO EVALUATE HAND I. TOTAL IS PUT INTO
|
||||
310 REM--Q(I). TOTALS HAVE THE FOLLOWING MEANING:
|
||||
320 REM-- 2-10...HARD 2-10
|
||||
330 REM-- 11-21...SOFT 11-21
|
||||
340 REM-- 22-32...HARD 11-21
|
||||
350 REM-- 33+....BUSTED
|
||||
360 Q=0
|
||||
370 FOR Q2=1 TO R(I)
|
||||
380 X=P(I,Q2)
|
||||
390 GOSUB 500
|
||||
400 NEXT Q2
|
||||
410 Q(I)=Q
|
||||
420 RETURN
|
||||
500 REM--SUBROUTINE TO ADD CARD X TO TOTAL Q.
|
||||
510 X1=X: IF X1>10 THEN X1=10: REM SAME AS X1=10 MIN X
|
||||
520 Q1=Q+X1
|
||||
530 IF Q>=11 THEN 590
|
||||
540 IF X>1 THEN 570
|
||||
550 Q=Q+11
|
||||
560 RETURN
|
||||
570 Q=Q1-11*(Q1>=11)
|
||||
580 RETURN
|
||||
590 Q=Q1-(Q<=21 AND Q1>21)
|
||||
600 IF Q<33 THEN 620
|
||||
610 Q=-1
|
||||
620 RETURN
|
||||
700 REM--CARD PRINTING SUBROUTINE
|
||||
710 REM D$ DEFINED ELSEWHERE
|
||||
720 PRINT MID$(D$,3*X-2,3);
|
||||
730 PRINT " ";
|
||||
740 RETURN
|
||||
750 REM--ALTERNATIVE PRINTING ROUTINE
|
||||
760 PRINT " ";MID$(D$,3*X-1,2);
|
||||
770 PRINT " ";
|
||||
780 RETURN
|
||||
800 REM--SUBROUTINE TO PLAY OUT A HAND.
|
||||
810 REM--NO SPLITTING OR BLACKJACKS ALLOWED
|
||||
820 H1=5
|
||||
830 GOSUB 1410
|
||||
840 H1=3
|
||||
850 ON H GOTO 950,930
|
||||
860 GOSUB 100
|
||||
870 B(I)=B(I)*2
|
||||
880 PRINT "RECEIVED A";
|
||||
890 GOSUB 700
|
||||
900 GOSUB 1100
|
||||
910 IF Q>0 THEN GOSUB 1300
|
||||
920 RETURN
|
||||
930 GOSUB 1320
|
||||
940 RETURN
|
||||
950 GOSUB 100
|
||||
960 PRINT "RECEIVED A";
|
||||
970 GOSUB 700
|
||||
980 GOSUB 1100
|
||||
990 IF Q<0 THEN 940
|
||||
1000 PRINT "HIT";
|
||||
1010 GOTO 830
|
||||
1100 REM--SUBROUTINE TO ADD A CARD TO ROW I
|
||||
1110 R(I)=R(I)+1
|
||||
1120 P(I,R(I))=X
|
||||
1130 Q=Q(I)
|
||||
1140 GOSUB 500
|
||||
1150 Q(I)=Q
|
||||
1160 IF Q>=0 THEN 1190
|
||||
1170 PRINT "...BUSTED"
|
||||
1180 GOSUB 1200
|
||||
1190 RETURN
|
||||
1200 REM--SUBROUTINE TO DISCARD ROW I
|
||||
1210 IF R(I)<>0 THEN 1230
|
||||
1220 RETURN
|
||||
1230 D=D+1
|
||||
1240 D(D)=P(I,R(I))
|
||||
1250 R(I)=R(I)-1
|
||||
1260 GOTO 1210
|
||||
1300 REM--PRINTS TOTAL OF HAND I
|
||||
1310 PRINT
|
||||
1320 AA=Q(I): GOSUB 3400
|
||||
1325 PRINT "TOTAL IS";AA
|
||||
1330 RETURN
|
||||
1400 REM--SUBROUTINE TO READ REPLY
|
||||
1410 REM I$ DEFINED ELSEWHERE
|
||||
1420 INPUT H$: H$=LEFT$(H$,1)
|
||||
1430 FOR H=1 TO H1 STEP 2
|
||||
1440 IF H$=MID$(I$,H,1) THEN 1480
|
||||
1450 NEXT H
|
||||
1460 PRINT "TYPE ";MID$(I$,1,H1-1);" OR ";MID$(I$,H1,2);" PLEASE";
|
||||
1470 GOTO 1420
|
||||
1480 H=(H+1)/2
|
||||
1490 RETURN
|
||||
1500 REM--PROGRAM STARTS HERE
|
||||
1510 REM--INITIALIZE
|
||||
1520 D$="N A 2 3 4 5 6 7N 8 9 10 J Q K"
|
||||
1530 I$="H,S,D,/,"
|
||||
1540 FOR I=1 TO 13
|
||||
1550 FOR J=4*I-3 TO 4*I
|
||||
1560 D(J)=I
|
||||
1570 NEXT J
|
||||
1580 NEXT I
|
||||
1590 D=52
|
||||
1600 C=53
|
||||
1610 PRINT "DO YOU WANT INSTRUCTIONS";
|
||||
1620 INPUT H$
|
||||
1630 IF LEFT$(H$,1)="N" OR LEFT$(H$,1)="n" THEN 1760
|
||||
1640 PRINT "THIS IS THE GAME OF 21. AS MANY AS 7 PLAYERS MAY PLAY THE"
|
||||
1650 PRINT "GAME. ON EACH DEAL, BETS WILL BE ASKED FOR, AND THE"
|
||||
1660 PRINT "PLAYERS' BETS SHOULD BE TYPED IN. THE CARDS WILL THEN BE"
|
||||
1670 PRINT "DEALT, AND EACH PLAYER IN TURN PLAYS HIS HAND. THE"
|
||||
1680 PRINT "FIRST RESPONSE SHOULD BE EITHER 'D', INDICATING THAT THE"
|
||||
1690 PRINT "PLAYER IS DOUBLING DOWN, 'S', INDICATING THAT HE IS"
|
||||
1700 PRINT "STANDING, 'H', INDICATING HE WANTS ANOTHER CARD, OR '/',"
|
||||
1710 PRINT "INDICATING THAT HE WANTS TO SPLIT HIS CARDS. AFTER THE"
|
||||
1720 PRINT "INITIAL RESPONSE, ALL FURTHER RESPONSES SHOULD BE 'S' OR"
|
||||
1730 PRINT "'H', UNLESS THE CARDS WERE SPLIT, IN WHICH CASE DOUBLING"
|
||||
1740 PRINT "DOWN IS AGAIN PERMITTED. IN ORDER TO COLLECT FOR"
|
||||
1750 PRINT "BLACKJACK, THE INITIAL RESPONSE SHOULD BE 'S'."
|
||||
1760 PRINT "NUMBER OF PLAYERS";
|
||||
1770 INPUT N
|
||||
1775 PRINT
|
||||
1780 IF N<1 OR N>7 OR N>INT(N) THEN 1760
|
||||
1790 FOR I=1 TO 8: T(I)=0: NEXT I
|
||||
1800 D1=N+1
|
||||
1810 IF 2*D1+C>=52 THEN GOSUB 120
|
||||
1820 IF C=2 THEN C=C-1
|
||||
1830 FOR I=1 TO N: Z(I)=0: NEXT I
|
||||
1840 FOR I=1 TO 15: B(I)=0: NEXT I
|
||||
1850 FOR I=1 TO 15: Q(I)=0: NEXT I
|
||||
1860 FOR I=1 TO 7: S(I)=0: NEXT I
|
||||
1870 FOR I=1 TO 15: R(I)=0: NEXT I
|
||||
1880 PRINT "BETS:"
|
||||
1890 FOR I=1 TO N: PRINT "#";I;: INPUT Z(I): NEXT I
|
||||
1900 FOR I=1 TO N
|
||||
1910 IF Z(I)<=0 OR Z(I)>500 THEN 1880
|
||||
1920 B(I)=Z(I)
|
||||
1930 NEXT I
|
||||
1940 PRINT "PLAYER";
|
||||
1950 FOR I=1 TO N
|
||||
1960 PRINT I;" ";
|
||||
1970 NEXT I
|
||||
1980 PRINT "DEALER"
|
||||
1990 FOR J=1 TO 2
|
||||
2000 PRINT TAB(5);
|
||||
2010 FOR I=1 TO D1
|
||||
2020 GOSUB 100
|
||||
2030 P(I,J)=X
|
||||
2040 IF J=1 OR I<=N THEN GOSUB 750
|
||||
2050 NEXT I
|
||||
2060 PRINT
|
||||
2070 NEXT J
|
||||
2080 FOR I=1 TO D1
|
||||
2090 R(I)=2
|
||||
2100 NEXT I
|
||||
2110 REM--TEST FOR INSURANCE
|
||||
2120 IF P(D1,1)>1 THEN 2240
|
||||
2130 PRINT "ANY INSURANCE";
|
||||
2140 INPUT H$
|
||||
2150 IF LEFT$(H$,1)<>"Y" THEN 2240
|
||||
2160 PRINT "INSURANCE BETS"
|
||||
2170 FOR I=1 TO N: PRINT "#";I;: INPUT Z(I): NEXT I
|
||||
2180 FOR I=1 TO N
|
||||
2190 IF Z(I)<0 OR Z(I)>B(I)/2 THEN 2160
|
||||
2200 NEXT I
|
||||
2210 FOR I=1 TO N
|
||||
2220 S(I)=Z(I)*(3*(-(P(D1,2)>=10))-1)
|
||||
2230 NEXT I
|
||||
2240 REM--TEST FOR DEALER BLACKJACK
|
||||
2250 L1=1: L2=1
|
||||
2252 IF P(D1,1)=1 AND P(D1,2)>9 THEN L1=0: L2=0
|
||||
2253 IF P(D1,2)=1 AND P(D1,1)>9 THEN L1=0: L2=0
|
||||
2254 IF L1<>0 OR L2<>0 THEN 2320
|
||||
2260 PRINT:PRINT "DEALER HAS A";MID$(D$,3*P(D1,2)-2,3);" IN THE HOLE ";
|
||||
2270 PRINT "FOR BLACKJACK"
|
||||
2280 FOR I=1 TO D1
|
||||
2290 GOSUB 300
|
||||
2300 NEXT I
|
||||
2310 GOTO 3140
|
||||
2320 REM--NO DEALER BLACKJACK
|
||||
2330 IF P(D1,1)>1 AND P(D1,1)<10 THEN 2350
|
||||
2340 PRINT:PRINT "NO DEALER BLACKJACK."
|
||||
2350 REM--NOW PLAY THE HANDS
|
||||
2360 FOR I=1 TO N
|
||||
2370 PRINT "PLAYER";I;
|
||||
2380 H1=7
|
||||
2390 GOSUB 1410
|
||||
2400 ON H GOTO 2550,2410,2510,2600
|
||||
2410 REM--PLAYER WANTS TO STAND
|
||||
2420 GOSUB 300
|
||||
2430 IF Q(I)<>21 THEN 2490
|
||||
2440 PRINT "BLACKJACK"
|
||||
2450 S(I)=S(I)+1.5*B(I)
|
||||
2460 B(I)=0
|
||||
2470 GOSUB 1200
|
||||
2480 GOTO 2900
|
||||
2490 GOSUB 1320
|
||||
2500 GOTO 2900
|
||||
2510 REM--PLAYER WANTS TO DOUBLE DOWN
|
||||
2520 GOSUB 300
|
||||
2530 GOSUB 860
|
||||
2540 GOTO 2900
|
||||
2550 REM--PLAYER WANTS TO BE HIT
|
||||
2560 GOSUB 300
|
||||
2570 H1=3
|
||||
2580 GOSUB 950
|
||||
2590 GOTO 2900
|
||||
2600 REM--PLAYER WANTS TO SPLIT
|
||||
2610 L1=P(I,1): IF P(I,1)>10 THEN L1=10
|
||||
2612 L2=P(I,2): IF P(I,2)>10 THEN L2=10
|
||||
2614 IF L1=L2 THEN 2640
|
||||
2620 PRINT "SPLITTING NOT ALLOWED."
|
||||
2630 GOTO 2370
|
||||
2640 REM--PLAY OUT SPLIT
|
||||
2650 I1=I+D1
|
||||
2660 R(I1)=2
|
||||
2670 P(I1,1)=P(I,2)
|
||||
2680 B(I+D1)=B(I)
|
||||
2690 GOSUB 100
|
||||
2700 PRINT "FIRST HAND RECEIVES A";
|
||||
2710 GOSUB 700
|
||||
2720 P(I,2)=X
|
||||
2730 GOSUB 300
|
||||
2740 PRINT
|
||||
2750 GOSUB 100
|
||||
2760 PRINT "SECOND HAND RECEIVES A";
|
||||
2770 I=I1
|
||||
2780 GOSUB 700
|
||||
2790 P(I,2)=X
|
||||
2800 GOSUB 300
|
||||
2810 PRINT
|
||||
2820 I=I1-D1
|
||||
2830 IF P(I,1)=1 THEN 2900
|
||||
2840 REM--NOW PLAY THE TWO HANDS
|
||||
2850 PRINT "HAND";1-(I>D1);
|
||||
2860 GOSUB 800
|
||||
2870 I=I+D1
|
||||
2880 IF I=I1 THEN 2850
|
||||
2890 I=I1-D1
|
||||
2900 NEXT I
|
||||
2910 GOSUB 300
|
||||
2920 REM--TEST FOR PLAYING DEALER'S HAND
|
||||
2930 FOR I=1 TO N
|
||||
2940 IF R(I)>0 OR R(I+D1)>0 THEN 3010
|
||||
2950 NEXT I
|
||||
2960 PRINT "DEALER HAD A";
|
||||
2970 X=P(D1,2)
|
||||
2980 GOSUB 700
|
||||
2990 PRINT " CONCEALED."
|
||||
3000 GOTO 3140
|
||||
3010 PRINT "DEALER HAS A";MID$(D$,3*P(D1,2)-2,3);" CONCEALED ";
|
||||
3020 I=D1
|
||||
3030 AA=Q(I): GOSUB 3400
|
||||
3035 PRINT "FOR A TOTAL OF";AA
|
||||
3040 IF AA>16 THEN 3130
|
||||
3050 PRINT "DRAWS";
|
||||
3060 GOSUB 100
|
||||
3070 GOSUB 750
|
||||
3080 GOSUB 1100
|
||||
3090 AA=Q: GOSUB 3400
|
||||
3095 IF Q>0 AND AA<17 THEN 3060
|
||||
3100 Q(I)=Q-(Q<0)/2
|
||||
3110 IF Q<0 THEN 3140
|
||||
3120 AA=Q: GOSUB 3400
|
||||
3125 PRINT "---TOTAL IS";AA
|
||||
3130 PRINT
|
||||
3140 REM--TALLY THE RESULT
|
||||
3150 REM
|
||||
3160 Z$="LOSES PUSHES WINS "
|
||||
3165 PRINT
|
||||
3170 FOR I=1 TO N
|
||||
3180 AA=Q(I): GOSUB 3400
|
||||
3182 AB=Q(I+D1): GOSUB 3410
|
||||
3184 AC=Q(D1): GOSUB 3420
|
||||
3186 S(I)=S(I)+B(I)*SGN(AA-AC)+B(I+D1)*SGN(AB-AC)
|
||||
3188 B(I+D1)=0
|
||||
3200 PRINT "PLAYER";I;
|
||||
3210 PRINT MID$(Z$,SGN(S(I))*6+7,6);" ";
|
||||
3220 IF S(I)<>0 THEN 3250
|
||||
3230 PRINT " ";
|
||||
3240 GOTO 3260
|
||||
3250 PRINT ABS(S(I));
|
||||
3260 T(I)=T(I)+S(I)
|
||||
3270 PRINT "TOTAL=";T(I)
|
||||
3280 GOSUB 1200
|
||||
3290 T(D1)=T(D1)-S(I)
|
||||
3300 I=I+D1
|
||||
3310 GOSUB 1200
|
||||
3320 I=I-D1
|
||||
3330 NEXT I
|
||||
3340 PRINT "DEALER'S TOTAL=";T(D1)
|
||||
3345 PRINT
|
||||
3350 GOSUB 1200
|
||||
3360 GOTO 1810
|
||||
3400 AA=AA+11*(AA>=22): RETURN
|
||||
3410 AB=AB+11*(AB>=22): RETURN
|
||||
3420 AC=AC+11*(AC>=22): RETURN
|
||||
9
00_Alternate_Languages/11_Bombardment/README.md
Normal file
9
00_Alternate_Languages/11_Bombardment/README.md
Normal file
@@ -0,0 +1,9 @@
|
||||
Please refer to the `readme.md` in the parent folder.
|
||||
|
||||
Each subfolder represents a port of this program to a language which is _not_ one of the agreed upon 10 languages, which are intended to meet these three criteria:
|
||||
|
||||
1. Popular (by TIOBE index)
|
||||
2. Memory safe
|
||||
3. Generally considered a 'scripting' language
|
||||
|
||||
We welcome additional ports, but these additional ports are for educational purposes only.
|
||||
93
00_Alternate_Languages/11_Bombardment/bombardment.bas
Normal file
93
00_Alternate_Languages/11_Bombardment/bombardment.bas
Normal file
@@ -0,0 +1,93 @@
|
||||
10 PRINT TAB(33);"BOMBARDMENT"
|
||||
20 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY"
|
||||
30 PRINT:PRINT:PRINT
|
||||
100 PRINT "YOU ARE ON A BATTLEFIELD WITH 4 PLATOONS AND YOU"
|
||||
110 PRINT "HAVE 25 OUTPOSTS AVAILABLE WHERE THEY MAY BE PLACED."
|
||||
120 PRINT "YOU CAN ONLY PLACE ONE PLATOON AT ANY ONE OUTPOST."
|
||||
130 PRINT "THE COMPUTER DOES THE SAME WITH ITS FOUR PLATOONS."
|
||||
135 PRINT
|
||||
140 PRINT "THE OBJECT OF THE GAME IS TO FIRE MISSLES AT THE"
|
||||
150 PRINT "OUTPOSTS OF THE COMPUTER. IT WILL DO THE SAME TO YOU."
|
||||
160 PRINT "THE ONE WHO DESTROYS ALL FOUR OF THE ENEMY'S PLATOONS"
|
||||
170 PRINT "FIRST IS THE WINNER."
|
||||
180 PRINT
|
||||
190 PRINT "GOOD LUCK... AND TELL US WHERE YOU WANT THE BODIES SENT!"
|
||||
200 PRINT
|
||||
210 PRINT "TEAR OFF MATRIX AND USE IT TO CHECK OFF THE NUMBERS."
|
||||
220 FOR R=1 TO 5: PRINT: NEXT R
|
||||
260 DIM M(100)
|
||||
270 FOR R=1 TO 5
|
||||
280 I=(R-1)*5+1
|
||||
290 PRINT I,I+1,I+2,I+3,I+4
|
||||
300 NEXT R
|
||||
350 FOR R=1 TO 10: PRINT: NEXT R
|
||||
380 C=INT(RND(1)*25)+1
|
||||
390 D=INT(RND(1)*25)+1
|
||||
400 E=INT(RND(1)*25)+1
|
||||
410 F=INT(RND(1)*25)+1
|
||||
420 IF C=D THEN 390
|
||||
430 IF C=E THEN 400
|
||||
440 IF C=F THEN 410
|
||||
450 IF D=E THEN 400
|
||||
460 IF D=F THEN 410
|
||||
470 IF E=F THEN 410
|
||||
480 PRINT "WHAT ARE YOUR FOUR POSITIONS";
|
||||
490 INPUT G,H,K,L
|
||||
495 PRINT
|
||||
500 PRINT "WHERE DO YOU WISH TO FIRE YOUR MISSLE";
|
||||
510 INPUT Y
|
||||
520 IF Y=C THEN 710
|
||||
530 IF Y=D THEN 710
|
||||
540 IF Y=E THEN 710
|
||||
550 IF Y=F THEN 710
|
||||
560 GOTO 630
|
||||
570 M=INT(RND(1)*25)+1
|
||||
575 GOTO 1160
|
||||
580 IF X=G THEN 920
|
||||
590 IF X=H THEN 920
|
||||
600 IF X=L THEN 920
|
||||
610 IF X=K THEN 920
|
||||
620 GOTO 670
|
||||
630 PRINT "HA, HA YOU MISSED. MY TURN NOW:"
|
||||
640 PRINT: PRINT: GOTO 570
|
||||
670 PRINT "I MISSED YOU, YOU DIRTY RAT. I PICKED";M". YOUR TURN:"
|
||||
680 PRINT: PRINT: GOTO 500
|
||||
710 Q=Q+1
|
||||
720 IF Q=4 THEN 890
|
||||
730 PRINT "YOU GOT ONE OF MY OUTPOSTS!"
|
||||
740 IF Q=1 THEN 770
|
||||
750 IF Q=2 THEN 810
|
||||
760 IF Q=3 THEN 850
|
||||
770 PRINT "ONE DOWN, THREE TO GO."
|
||||
780 PRINT: PRINT: GOTO 570
|
||||
810 PRINT "TWO DOWN, TWO TO GO."
|
||||
820 PRINT: PRINT: GOTO 570
|
||||
850 PRINT "THREE DOWN, ONE TO GO."
|
||||
860 PRINT: PRINT: GOTO 570
|
||||
890 PRINT "YOU GOT ME, I'M GOING FAST. BUT I'LL GET YOU WHEN"
|
||||
900 PRINT "MY TRANSISTO&S RECUP%RA*E!"
|
||||
910 GOTO 1235
|
||||
920 Z=Z+1
|
||||
930 IF Z=4 THEN 1110
|
||||
940 PRINT "I GOT YOU. IT WON'T BE LONG NOW. POST";X;"WAS HIT."
|
||||
950 IF Z=1 THEN 990
|
||||
960 IF Z=2 THEN 1030
|
||||
970 IF Z=3 THEN 1070
|
||||
990 PRINT "YOU HAVE ONLY THREE OUTPOSTS LEFT."
|
||||
1000 PRINT: PRINT: GOTO 500
|
||||
1030 PRINT "YOU HAVE ONLY TWO OUTPOSTS LEFT."
|
||||
1040 PRINT: PRINT: GOTO 500
|
||||
1070 PRINT "YOU HAVE ONLY ONE OUTPOST LEFT."
|
||||
1080 PRINT: PRINT: GOTO 500
|
||||
1110 PRINT "YOU'RE DEAD. YOUR LAST OUTPOST WAS AT";X;". HA, HA, HA."
|
||||
1120 PRINT "BETTER LUCK NEXT TIME."
|
||||
1150 GOTO 1235
|
||||
1160 P=P+1
|
||||
1170 N=P-1
|
||||
1180 FOR T=1 TO N
|
||||
1190 IF M=M(T) THEN 570
|
||||
1200 NEXT T
|
||||
1210 X=M
|
||||
1220 M(P)=M
|
||||
1230 GOTO 580
|
||||
1235 END
|
||||
9
00_Alternate_Languages/12_Bombs_Away/README.md
Normal file
9
00_Alternate_Languages/12_Bombs_Away/README.md
Normal file
@@ -0,0 +1,9 @@
|
||||
Please refer to the `readme.md` in the parent folder.
|
||||
|
||||
Each subfolder represents a port of this program to a language which is _not_ one of the agreed upon 10 languages, which are intended to meet these three criteria:
|
||||
|
||||
1. Popular (by TIOBE index)
|
||||
2. Memory safe
|
||||
3. Generally considered a 'scripting' language
|
||||
|
||||
We welcome additional ports, but these additional ports are for educational purposes only.
|
||||
65
00_Alternate_Languages/12_Bombs_Away/bombsaway.bas
Normal file
65
00_Alternate_Languages/12_Bombs_Away/bombsaway.bas
Normal file
@@ -0,0 +1,65 @@
|
||||
8 PRINT "YOU ARE A PILOT IN A WORLD WAR II BOMBER."
|
||||
10 INPUT "WHAT SIDE -- ITALY(1), ALLIES(2), JAPAN(3), GERMANY(4)";A
|
||||
20 IF A>0 AND A<5 THEN 25
|
||||
22 PRINT "TRY AGAIN..." : GOTO 10
|
||||
25 ON A GOTO 30, 110, 200, 220
|
||||
30 INPUT "YOUR TARGET -- ALBANIA(1), GREECE(2), NORTH AFRICA(3)";B
|
||||
40 IF B>0 AND B<4 THEN 45
|
||||
42 PRINT "TRY AGAIN..." : GOTO 30
|
||||
45 PRINT : ON B GOTO 50, 80,90
|
||||
50 PRINT "SHOULD BE EASY -- YOU'RE FLYING A NAZI-MADE PLANE."
|
||||
60 GOTO 280
|
||||
80 PRINT "BE CAREFUL!!!" : GOTO 280
|
||||
90 PRINT "YOU'RE GOING FOR THE OIL, EH?" : GOTO 280
|
||||
110 INPUT "AIRCRAFT -- LIBERATOR(1), B-29(2), B-17(3), LANCASTER(4)";G
|
||||
120 IF G>0 AND G<5 THEN 125
|
||||
122 PRINT "TRY AGAIN..." : GOTO 110
|
||||
125 PRINT : ON G GOTO 130, 150, 170, 190
|
||||
130 PRINT "YOU'VE GOT 2 TONS OF BOMBS FLYING FOR PLOESTI." : GOTO 280
|
||||
150 PRINT "YOU'RE DUMPING THE A-BOMB ON HIROSHIMA." : GOTO 280
|
||||
170 PRINT "YOU'RE CHASING THE BISMARK IN THE NORTH SEA." : GOTO 280
|
||||
190 PRINT "YOU'RE BUSTING A GERMAN HEAVY WATER PLANT IN THE RUHR."
|
||||
195 GOTO 280
|
||||
200 PRINT "YOU'RE FLYING A KAMIKAZE MISSION OVER THE USS LEXINGTON."
|
||||
205 INPUT "YOUR FIRST KAMIKAZE MISSION(Y OR N)";F$
|
||||
207 IF F$="N" THEN S=0 : GOTO 358
|
||||
210 PRINT : IF RND(1)>.65 THEN 325
|
||||
215 GOTO 380
|
||||
220 PRINT "A NAZI, EH? OH WELL. ARE YOU GOING FOR RUSSIA(1),"
|
||||
230 INPUT "ENGLAND(2), OR FRANCE(3)";M : IF M>0 AND M<4 THEN 235
|
||||
232 PRINT "TRY AGAIN..." : GOTO 220
|
||||
235 PRINT : ON M GOTO 250, 260, 270
|
||||
250 PRINT "YOU'RE NEARING STALINGRAD." : GOTO 280
|
||||
260 PRINT "NEARING LONDON. BE CAREFUL, THEY'VE GOT RADAR." : GOTO 280
|
||||
270 PRINT "NEARING VERSAILLES. DUCK SOUP. THEY'RE NEARLY DEFENSELESS."
|
||||
280 PRINT
|
||||
285 INPUT "HOW MANY MISSIONS HAVE YOU FLOWN";D
|
||||
290 IF D<160 THEN 300
|
||||
292 PRINT "MISSIONS, NOT MILES..."
|
||||
295 PRINT "150 MISSIONS IS HIGH EVEN FOR OLD-TIMERS."
|
||||
297 PRINT "NOW THEN, "; : GOTO 285
|
||||
300 PRINT:IF D<100 THEN 310
|
||||
305 PRINT "THAT'S PUSHING THE ODDS!" : GOTO 320
|
||||
310 IF D<25 THEN PRINT "FRESH OUT OF TRAINING, EH?"
|
||||
320 PRINT : IF D<160*RND(1) THEN 330
|
||||
325 PRINT "DIRECT HIT!!!! "INT(100*RND(1))"KILLED."
|
||||
327 PRINT "MISSION SUCCESSFUL." : GOTO 390
|
||||
330 PRINT "MISSED TARGET BY"INT(2+30*RND(1))"MILES!"
|
||||
335 PRINT "NOW YOU'RE REALLY IN FOR IT !!" : PRINT
|
||||
340 INPUT "DOES THE ENEMY HAVE GUNS(1), MISSILES(2), OR BOTH(3)";R
|
||||
345 IF R>0 AND R<4 THEN 350
|
||||
347 PRINT "TRY AGAIN..." : GOTO 340
|
||||
350 PRINT : T=0 : IF R=2 THEN 360
|
||||
355 INPUT "WHAT'S THE PERCENT HIT RATE OF ENEMY GUNNERS (10 TO 50)";S
|
||||
357 IF S<10 THEN PRINT "YOU LIE, BUT YOU'LL PAY...": GOTO 380
|
||||
358 PRINT
|
||||
360 PRINT : IF R>1 THEN T=35
|
||||
365 IF S+T>100*RND(1) THEN 380
|
||||
370 PRINT "YOU MADE IT THROUGH TREMENDOUS FLAK!!" : GOTO 390
|
||||
380 PRINT "* * * * BOOM * * * *"
|
||||
384 PRINT "YOU HAVE BEEN SHOT DOWN....."
|
||||
386 PRINT "DEARLY BELOVED, WE ARE GATHERED HERE TODAY TO PAY OUR"
|
||||
387 PRINT "LAST TRIBUTE..."
|
||||
390 PRINT:PRINT:PRINT:INPUT "ANOTHER MISSION (Y OR N)";U$
|
||||
395 IF U$="Y" THEN 8
|
||||
400 PRINT "CHICKEN !!!" : PRINT : END
|
||||
9
00_Alternate_Languages/13_Bounce/README.md
Normal file
9
00_Alternate_Languages/13_Bounce/README.md
Normal file
@@ -0,0 +1,9 @@
|
||||
Please refer to the `readme.md` in the parent folder.
|
||||
|
||||
Each subfolder represents a port of this program to a language which is _not_ one of the agreed upon 10 languages, which are intended to meet these three criteria:
|
||||
|
||||
1. Popular (by TIOBE index)
|
||||
2. Memory safe
|
||||
3. Generally considered a 'scripting' language
|
||||
|
||||
We welcome additional ports, but these additional ports are for educational purposes only.
|
||||
53
00_Alternate_Languages/13_Bounce/bounce.bas
Normal file
53
00_Alternate_Languages/13_Bounce/bounce.bas
Normal file
@@ -0,0 +1,53 @@
|
||||
10 PRINT TAB(33);"BOUNCE"
|
||||
20 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY"
|
||||
30 PRINT:PRINT:PRINT
|
||||
90 DIM T(20)
|
||||
100 PRINT "THIS SIMULATION LETS YOU SPECIFY THE INITIAL VELOCITY"
|
||||
110 PRINT "OF A BALL THROWN STRAIGHT UP, AND THE COEFFICIENT OF"
|
||||
120 PRINT "ELASTICITY OF THE BALL. PLEASE USE A DECIMAL FRACTION"
|
||||
130 PRINT "COEFFICIENCY (LESS THAN 1)."
|
||||
131 PRINT
|
||||
132 PRINT "YOU ALSO SPECIFY THE TIME INCREMENT TO BE USED IN"
|
||||
133 PRINT "'STROBING' THE BALL'S FLIGHT (TRY .1 INITIALLY)."
|
||||
134 PRINT
|
||||
135 INPUT "TIME INCREMENT (SEC)";S2
|
||||
140 PRINT
|
||||
150 INPUT "VELOCITY (FPS)";V
|
||||
160 PRINT
|
||||
170 INPUT "COEFFICIENT";C
|
||||
180 PRINT
|
||||
182 PRINT "FEET"
|
||||
184 PRINT
|
||||
186 S1=INT(70/(V/(16*S2)))
|
||||
190 FOR I=1 TO S1
|
||||
200 T(I)=V*C^(I-1)/16
|
||||
210 NEXT I
|
||||
220 FOR H=INT(-16*(V/32)^2+V^2/32+.5) TO 0 STEP -.5
|
||||
221 IF INT(H)<>H THEN 225
|
||||
222 PRINT H;
|
||||
225 L=0
|
||||
230 FOR I=1 TO S1
|
||||
240 FOR T=0 TO T(I) STEP S2
|
||||
245 L=L+S2
|
||||
250 IF ABS(H-(.5*(-32)*T^2+V*C^(I-1)*T))>.25 THEN 270
|
||||
260 PRINT TAB(L/S2);"0";
|
||||
270 NEXT T
|
||||
275 T=T(I+1)/2
|
||||
276 IF -16*T^2+V*C^(I-1)*T<H THEN 290
|
||||
280 NEXT I
|
||||
290 PRINT
|
||||
300 NEXT H
|
||||
310 PRINT TAB(1);
|
||||
320 FOR I=1 TO INT(L+1)/S2+1
|
||||
330 PRINT ".";
|
||||
340 NEXT I
|
||||
350 PRINT
|
||||
355 PRINT " 0";
|
||||
360 FOR I=1 TO INT(L+.9995)
|
||||
380 PRINT TAB(INT(I/S2));I;
|
||||
390 NEXT I
|
||||
400 PRINT
|
||||
410 PRINT TAB(INT(L+1)/(2*S2)-2);"SECONDS"
|
||||
420 PRINT
|
||||
430 GOTO 135
|
||||
440 END
|
||||
9
00_Alternate_Languages/14_Bowling/README.md
Normal file
9
00_Alternate_Languages/14_Bowling/README.md
Normal file
@@ -0,0 +1,9 @@
|
||||
Please refer to the `readme.md` in the parent folder.
|
||||
|
||||
Each subfolder represents a port of this program to a language which is _not_ one of the agreed upon 10 languages, which are intended to meet these three criteria:
|
||||
|
||||
1. Popular (by TIOBE index)
|
||||
2. Memory safe
|
||||
3. Generally considered a 'scripting' language
|
||||
|
||||
We welcome additional ports, but these additional ports are for educational purposes only.
|
||||
101
00_Alternate_Languages/14_Bowling/bowling.bas
Normal file
101
00_Alternate_Languages/14_Bowling/bowling.bas
Normal file
@@ -0,0 +1,101 @@
|
||||
10 PRINT TAB(34);"BOWL"
|
||||
20 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY"
|
||||
30 PRINT:PRINT:PRINT
|
||||
270 DIM C(15),A(100,6)
|
||||
360 PRINT "WELCOME TO THE ALLEY"
|
||||
450 PRINT "BRING YOUR FRIENDS"
|
||||
540 PRINT "OKAY LET'S FIRST GET ACQUAINTED"
|
||||
630 PRINT ""
|
||||
720 PRINT "THE INSTRUCTIONS (Y/N)"
|
||||
810 INPUT Z$
|
||||
900 IF Z$="Y" THEN 990
|
||||
960 IF Z$="N" THEN 1530
|
||||
990 PRINT "THE GAME OF BOWLING TAKES MIND AND SKILL.DURING THE GAME"
|
||||
1080 PRINT "THE COMPUTER WILL KEEP SCORE.YOU MAY COMPETE WITH"
|
||||
1170 PRINT "OTHER PLAYERS[UP TO FOUR].YOU WILL BE PLAYING TEN FRAMES"
|
||||
1260 PRINT "ON THE PIN DIAGRAM 'O' MEANS THE PIN IS DOWN...'+' MEANS THE"
|
||||
1350 PRINT "PIN IS STANDING.AFTER THE GAME THE COMPUTER WILL SHOW YOUR"
|
||||
1440 PRINT "SCORES ."
|
||||
1530 PRINT "FIRST OF ALL...HOW MANY ARE PLAYING";
|
||||
1620 INPUT R
|
||||
1710 PRINT
|
||||
1800 PRINT "VERY GOOD..."
|
||||
1890 FOR I=1 TO 100: FOR J=1 TO 6: A(I,J)=0: NEXT J: NEXT I
|
||||
1980 F=1
|
||||
2070 FOR P=1 TO R
|
||||
2160 M=0
|
||||
2250 B=1
|
||||
2340 M=0: Q=0
|
||||
2430 FOR I=1 TO 15: C(I)=0: NEXT I
|
||||
2520 REM ARK BALL GENERATOR USING MOD '15' SYSTEM
|
||||
2610 PRINT "TYPE ROLL TO GET THE BALL GOING."
|
||||
2700 INPUT N$
|
||||
2790 K=0: D=0
|
||||
2880 FOR I=1 TO 20
|
||||
2970 X=INT(RND(1)*100)
|
||||
3060 FOR J=1 TO 10
|
||||
3150 IF X<15*J THEN 3330
|
||||
3240 NEXT J
|
||||
3330 C(15*J-X)=1
|
||||
3420 NEXT I
|
||||
3510 REM ARK PIN DIAGRAM
|
||||
3600 PRINT "PLAYER:"P;"FRAME:";F"BALL:"B
|
||||
3690 FOR I=0 TO 3
|
||||
3780 PRINT
|
||||
3870 FOR J=1 TO 4-I
|
||||
3960 K=K+1
|
||||
4050 IF C(K)=1 THEN 4320
|
||||
4140 PRINT TAB(I);"+ ";
|
||||
4230 GOTO 4410
|
||||
4320 PRINT TAB(I);"O ";
|
||||
4410 NEXT J
|
||||
4500 NEXT I
|
||||
4590 PRINT ""
|
||||
4680 REM ARK ROLL ANALYSIS
|
||||
4770 FOR I=1 TO 10
|
||||
4860 D=D+C(I)
|
||||
4950 NEXT I
|
||||
5040 IF D-M <> 0 THEN 5220
|
||||
5130 PRINT "GUTTER!!"
|
||||
5220 IF B<>1 OR D<>10 THEN 5490
|
||||
5310 PRINT "STRIKE!!!!!"
|
||||
5400 Q=3
|
||||
5490 IF B<>2 OR D<>10 THEN 5760
|
||||
5580 PRINT "SPARE!!!!"
|
||||
5670 Q=2
|
||||
5760 IF B<>2 OR D>=10 THEN 6030
|
||||
5850 PRINT "ERROR!!!"
|
||||
5940 Q=1
|
||||
6030 IF B<>1 OR D>=10 THEN 6210
|
||||
6120 PRINT "ROLL YOUR 2ND BALL"
|
||||
6210 REM ARK STORAGE OF THE SCORES
|
||||
6300 PRINT
|
||||
6390 A(F*P,B)=D
|
||||
6480 IF B=2 THEN 7020
|
||||
6570 B=2
|
||||
6660 M=D
|
||||
6750 IF Q=3 THEN 6210
|
||||
6840 A(F*P,B)=D-M
|
||||
6930 IF Q=0 THEN 2520
|
||||
7020 A(F*P,3)=Q
|
||||
7110 NEXT P
|
||||
7200 F=F+1
|
||||
7290 IF F<11 THEN 2070
|
||||
7295 PRINT "FRAMES"
|
||||
7380 FOR I=1 TO 10
|
||||
7470 PRINT I;
|
||||
7560 NEXT I
|
||||
7650 PRINT
|
||||
7740 FOR P=1 TO R
|
||||
7830 FOR I=1 TO 3
|
||||
7920 FOR J=1 TO 10
|
||||
8010 PRINT A(J*P,I);
|
||||
8100 NEXT J
|
||||
8105 PRINT
|
||||
8190 NEXT I
|
||||
8280 PRINT
|
||||
8370 NEXT P
|
||||
8460 PRINT "DO YOU WANT ANOTHER GAME"
|
||||
8550 INPUT A$
|
||||
8640 IF LEFT$(A$,1)="Y" THEN 2610
|
||||
8730 END
|
||||
9
00_Alternate_Languages/15_Boxing/README.md
Normal file
9
00_Alternate_Languages/15_Boxing/README.md
Normal file
@@ -0,0 +1,9 @@
|
||||
Please refer to the `readme.md` in the parent folder.
|
||||
|
||||
Each subfolder represents a port of this program to a language which is _not_ one of the agreed upon 10 languages, which are intended to meet these three criteria:
|
||||
|
||||
1. Popular (by TIOBE index)
|
||||
2. Memory safe
|
||||
3. Generally considered a 'scripting' language
|
||||
|
||||
We welcome additional ports, but these additional ports are for educational purposes only.
|
||||
142
00_Alternate_Languages/15_Boxing/boxing.bas
Normal file
142
00_Alternate_Languages/15_Boxing/boxing.bas
Normal file
@@ -0,0 +1,142 @@
|
||||
1 PRINT TAB(33);"BOXING"
|
||||
2 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY"
|
||||
3 PRINT:PRINT:PRINT
|
||||
4 PRINT "BOXING OLYMPIC STYLE (3 ROUNDS -- 2 OUT OF 3 WINS)"
|
||||
5 J=0
|
||||
6 L=0
|
||||
8 PRINT
|
||||
10 PRINT "WHAT IS YOUR OPPONENT'S NAME";
|
||||
20 INPUT J$
|
||||
30 PRINT "INPUT YOUR MAN'S NAME";
|
||||
40 INPUT L$
|
||||
50 PRINT "DIFFERENT PUNCHES ARE: (1) FULL SWING; (2) HOOK; (3) UPPERCUT; (4) JAB."
|
||||
60 PRINT "WHAT IS YOUR MANS BEST";
|
||||
64 INPUT B
|
||||
70 PRINT "WHAT IS HIS VULNERABILITY";
|
||||
80 INPUT D
|
||||
90 B1=INT(4*RND(1)+1)
|
||||
100 D1=INT(4*RND(1)+1)
|
||||
110 IF B1=D1 THEN 90
|
||||
120 PRINT J$;"'S ADVANTAGE IS";B1;"AND VULNERABILITY IS SECRET.":PRINT
|
||||
130 FOR R=1 TO 3
|
||||
140 IF J>= 2 THEN 1040
|
||||
150 IF L>=2 THEN 1060
|
||||
160 X=0
|
||||
170 Y=0
|
||||
180 PRINT "ROUND";R;"BEGINS..."
|
||||
185 FOR R1= 1 TO 7
|
||||
190 I=INT(10*RND(1)+1)
|
||||
200 IF I>5 THEN 600
|
||||
210 PRINT L$;"'S PUNCH";
|
||||
220 INPUT P
|
||||
221 IF P=B THEN 225
|
||||
222 GOTO 230
|
||||
225 X=X+2
|
||||
230 IF P=1 THEN 340
|
||||
240 IF P=2 THEN 450
|
||||
250 IF P=3 THEN 520
|
||||
270 PRINT L$;" JABS AT ";J$"'S HEAD ";
|
||||
271 IF D1=4 THEN 290
|
||||
275 C=INT(8*RND(1)+1)
|
||||
280 IF C<4 THEN 310
|
||||
290 X=X+3
|
||||
300 GOTO 950
|
||||
310 PRINT "IT'S BLOCKED."
|
||||
330 GOTO 950
|
||||
340 PRINT L$ " SWINGS AND ";
|
||||
341 IF D1=4 THEN 410
|
||||
345 X3=INT(30*RND(1)+1)
|
||||
350 IF X3<10 THEN 410
|
||||
360 PRINT "HE MISSES ";
|
||||
370 PRINT
|
||||
375 IF X=1 THEN 950
|
||||
380 PRINT
|
||||
390 PRINT
|
||||
400 GOTO 300
|
||||
410 PRINT "HE CONNECTS!"
|
||||
420 IF X>35 THEN 980
|
||||
425 X=X+15
|
||||
440 GOTO 300
|
||||
450 PRINT L$;" GIVES THE HOOK... ";
|
||||
455 IF D1=2 THEN 480
|
||||
460 H1=INT(2*RND(1)+1)
|
||||
470 IF H1=1 THEN 500
|
||||
475 PRINT "CONNECTS..."
|
||||
480 X=X+7
|
||||
490 GOTO 300
|
||||
500 PRINT "BUT IT'S BLOCKED!!!!!!!!!!!!!"
|
||||
510 GOTO 300
|
||||
520 PRINT L$ " TRIES AN UPPERCUT ";
|
||||
530 IF D1=3 THEN 570
|
||||
540 D5=INT(100*RND(1)+1)
|
||||
550 IF D5<51 THEN 570
|
||||
560 PRINT "AND IT'S BLOCKED (LUCKY BLOCK!)"
|
||||
565 GOTO 300
|
||||
570 PRINT "AND HE CONNECTS!"
|
||||
580 X=X+4
|
||||
590 GOTO 300
|
||||
600 J7=INT(4*RND(1)+1)
|
||||
601 IF J7 =B1 THEN 605
|
||||
602 GOTO 610
|
||||
605 Y=Y+2
|
||||
610 IF J7=1 THEN 720
|
||||
620 IF J7=2 THEN 810
|
||||
630 IF J7 =3 THEN 860
|
||||
640 PRINT J$;" JABS AND ";
|
||||
645 IF D=4 THEN 700
|
||||
650 Z4=INT(7*RND(1)+1)
|
||||
655 IF Z4>4 THEN 690
|
||||
660 PRINT "IT'S BLOCKED!"
|
||||
670 GOTO 300
|
||||
690 PRINT " BLOOD SPILLS !!!"
|
||||
700 Y=Y+5
|
||||
710 GOTO 300
|
||||
720 PRINT J$" TAKES A FULL SWING AND";
|
||||
730 IF D=1 THEN 770
|
||||
740 R6=INT(60*RND(1)+1)
|
||||
745 IF R6 <30 THEN 770
|
||||
750 PRINT " IT'S BLOCKED!"
|
||||
760 GOTO 300
|
||||
770 PRINT " POW!!!!! HE HITS HIM RIGHT IN THE FACE!"
|
||||
780 IF Y>35 THEN 1010
|
||||
790 Y=Y+15
|
||||
800 GOTO 300
|
||||
810 PRINT J$;" GETS ";L$;" IN THE JAW (OUCH!)"
|
||||
820 Y=Y+7
|
||||
830 PRINT "....AND AGAIN!"
|
||||
835 Y=Y+5
|
||||
840 IF Y>35 THEN 1010
|
||||
850 PRINT
|
||||
860 PRINT L$;" IS ATTACKED BY AN UPPERCUT (OH,OH)..."
|
||||
865 IF D=3 THEN 890
|
||||
870 Q4=INT(200*RND(1)+1)
|
||||
880 IF Q4>75 THEN 920
|
||||
890 PRINT "AND ";J$;" CONNECTS..."
|
||||
900 Y=Y+8
|
||||
910 GOTO 300
|
||||
920 PRINT " BLOCKS AND HITS ";J$;" WITH A HOOK."
|
||||
930 X=X+5
|
||||
940 GOTO 300
|
||||
950 NEXT R1
|
||||
951 IF X>Y THEN 955
|
||||
952 PRINT:PRINT J$" WINS ROUND" R
|
||||
953 J=J+1
|
||||
954 GOTO 960
|
||||
955 PRINT:PRINT L$" WINS ROUND"R
|
||||
956 L=L+1
|
||||
960 NEXT R
|
||||
961 IF J>= 2 THEN 1040
|
||||
962 IF L>=2 THEN 1060
|
||||
980 PRINT J$ " IS KNOCKED COLD AND " L$" IS THE WINNER AND CHAMP!";
|
||||
1000 GOTO 1080
|
||||
1010 PRINT L$ " IS KNOCKED COLD AND " J$" IS THE WINNER AND CHAMP!";
|
||||
1030 GOTO 1000
|
||||
1040 PRINT J$ " WINS (NICE GOING," J$;")."
|
||||
1050 GOTO 1000
|
||||
1060 PRINT L$ " AMAZINGLY WINS!!"
|
||||
1070 GOTO 1000
|
||||
1080 PRINT
|
||||
1085 PRINT
|
||||
1090 PRINT "AND NOW GOODBYE FROM THE OLYMPIC ARENA."
|
||||
1100 PRINT
|
||||
1110 END
|
||||
9
00_Alternate_Languages/16_Bug/README.md
Normal file
9
00_Alternate_Languages/16_Bug/README.md
Normal file
@@ -0,0 +1,9 @@
|
||||
Please refer to the `readme.md` in the parent folder.
|
||||
|
||||
Each subfolder represents a port of this program to a language which is _not_ one of the agreed upon 10 languages, which are intended to meet these three criteria:
|
||||
|
||||
1. Popular (by TIOBE index)
|
||||
2. Memory safe
|
||||
3. Generally considered a 'scripting' language
|
||||
|
||||
We welcome additional ports, but these additional ports are for educational purposes only.
|
||||
256
00_Alternate_Languages/16_Bug/bug.bas
Normal file
256
00_Alternate_Languages/16_Bug/bug.bas
Normal file
@@ -0,0 +1,256 @@
|
||||
10 PRINT TAB(34);"BUG"
|
||||
20 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY"
|
||||
30 PRINT:PRINT:PRINT
|
||||
40 REM
|
||||
50 A=0: B=0: H=0: L=0: N=0: P=0: Q=0: R=0: S=0: T=0: U=0: V=0: Y=0
|
||||
60 PRINT "THE GAME BUG"
|
||||
70 PRINT "I HOPE YOU ENJOY THIS GAME."
|
||||
80 PRINT
|
||||
90 PRINT "DO YOU WANT INSTRUCTIONS";
|
||||
100 INPUT Z$
|
||||
110 IF Z$="NO" THEN 300
|
||||
120 PRINT "THE OBJECT OF BUG IS TO FINISH YOUR BUG BEFORE I FINISH"
|
||||
130 PRINT "MINE. EACH NUMBER STANDS FOR A PART OF THE BUG BODY."
|
||||
140 PRINT "I WILL ROLL THE DIE FOR YOU, TELL YOU WHAT I ROLLED FOR YOU"
|
||||
150 PRINT "WHAT THE NUMBER STANDS FOR, AND IF YOU CAN GET THE PART."
|
||||
160 PRINT "IF YOU CAN GET THE PART I WILL GIVE IT TO YOU."
|
||||
170 PRINT "THE SAME WILL HAPPEN ON MY TURN."
|
||||
180 PRINT "IF THERE IS A CHANGE IN EITHER BUG I WILL GIVE YOU THE"
|
||||
190 PRINT "OPTION OF SEEING THE PICTURES OF THE BUGS."
|
||||
200 PRINT "THE NUMBERS STAND FOR PARTS AS FOLLOWS:"
|
||||
210 PRINT "NUMBER","PART","NUMBER OF PART NEEDED"
|
||||
220 PRINT "1","BODY","1"
|
||||
230 PRINT "2","NECK","1"
|
||||
240 PRINT "3","HEAD","1"
|
||||
250 PRINT "4","FEELERS","2"
|
||||
260 PRINT "5","TAIL","1"
|
||||
270 PRINT "6","LEGS","6"
|
||||
280 PRINT
|
||||
290 PRINT
|
||||
300 IF Y>0 THEN 2480
|
||||
310 Z=INT(6*RND(1)+1)
|
||||
320 C=1
|
||||
330 PRINT "YOU ROLLED A";Z
|
||||
340 ON Z GOTO 350,430,540,650,760,870
|
||||
350 PRINT "1=BODY"
|
||||
360 IF B=1 THEN 410
|
||||
370 PRINT "YOU NOW HAVE A BODY."
|
||||
380 B=1
|
||||
390 C=0
|
||||
400 GOTO 970
|
||||
410 PRINT "YOU DO NOT NEED A BODY."
|
||||
420 GOTO 970
|
||||
430 PRINT "2=NECK"
|
||||
440 IF N=1 THEN 500
|
||||
450 IF B=0 THEN 520
|
||||
460 PRINT "YOU NOW HAVE A NECK."
|
||||
470 N=1
|
||||
480 C=0
|
||||
490 GOTO 970
|
||||
500 PRINT "YOU DO NOT NEED A NECK."
|
||||
510 GOTO 970
|
||||
520 PRINT "YOU DO NOT HAVE A BODY."
|
||||
530 GOTO 970
|
||||
540 PRINT "3=HEAD"
|
||||
550 IF N=0 THEN 610
|
||||
560 IF H=1 THEN 630
|
||||
570 PRINT "YOU NEEDED A HEAD."
|
||||
580 H=1
|
||||
590 C=0
|
||||
600 GOTO 970
|
||||
610 PRINT "YOU DO NOT HAVE A NECK."
|
||||
620 GOTO 970
|
||||
630 PRINT "YOU HAVE A HEAD."
|
||||
640 GOTO 970
|
||||
650 PRINT "4=FEELERS"
|
||||
660 IF H=0 THEN 740
|
||||
670 IF A=2 THEN 720
|
||||
680 PRINT "I NOW GIVE YOU A FEELER."
|
||||
690 A=A+1
|
||||
700 C=0
|
||||
710 GOTO 970
|
||||
720 PRINT "YOU HAVE TWO FEELERS ALREADY."
|
||||
730 GOTO 970
|
||||
740 PRINT "YOU DO NOT HAVE A HEAD."
|
||||
750 GOTO 970
|
||||
760 PRINT "5=TAIL"
|
||||
770 IF B=0 THEN 830
|
||||
780 IF T=1 THEN 850
|
||||
790 PRINT "I NOW GIVE YOU A TAIL."
|
||||
800 T=T+1
|
||||
810 C=0
|
||||
820 GOTO 970
|
||||
830 PRINT "YOU DO NOT HAVE A BODY."
|
||||
840 GOTO 970
|
||||
850 PRINT "YOU ALREADY HAVE A TAIL."
|
||||
860 GOTO 970
|
||||
870 PRINT "6=LEG"
|
||||
880 IF L=6 THEN 940
|
||||
890 IF B=0 THEN 960
|
||||
900 L=L+1
|
||||
910 C=0
|
||||
920 PRINT "YOU NOW HAVE";L;"LEGS."
|
||||
930 GOTO 970
|
||||
940 PRINT "YOU HAVE 6 FEET ALREADY."
|
||||
950 GOTO 970
|
||||
960 PRINT "YOU DO NOT HAVE A BODY."
|
||||
970 X=INT(6*RND(1)+1)
|
||||
971 PRINT
|
||||
975 FOR DELAY=1 TO 2000:NEXT DELAY
|
||||
980 PRINT "I ROLLED A";X
|
||||
990 ON X GOTO 1000,1080,1190,1300,1410,1520
|
||||
1000 PRINT "1=BODY"
|
||||
1010 IF P=1 THEN 1060
|
||||
1020 PRINT "I NOW HAVE A BODY."
|
||||
1030 C=0
|
||||
1040 P=1
|
||||
1050 GOTO 1630
|
||||
1060 PRINT "I DO NOT NEED A BODY."
|
||||
1070 GOTO 1630
|
||||
1080 PRINT "2=NECK"
|
||||
1090 IF Q=1 THEN 1150
|
||||
1100 IF P=0 THEN 1170
|
||||
1110 PRINT "I NOW HAVE A NECK."
|
||||
1120 Q=1
|
||||
1130 C=0
|
||||
1140 GOTO 1630
|
||||
1150 PRINT "I DO NOT NEED A NECK."
|
||||
1160 GOTO 1630
|
||||
1170 PRINT "I DO NOT HAVE A BODY."
|
||||
1180 GOTO 1630
|
||||
1190 PRINT "3=HEAD"
|
||||
1200 IF Q=0 THEN 1260
|
||||
1210 IF R=1 THEN 1280
|
||||
1220 PRINT "I NEEDED A HEAD."
|
||||
1230 R=1
|
||||
1240 C=0
|
||||
1250 GOTO 1630
|
||||
1260 PRINT "I DO NOT HAVE A NECK."
|
||||
1270 GOTO 1630
|
||||
1280 PRINT "I DO NOT NEED A HEAD."
|
||||
1290 GOTO 1630
|
||||
1300 PRINT "4=FEELERS"
|
||||
1310 IF R=0 THEN 1390
|
||||
1320 IF S=2 THEN 1370
|
||||
1330 PRINT "I GET A FEELER."
|
||||
1340 S=S+1
|
||||
1350 C=0
|
||||
1360 GOTO 1630
|
||||
1370 PRINT "I HAVE 2 FEELERS ALREADY."
|
||||
1380 GOTO 1630
|
||||
1390 PRINT "I DO NOT HAVE A HEAD."
|
||||
1400 GOTO 1630
|
||||
1410 PRINT "5=TAIL"
|
||||
1420 IF P=0 THEN 1480
|
||||
1430 IF U=1 THEN 1500
|
||||
1440 PRINT "I NOW HAVE A TAIL."
|
||||
1450 U=1
|
||||
1460 C=0
|
||||
1470 GOTO 1630
|
||||
1480 PRINT "I DO NOT HAVE A BODY."
|
||||
1490 GOTO 1630
|
||||
1500 PRINT "I DO NOT NEED A TAIL."
|
||||
1510 GOTO 1630
|
||||
1520 PRINT "6=LEGS"
|
||||
1530 IF V=6 THEN 1590
|
||||
1540 IF P=0 THEN 1610
|
||||
1550 V=V+1
|
||||
1560 C=0
|
||||
1570 PRINT "I NOW HAVE";V;"LEGS."
|
||||
1580 GOTO 1630
|
||||
1590 PRINT,"I HAVE 6 FEET."
|
||||
1600 GOTO 1630
|
||||
1610 PRINT "I DO NOT HAVE A BODY."
|
||||
1620 GOTO 1630
|
||||
1630 IF A=2 AND T=1 AND L=6 THEN 1650
|
||||
1640 GOTO 1670
|
||||
1650 PRINT "YOUR BUG IS FINISHED."
|
||||
1660 Y=Y+1
|
||||
1670 IF S=2 AND P=1 AND V=6 THEN 1690
|
||||
1680 GOTO 1710
|
||||
1690 PRINT "MY BUG IS FINISHED."
|
||||
1700 Y=Y+2
|
||||
1710 IF C=1 THEN 300
|
||||
1720 PRINT "DO YOU WANT THE PICTURES";
|
||||
1730 INPUT Z$
|
||||
1740 IF Z$="NO" THEN 300
|
||||
1750 PRINT "*****YOUR BUG*****"
|
||||
1760 PRINT
|
||||
1770 PRINT
|
||||
1780 IF A=0 THEN 1860
|
||||
1790 FOR Z=1 TO 4
|
||||
1800 FOR X=1 TO A
|
||||
1810 PRINT TAB(10);
|
||||
1820 PRINT "A ";
|
||||
1830 NEXT X
|
||||
1840 PRINT
|
||||
1850 NEXT Z
|
||||
1860 IF H=0 THEN 1880
|
||||
1870 GOSUB 2470
|
||||
1880 IF N=0 THEN 1920
|
||||
1890 FOR Z=1 TO 2
|
||||
1900 PRINT " N N"
|
||||
1910 NEXT Z
|
||||
1920 IF B=0 THEN 2000
|
||||
1930 PRINT " BBBBBBBBBBBB"
|
||||
1940 FOR Z=1 TO 2
|
||||
1950 PRINT " B B"
|
||||
1960 NEXT Z
|
||||
1970 IF T<>1 THEN 1990
|
||||
1980 PRINT "TTTTTB B"
|
||||
1990 PRINT " BBBBBBBBBBBB"
|
||||
2000 IF L=0 THEN 2080
|
||||
2010 FOR Z=1 TO 2
|
||||
2020 PRINT TAB(5);
|
||||
2030 FOR X=1 TO L
|
||||
2040 PRINT " L";
|
||||
2050 NEXT X
|
||||
2060 PRINT
|
||||
2070 NEXT Z
|
||||
2080 FOR Z=1 TO 4
|
||||
2090 PRINT
|
||||
2100 NEXT Z
|
||||
2110 PRINT "*****MY BUG*****"
|
||||
2120 PRINT
|
||||
2130 PRINT
|
||||
2140 PRINT
|
||||
2150 IF S=0 THEN 2230
|
||||
2160 FOR Z=1 TO 4
|
||||
2170 PRINT TAB(10);
|
||||
2180 FOR X=1 TO S
|
||||
2190 PRINT "F ";
|
||||
2200 NEXT X
|
||||
2210 PRINT
|
||||
2220 NEXT Z
|
||||
2230 IF R<>1 THEN 2250
|
||||
2240 GOSUB 2470
|
||||
2250 IF Q=0 THEN 2280
|
||||
2260 PRINT " N N"
|
||||
2270 PRINT " N N"
|
||||
2280 IF P=0 THEN 2360
|
||||
2290 PRINT " BBBBBBBBBBBB"
|
||||
2300 FOR Z=1 TO 2
|
||||
2310 PRINT " B B"
|
||||
2320 NEXT Z
|
||||
2330 IF U<>1 THEN 2350
|
||||
2340 PRINT "TTTTTB B"
|
||||
2350 PRINT " BBBBBBBBBBBB"
|
||||
2360 IF V=0 THEN 2450
|
||||
2370 FOR Z=1 TO 2
|
||||
2380 PRINT TAB(5);
|
||||
2390 FOR X=1 TO V
|
||||
2400 PRINT " L";
|
||||
2410 NEXT X
|
||||
2420 PRINT
|
||||
2430 NEXT Z
|
||||
2450 IF Y<>0 THEN 2540
|
||||
2460 GOTO 300
|
||||
2470 PRINT " HHHHHHH"
|
||||
2480 PRINT " H H"
|
||||
2490 PRINT " H O O H"
|
||||
2500 PRINT " H H"
|
||||
2510 PRINT " H V H"
|
||||
2520 PRINT " HHHHHHH"
|
||||
2530 RETURN
|
||||
2540 PRINT "I HOPE YOU ENJOYED THE GAME, PLAY IT AGAIN SOON!!"
|
||||
2550 END
|
||||
9
00_Alternate_Languages/17_Bullfight/README.md
Normal file
9
00_Alternate_Languages/17_Bullfight/README.md
Normal file
@@ -0,0 +1,9 @@
|
||||
Please refer to the `readme.md` in the parent folder.
|
||||
|
||||
Each subfolder represents a port of this program to a language which is _not_ one of the agreed upon 10 languages, which are intended to meet these three criteria:
|
||||
|
||||
1. Popular (by TIOBE index)
|
||||
2. Memory safe
|
||||
3. Generally considered a 'scripting' language
|
||||
|
||||
We welcome additional ports, but these additional ports are for educational purposes only.
|
||||
193
00_Alternate_Languages/17_Bullfight/bullfight.bas
Normal file
193
00_Alternate_Languages/17_Bullfight/bullfight.bas
Normal file
@@ -0,0 +1,193 @@
|
||||
10 PRINT TAB(34);"BULL"
|
||||
20 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY"
|
||||
30 DEF FNA(K)=INT(RND(1)*2+1)
|
||||
200 PRINT:PRINT:PRINT
|
||||
202 L=1
|
||||
205 PRINT "DO YOU WANT INSTRUCTIONS";
|
||||
206 INPUT Z$
|
||||
207 IF Z$="NO" THEN 400
|
||||
210 PRINT "HELLO, ALL YOU BLOODLOVERS AND AFICIONADOS."
|
||||
220 PRINT "HERE IS YOUR BIG CHANCE TO KILL A BULL."
|
||||
230 PRINT
|
||||
240 PRINT "ON EACH PASS OF THE BULL, YOU MAY TRY"
|
||||
250 PRINT "0 - VERONICA (DANGEROUS INSIDE MOVE OF THE CAPE)"
|
||||
260 PRINT "1 - LESS DANGEROUS OUTSIDE MOVE OF THE CAPE"
|
||||
270 PRINT "2 - ORDINARY SWIRL OF THE CAPE."
|
||||
280 PRINT
|
||||
290 PRINT "INSTEAD OF THE ABOVE, YOU MAY TRY TO KILL THE BULL"
|
||||
300 PRINT "ON ANY TURN: 4 (OVER THE HORNS), 5 (IN THE CHEST)."
|
||||
310 PRINT "BUT IF I WERE YOU,"
|
||||
320 PRINT "I WOULDN'T TRY IT BEFORE THE SEVENTH PASS."
|
||||
330 PRINT
|
||||
340 PRINT "THE CROWD WILL DETERMINE WHAT AWARD YOU DESERVE"
|
||||
350 PRINT "(POSTHUMOUSLY IF NECESSARY)."
|
||||
360 PRINT "THE BRAVER YOU ARE, THE BETTER THE AWARD YOU RECEIVE."
|
||||
370 PRINT
|
||||
380 PRINT "THE BETTER THE JOB THE PICADORES AND TOREADORES DO,"
|
||||
390 PRINT "THE BETTER YOUR CHANCES ARE."
|
||||
400 PRINT
|
||||
410 PRINT
|
||||
420 D(5)=1
|
||||
430 D(4)=1
|
||||
450 DIM L$(5)
|
||||
455 A=INT(RND(1)*5+1)
|
||||
460 FOR I=1 TO 5
|
||||
463 READ L$(I)
|
||||
467 NEXT I
|
||||
470 DATA "SUPERB","GOOD","FAIR","POOR","AWFUL"
|
||||
490 PRINT "YOU HAVE DRAWN A ";L$(A);" BULL."
|
||||
500 IF A>4 THEN 530
|
||||
510 IF A<2 THEN 550
|
||||
520 GOTO 570
|
||||
530 PRINT "YOU'RE LUCKY."
|
||||
540 GOTO 570
|
||||
550 PRINT "GOOD LUCK. YOU'LL NEED IT."
|
||||
560 PRINT
|
||||
570 PRINT
|
||||
590 A$="PICADO"
|
||||
595 B$="RES"
|
||||
600 GOSUB 1610
|
||||
610 D(1)=C
|
||||
630 A$="TOREAD"
|
||||
635 B$="ORES"
|
||||
640 GOSUB 1610
|
||||
650 D(2)=C
|
||||
660 PRINT
|
||||
670 PRINT
|
||||
680 IF Z=1 THEN 1310
|
||||
690 D(3)=D(3)+1
|
||||
700 PRINT "PASS NUMBER";D(3)
|
||||
710 IF D(3)<3 THEN 760
|
||||
720 PRINT "HERE COMES THE BULL. TRY FOR A KILL";
|
||||
730 GOSUB 1930
|
||||
735 IF Z1=1 THEN 1130
|
||||
740 PRINT "CAPE MOVE";
|
||||
750 GOTO 800
|
||||
760 PRINT "THE BULL IS CHARGING AT YOU! YOU ARE THE MATADOR--"
|
||||
770 PRINT "DO YOU WANT TO KILL THE BULL";
|
||||
780 GOSUB 1930
|
||||
785 IF Z1=1 THEN 1130
|
||||
790 PRINT "WHAT MOVE DO YOU MAKE WITH THE CAPE";
|
||||
800 INPUT E
|
||||
810 IF E<>INT(ABS(E)) THEN 830
|
||||
820 IF E<3 THEN 850
|
||||
830 PRINT "DON'T PANIC, YOU IDIOT! PUT DOWN A CORRECT NUMBER"
|
||||
840 GOTO 800
|
||||
850 REM
|
||||
860 IF E=0 THEN 920
|
||||
870 IF E=1 THEN 900
|
||||
880 M=.5
|
||||
890 GOTO 930
|
||||
900 M=2
|
||||
910 GOTO 930
|
||||
920 M=3
|
||||
930 L=L+M
|
||||
940 F=(6-A+M/10)*RND(1)/((D(1)+D(2)+D(3)/10)*5)
|
||||
950 IF F<.51 THEN 660
|
||||
960 PRINT "THE BULL HAS GORED YOU!"
|
||||
970 ON FNA(0) GOTO 980,1010
|
||||
980 PRINT "YOU ARE DEAD."
|
||||
990 D(4)=1.5
|
||||
1000 GOTO 1310
|
||||
1010 PRINT "YOU ARE STILL ALIVE.":PRINT
|
||||
1020 PRINT "DO YOU RUN FROM THE RING";
|
||||
1030 GOSUB 1930
|
||||
1035 IF Z1=2 THEN 1070
|
||||
1040 PRINT "COWARD"
|
||||
1050 D(4)=0
|
||||
1060 GOTO 1310
|
||||
1070 PRINT "YOU ARE BRAVE. STUPID, BUT BRAVE."
|
||||
1080 ON FNA(0) GOTO 1090,1110
|
||||
1090 D(4)=2
|
||||
1100 GOTO 660
|
||||
1110 PRINT "YOU ARE GORED AGAIN!"
|
||||
1120 GOTO 970
|
||||
1130 REM
|
||||
1140 Z=1
|
||||
1150 PRINT:PRINT "IT IS THE MOMENT OF TRUTH.":PRINT
|
||||
1155 PRINT "HOW DO YOU TRY TO KILL THE BULL";
|
||||
1160 INPUT H
|
||||
1170 IF H=4 THEN 1230
|
||||
1180 IF H=5 THEN 1230
|
||||
1190 PRINT "YOU PANICKED. THE BULL GORED YOU."
|
||||
1220 GOTO 970
|
||||
1230 K=(6-A)*10*RND(1)/((D(1)+D(2))*5*D(3))
|
||||
1240 IF H=4 THEN 1290
|
||||
1250 IF K>.2 THEN 960
|
||||
1260 PRINT "YOU KILLED THE BULL!"
|
||||
1270 D(5)=2
|
||||
1280 GOTO 1320
|
||||
1290 IF K>.8 THEN 960
|
||||
1300 GOTO 1260
|
||||
1310 PRINT
|
||||
1320 PRINT
|
||||
1330 PRINT
|
||||
1340 IF D(4)<>0 THEN 1390
|
||||
1350 PRINT "THE CROWD BOOS FOR TEN MINUTES. IF YOU EVER DARE TO SHOW"
|
||||
1360 PRINT "YOUR FACE IN A RING AGAIN, THEY SWEAR THEY WILL KILL YOU--"
|
||||
1370 PRINT "UNLESS THE BULL DOES FIRST."
|
||||
1380 GOTO 1580
|
||||
1390 DEF FNC(Q)=FND(Q)*RND(1)
|
||||
1395 DEF FND(Q)=(4.5+L/6-(D(1)+D(2))*2.5+4*D(4)+2*D(5)-D(3)^2/120-A)
|
||||
1400 IF D(4)<>2 THEN 1430
|
||||
1410 PRINT "THE CROWD CHEERS WILDLY!"
|
||||
1420 GOTO 1450
|
||||
1430 IF D(5)<>2 THEN 1450
|
||||
1440 PRINT "THE CROWD CHEERS!":PRINT
|
||||
1450 PRINT "THE CROWD AWARDS YOU"
|
||||
1460 IF FNC(Q)<2.4 THEN 1570
|
||||
1470 IF FNC(Q)<4.9 THEN 1550
|
||||
1480 IF FNC(Q)<7.4 THEN 1520
|
||||
1500 PRINT "OLE! YOU ARE 'MUY HOMBRE'!! OLE! OLE!"
|
||||
1510 GOTO 1580
|
||||
1520 PRINT "BOTH EARS OF THE BULL!"
|
||||
1530 PRINT "OLE!"
|
||||
1540 GOTO 1580
|
||||
1550 PRINT "ONE EAR OF THE BULL."
|
||||
1560 GOTO 1580
|
||||
1570 PRINT "NOTHING AT ALL."
|
||||
1580 PRINT
|
||||
1590 PRINT "ADIOS":PRINT:PRINT:PRINT
|
||||
1600 GOTO 2030
|
||||
1610 B=3/A*RND(1)
|
||||
1620 IF B<.37 THEN 1740
|
||||
1630 IF B<.5 THEN 1720
|
||||
1640 IF B<.63 THEN 1700
|
||||
1650 IF B<.87 THEN 1680
|
||||
1660 C=.1
|
||||
1670 GOTO 1750
|
||||
1680 C=.2
|
||||
1690 GOTO 1750
|
||||
1700 C=.3
|
||||
1710 GOTO 1750
|
||||
1720 C=.4
|
||||
1730 GOTO 1750
|
||||
1740 C=.5
|
||||
1750 T=INT(10*C+.2)
|
||||
1760 PRINT "THE ";A$;B$;" DID A ";L$(T);" JOB."
|
||||
1770 IF 4>T THEN 1900
|
||||
1780 IF 5=T THEN 1870
|
||||
1790 ON FNA(K) GOTO 1830,1850
|
||||
1800 IF A$="TOREAD" THEN 1820
|
||||
1810 PRINT "ONE OF THE HORSES OF THE ";A$;B$;" WAS KILLED."
|
||||
1820 ON FNA(K) GOTO 1830,1850
|
||||
1830 PRINT "ONE OF THE ";A$;B$;" WAS KILLED."
|
||||
1840 GOTO 1900
|
||||
1850 PRINT "NO ";A$;B$;" WERE KILLED."
|
||||
1860 GOTO 1900
|
||||
1870 IF A$="TOREAD" THEN 1890
|
||||
1880 PRINT FNA(K);"OF THE HORSES OF THE ";A$;B$;" KILLED."
|
||||
1890 PRINT FNA(K);"OF THE ";A$;B$;" KILLED."
|
||||
1900 PRINT
|
||||
1910 RETURN
|
||||
1920 REM
|
||||
1930 INPUT A$
|
||||
1940 IF A$="YES" THEN 1990
|
||||
1950 IF A$="NO" THEN 2010
|
||||
1970 PRINT "INCORRECT ANSWER - - PLEASE TYPE 'YES' OR 'NO'."
|
||||
1980 GOTO 1930
|
||||
1990 Z1=1
|
||||
2000 GOTO 2020
|
||||
2010 Z1=2
|
||||
2020 RETURN
|
||||
2030 END
|
||||
9
00_Alternate_Languages/18_Bullseye/README.md
Normal file
9
00_Alternate_Languages/18_Bullseye/README.md
Normal file
@@ -0,0 +1,9 @@
|
||||
Please refer to the `readme.md` in the parent folder.
|
||||
|
||||
Each subfolder represents a port of this program to a language which is _not_ one of the agreed upon 10 languages, which are intended to meet these three criteria:
|
||||
|
||||
1. Popular (by TIOBE index)
|
||||
2. Memory safe
|
||||
3. Generally considered a 'scripting' language
|
||||
|
||||
We welcome additional ports, but these additional ports are for educational purposes only.
|
||||
37
00_Alternate_Languages/18_Bullseye/bullseye.bas
Normal file
37
00_Alternate_Languages/18_Bullseye/bullseye.bas
Normal file
@@ -0,0 +1,37 @@
|
||||
5 PRINT TAB(32);"BULLSEYE"
|
||||
10 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY"
|
||||
20 PRINT:PRINT:PRINT
|
||||
30 PRINT "IN THIS GAME, UP TO 20 PLAYERS THROW DARTS AT A TARGET"
|
||||
40 PRINT "WITH 10, 20, 30, AND 40 POINT ZONES. THE OBJECTIVE IS"
|
||||
50 PRINT "TO GET 200 POINTS.": PRINT
|
||||
60 PRINT "THROW",TAB(20);"DESCRIPTION";TAB(45);"PROBABLE SCORE"
|
||||
70 PRINT" 1";TAB(20);"FAST OVERARM";TAB(45);"BULLSEYE OR COMPLETE MISS"
|
||||
80 PRINT" 2";TAB(20);"CONTROLLED OVERARM";TAB(45);"10, 20 OR 30 POINTS"
|
||||
90 PRINT" 3";TAB(20);"UNDERARM";TAB(45);"ANYTHING":PRINT
|
||||
100 DIM A$(20),S(20),W(10): M=0: R=0: FOR I=1 TO 20: S(I)=0: NEXT I
|
||||
110 INPUT "HOW MANY PLAYERS";N: PRINT
|
||||
120 FOR I=1 TO N
|
||||
130 PRINT "NAME OF PLAYER #";I;:INPUT A$(I)
|
||||
140 NEXT I
|
||||
150 R=R+1: PRINT: PRINT "ROUND";R:PRINT "---------"
|
||||
160 FOR I=1 TO N
|
||||
170 PRINT: PRINT A$(I)"'S THROW";: INPUT T
|
||||
180 IF T<1 OR T>3 THEN PRINT "INPUT 1, 2, OR 3!": GOTO 170
|
||||
190 ON T GOTO 200, 210, 200
|
||||
200 P1=.65: P2=.55: P3=.5: P4=.5: GOTO 230
|
||||
210 P1=.99: P2=.77: P3=.43: P4=.01: GOTO 230
|
||||
220 P1=.95: P2=.75: P3=.45: P4=.05
|
||||
230 U=RND(1)
|
||||
240 IF U>=P1 THEN PRINT "BULLSEYE!! 40 POINTS!":B=40: GOTO 290
|
||||
250 IF U>=P2 THEN PRINT "30-POINT ZONE!":B=30: GOTO 290
|
||||
260 IF U>=P3 THEN PRINT "20-POINT ZONE":B=20: GOTO 290
|
||||
270 IF U>=P4 THEN PRINT "WHEW! 10 POINTS.":B=10: GOTO 290
|
||||
280 PRINT "MISSED THE TARGET! TOO BAD.": B=0
|
||||
290 S(I)=S(I)+B: PRINT "TOTAL SCORE =";S(I): NEXT I
|
||||
300 FOR I=1 TO N
|
||||
310 IF S(I)>=200 THEN M=M+1: W(M)=I
|
||||
320 NEXT I
|
||||
330 IF M=0 THEN 150
|
||||
340 PRINT: PRINT "WE HAVE A WINNER!!": PRINT
|
||||
350 FOR I=1 TO M: PRINT A$(W(I));" SCORED";S(W(I));"POINTS.": NEXT I
|
||||
360 PRINT: PRINT "THANKS FOR THE GAME.": END
|
||||
9
00_Alternate_Languages/19_Bunny/README.md
Normal file
9
00_Alternate_Languages/19_Bunny/README.md
Normal file
@@ -0,0 +1,9 @@
|
||||
Please refer to the `readme.md` in the parent folder.
|
||||
|
||||
Each subfolder represents a port of this program to a language which is _not_ one of the agreed upon 10 languages, which are intended to meet these three criteria:
|
||||
|
||||
1. Popular (by TIOBE index)
|
||||
2. Memory safe
|
||||
3. Generally considered a 'scripting' language
|
||||
|
||||
We welcome additional ports, but these additional ports are for educational purposes only.
|
||||
40
00_Alternate_Languages/19_Bunny/bunny.bas
Normal file
40
00_Alternate_Languages/19_Bunny/bunny.bas
Normal file
@@ -0,0 +1,40 @@
|
||||
10 PRINT TAB(33);"BUNNY"
|
||||
20 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY"
|
||||
30 PRINT: PRINT: PRINT
|
||||
100 REM "BUNNY" FROM AHL'S 'BASIC COMPUTER GAMES'
|
||||
110 REM
|
||||
120 FOR I=0 TO 4: READ B(I): NEXT I
|
||||
130 GOSUB 260
|
||||
140 L=64: REM ASCII LETTER CODE...
|
||||
150 REM
|
||||
160 PRINT
|
||||
170 READ X: IF X<0 THEN 160
|
||||
175 IF X>128 THEN 240
|
||||
180 PRINT TAB(X);: READ Y
|
||||
190 FOR I=X TO Y: J=I-5*INT(I/5)
|
||||
200 PRINT CHR$(L+B(J));
|
||||
210 NEXT I
|
||||
220 GOTO 170
|
||||
230 REM
|
||||
240 GOSUB 260: GOTO 450
|
||||
250 REM
|
||||
260 FOR I=1 TO 6: PRINT CHR$(10);: NEXT I
|
||||
270 RETURN
|
||||
280 REM
|
||||
290 DATA 2,21,14,14,25
|
||||
300 DATA 1,2,-1,0,2,45,50,-1,0,5,43,52,-1,0,7,41,52,-1
|
||||
310 DATA 1,9,37,50,-1,2,11,36,50,-1,3,13,34,49,-1,4,14,32,48,-1
|
||||
320 DATA 5,15,31,47,-1,6,16,30,45,-1,7,17,29,44,-1,8,19,28,43,-1
|
||||
330 DATA 9,20,27,41,-1,10,21,26,40,-1,11,22,25,38,-1,12,22,24,36,-1
|
||||
340 DATA 13,34,-1,14,33,-1,15,31,-1,17,29,-1,18,27,-1
|
||||
350 DATA 19,26,-1,16,28,-1,13,30,-1,11,31,-1,10,32,-1
|
||||
360 DATA 8,33,-1,7,34,-1,6,13,16,34,-1,5,12,16,35,-1
|
||||
370 DATA 4,12,16,35,-1,3,12,15,35,-1,2,35,-1,1,35,-1
|
||||
380 DATA 2,34,-1,3,34,-1,4,33,-1,6,33,-1,10,32,34,34,-1
|
||||
390 DATA 14,17,19,25,28,31,35,35,-1,15,19,23,30,36,36,-1
|
||||
400 DATA 14,18,21,21,24,30,37,37,-1,13,18,23,29,33,38,-1
|
||||
410 DATA 12,29,31,33,-1,11,13,17,17,19,19,22,22,24,31,-1
|
||||
420 DATA 10,11,17,18,22,22,24,24,29,29,-1
|
||||
430 DATA 22,23,26,29,-1,27,29,-1,28,29,-1,4096
|
||||
440 REM
|
||||
450 END
|
||||
9
00_Alternate_Languages/20_Buzzword/README.md
Normal file
9
00_Alternate_Languages/20_Buzzword/README.md
Normal file
@@ -0,0 +1,9 @@
|
||||
Please refer to the `readme.md` in the parent folder.
|
||||
|
||||
Each subfolder represents a port of this program to a language which is _not_ one of the agreed upon 10 languages, which are intended to meet these three criteria:
|
||||
|
||||
1. Popular (by TIOBE index)
|
||||
2. Memory safe
|
||||
3. Generally considered a 'scripting' language
|
||||
|
||||
We welcome additional ports, but these additional ports are for educational purposes only.
|
||||
26
00_Alternate_Languages/20_Buzzword/buzzword.bas
Normal file
26
00_Alternate_Languages/20_Buzzword/buzzword.bas
Normal file
@@ -0,0 +1,26 @@
|
||||
10 PRINT TAB(26);"BUZZWORD GENERATOR"
|
||||
20 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY"
|
||||
30 PRINT:PRINT:PRINT
|
||||
40 PRINT "THIS PROGRAM PRINTS HIGHLY ACCEPTABLE PHRASES IN"
|
||||
50 PRINT "'EDUCATOR-SPEAK' THAT YOU CAN WORK INTO REPORTS"
|
||||
60 PRINT "AND SPEECHES. WHENEVER A QUESTION MARK IS PRINTED,"
|
||||
70 PRINT "TYPE A 'Y' FOR ANOTHER PHRASE OR 'N' TO QUIT."
|
||||
80 PRINT:PRINT:PRINT "HERE'S THE FIRST PHRASE:"
|
||||
90 DIM A$(40)
|
||||
100 FOR I=1 TO 39 : READ A$(I) : NEXT I
|
||||
110 PRINT A$(INT(13*RND(1)+1));" ";
|
||||
120 PRINT A$(INT(13*RND(1)+14));" ";
|
||||
130 PRINT A$(INT(13*RND(1)+27)) : PRINT
|
||||
150 INPUT Y$ : IF Y$="Y" THEN 110
|
||||
160 GOTO 999
|
||||
200 DATA "ABILITY","BASAL","BEHAVIORAL","CHILD-CENTERED"
|
||||
210 DATA "DIFFERENTIATED","DISCOVERY","FLEXIBLE","HETEROGENEOUS"
|
||||
220 DATA "HOMOGENEOUS","MANIPULATIVE","MODULAR","TAVISTOCK"
|
||||
230 DATA "INDIVIDUALIZED","LEARNING","EVALUATIVE","OBJECTIVE"
|
||||
240 DATA "COGNITIVE","ENRICHMENT","SCHEDULING","HUMANISTIC"
|
||||
250 DATA "INTEGRATED","NON-GRADED","TRAINING","VERTICAL AGE"
|
||||
260 DATA "MOTIVATIONAL","CREATIVE","GROUPING","MODIFICATION"
|
||||
270 DATA "ACCOUNTABILITY","PROCESS","CORE CURRICULUM","ALGORITHM"
|
||||
280 DATA "PERFORMANCE","REINFORCEMENT","OPEN CLASSROOM","RESOURCE"
|
||||
290 DATA "STRUCTURE","FACILITY","ENVIRONMENT"
|
||||
999 PRINT "COME BACK WHEN YOU NEED HELP WITH ANOTHER REPORT!":END
|
||||
9
00_Alternate_Languages/21_Calendar/README.md
Normal file
9
00_Alternate_Languages/21_Calendar/README.md
Normal file
@@ -0,0 +1,9 @@
|
||||
Please refer to the `readme.md` in the parent folder.
|
||||
|
||||
Each subfolder represents a port of this program to a language which is _not_ one of the agreed upon 10 languages, which are intended to meet these three criteria:
|
||||
|
||||
1. Popular (by TIOBE index)
|
||||
2. Memory safe
|
||||
3. Generally considered a 'scripting' language
|
||||
|
||||
We welcome additional ports, but these additional ports are for educational purposes only.
|
||||
58
00_Alternate_Languages/21_Calendar/calendar.bas
Normal file
58
00_Alternate_Languages/21_Calendar/calendar.bas
Normal file
@@ -0,0 +1,58 @@
|
||||
10 PRINT TAB(32);"CALENDAR"
|
||||
20 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY"
|
||||
30 PRINT:PRINT:PRINT
|
||||
100 REM VALUES FOR 1979 - SEE NOTES
|
||||
110 DIM M(12)
|
||||
120 FOR I=1 TO 6: PRINT CHR$(10);: NEXT I
|
||||
130 D=-1: REM 1979 STARTS ON MONDAY (0=SUN, -1=MON, -2=TUES...)
|
||||
140 S=0
|
||||
150 REM READ DAYS OF EACH MONTH
|
||||
160 FOR N=0 TO 12: READ M(N): NEXT N
|
||||
170 REM
|
||||
180 FOR N=1 TO 12
|
||||
190 PRINT: PRINT: S=S+M(N-1)
|
||||
200 PRINT "**";S;TAB(7);
|
||||
210 FOR I=1 TO 18: PRINT "*";: NEXT I
|
||||
220 ON N GOTO 230,240,250,260,270,280,290,300,310,320,330,340
|
||||
230 PRINT " JANUARY ";: GOTO 350
|
||||
240 PRINT " FEBRUARY";: GOTO 350
|
||||
250 PRINT " MARCH ";: GOTO 350
|
||||
260 PRINT " APRIL ";: GOTO 350
|
||||
270 PRINT " MAY ";: GOTO 350
|
||||
280 PRINT " JUNE ";: GOTO 350
|
||||
290 PRINT " JULY ";: GOTO 350
|
||||
300 PRINT " AUGUST ";: GOTO 350
|
||||
310 PRINT "SEPTEMBER";: GOTO 350
|
||||
320 PRINT " OCTOBER ";: GOTO 350
|
||||
330 PRINT " NOVEMBER";: GOTO 350
|
||||
340 PRINT " DECEMBER";
|
||||
350 FOR I=1 TO 18: PRINT "*";: NEXT I
|
||||
360 PRINT 365-S;"**";
|
||||
370 REM 366-S; ON LEAP YEARS
|
||||
380 PRINT CHR$(10): PRINT " S M T W";
|
||||
390 PRINT " T F S"
|
||||
400 PRINT
|
||||
410 FOR I=1 TO 59: PRINT "*";: NEXT I
|
||||
420 REM
|
||||
430 FOR W=1 TO 6
|
||||
440 PRINT CHR$(10)
|
||||
450 PRINT TAB(4)
|
||||
460 REM
|
||||
470 FOR G=1 TO 7
|
||||
480 D=D+1
|
||||
490 D2=D-S
|
||||
500 IF D2>M(N) THEN 580
|
||||
510 IF D2>0 THEN PRINT D2;
|
||||
520 PRINT TAB(4+8*G);
|
||||
530 NEXT G
|
||||
540 REM
|
||||
550 IF D2=M(N) THEN 590
|
||||
560 NEXT W
|
||||
570 REM
|
||||
580 D=D-G
|
||||
590 NEXT N
|
||||
600 REM
|
||||
610 FOR I=1 TO 6: PRINT CHR$(10);: NEXT I
|
||||
620 DATA 0,31,28,31,30,31,30,31,31,30,31,30,31
|
||||
630 REM 0,31,29, ..., ON LEAP YEARS
|
||||
640 END
|
||||
9
00_Alternate_Languages/22_Change/README.md
Normal file
9
00_Alternate_Languages/22_Change/README.md
Normal file
@@ -0,0 +1,9 @@
|
||||
Please refer to the `readme.md` in the parent folder.
|
||||
|
||||
Each subfolder represents a port of this program to a language which is _not_ one of the agreed upon 10 languages, which are intended to meet these three criteria:
|
||||
|
||||
1. Popular (by TIOBE index)
|
||||
2. Memory safe
|
||||
3. Generally considered a 'scripting' language
|
||||
|
||||
We welcome additional ports, but these additional ports are for educational purposes only.
|
||||
51
00_Alternate_Languages/22_Change/change.bas
Normal file
51
00_Alternate_Languages/22_Change/change.bas
Normal file
@@ -0,0 +1,51 @@
|
||||
2 PRINT TAB(33);"CHANGE"
|
||||
4 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY"
|
||||
5 PRINT:PRINT:PRINT
|
||||
6 PRINT "I, YOUR FRIENDLY MICROCOMPUTER, WILL DETERMINE"
|
||||
8 PRINT "THE CORRECT CHANGE FOR ITEMS COSTING UP TO $100."
|
||||
9 PRINT:PRINT
|
||||
10 PRINT "COST OF ITEM";:INPUT A:PRINT "AMOUNT OF PAYMENT";:INPUT P
|
||||
20 C=P-A:M=C:IF C<>0 THEN 90
|
||||
25 PRINT "CORRECT AMOUNT, THANK YOU."
|
||||
30 GOTO 400
|
||||
90 IF C>0 THEN 120
|
||||
95 PRINT "SORRY, YOU HAVE SHORT-CHANGED ME $";A-P
|
||||
100 GOTO 10
|
||||
120 PRINT "YOUR CHANGE, $";C
|
||||
130 D=INT(C/10)
|
||||
140 IF D=0 THEN 155
|
||||
150 PRINT D;"TEN DOLLAR BILL(S)"
|
||||
155 C=M-(D*10)
|
||||
160 E=INT(C/5)
|
||||
170 IF E=0 THEN 185
|
||||
180 PRINT E;"FIVE DOLLARS BILL(S)"
|
||||
185 C=M-(D*10+E*5)
|
||||
190 F=INT(C)
|
||||
200 IF F=0 THEN 215
|
||||
210 PRINT F;"ONE DOLLAR BILL(S)"
|
||||
215 C=M-(D*10+E*5+F)
|
||||
220 C=C*100
|
||||
225 N=C
|
||||
230 G=INT(C/50)
|
||||
240 IF G=0 THEN 255
|
||||
250 PRINT G;"ONE HALF DOLLAR(S)"
|
||||
255 C=N-(G*50)
|
||||
260 H=INT(C/25)
|
||||
270 IF H=0 THEN 285
|
||||
280 PRINT H;"QUARTER(S)"
|
||||
285 C=N-(G*50+H*25)
|
||||
290 I=INT(C/10)
|
||||
300 IF I=0 THEN 315
|
||||
310 PRINT I;"DIME(S)"
|
||||
315 C=N-(G*50+H*25+I*10)
|
||||
320 J=INT(C/5)
|
||||
330 IF J=0 THEN 345
|
||||
340 PRINT J;"NICKEL(S)"
|
||||
345 C=N-(G*50+H*25+I*10+J*5)
|
||||
350 K=INT(C+.5)
|
||||
360 IF K=0 THEN 380
|
||||
370 PRINT K;"PENNY(S)"
|
||||
380 PRINT "THANK YOU, COME AGAIN."
|
||||
390 PRINT:PRINT
|
||||
400 GOTO 10
|
||||
410 END
|
||||
9
00_Alternate_Languages/23_Checkers/README.md
Normal file
9
00_Alternate_Languages/23_Checkers/README.md
Normal file
@@ -0,0 +1,9 @@
|
||||
Please refer to the `readme.md` in the parent folder.
|
||||
|
||||
Each subfolder represents a port of this program to a language which is _not_ one of the agreed upon 10 languages, which are intended to meet these three criteria:
|
||||
|
||||
1. Popular (by TIOBE index)
|
||||
2. Memory safe
|
||||
3. Generally considered a 'scripting' language
|
||||
|
||||
We welcome additional ports, but these additional ports are for educational purposes only.
|
||||
315
00_Alternate_Languages/23_Checkers/checkers.annotated.bas
Normal file
315
00_Alternate_Languages/23_Checkers/checkers.annotated.bas
Normal file
@@ -0,0 +1,315 @@
|
||||
# Annotated version of CHECKERS.BAS, modified to improve readability.
|
||||
#
|
||||
# I've made the following changes:
|
||||
#
|
||||
# 1. Added many comments and blank lines.
|
||||
# 2. Separated each statement into its own line.
|
||||
# 3. Indented loops, conditionals and subroutines.
|
||||
# 4. Turned *SOME* conditionals and loops into
|
||||
# structured-BASIC-style if/endif and loop/endloop blocks.
|
||||
# 5. Switched to using '#' to delimit comments.
|
||||
# 6. Subroutines now begin with "Sub_Start"
|
||||
# 7. All non-string text has been converted to lower-case
|
||||
# 8. All line numbers that are not jump destinations have been removed.
|
||||
#
|
||||
# This has helped me make sense of the code. I hope it will also help you.
|
||||
#
|
||||
|
||||
# Print the banner
|
||||
print tab(32);"CHECKERS"
|
||||
print tab(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY"
|
||||
print
|
||||
print
|
||||
print
|
||||
print "THIS IS THE GAME OF CHECKERS. THE COMPUTER IS X,"
|
||||
print "AND YOU ARE O. THE COMPUTER WILL MOVE FIRST."
|
||||
print "SQUARES ARE REFERRED TO BY A COORDINATE SYSTEM."
|
||||
print "(0,0) IS THE LOWER LEFT CORNER"
|
||||
print "(0,7) IS THE UPPER LEFT CORNER"
|
||||
print "(7,0) IS THE LOWER RIGHT CORNER"
|
||||
print "(7,7) IS THE UPPER RIGHT CORNER"
|
||||
print "THE COMPUTER WILL TYPE '+TO' WHEN YOU HAVE ANOTHER"
|
||||
print "JUMP. TYPE TWO NEGATIVE NUMBERS IF YOU CANNOT JUMP."
|
||||
print
|
||||
print
|
||||
print
|
||||
|
||||
# Declare the "globals":
|
||||
|
||||
# The current move: (rating, current x, current y, new x, new y)
|
||||
# 'rating' represents how good the move is; higher is better.
|
||||
dim r(4)
|
||||
r(0)=-99 # Start with minimum score
|
||||
|
||||
# The board. Pieces are represented by numeric values:
|
||||
#
|
||||
# - 0 = empty square
|
||||
# - -1,-2 = X (-1 for regular piece, -2 for king)
|
||||
# - 1,2 = O (1 for regular piece, 2 for king)
|
||||
#
|
||||
# This program's player ("me") plays X.
|
||||
dim s(7,7)
|
||||
|
||||
g=-1 # constant holding -1
|
||||
|
||||
# Initialize the board. Data is 2 length-wise strips repeated.
|
||||
data 1,0,1,0,0,0,-1,0,0,1,0,0,0,-1,0,-1,15
|
||||
for x=0 to 7
|
||||
for y=0 to 7
|
||||
read j
|
||||
if j=15 then 180
|
||||
s(x,y)=j
|
||||
goto 200
|
||||
180 restore
|
||||
read s(x,y)
|
||||
200 next y,x
|
||||
|
||||
230 # Start of game loop. First, my turn.
|
||||
|
||||
# For each square on the board, search for one of my pieces
|
||||
# and if it can make the best move so far, store that move in 'r'
|
||||
for x=0 to 7
|
||||
for y=0 to 7
|
||||
|
||||
# Skip if this is empty or an opponent's piece
|
||||
if s(x,y) > -1 then 350
|
||||
|
||||
# If this is one of my ordinary pieces, analyze possible
|
||||
# forward moves.
|
||||
if s(x,y) = -1 then
|
||||
for a=-1 to 1 step 2
|
||||
b=g
|
||||
gosub 650
|
||||
next a
|
||||
endif
|
||||
|
||||
# If this is one of my kings, analyze possible forward
|
||||
# and backward moves.
|
||||
if s(x,y) = -2 then
|
||||
for a=-1 to 1 step 2
|
||||
for b=-1 to 1 step 2
|
||||
gosub 650
|
||||
next b,a
|
||||
endif
|
||||
|
||||
350 next y,x
|
||||
goto 1140 # Skip the subs
|
||||
|
||||
|
||||
# Analyze a move from (x,y) to (x+a, y+b) and schedule it if it's
|
||||
# the best candidate so far.
|
||||
650 Sub_Start
|
||||
u=x+a
|
||||
v=y+b
|
||||
|
||||
# Done if it's off the board
|
||||
if u<0 or u>7 or v<0 or v>7 then 870
|
||||
|
||||
# Consider the destination if it's empty
|
||||
if s(u,v) = 0 then
|
||||
gosub 910
|
||||
goto 870
|
||||
endif
|
||||
|
||||
# If it's got an opponent's piece, jump it instead
|
||||
if s(u,v) > 0
|
||||
|
||||
# Restore u and v, then return if it's off the board
|
||||
u=u+a
|
||||
v=v+b
|
||||
if u<0 or v<0 or u>7 or v>7 then 870
|
||||
|
||||
# Otherwise, consider u,v
|
||||
if s(u,v)=0 then gosub 910
|
||||
endif
|
||||
870 return
|
||||
|
||||
# Evaluate jumping (x,y) to (u,v).
|
||||
#
|
||||
# Computes a score for the proposed move and if it's higher
|
||||
# than the best-so-far move, uses that instead by storing it
|
||||
# and its score in array 'r'.
|
||||
910 Sub_Start
|
||||
|
||||
# q is the score; it starts at 0
|
||||
|
||||
# +2 if it promotes this piece
|
||||
if v=0 and s(x,y)=-1 then q=q+2
|
||||
|
||||
# +5 if it takes an opponent's piece
|
||||
if abs(y-v)=2 then q=q+5
|
||||
|
||||
# -2 if the piece is moving away from the top boundary
|
||||
if y=7 then q=q-2
|
||||
|
||||
# +1 for putting the piece against a vertical boundary
|
||||
if u=0 or u=7 then q=q+1
|
||||
|
||||
for c=-1 to 1 step 2
|
||||
if u+c < 0 or u+c > 7 or v+g < 0 then 1080
|
||||
|
||||
# +1 for each adjacent friendly piece
|
||||
if s(u+c, v+g) < 0 then
|
||||
q=q+1
|
||||
goto 1080
|
||||
endif
|
||||
|
||||
# Prevent out-of-bounds testing
|
||||
if u-c < 0 or u-c > 7 or v-g > 7 then 1080
|
||||
|
||||
# -2 for each opponent piece that can now take this piece here
|
||||
if s(u+c,v+g) > 0 and(s(u-c,v-g)=0 or(u-c=x and v-g=y))then q=q-2
|
||||
1080 next c
|
||||
|
||||
# Use this move if it's better than the previous best
|
||||
if q>r(0) then
|
||||
r(0)=q
|
||||
r(1)=x
|
||||
r(2)=y
|
||||
r(3)=u
|
||||
r(4)=v
|
||||
endif
|
||||
|
||||
q=0 # reset the score
|
||||
return
|
||||
|
||||
1140 if r(0)=-99 then 1880 # Game is lost if no move could be found.
|
||||
|
||||
# Print the computer's move. (Note: chr$(30) is an ASCII RS
|
||||
# (record separator) code; probably no longer relevant.)
|
||||
print chr$(30)"FROM"r(1);r(2)"TO"r(3);r(4);
|
||||
r(0)=-99
|
||||
|
||||
# Make the computer's move. If the piece finds its way to the
|
||||
# end of the board, crown it.
|
||||
1240 if r(4)=0 then
|
||||
s(r(3),r(4))=-2
|
||||
goto 1420
|
||||
endif
|
||||
s(r(3),r(4))=s(r(1),r(2))
|
||||
s(r(1),r(2))=0
|
||||
|
||||
# If the piece has jumped 2 squares, it means the computer has
|
||||
# taken an opponents' piece.
|
||||
if abs(r(1)-r(3)) == 2 then
|
||||
s((r(1)+r(3))/2,(r(2)+r(4))/2)=0 # Delete the opponent's piece
|
||||
|
||||
# See if we can jump again. Evaluate all possible moves.
|
||||
x=r(3)
|
||||
y=r(4)
|
||||
for a=-2 to 2 step 4
|
||||
if s(x,y)=-1 then
|
||||
b=-2
|
||||
gosub 1370
|
||||
endif
|
||||
if s(x,y)=-2 then
|
||||
for b=-2 to 2 step 4
|
||||
gosub 1370
|
||||
next b
|
||||
endif
|
||||
next a
|
||||
|
||||
# If we've found a move, go back and make that one as well
|
||||
if r(0) <> -99 then
|
||||
print "TO" r(3); r(4);
|
||||
r(0)=-99
|
||||
goto 1240
|
||||
endif
|
||||
|
||||
goto 1420 # Skip the sub
|
||||
|
||||
# If (u,v) is in the bounds, evaluate it as a move using
|
||||
# the sub at 910
|
||||
1370 Sub_Start
|
||||
u=x+a
|
||||
v=y+b
|
||||
if u<0 or u>7 or v<0 or v>7 then 1400
|
||||
if s(u,v)=0 and s(x+a/2,y+b/2)>0 then gosub 910
|
||||
1400 return
|
||||
|
||||
1420 endif
|
||||
|
||||
# Now, print the board
|
||||
print
|
||||
print
|
||||
print
|
||||
for y=7 to 0 step-1
|
||||
for x=0 to 7
|
||||
i=5*x
|
||||
print tab(i);
|
||||
if s(x,y)=0 then print".";
|
||||
if s(x,y)=1 then print"O";
|
||||
if s(x,y)=-1 then print"X";
|
||||
if s(x,y)=-2 then print"X*";
|
||||
if s(x,y)=2 then print"O*";
|
||||
next x
|
||||
print" "
|
||||
print
|
||||
next y
|
||||
print
|
||||
|
||||
# Check if either player is out of pieces. If so, announce the
|
||||
# winner.
|
||||
for l=0 to 7
|
||||
for m=0 to 7
|
||||
if s(l,m)=1 or s(l,m)=2 then z=1
|
||||
if s(l,m)=-1 or s(l,m)=-2 then t=1
|
||||
next m
|
||||
next l
|
||||
if z<>1 then 1885
|
||||
if t<>1 then 1880
|
||||
|
||||
# Prompt the player for their move.
|
||||
z=0
|
||||
t=0
|
||||
1590 input "FROM";e,h
|
||||
x=e
|
||||
y=h
|
||||
if s(x,y)<=0 then 1590
|
||||
1670 input "TO";a,b
|
||||
x=a
|
||||
y=b
|
||||
if s(x,y)=0 and abs(a-e)<=2 and abs(a-e)=abs(b-h)then 1700
|
||||
print chr$(7)chr$(11); # bell, vertical tab; invalid move
|
||||
goto 1670
|
||||
|
||||
1700 i=46 # Not used; probably a bug
|
||||
1750 loop
|
||||
# Make the move and stop unless it might be a jump.
|
||||
s(a,b) = s(e,h)
|
||||
s(e,h) = 0
|
||||
if abs(e-a) <> 2 then break
|
||||
|
||||
# Remove the piece jumped over
|
||||
s((e+a)/2,(h+b)/2) = 0
|
||||
|
||||
# Prompt for another move; -1 means player can't, so I've won.
|
||||
# Keep prompting until there's a valid move or the player gives
|
||||
# up.
|
||||
1802 input "+TO";a1,b1
|
||||
if a1 < 0 then break
|
||||
if s(a1,b1) <> 0 or abs(a1-a) <>2 or abs(b1-b) <> 2 then 1802
|
||||
|
||||
# Update the move variables to correspond to the next jump
|
||||
e=a
|
||||
h=b
|
||||
a=a1
|
||||
b=b1
|
||||
|
||||
i=i+15 # Not used; probably a bug
|
||||
endloop
|
||||
|
||||
# If the player has reached the end of the board, crown this piece
|
||||
1810 if b=7 then s(a,b)=2
|
||||
|
||||
# And play the next turn.
|
||||
goto 230
|
||||
|
||||
# Endgame:
|
||||
1880 print
|
||||
print "YOU WIN."
|
||||
end
|
||||
|
||||
1885 print
|
||||
print "I WIN."
|
||||
end
|
||||
82
00_Alternate_Languages/23_Checkers/checkers.bas
Normal file
82
00_Alternate_Languages/23_Checkers/checkers.bas
Normal file
@@ -0,0 +1,82 @@
|
||||
5 PRINT TAB(32);"CHECKERS"
|
||||
10 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY"
|
||||
15 PRINT:PRINT:PRINT
|
||||
20 PRINT "THIS IS THE GAME OF CHECKERS. THE COMPUTER IS X,"
|
||||
25 PRINT "AND YOU ARE O. THE COMPUTER WILL MOVE FIRST."
|
||||
30 PRINT "SQUARES ARE REFERRED TO BY A COORDINATE SYSTEM."
|
||||
35 PRINT "(0,0) IS THE LOWER LEFT CORNER"
|
||||
40 PRINT "(0,7) IS THE UPPER LEFT CORNER"
|
||||
45 PRINT "(7,0) IS THE LOWER RIGHT CORNER"
|
||||
50 PRINT "(7,7) IS THE UPPER RIGHT CORNER"
|
||||
55 PRINT "THE COMPUTER WILL TYPE '+TO' WHEN YOU HAVE ANOTHER"
|
||||
60 PRINT "JUMP. TYPE TWO NEGATIVE NUMBERS IF YOU CANNOT JUMP."
|
||||
65 PRINT:PRINT:PRINT
|
||||
80 DIM R(4),S(7,7):G=-1:R(0)=-99
|
||||
90 DATA 1,0,1,0,0,0,-1,0,0,1,0,0,0,-1,0,-1,15
|
||||
120 FOR X=0 TO 7:FOR Y=0 TO 7:READ J:IF J=15 THEN 180
|
||||
160 S(X,Y)=J:GOTO 200
|
||||
180 RESTORE:READ S(X,Y)
|
||||
200 NEXT Y,X
|
||||
230 FOR X=0 TO 7:FOR Y=0 TO 7:IF S(X,Y)>-1 THEN 350
|
||||
310 IF S(X,Y)=-1 THEN FOR A=-1 TO 1 STEP 2:B=G:GOSUB 650:NEXT A
|
||||
330 IF S(X,Y)=-2 THEN FOR A=-1 TO 1 STEP 2:FOR B=-1 TO 1 STEP 2:GOSUB 650:NEXT B,A
|
||||
350 NEXT Y,X:GOTO 1140
|
||||
650 U=X+A:V=Y+B:IF U<0 OR U>7 OR V<0 OR V>7 THEN 870
|
||||
740 IF S(U,V)=0 THEN GOSUB 910:GOTO 870
|
||||
770 IF S(U,V)<0 THEN 870
|
||||
790 U=U+A:V=V+B:IF U<0 OR V<0 OR U>7 OR V>7 THEN 870
|
||||
850 IF S(U,V)=0 THEN GOSUB 910
|
||||
870 RETURN
|
||||
910 IF V=0 AND S(X,Y)=-1 THEN Q=Q+2
|
||||
920 IF ABS(Y-V)=2 THEN Q=Q+5
|
||||
960 IF Y=7 THEN Q=Q-2
|
||||
980 IF U=0 OR U=7 THEN Q=Q+1
|
||||
1030 FOR C=-1 TO 1 STEP 2:IF U+C<0 OR U+C>7 OR V+G<0 THEN 1080
|
||||
1035 IF S(U+C,V+G)<0 THEN Q=Q+1:GOTO 1080
|
||||
1040 IF U-C<0 OR U-C>7 OR V-G>7 THEN 1080
|
||||
1045 IF S(U+C,V+G)>0 AND(S(U-C,V-G)=0 OR(U-C=X AND V-G=Y))THEN Q=Q-2
|
||||
1080 NEXT C:IF Q>R(0)THEN R(0)=Q:R(1)=X:R(2)=Y:R(3)=U:R(4)=V
|
||||
1100 Q=0:RETURN
|
||||
1140 IF R(0)=-99 THEN 1880
|
||||
1230 PRINT CHR$(30)"FROM"R(1);R(2)"TO"R(3);R(4);:R(0)=-99
|
||||
1240 IF R(4)=0 THEN S(R(3),R(4))=-2:GOTO 1420
|
||||
1250 S(R(3),R(4))=S(R(1),R(2))
|
||||
1310 S(R(1),R(2))=0:IF ABS(R(1)-R(3))<>2 THEN 1420
|
||||
1330 S((R(1)+R(3))/2,(R(2)+R(4))/2)=0
|
||||
1340 X=R(3):Y=R(4):IF S(X,Y)=-1 THEN B=-2:FOR A=-2 TO 2 STEP 4:GOSUB 1370
|
||||
1350 IF S(X,Y)=-2 THEN FOR A=-2 TO 2 STEP 4:FOR B=-2 TO 2 STEP 4:GOSUB 1370:NEXT B
|
||||
1360 NEXT A:IF R(0)<>-99 THEN PRINT"TO"R(3);R(4);:R(0)=-99:GOTO 1240
|
||||
1365 GOTO 1420
|
||||
1370 U=X+A:V=Y+B:IF U<0 OR U>7 OR V<0 OR V>7 THEN 1400
|
||||
1380 IF S(U,V)=0 AND S(X+A/2,Y+B/2)>0 THEN GOSUB 910
|
||||
1400 RETURN
|
||||
1420 PRINT:PRINT:PRINT:FOR Y=7 TO 0 STEP-1:FOR X=0 TO 7:I=5*X:PRINT TAB(I);
|
||||
1430 IF S(X,Y)=0 THEN PRINT".";
|
||||
1470 IF S(X,Y)=1 THEN PRINT"O";
|
||||
1490 IF S(X,Y)=-1 THEN PRINT"X";
|
||||
1510 IF S(X,Y)=-2 THEN PRINT"X*";
|
||||
1530 IF S(X,Y)=2 THEN PRINT"O*";
|
||||
1550 NEXT X:PRINT" ":PRINT:NEXT Y:PRINT
|
||||
1552 FOR L=0 TO 7
|
||||
1554 FOR M=0 TO 7
|
||||
1556 IF S(L,M)=1 OR S(L,M)=2 THEN Z=1
|
||||
1558 IF S(L,M)=-1 OR S(L,M)=-2 THEN T=1
|
||||
1560 NEXT M
|
||||
1562 NEXT L
|
||||
1564 IF Z<>1 THEN 1885
|
||||
1566 IF T<>1 THEN 1880
|
||||
1570 Z=0: T=0
|
||||
1590 INPUT "FROM";E,H:X=E:Y=H:IF S(X,Y)<=0 THEN 1590
|
||||
1670 INPUT "TO";A,B:X=A:Y=B
|
||||
1680 IF S(X,Y)=0 AND ABS(A-E)<=2 AND ABS(A-E)=ABS(B-H)THEN 1700
|
||||
1690 PRINT CHR$(7)CHR$(11);:GOTO 1670
|
||||
1700 I=46
|
||||
1750 S(A,B)=S(E,H):S(E,H)=0:IF ABS(E-A)<>2 THEN 1810
|
||||
1800 S((E+A)/2,(H+B)/2)=0
|
||||
1802 INPUT "+TO";A1,B1:IF A1<0 THEN 1810
|
||||
1804 IF S(A1,B1)<>0 OR ABS(A1-A)<>2 OR ABS(B1-B)<>2 THEN 1802
|
||||
1806 E=A:H=B:A=A1:B=B1:I=I+15:GOTO 1750
|
||||
1810 IF B=7 THEN S(A,B)=2
|
||||
1830 GOTO 230
|
||||
1880 PRINT: PRINT "YOU WIN.": END
|
||||
1885 PRINT: PRINT "I WIN.": END
|
||||
9
00_Alternate_Languages/24_Chemist/README.md
Normal file
9
00_Alternate_Languages/24_Chemist/README.md
Normal file
@@ -0,0 +1,9 @@
|
||||
Please refer to the `readme.md` in the parent folder.
|
||||
|
||||
Each subfolder represents a port of this program to a language which is _not_ one of the agreed upon 10 languages, which are intended to meet these three criteria:
|
||||
|
||||
1. Popular (by TIOBE index)
|
||||
2. Memory safe
|
||||
3. Generally considered a 'scripting' language
|
||||
|
||||
We welcome additional ports, but these additional ports are for educational purposes only.
|
||||
27
00_Alternate_Languages/24_Chemist/chemist.bas
Normal file
27
00_Alternate_Languages/24_Chemist/chemist.bas
Normal file
@@ -0,0 +1,27 @@
|
||||
3 PRINT TAB(33);"CHEMIST"
|
||||
6 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY"
|
||||
8 PRINT:PRINT:PRINT
|
||||
10 PRINT "THE FICTITIOUS CHEMICAL KRYPTOCYANIC ACID CAN ONLY BE"
|
||||
20 PRINT "DILUTED BY THE RATIO OF 7 PARTS WATER TO 3 PARTS ACID."
|
||||
30 PRINT "IF ANY OTHER RATIO IS ATTEMPTED, THE ACID BECOMES UNSTABLE"
|
||||
40 PRINT "AND SOON EXPLODES. GIVEN THE AMOUNT OF ACID, YOU MUST"
|
||||
50 PRINT "DECIDE WHO MUCH WATER TO ADD FOR DILUTION. IF YOU MISS"
|
||||
60 PRINT "YOU FACE THE CONSEQUENCES."
|
||||
100 A=INT(RND(1)*50)
|
||||
110 W=7*A/3
|
||||
120 PRINT A;"LITERS OF KRYPTOCYANIC ACID. HOW MUCH WATER";
|
||||
130 INPUT R
|
||||
140 D=ABS(W-R)
|
||||
150 IF D>W/20 THEN 200
|
||||
160 PRINT " GOOD JOB! YOU MAY BREATHE NOW, BUT DON'T INHALE THE FUMES!"
|
||||
170 PRINT
|
||||
180 GOTO 100
|
||||
200 PRINT " SIZZLE! YOU HAVE JUST BEEN DESALINATED INTO A BLOB"
|
||||
210 PRINT " OF QUIVERING PROTOPLASM!"
|
||||
220 T=T+1
|
||||
230 IF T=9 THEN 260
|
||||
240 PRINT " HOWEVER, YOU MAY TRY AGAIN WITH ANOTHER LIFE."
|
||||
250 GOTO 100
|
||||
260 PRINT " YOUR 9 LIVES ARE USED, BUT YOU WILL BE LONG REMEMBERED FOR"
|
||||
270 PRINT " YOUR CONTRIBUTIONS TO THE FIELD OF COMIC BOOK CHEMISTRY."
|
||||
280 END
|
||||
9
00_Alternate_Languages/25_Chief/README.md
Normal file
9
00_Alternate_Languages/25_Chief/README.md
Normal file
@@ -0,0 +1,9 @@
|
||||
Please refer to the `readme.md` in the parent folder.
|
||||
|
||||
Each subfolder represents a port of this program to a language which is _not_ one of the agreed upon 10 languages, which are intended to meet these three criteria:
|
||||
|
||||
1. Popular (by TIOBE index)
|
||||
2. Memory safe
|
||||
3. Generally considered a 'scripting' language
|
||||
|
||||
We welcome additional ports, but these additional ports are for educational purposes only.
|
||||
51
00_Alternate_Languages/25_Chief/chief.bas
Normal file
51
00_Alternate_Languages/25_Chief/chief.bas
Normal file
@@ -0,0 +1,51 @@
|
||||
2 PRINT TAB(30) "CHIEF"
|
||||
4 PRINT TAB(15) "CREATIVE COMPUTING MORRISTOWN, NEW JERSEY"
|
||||
6 PRINT:PRINT:PRINT
|
||||
10 PRINT "I AM CHIEF NUMBERS FREEK, THE GREAT INDIAN MATH GOD."
|
||||
20 PRINT "ARE YOU READY TO TAKE THE TEST YOU CALLED ME OUT FOR";
|
||||
30 INPUT A$
|
||||
40 IF A$="YES" THEN 60
|
||||
50 PRINT "SHUT UP, PALE FACE WITH WISE TONGUE."
|
||||
60 PRINT " TAKE A NUMBER AND ADD 3. DIVIDE THIS NUMBER BY 5 AND"
|
||||
70 PRINT "MULTIPLY BY 8. DIVIDE BY 5 AND ADD THE SAME. SUBTRACT 1."
|
||||
80 PRINT " WHAT DO YOU HAVE";
|
||||
90 INPUT B
|
||||
100 LET C = (B+1-5)*5/8*5-3
|
||||
110 PRINT "I BET YOUR NUMBER WAS" C". AM I RIGHT";
|
||||
120 INPUT D$
|
||||
130 IF D$="YES" THEN 500
|
||||
140 PRINT "WHAT WAS YOUR ORIGINAL NUMBER";
|
||||
150 INPUT K
|
||||
155 LET F=K+3
|
||||
160 LET G=F/5
|
||||
170 LET H=G*8
|
||||
180 LET I=H/5+5
|
||||
190 LET J=I-1
|
||||
200 PRINT "SO YOU THINK YOU'RE SO SMART, EH?"
|
||||
210 PRINT "NOW WATCH."
|
||||
230 PRINT K"PLUS 3 EQUALS"F". THIS DIVIDED BY 5 EQUALS"G";"
|
||||
240 PRINT "THIS TIMES 8 EQUALS"H". IF WE DIVIDE BY 5 AND ADD 5,"
|
||||
250 PRINT "WE GET"I", WHICH, MINUS 1, EQUALS"J"."
|
||||
260 PRINT "NOW DO YOU BELIEVE ME";
|
||||
270 INPUT Z$
|
||||
290 IF Z$="YES" THEN 500
|
||||
295 PRINT "YOU HAVE MADE ME MAD!!!"
|
||||
300 PRINT "THERE MUST BE A GREAT LIGHTNING BOLT!"
|
||||
310 PRINT:PRINT
|
||||
330 FOR X=30 TO 22 STEP -1
|
||||
340 PRINT TAB(X) "X X"
|
||||
350 NEXT X
|
||||
360 PRINT TAB(21) "X XXX"
|
||||
370 PRINT TAB(20) "X X"
|
||||
380 PRINT TAB(19) "XX X"
|
||||
390 FOR Y=20 TO 13 STEP -1
|
||||
400 PRINT TAB(Y) "X X"
|
||||
410 NEXT Y
|
||||
420 PRINT TAB(12) "XX"
|
||||
430 PRINT TAB(11) "X"
|
||||
440 PRINT TAB(10) "*"
|
||||
450 PRINT:PRINT"#########################":PRINT
|
||||
470 PRINT "I HOPE YOU BELIEVE ME NOW, FOR YOUR SAKE!!"
|
||||
480 GOTO 520
|
||||
500 PRINT "BYE!!!"
|
||||
520 END
|
||||
9
00_Alternate_Languages/26_Chomp/README.md
Normal file
9
00_Alternate_Languages/26_Chomp/README.md
Normal file
@@ -0,0 +1,9 @@
|
||||
Please refer to the `readme.md` in the parent folder.
|
||||
|
||||
Each subfolder represents a port of this program to a language which is _not_ one of the agreed upon 10 languages, which are intended to meet these three criteria:
|
||||
|
||||
1. Popular (by TIOBE index)
|
||||
2. Memory safe
|
||||
3. Generally considered a 'scripting' language
|
||||
|
||||
We welcome additional ports, but these additional ports are for educational purposes only.
|
||||
104
00_Alternate_Languages/26_Chomp/chomp.bas
Normal file
104
00_Alternate_Languages/26_Chomp/chomp.bas
Normal file
@@ -0,0 +1,104 @@
|
||||
10 PRINT TAB(33);"CHOMP"
|
||||
20 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY"
|
||||
30 PRINT:PRINT:PRINT
|
||||
40 DIM A(10,10)
|
||||
100 REM *** THE GAME OF CHOMP *** COPYRIGHT PCC 1973 ***
|
||||
110 PRINT
|
||||
120 PRINT "THIS IS THE GAME OF CHOMP (SCIENTIFIC AMERICAN, JAN 1973)"
|
||||
130 PRINT "DO YOU WANT THE RULES (1=YES, 0=NO!)";
|
||||
140 INPUT R
|
||||
150 IF R=0 THEN 340
|
||||
160 F=1
|
||||
170 R=5
|
||||
180 C=7
|
||||
190 PRINT "CHOMP IS FOR 1 OR MORE PLAYERS (HUMANS ONLY)."
|
||||
200 PRINT
|
||||
210 PRINT "HERE'S HOW A BOARD LOOKS (THIS ONE IS 5 BY 7):"
|
||||
220 GOSUB 540
|
||||
230 PRINT
|
||||
240 PRINT "THE BOARD IS A BIG COOKIE - R ROWS HIGH AND C COLUMNS"
|
||||
250 PRINT "WIDE. YOU INPUT R AND C AT THE START. IN THE UPPER LEFT"
|
||||
260 PRINT "CORNER OF THE COOKIE IS A POISON SQUARE (P). THE ONE WHO"
|
||||
270 PRINT "CHOMPS THE POISON SQUARE LOSES. TO TAKE A CHOMP, TYPE THE"
|
||||
280 PRINT "ROW AND COLUMN OF ONE OF THE SQUARES ON THE COOKIE."
|
||||
290 PRINT "ALL OF THE SQUARES BELOW AND TO THE RIGHT OF THAT SQUARE"
|
||||
300 PRINT "(INCLUDING THAT SQUARE, TOO) DISAPPEAR -- CHOMP!!"
|
||||
310 PRINT "NO FAIR CHOMPING SQUARES THAT HAVE ALREADY BEEN CHOMPED,"
|
||||
320 PRINT "OR THAT ARE OUTSIDE THE ORIGINAL DIMENSIONS OF THE COOKIE."
|
||||
330 PRINT
|
||||
340 PRINT "HERE WE GO..."
|
||||
350 REM
|
||||
360 F=0
|
||||
370 FOR I=1 TO 10
|
||||
372 FOR J=1 TO 10
|
||||
375 A(I,J)=0
|
||||
377 NEXT J
|
||||
379 NEXT I
|
||||
380 PRINT
|
||||
390 PRINT "HOW MANY PLAYERS";
|
||||
400 INPUT P
|
||||
410 I1=0
|
||||
420 PRINT "HOW MANY ROWS";
|
||||
430 INPUT R
|
||||
440 IF R <= 9 THEN 470
|
||||
450 PRINT "TOO MANY ROWS (9 IS MAXIMUM). NOW, ";
|
||||
460 GOTO 420
|
||||
470 PRINT "HOW MANY COLUMNS";
|
||||
480 INPUT C
|
||||
490 IF C <= 9 THEN 530
|
||||
500 PRINT "TOO MANY COLUMNS (9 IS MAXIMUM). NOW, ";
|
||||
510 GOTO 470
|
||||
530 PRINT
|
||||
540 FOR I=1 TO R
|
||||
550 FOR J=1 TO C
|
||||
560 A(I,J)=1
|
||||
570 NEXT J
|
||||
580 NEXT I
|
||||
590 A(1,1)=-1
|
||||
600 REM PRINT THE BOARD
|
||||
610 PRINT
|
||||
620 PRINT TAB(7);"1 2 3 4 5 6 7 8 9"
|
||||
630 FOR I=1 TO R
|
||||
640 PRINT I;TAB(7);
|
||||
650 FOR J=1 TO C
|
||||
660 IF A(I,J)=-1 THEN 700
|
||||
670 IF A(I,J)=0 THEN 720
|
||||
680 PRINT "* ";
|
||||
690 GOTO 710
|
||||
700 PRINT "P ";
|
||||
710 NEXT J
|
||||
720 PRINT
|
||||
730 NEXT I
|
||||
740 PRINT
|
||||
750 IF F=0 THEN 770
|
||||
760 RETURN
|
||||
770 REM GET CHOMPS FOR EACH PLAYER IN TURN
|
||||
780 LET I1=I1+1
|
||||
790 LET P1=I1-INT(I1/P)*P
|
||||
800 IF P1 <> 0 THEN 820
|
||||
810 P1=P
|
||||
820 PRINT "PLAYER";P1
|
||||
830 PRINT "COORDINATES OF CHOMP (ROW,COLUMN)";
|
||||
840 INPUT R1,C1
|
||||
850 IF R1<1 THEN 920
|
||||
860 IF R1>R THEN 920
|
||||
870 IF C1<1 THEN 920
|
||||
880 IF C1>C THEN 920
|
||||
890 IF A(R1,C1)=0 THEN 920
|
||||
900 IF A(R1,C1)=-1 THEN 1010
|
||||
910 GOTO 940
|
||||
920 PRINT "NO FAIR. YOU'RE TRYING TO CHOMP ON EMPTY SPACE!"
|
||||
930 GOTO 820
|
||||
940 FOR I=R1 TO R
|
||||
950 FOR J=C1 TO C
|
||||
960 A(I,J)=0
|
||||
970 NEXT J
|
||||
980 NEXT I
|
||||
990 GOTO 610
|
||||
1000 REM END OF GAME DETECTED IN LINE 900
|
||||
1010 PRINT "YOU LOSE, PLAYER";P1
|
||||
1020 PRINT
|
||||
1030 PRINT "AGAIN (1=YES, 0=NO!)";
|
||||
1040 INPUT R
|
||||
1050 IF R=1 THEN 340
|
||||
1060 END
|
||||
9
00_Alternate_Languages/27_Civil_War/README.md
Normal file
9
00_Alternate_Languages/27_Civil_War/README.md
Normal file
@@ -0,0 +1,9 @@
|
||||
Please refer to the `readme.md` in the parent folder.
|
||||
|
||||
Each subfolder represents a port of this program to a language which is _not_ one of the agreed upon 10 languages, which are intended to meet these three criteria:
|
||||
|
||||
1. Popular (by TIOBE index)
|
||||
2. Memory safe
|
||||
3. Generally considered a 'scripting' language
|
||||
|
||||
We welcome additional ports, but these additional ports are for educational purposes only.
|
||||
395
00_Alternate_Languages/27_Civil_War/civilwar.bas
Normal file
395
00_Alternate_Languages/27_Civil_War/civilwar.bas
Normal file
@@ -0,0 +1,395 @@
|
||||
2 PRINT TAB(26) "CIVIL WAR"
|
||||
4 PRINT TAB(15) "CREATIVE COMPUTING MORRISTOWN, NEW JERSEY"
|
||||
6 PRINT : PRINT : PRINT
|
||||
20 REM ORIGINAL GAME DESIGN: CRAM, GOODIE, HIBBARD LEXINGTON H.S.
|
||||
30 REM MODIFICATIONS: G. PAUL, R. HESS (TIES), 1973
|
||||
50 DIM S(4),C$(14),M1(14),M2(14),C1(14),C2(14),M(14)
|
||||
60 REM UNION INFO ON LIKELY CONFEDERATE STRATEGY
|
||||
70 S(1)=25 : S(2)=25 : S(3)=25 : S(4)=25
|
||||
82 REM READ HISTORICAL DATA.
|
||||
84 FOR D=1 TO 14
|
||||
86 READ C$(D),M1(D),M2(D),C1(D),C2(D),M(D)
|
||||
88 NEXT D
|
||||
89 LET D=RND(-1)
|
||||
90 PRINT
|
||||
100 PRINT "DO YOU WANT INSTRUCTIONS";
|
||||
110 INPUT X$
|
||||
120 IF X$="YES" THEN 160
|
||||
130 IF X$="NO" THEN 370
|
||||
140 PRINT "YES OR NO -- ";
|
||||
150 GOTO 110
|
||||
160 PRINT : PRINT : PRINT : PRINT
|
||||
170 PRINT "THIS IS A CIVIL WAR SIMULATION."
|
||||
180 PRINT "TO PLAY TYPE A RESPONSE WHEN THE COMPUTER ASKS."
|
||||
190 PRINT "REMEMBER THAT ALL FACTORS ARE INTERRELATED AND THAT YOUR"
|
||||
200 PRINT "RESPONSES COULD CHANGE HISTORY. FACTS AND FIGURES USED ARE"
|
||||
210 PRINT "BASED ON THE ACTUAL OCCURRENCE. MOST BATTLES TEND TO RESULT"
|
||||
220 PRINT "AS THEY DID IN THE CIVIL WAR, BUT IT ALL DEPENDS ON YOU!!"
|
||||
230 PRINT
|
||||
240 PRINT "THE OBJECT OF THE GAME IS TO WIN AS MANY BATTLES AS ";
|
||||
245 PRINT "POSSIBLE."
|
||||
250 PRINT
|
||||
260 PRINT "YOUR CHOICES FOR DEFENSIVE STRATEGY ARE:"
|
||||
270 PRINT " (1) ARTILLERY ATTACK"
|
||||
280 PRINT " (2) FORTIFICATION AGAINST FRONTAL ATTACK"
|
||||
290 PRINT " (3) FORTIFICATION AGAINST FLANKING MANEUVERS"
|
||||
300 PRINT " (4) FALLING BACK"
|
||||
310 PRINT " YOUR CHOICES FOR OFFENSIVE STRATEGY ARE:"
|
||||
320 PRINT " (1) ARTILLERY ATTACK"
|
||||
330 PRINT " (2) FRONTAL ATTACK"
|
||||
340 PRINT " (3) FLANKING MANEUVERS"
|
||||
350 PRINT " (4) ENCIRCLEMENT"
|
||||
360 PRINT "YOU MAY SURRENDER BY TYPING A '5' FOR YOUR STRATEGY."
|
||||
370 PRINT : PRINT : PRINT : PRINT "ARE THERE TWO GENERALS PRESENT ";
|
||||
380 PRINT "(ANSWER YES OR NO)";
|
||||
390 INPUT B$
|
||||
400 IF B$="YES" THEN 430
|
||||
410 IF B$ <> "NO" THEN 380
|
||||
420 PRINT : PRINT "YOU ARE THE CONFEDERACY. GOOD LUCK!"
|
||||
425 PRINT
|
||||
430 LET D=1
|
||||
440 IF B$ <> "YES" THEN 460
|
||||
450 LET D=2
|
||||
460 PRINT "SELECT A BATTLE BY TYPING A NUMBER FROM 1 TO 14 ON"
|
||||
470 PRINT "REQUEST. TYPE ANY OTHER NUMBER TO END THE SIMULATION."
|
||||
480 PRINT "BUT '0' BRINGS BACK EXACT PREVIOUS BATTLE SITUATION"
|
||||
490 PRINT "ALLOWING YOU TO REPLAY IT"
|
||||
500 PRINT
|
||||
510 PRINT "NOTE: A NEGATIVE FOOD$ ENTRY CAUSES THE PROGRAM TO "
|
||||
520 PRINT "USE THE ENTRIES FROM THE PREVIOUS BATTLE"
|
||||
530 PRINT
|
||||
540 PRINT "AFTER REQUESTING A BATTLE, DO YOU WISH ";
|
||||
550 PRINT "BATTLE DESCRIPTIONS ";
|
||||
560 PRINT "(ANSWER YES OR NO)";
|
||||
570 INPUT X$
|
||||
580 IF X$="YES" THEN 600
|
||||
590 IF X$ <> "NO" THEN 560
|
||||
600 L=0:W=0:R1=0:Q1=0:M3=0:M4=0:P1=0:P2=0:T1=0:T2=0
|
||||
610 F(2)=0:H(2)=0:B(2)=0:R2=0:Q2=0:C6=0:F=0:W0=0:Y=0:Y2=0:U=0:U2=0
|
||||
620 PRINT : PRINT : PRINT
|
||||
630 PRINT "WHICH BATTLE DO YOU WISH TO SIMULATE";
|
||||
640 INPUT A
|
||||
650 IF A <> 0 THEN 660
|
||||
655 IF R <> 0 THEN 1140
|
||||
660 IF A <=0 THEN 2860
|
||||
665 IF A >= 15 THEN 2860
|
||||
670 LET C$=C$(A)
|
||||
680 LET M1=M1(A)
|
||||
690 LET M2=M2(A)
|
||||
700 LET C1=C1(A)
|
||||
710 LET C2=C2(A)
|
||||
720 LET M=M(A)
|
||||
960 LET U=0
|
||||
970 REM INFLATION CALC
|
||||
980 LET I1=10+(L-W)*2
|
||||
990 LET I2=10+(W-L)*2
|
||||
1000 REM - MONEY AVAILABLE
|
||||
1010 LET D(1)=100*INT((M1*(100-I1)/2000)*(1+(R1-Q1)/(R1+1))+.5)
|
||||
1020 LET D(2)=100*INT(M2*(100-I2)/2000+.5)
|
||||
1030 IF B$ <> "YES" THEN 1050
|
||||
1040 LET D(2)=100*INT((M2*(100-I2)/2000)*(1+(R2-Q2)/(R2+1))+.5)
|
||||
1050 REM - MEN AVAILABLE
|
||||
1060 LET M5=INT(M1*(1+(P1-T1)/(M3+1)))
|
||||
1070 LET M6=INT(M2*(1+(P2-T2)/(M4+1)))
|
||||
1080 LET F1=5*M1/6
|
||||
1090 PRINT : PRINT : PRINT : PRINT : PRINT
|
||||
1100 PRINT "THIS IS THE BATTLE OF ";C$
|
||||
1110 IF X$="NO" THEN 1150
|
||||
1120 IF A>11 THEN 1130
|
||||
1125 ON A GOTO 3580,3620,3650,3690,3720,3750,3780,3800,3830,3860,3890
|
||||
1130 ON A-11 GOTO 3920,3950,3980
|
||||
1140 PRINT C$" INSTANT REPLAY"
|
||||
1150 PRINT
|
||||
1160 PRINT " ","CONFEDERACY"," UNION"
|
||||
1170 PRINT "MEN"," "M5," "M6
|
||||
1180 PRINT "MONEY","$";D(1),"$";D(2)
|
||||
1190 PRINT "INFLATION"," ";I1+15;"%"," ";I2;"%"
|
||||
1195 PRINT
|
||||
1200 REM - ONLY IN PRINTOUT IS CONFED INFLATION = I1+15%
|
||||
1210 REM - IF TWO GENERALS, INPUT CONFED. FIRST
|
||||
1220 FOR I=1 TO D
|
||||
1230 IF B$ <> "YES" THEN 1260
|
||||
1240 IF I=2 THEN 1260
|
||||
1250 PRINT "CONFEDERATE GENERAL---";
|
||||
1260 PRINT "HOW MUCH DO YOU WISH TO SPEND FOR"
|
||||
1270 PRINT " - FOOD......";
|
||||
1280 INPUT F
|
||||
1290 IF F >= 0 THEN 1360
|
||||
1300 IF R1 <> 0 THEN 1330
|
||||
1310 PRINT "NO PREVIOUS ENTRIES"
|
||||
1320 GOTO 1270
|
||||
1330 PRINT "ASSUME YOU WANT TO KEEP SAME ALLOCATIONS"
|
||||
1340 PRINT
|
||||
1350 GOTO 1510
|
||||
1360 LET F(I)=F
|
||||
1370 PRINT " - SALARIES..";
|
||||
1380 INPUT H(I)
|
||||
1390 LET N=1
|
||||
1400 IF H(I)<0 THEN 1490
|
||||
1410 PRINT " - AMMUNITION";
|
||||
1420 INPUT B(I)
|
||||
1430 LET N=2
|
||||
1440 IF B(I)<0 THEN 1490
|
||||
1450 PRINT
|
||||
1460 IF F(I)+H(I)+B(I) <= D(I) THEN 1510
|
||||
1470 PRINT "THINK AGAIN! YOU HAVE ONLY $"D(I)
|
||||
1480 GOTO 1270
|
||||
1490 PRINT "NEGATIVE VALUES NOT ALLOWED."
|
||||
1500 ON N GOTO 1370,1410
|
||||
1510 IF B$ <> "YES" THEN 1550
|
||||
1520 IF I=2 THEN 1550
|
||||
1530 PRINT "UNION GENERAL---";
|
||||
1540 NEXT I
|
||||
1550 FOR Z=1 TO D
|
||||
1560 IF B$ <> "YES" THEN 1620
|
||||
1570 ON Z GOTO 1580,1600
|
||||
1580 PRINT "CONFEDERATE ";
|
||||
1590 GOTO 1620
|
||||
1600 PRINT " UNION ";
|
||||
1610 REM - FIND MORALE
|
||||
1620 LET O=((2*F(Z)^2+H(Z)^2)/F1^2+1)
|
||||
1630 IF O<10 THEN 1660
|
||||
1640 PRINT "MORALE IS HIGH"
|
||||
1650 GOTO 1700
|
||||
1660 IF O<5 THEN 1690
|
||||
1670 PRINT "MORALE IS FAIR"
|
||||
1680 GOTO 1700
|
||||
1690 PRINT "MORALE IS POOR"
|
||||
1700 IF B$ <> "YES" THEN 1760
|
||||
1710 LET O(Z)=O
|
||||
1720 NEXT Z
|
||||
1730 LET O2=O(2)
|
||||
1740 LET O=O(1)
|
||||
1750 PRINT "CONFEDERATE GENERAL---";
|
||||
1760 REM - ACTUAL OFF/DEF BATTLE SITUATION
|
||||
1770 IF M <> 3 THEN 1800
|
||||
1780 PRINT "YOU ARE ON THE OFFENSIVE"
|
||||
1790 GOTO 1840
|
||||
1800 IF M <> 1 THEN 1830
|
||||
1810 PRINT "YOU ARE ON THE DEFENSIVE"
|
||||
1820 GOTO 1840
|
||||
1830 PRINT "BOTH SIDES ARE ON THE OFFENSIVE "
|
||||
1840 PRINT
|
||||
1850 REM - CHOOSE STRATEGIES
|
||||
1860 IF B$ <> "YES" THEN 1910
|
||||
1870 FOR I=1 TO 2
|
||||
1880 ON I GOTO 1890,1920
|
||||
1890 PRINT "CONFEDERATE STRATEGY ";
|
||||
1900 GOTO 1920
|
||||
1910 PRINT "YOUR STRATEGY ";
|
||||
1920 INPUT Y
|
||||
1930 IF ABS(Y-3)<3 THEN 1960
|
||||
1940 PRINT "STRATEGY";Y;"NOT ALLOWED."
|
||||
1950 GOTO 1910
|
||||
1960 IF B$="YES" THEN 2000
|
||||
1970 IF Y=5 THEN 2830
|
||||
1980 GOSUB 3110
|
||||
1990 GOTO 2170
|
||||
2000 IF I=2 THEN 2040
|
||||
2010 LET Y1=Y
|
||||
2020 PRINT "UNION STRATEGY ";
|
||||
2030 NEXT I
|
||||
2040 LET Y2=Y
|
||||
2050 LET Y=Y1
|
||||
2060 IF Y2=5 THEN 2020
|
||||
2070 REM : SIMULATED LOSSES-NORTH
|
||||
2080 LET C6=(2*C2/5)*(1+1/(2*(ABS(Y2-Y)+1)))
|
||||
2090 LET C6=C6*(1.28+(5*M2/6)/(B(2)+1))
|
||||
2100 LET C6=INT(C6*(1+1/O2)+.5)
|
||||
2110 REM - IF LOSS > MEN PRESENT, RESCALE LOSSES
|
||||
2120 LET E2=100/O2
|
||||
2130 IF INT(C6+E2)<M6 THEN 2190
|
||||
2140 LET C6=INT(13*M6/20)
|
||||
2150 LET E2=7*C6/13
|
||||
2160 LET U2=1
|
||||
2170 REM - CALCULATE SIMULATED LOSSES
|
||||
2180 PRINT
|
||||
2190 PRINT : PRINT : PRINT ,"CONFEDERACY","UNION"
|
||||
2200 LET C5=(2*C1/5)*(1+1/(2*(ABS(Y2-Y)+1)))
|
||||
2210 LET C5=INT(C5*(1+1/O)*(1.28+F1/(B(1)+1))+.5)
|
||||
2220 LET E=100/O
|
||||
2230 IF C5+100/O<M1*(1+(P1-T1)/(M3+1)) THEN 2270
|
||||
2240 LET C5=INT(13*M1/20*(1+(P1-T1)/(M3+1)))
|
||||
2250 LET E=7*C5/13
|
||||
2260 LET U=1
|
||||
2270 IF D=1 THEN 2500
|
||||
2280 PRINT "CASUALTIES",C5,C6
|
||||
2290 PRINT "DESERTIONS",INT(E),INT(E2)
|
||||
2300 PRINT
|
||||
2310 IF B$ <> "YES" THEN 2530
|
||||
2320 PRINT "COMPARED TO THE ACTUAL CASUALTIES AT "C$
|
||||
2330 PRINT "CONFEDERATE:"INT(100*(C5/C1)+.5)"% OF THE ORIGINAL"
|
||||
2340 PRINT "UNION: "INT(100*(C6/C2)+.5)"% OF THE ORIGINAL"
|
||||
2350 PRINT
|
||||
2360 REM - 1 WHO WON
|
||||
2370 IF U <> 1 THEN 2380
|
||||
2375 IF U2=1 THEN 2460
|
||||
2380 IF U=1 THEN 2420
|
||||
2390 IF U2=1 THEN 2440
|
||||
2400 IF C5+E=C6+E2 THEN 2460
|
||||
2410 IF C5+E<C6+E2 THEN 2440
|
||||
2420 PRINT "THE UNION WINS "C$
|
||||
2430 GOTO 2600
|
||||
2440 PRINT "THE CONFEDERACY WINS "C$
|
||||
2450 GOTO 2660
|
||||
2460 PRINT "BATTLE OUTCOME UNRESOLVED"
|
||||
2470 LET W0=W0+1
|
||||
2480 IF A=0 THEN 2790
|
||||
2490 GOTO 2680
|
||||
2500 LET C6=INT(17*C2*C1/(C5*20))
|
||||
2510 LET E2=5*O
|
||||
2520 GOTO 2280
|
||||
2530 PRINT "YOUR CASUALTIES WERE "INT(100*(C5/C1)+.5)"% OF "
|
||||
2540 PRINT "THE ACTUAL CASUALTIES AT ";C$
|
||||
2550 PRINT
|
||||
2560 REM - FIND WHO WON
|
||||
2570 IF U=1 THEN 2590
|
||||
2580 IF C5+E<17*C2*C1/(C5*20)+5*O THEN 2630
|
||||
2590 PRINT "YOU LOSE ";C$
|
||||
2600 IF A=0 THEN 2790
|
||||
2610 LET L=L+1
|
||||
2620 GOTO 2680
|
||||
2630 PRINT "YOU WIN ";C$
|
||||
2640 REM - CUMULATIVE BATTLE FACTORS WHICH ALTER HISTORICAL
|
||||
2650 REM RESOURCES AVAILABLE.IF A REPLAY DON'T UPDATE.
|
||||
2660 IF A=0 THEN 2790
|
||||
2670 LET W=W+1
|
||||
2680 LET T1=T1+C5+E
|
||||
2690 LET T2=T2+C6+E2
|
||||
2700 LET P1=P1+C1
|
||||
2710 LET P2=P2+C2
|
||||
2720 LET Q1=Q1+(F(1)+H(1)+B(1))
|
||||
2730 LET Q2=Q2+(F(2)+H(2)+B(2))
|
||||
2740 LET R1=R1+M1*(100-I1)/20
|
||||
2750 LET R2=R2+M2*(100-I2)/20
|
||||
2760 LET M3=M3+M1
|
||||
2770 LET M4=M4+M2
|
||||
2780 GOSUB 3300
|
||||
2790 U=0:U2=0
|
||||
2800 PRINT "---------------"
|
||||
2810 GOTO 620
|
||||
2820 REM------FINISH OFF
|
||||
2830 PRINT "THE CONFEDERACY HAS SURRENDERED"
|
||||
2840 GOTO 2860
|
||||
2850 PRINT "THE UNION HAS SURRENDERED."
|
||||
2860 PRINT : PRINT : PRINT : PRINT : PRINT : PRINT
|
||||
2870 PRINT "THE CONFEDERACY ";
|
||||
2880 PRINT "HAS WON "W" BATTLES AND LOST "L
|
||||
2890 IF Y=5 THEN 2940
|
||||
2900 IF Y2=5 THEN 2920
|
||||
2910 IF W <= L THEN 2940
|
||||
2915 IF Y=5 THEN 2940
|
||||
2920 PRINT "THE CONFEDERACY HAS WON THE WAR"
|
||||
2930 GOTO 2950
|
||||
2940 PRINT "THE UNION HAS WON THE WAR"
|
||||
2950 PRINT
|
||||
2960 IF R1=0 THEN 3100
|
||||
2970 PRINT "FOR THE "W+L+W0" BATTLES FOUGHT (EXCLUDING RERUNS)"
|
||||
2980 PRINT " "," "," ";
|
||||
2990 PRINT "CONFEDERACY"," UNION"
|
||||
3000 PRINT "HISTORICAL LOSSES",INT(P1+.5),INT(P2+.5)
|
||||
3010 PRINT "SIMULATED LOSSES",INT(T1+.5),INT(T2+.5)
|
||||
3020 PRINT
|
||||
3030 PRINT " % OF ORIGINAL",INT(100*(T1/P1)+.5),INT(100*(T2/P2)+.5)
|
||||
3040 IF B$="YES" THEN 3100
|
||||
3050 PRINT
|
||||
3060 PRINT "UNION INTELLIGENCE SUGGESTS THAT THE SOUTH USED "
|
||||
3070 PRINT "STRATEGIES 1, 2, 3, 4 IN THE FOLLOWING PERCENTAGES"
|
||||
3080 PRINT S(1);S(2);S(3);S(4)
|
||||
3090 REM---------------------------------
|
||||
3100 STOP
|
||||
3110 REM - UNION STRATEGY IS COMPUTER CHOSEN
|
||||
3120 PRINT "UNION STRATEGY IS ";
|
||||
3130 IF A <> 0 THEN 3180
|
||||
3140 INPUT Y2
|
||||
3150 IF Y2 <=0 THEN 3160
|
||||
3155 IF Y2<5 THEN 3290
|
||||
3160 PRINT "ENTER 1 , 2 ,3 , OR 4 (USUALLY PREVIOUS UNION STRATEGY)"
|
||||
3170 GOTO 3140
|
||||
3180 LET S0=0
|
||||
3190 LET R=100*RND(0)
|
||||
3200 FOR I=1 TO 4
|
||||
3210 LET S0=S0+S(I)
|
||||
3220 REM - IF ACTUAL STRATEGY INFO IS IN PROGRAM DATA STATEMENTS
|
||||
3230 REM THEN R-100 IS EXTRA WEIGHT GIVEN TO THAT STATEGY.
|
||||
3240 IF R<S0 THEN 3270
|
||||
3250 NEXT I
|
||||
3260 REM - IF ACTUAL STRAT. IN,THEN HERE IS Y2= HIST. STRAT.
|
||||
3270 LET Y2=I
|
||||
3280 PRINT Y2
|
||||
3290 RETURN
|
||||
3300 REM LEARN PRESENT STRATEGY, START FORGETTING OLD ONES
|
||||
3310 REM - PRESENT STRATEGY OF SOUTH GAINS 3*S, OTHERS LOSE S
|
||||
3320 REM PROBABILITY POINTS, UNLESS A STRATEGY FALLS BELOW 5%.
|
||||
3330 LET S=3
|
||||
3340 LET S0=0
|
||||
3350 FOR I=1 TO 4
|
||||
3360 IF S(I) <= 5 THEN 3390
|
||||
3370 LET S(I)=S(I)-S
|
||||
3380 LET S0=S0+S
|
||||
3390 NEXT I
|
||||
3400 LET S(Y)=S(Y)+S0
|
||||
3410 RETURN
|
||||
3420 REM - HISTORICAL DATA...CAN ADD MORE (STRAT.,ETC) BY INSERTING
|
||||
3430 REM DATA STATEMENTS AFTER APPRO. INFO, AND ADJUSTING READ
|
||||
3440 DATA "BULL RUN",18000,18500,1967,2708,1
|
||||
3450 DATA "SHILOH",40000.,44894.,10699,13047,3
|
||||
3460 DATA "SEVEN DAYS",95000.,115000.,20614,15849,3
|
||||
3470 DATA "SECOND BULL RUN",54000.,63000.,10000,14000,2
|
||||
3480 DATA "ANTIETAM",40000.,50000.,10000,12000,3
|
||||
3490 DATA "FREDERICKSBURG",75000.,120000.,5377,12653,1
|
||||
3500 DATA "MURFREESBORO",38000.,45000.,11000,12000,1
|
||||
3510 DATA "CHANCELLORSVILLE",32000,90000.,13000,17197,2
|
||||
3520 DATA "VICKSBURG",50000.,70000.,12000,19000,1
|
||||
3530 DATA "GETTYSBURG",72500.,85000.,20000,23000,3
|
||||
3540 DATA "CHICKAMAUGA",66000.,60000.,18000,16000,2
|
||||
3550 DATA "CHATTANOOGA",37000.,60000.,36700.,5800,2
|
||||
3560 DATA "SPOTSYLVANIA",62000.,110000.,17723,18000,2
|
||||
3570 DATA "ATLANTA",65000.,100000.,8500,3700,1
|
||||
3580 PRINT "JULY 21, 1861. GEN. BEAUREGARD, COMMANDING THE SOUTH, MET"
|
||||
3590 PRINT "UNION FORCES WITH GEN. MCDOWELL IN A PREMATURE BATTLE AT"
|
||||
3600 PRINT "BULL RUN. GEN. JACKSON HELPED PUSH BACK THE UNION ATTACK."
|
||||
3610 GOTO 1150
|
||||
3620 PRINT "APRIL 6-7, 1862. THE CONFEDERATE SURPRISE ATTACK AT"
|
||||
3630 PRINT "SHILOH FAILED DUE TO POOR ORGANIZATION."
|
||||
3640 GOTO 1150
|
||||
3650 PRINT "JUNE 25-JULY 1, 1862. GENERAL LEE (CSA) UPHELD THE"
|
||||
3660 PRINT "OFFENSIVE THROUGHOUT THE BATTLE AND FORCED GEN. MCCLELLAN"
|
||||
3670 PRINT "AND THE UNION FORCES AWAY FROM RICHMOND."
|
||||
3680 GOTO 1150
|
||||
3690 PRINT "AUG 29-30, 1862. THE COMBINED CONFEDERATE FORCES UNDER";
|
||||
3695 PRINT " LEE"
|
||||
3700 PRINT "AND JACKSON DROVE THE UNION FORCES BACK INTO WASHINGTON."
|
||||
3710 GOTO 1150
|
||||
3720 PRINT "SEPT 17, 1862. THE SOUTH FAILED TO INCORPORATE MARYLAND"
|
||||
3730 PRINT "INTO THE CONFEDERACY."
|
||||
3740 GOTO 1150
|
||||
3750 PRINT "DEC 13, 1862. THE CONFEDERACY UNDER LEE SUCCESSFULLY"
|
||||
3760 PRINT "REPULSED AN ATTACK BY THE UNION UNDER GEN. BURNSIDE."
|
||||
3770 GOTO 1150
|
||||
3780 PRINT "DEC 31, 1862. THE SOUTH UNDER GEN. BRAGG WON A CLOSE ";
|
||||
3785 PRINT "BATTLE."
|
||||
3790 GOTO 1150
|
||||
3800 PRINT "MAY 1-6, 1863. THE SOUTH HAD A COSTLY VICTORY AND LOST"
|
||||
3810 PRINT "ONE OF THEIR OUTSTANDING GENERALS, 'STONEWALL' JACKSON."
|
||||
3820 GOTO 1150
|
||||
3830 PRINT "JULY 4, 1863. VICKSBURG WAS A COSTLY DEFEAT FOR THE SOUTH"
|
||||
3840 PRINT "BECAUSE IT GAVE THE UNION ACCESS TO THE MISSISSIPPI."
|
||||
3850 GOTO 1150
|
||||
3860 PRINT "JULY 1-3, 1863. A SOUTHERN MISTAKE BY GEN. LEE AT ";
|
||||
3865 PRINT "GETTYSBURG"
|
||||
3870 PRINT "COST THEM ONE OF THE MOST CRUCIAL BATTLES OF THE WAR."
|
||||
3880 GOTO 1150
|
||||
3890 PRINT "SEPT. 15, 1863. CONFUSION IN A FOREST NEAR CHICKAMAUGA LED"
|
||||
3900 PRINT "TO A COSTLY SOUTHERN VICTORY."
|
||||
3910 GOTO 1150
|
||||
3920 PRINT "NOV. 25, 1863. AFTER THE SOUTH HAD SIEGED GEN. ROSENCRANS'"
|
||||
3930 PRINT "ARMY FOR THREE MONTHS, GEN. GRANT BROKE THE SIEGE."
|
||||
3940 GOTO 1150
|
||||
3950 PRINT "MAY 5, 1864. GRANT'S PLAN TO KEEP LEE ISOLATED BEGAN TO"
|
||||
3960 PRINT "FAIL HERE, AND CONTINUED AT COLD HARBOR AND PETERSBURG."
|
||||
3970 GOTO 1150
|
||||
3980 PRINT "AUGUST, 1864. SHERMAN AND THREE VETERAN ARMIES CONVERGED"
|
||||
3990 PRINT "ON ATLANTA AND DEALT THE DEATH BLOW TO THE CONFEDERACY."
|
||||
4000 GOTO 1150
|
||||
4010 END
|
||||
9
00_Alternate_Languages/28_Combat/README.md
Normal file
9
00_Alternate_Languages/28_Combat/README.md
Normal file
@@ -0,0 +1,9 @@
|
||||
Please refer to the `readme.md` in the parent folder.
|
||||
|
||||
Each subfolder represents a port of this program to a language which is _not_ one of the agreed upon 10 languages, which are intended to meet these three criteria:
|
||||
|
||||
1. Popular (by TIOBE index)
|
||||
2. Memory safe
|
||||
3. Generally considered a 'scripting' language
|
||||
|
||||
We welcome additional ports, but these additional ports are for educational purposes only.
|
||||
124
00_Alternate_Languages/28_Combat/combat.bas
Normal file
124
00_Alternate_Languages/28_Combat/combat.bas
Normal file
@@ -0,0 +1,124 @@
|
||||
1 PRINT TAB(33);"COMBAT"
|
||||
2 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY"
|
||||
3 PRINT: PRINT: PRINT
|
||||
4 PRINT "I AM AT WAR WITH YOU.": PRINT "WE HAVE 72000 SOLDIERS APIECE."
|
||||
5 PRINT:PRINT "DISTRIBUTE YOUR FORCES."
|
||||
6 PRINT ,"ME"," YOU"
|
||||
7 PRINT "ARMY",30000,
|
||||
8 INPUT A
|
||||
9 PRINT "NAVY",20000,
|
||||
10 INPUT B
|
||||
11 PRINT "A. F.",22000,
|
||||
12 INPUT C
|
||||
13 IF A+B+C>72000 THEN 5
|
||||
14 D=30000
|
||||
15 E=20000
|
||||
16 F=22000
|
||||
17 PRINT "YOU ATTACK FIRST. TYPE (1) FOR ARMY; (2) FOR NAVY;"
|
||||
18 PRINT "AND (3) FOR AIR FORCE."
|
||||
19 INPUT Y
|
||||
20 PRINT "HOW MANY MEN"
|
||||
21 INPUT X
|
||||
22 IF X<0 THEN 20
|
||||
23 ON Y GOTO 100,200,300
|
||||
100 IF X>A THEN 20
|
||||
105 IF X<A/3 THEN 120
|
||||
110 IF X<2*A/3 THEN 150
|
||||
115 GOTO 270
|
||||
120 PRINT "YOU LOST";X;"MEN FROM YOUR ARMY."
|
||||
125 A=INT(A-X)
|
||||
130 GOTO 500
|
||||
150 PRINT "YOU LOST";INT(X/3);"MEN, BUT I LOST ";INT(2*D/3)
|
||||
155 A=INT(A-X/3)
|
||||
160 D=0
|
||||
165 GOTO 500
|
||||
200 IF X>B THEN 20
|
||||
210 IF X<E/3 THEN 230
|
||||
215 IF X<2*E/3 THEN 250
|
||||
220 GOTO 270
|
||||
230 PRINT "YOUR ATTACK WAS STOPPED!"
|
||||
232 B=INT(B-X)
|
||||
235 GOTO 500
|
||||
250 PRINT "YOU DESTROYED";INT(2*E/3);"OF MY ARMY."
|
||||
255 E=INT(E/3)
|
||||
260 GOTO 500
|
||||
270 PRINT "YOU SUNK ONE OF MY PATROL BOATS, BUT I WIPED OUT TWO"
|
||||
275 PRINT "OF YOUR AIR FORCE BASES AND 3 ARMY BASES."
|
||||
280 A=INT(A/3)
|
||||
285 C=INT(C/3)
|
||||
290 E=INT(2*E/3)
|
||||
293 GOTO 500
|
||||
300 IF X>C THEN 20
|
||||
310 IF X<C/3 THEN 350
|
||||
320 IF X<2*C/3 THEN 370
|
||||
330 GOTO 380
|
||||
350 PRINT "YOUR ATTACK WAS WIPED OUT."
|
||||
355 C=INT(C-X)
|
||||
360 GOTO 500
|
||||
370 PRINT "WE HAD A DOGFIGHT. YOU WON - AND FINISHED YOUR MISSION."
|
||||
375 D=INT(2*D/3)
|
||||
377 E=INT(E/3)
|
||||
378 F=INT(F/3)
|
||||
379 GOTO 500
|
||||
380 PRINT "YOU WIPED OUT ONE OF MY ARMY PATROLS, BUT I DESTROYED"
|
||||
381 PRINT "TWO NAVY BASES AND BOMBED THREE ARMY BASES."
|
||||
385 A=INT(A/4)
|
||||
387 B=INT(B/3)
|
||||
390 D=INT(2*D/3)
|
||||
500 PRINT
|
||||
501 PRINT,"YOU","ME"
|
||||
510 PRINT "ARMY",A,D
|
||||
520 PRINT "NAVY",B,E
|
||||
530 PRINT "A. F.",C,F
|
||||
1000 PRINT "WHAT IS YOUR NEXT MOVE?"
|
||||
1010 PRINT "ARMY=1 NAVY=2 AIR FORCE=3"
|
||||
1020 INPUT G
|
||||
1030 PRINT "HOW MANY MEN"
|
||||
1040 INPUT T
|
||||
1045 IF T<0 THEN 1030
|
||||
1050 ON G GOTO 1600,1700,1800
|
||||
1600 IF T>A THEN 1030
|
||||
1610 IF T<D/2 THEN 1630
|
||||
1615 PRINT "YOU DESTROYED MY ARMY!"
|
||||
1616 D=0
|
||||
1617 GOTO 2000
|
||||
1630 PRINT "I WIPED OUT YOUR ATTACK!"
|
||||
1635 A=A-T
|
||||
1640 GOTO 2000
|
||||
1700 IF T>B THEN 1030
|
||||
1710 IF T<E/2 THEN 1750
|
||||
1720 GOTO 1770
|
||||
1750 PRINT "I SUNK TWO OF YOUR BATTLESHIPS, AND MY AIR FORCE"
|
||||
1751 PRINT "WIPED OUT YOUR UNGAURDED CAPITOL."
|
||||
1755 A=A/4
|
||||
1760 B=B/2
|
||||
1765 GOTO 2000
|
||||
1770 PRINT "YOUR NAVY SHOT DOWN THREE OF MY XIII PLANES,"
|
||||
1771 PRINT "AND SUNK THREE BATTLESHIPS."
|
||||
1775 F=2*F/3
|
||||
1780 E=(E/2)
|
||||
1790 GOTO 2000
|
||||
1800 IF T>C THEN 1030
|
||||
1810 IF T>F/2 THEN 1830
|
||||
1820 GOTO 1850
|
||||
1830 PRINT "MY NAVY AND AIR FORCE IN A COMBINED ATTACK LEFT"
|
||||
1831 PRINT "YOUR COUNTRY IN SHAMBLES."
|
||||
1835 A=A/3
|
||||
1837 B=B/3
|
||||
1840 C=C/3
|
||||
1845 GOTO 2000
|
||||
1850 PRINT "ONE OF YOUR PLANES CRASHED INTO MY HOUSE. I AM DEAD."
|
||||
1851 PRINT "MY COUNTRY FELL APART."
|
||||
1860 GOTO 2010
|
||||
2000 PRINT
|
||||
2001 PRINT "FROM THE RESULTS OF BOTH OF YOUR ATTACKS,"
|
||||
2002 IF A+B+C>3/2*(D+E+F) THEN 2010
|
||||
2005 IF A+B+C<2/3*(D+E+F) THEN 2015
|
||||
2006 PRINT "THE TREATY OF PARIS CONCLUDED THAT WE TAKE OUR"
|
||||
2007 PRINT "RESPECTIVE COUNTRIES AND LIVE IN PEACE."
|
||||
2008 GOTO 2020
|
||||
2010 PRINT "YOU WON, OH! SHUCKS!!!!"
|
||||
2012 GOTO 2020
|
||||
2015 PRINT "YOU LOST-I CONQUERED YOUR COUNTRY. IT SERVES YOU"
|
||||
2016 PRINT "RIGHT FOR PLAYING THIS STUPID GAME!!!"
|
||||
2020 END
|
||||
9
00_Alternate_Languages/29_Craps/README.md
Normal file
9
00_Alternate_Languages/29_Craps/README.md
Normal file
@@ -0,0 +1,9 @@
|
||||
Please refer to the `readme.md` in the parent folder.
|
||||
|
||||
Each subfolder represents a port of this program to a language which is _not_ one of the agreed upon 10 languages, which are intended to meet these three criteria:
|
||||
|
||||
1. Popular (by TIOBE index)
|
||||
2. Memory safe
|
||||
3. Generally considered a 'scripting' language
|
||||
|
||||
We welcome additional ports, but these additional ports are for educational purposes only.
|
||||
82
00_Alternate_Languages/29_Craps/craps.bas
Normal file
82
00_Alternate_Languages/29_Craps/craps.bas
Normal file
@@ -0,0 +1,82 @@
|
||||
5 PRINT TAB(33);"CRAPS"
|
||||
10 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY"
|
||||
12 PRINT:PRINT:PRINT
|
||||
15 LET R=0
|
||||
20 PRINT"2,3,12 ARE LOSERS; 4,5,6,8,9,10 ARE POINTS; 7,11 ARE NATURAL WINNERS."
|
||||
21 LET T=1
|
||||
22 PRINT "PICK A NUMBER AND INPUT TO ROLL DICE";
|
||||
23 INPUT Z
|
||||
24 LET X=(RND(0))
|
||||
25 LET T =T+1
|
||||
26 IF T<=Z THEN 24
|
||||
27 PRINT"INPUT THE AMOUNT OF YOUR WAGER.";
|
||||
28 INPUT F
|
||||
30 PRINT "I WILL NOW THROW THE DICE"
|
||||
40 LET E=INT(7*RND(1))
|
||||
41 LET S=INT(7*RND(1))
|
||||
42 LET X=E+S
|
||||
50 IF X=7 THEN 180
|
||||
55 IF X=11 THEN 180
|
||||
60 IF X=1 THEN 40
|
||||
62 IF X=2 THEN 195
|
||||
65 IF X=0 THEN 40
|
||||
70 IF X=2 THEN 200
|
||||
80 IF X=3 THEN 200
|
||||
90 IF X=12 THEN 200
|
||||
125 IF X=5 THEN 220
|
||||
130 IF X =6 THEN 220
|
||||
140 IF X=8 THEN 220
|
||||
150 IF X=9 THEN 220
|
||||
160 IF X =10 THEN 220
|
||||
170 IF X=4 THEN 220
|
||||
180 PRINT X "- NATURAL....A WINNER!!!!"
|
||||
185 PRINT X"PAYS EVEN MONEY, YOU WIN"F"DOLLARS"
|
||||
190 GOTO 210
|
||||
195 PRINT X"- SNAKE EYES....YOU LOSE."
|
||||
196 PRINT "YOU LOSE"F "DOLLARS."
|
||||
197 LET F=0-F
|
||||
198 GOTO 210
|
||||
200 PRINT X " - CRAPS...YOU LOSE."
|
||||
205 PRINT "YOU LOSE"F"DOLLARS."
|
||||
206 LET F=0-F
|
||||
210 LET R= R+F
|
||||
211 GOTO 320
|
||||
220 PRINT X "IS THE POINT. I WILL ROLL AGAIN"
|
||||
230 LET H=INT(7*RND(1))
|
||||
231 LET Q=INT(7*RND(1))
|
||||
232 LET O=H+Q
|
||||
240 IF O=1 THEN 230
|
||||
250 IF O=7 THEN 290
|
||||
255 IF O=0 THEN 230
|
||||
260 IF O=X THEN 310
|
||||
270 PRINT O " - NO POINT. I WILL ROLL AGAIN"
|
||||
280 GOTO 230
|
||||
290 PRINT O "- CRAPS. YOU LOSE."
|
||||
291 PRINT "YOU LOSE $"F
|
||||
292 F=0-F
|
||||
293 GOTO 210
|
||||
300 GOTO 320
|
||||
310 PRINT X"- A WINNER.........CONGRATS!!!!!!!!"
|
||||
311 PRINT X "AT 2 TO 1 ODDS PAYS YOU...LET ME SEE..."2*F"DOLLARS"
|
||||
312 LET F=2*F
|
||||
313 GOTO 210
|
||||
320 PRINT " IF YOU WANT TO PLAY AGAIN PRINT 5 IF NOT PRINT 2";
|
||||
330 INPUT M
|
||||
331 IF R<0 THEN 334
|
||||
332 IF R>0 THEN 336
|
||||
333 IF R=0 THEN 338
|
||||
334 PRINT "YOU ARE NOW UNDER $";-R
|
||||
335 GOTO 340
|
||||
336 PRINT "YOU ARE NOW AHEAD $";R
|
||||
337 GOTO 340
|
||||
338 PRINT "YOU ARE NOW EVEN AT 0"
|
||||
340 IF M=5 THEN 27
|
||||
341 IF R<0 THEN 350
|
||||
342 IF R>0 THEN 353
|
||||
343 IF R=0 THEN 355
|
||||
350 PRINT"TOO BAD, YOU ARE IN THE HOLE. COME AGAIN."
|
||||
351 GOTO 360
|
||||
353 PRINT"CONGRATULATIONS---YOU CAME OUT A WINNER. COME AGAIN!"
|
||||
354 GOTO 360
|
||||
355 PRINT"CONGRATULATIONS---YOU CAME OUT EVEN, NOT BAD FOR AN AMATEUR"
|
||||
360 END
|
||||
24
00_Alternate_Languages/29_Craps/distributions.bas
Normal file
24
00_Alternate_Languages/29_Craps/distributions.bas
Normal file
@@ -0,0 +1,24 @@
|
||||
10 PRINT "DISTRIBUTION OF DICE ROLLS WITH INT(7*RND(1)) VS INT(6*RND(1)+1)"
|
||||
20 DIM A(12)
|
||||
30 DIM B(12)
|
||||
100 FOR X = 1 TO 100000 : REM CHOOSE A LARGE NUMBER TO GET A FINER GRAINED HISTOGRAM
|
||||
140 REM GET A NUMBER FROM 0 TO 6 INCLUSIVE WITH THE INTENT TO THROW AWAY ZEROES.
|
||||
150 LET D1 = INT(7*RND(1))
|
||||
155 LET D2 = INT(7*RND(1))
|
||||
160 LET S1 = D1+D2
|
||||
165 REM IF THIS SUM IS LESS THAN TWO THEN TRY AGAIN.
|
||||
170 IF S1<2 THEN 150
|
||||
199 REM GET A NUMBER FROM 0 TO 5 THEN ADD 1 TO IT TO MAKE IT 1 TO 6
|
||||
200 LET D3 = INT(6*RND(1))+1
|
||||
210 LET D4 = INT(6*RND(1))+1
|
||||
220 LET S2 = D3+D4
|
||||
245 REM USE OUR ARRAY AS A HISTOGRAM, COUNTING EACH OCCURRENCE OF DICE ROLL
|
||||
250 A(S1) = A(S1) + 1
|
||||
260 B(S2) = B(S2) + 1
|
||||
290 NEXT X
|
||||
300 PRINT "THE INT(7*RND(1)) DISTRIBUTION:"
|
||||
310 FOR I = 2 TO 12 :PRINT I,:NEXT:PRINT
|
||||
320 FOR I = 2 TO 12 :PRINT A(I),:NEXT:PRINT
|
||||
325 PRINT "THE INT(6*RND(1)+1) DISTRIBUTION"
|
||||
330 FOR I = 2 TO 12 :PRINT I,:NEXT:PRINT
|
||||
340 FOR I = 2 TO 12 :PRINT B(I),:NEXT:PRINT
|
||||
3
00_Alternate_Languages/30_Cube/README.md
Normal file
3
00_Alternate_Languages/30_Cube/README.md
Normal file
@@ -0,0 +1,3 @@
|
||||
#### External Links
|
||||
- Common Lisp: https://github.com/koalahedron/lisp-computer-games/blob/master/01%20Acey%20Ducey/common-lisp/acey-deucy.lisp
|
||||
- PowerShell: https://github.com/eweilnau/basic-computer-games-powershell/blob/main/AceyDucey.ps1
|
||||
161
00_Alternate_Languages/30_Cube/cube.bas
Normal file
161
00_Alternate_Languages/30_Cube/cube.bas
Normal file
@@ -0,0 +1,161 @@
|
||||
10 PRINT TAB(34);"CUBE"
|
||||
20 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY"
|
||||
30 PRINT : PRINT : PRINT
|
||||
100 PRINT "DO YOU WANT TO SEE THE INSTRUCTIONS? (YES--1,NO--0)"
|
||||
110 INPUT B7
|
||||
120 IF B7=0 THEN 370
|
||||
130 PRINT"THIS IS A GAME IN WHICH YOU WILL BE PLAYING AGAINST THE"
|
||||
140 PRINT"RANDOM DECISION OF THE COMPUTER. THE FIELD OF PLAY IS A"
|
||||
150 PRINT"CUBE OF SIDE 3. ANY OF THE 27 LOCATIONS CAN BE DESIGNATED"
|
||||
160 PRINT"BY INPUTING THREE NUMBERS SUCH AS 2,3,1. AT THE START,"
|
||||
170 PRINT"YOU ARE AUTOMATICALLY AT LOCATION 1,1,1. THE OBJECT OF"
|
||||
180 PRINT"THE GAME IS TO GET TO LOCATION 3,3,3. ONE MINOR DETAIL:"
|
||||
190 PRINT"THE COMPUTER WILL PICK, AT RANDOM, 5 LOCATIONS AT WHICH"
|
||||
200 PRINT"IT WILL PLANT LAND MINES. IF YOU HIT ONE OF THESE LOCATIONS"
|
||||
210 PRINT"YOU LOSE. ONE OTHER DETAIL: YOU MAY MOVE ONLY ONE SPACE "
|
||||
220 PRINT"IN ONE DIRECTION EACH MOVE. FOR EXAMPLE: FROM 1,1,2 YOU"
|
||||
230 PRINT"MAY MOVE TO 2,1,2 OR 1,1,3. YOU MAY NOT CHANGE"
|
||||
240 PRINT"TWO OF THE NUMBERS ON THE SAME MOVE. IF YOU MAKE AN ILLEGAL"
|
||||
250 PRINT"MOVE, YOU LOSE AND THE COMPUTER TAKES THE MONEY YOU MAY"
|
||||
260 PRINT"HAVE BET ON THAT ROUND."
|
||||
270 PRINT
|
||||
280 PRINT
|
||||
290 PRINT"ALL YES OR NO QUESTIONS WILL BE ANSWERED BY A 1 FOR YES"
|
||||
300 PRINT"OR A 0 (ZERO) FOR NO."
|
||||
310 PRINT
|
||||
320 PRINT"WHEN STATING THE AMOUNT OF A WAGER, PRINT ONLY THE NUMBER"
|
||||
330 PRINT"OF DOLLARS (EXAMPLE: 250) YOU ARE AUTOMATICALLY STARTED WITH"
|
||||
340 PRINT"500 DOLLARS IN YOUR ACCOUNT."
|
||||
350 PRINT
|
||||
360 PRINT "GOOD LUCK!"
|
||||
370 LET A1=500
|
||||
380 LET A=INT(3*(RND(X)))
|
||||
390 IF A<>0 THEN 410
|
||||
400 LET A=3
|
||||
410 LET B=INT(3*(RND(X)))
|
||||
420 IF B<>0 THEN 440
|
||||
430 LET B=2
|
||||
440 LET C=INT(3*(RND(X)))
|
||||
450 IF C<>0 THEN 470
|
||||
460 LET C=3
|
||||
470 LET D=INT(3*(RND(X)))
|
||||
480 IF D<>0 THEN 500
|
||||
490 LET D=1
|
||||
500 LET E=INT(3*(RND(X)))
|
||||
510 IF E<>0 THEN 530
|
||||
520 LET E=3
|
||||
530 LET F=INT(3*(RND(X)))
|
||||
540 IF F<>0 THEN 560
|
||||
550 LET F=3
|
||||
560 LET G=INT(3*(RND(X)))
|
||||
570 IF G<>0 THEN 590
|
||||
580 LET G=3
|
||||
590 LET H=INT(3*(RND(X)))
|
||||
600 IF H<>0 THEN 620
|
||||
610 LET H=3
|
||||
620 LET I=INT(3*(RND(X)))
|
||||
630 IF I<>0 THEN 650
|
||||
640 LET I=2
|
||||
650 LET J=INT(3*(RND(X)))
|
||||
660 IF J<>0 THEN 680
|
||||
670 LET J=3
|
||||
680 LET K=INT(3*(RND(X)))
|
||||
690 IF K<>0 THEN 710
|
||||
700 LET K=2
|
||||
710 LET L=INT(3*(RND(X)))
|
||||
720 IF L<>0 THEN 740
|
||||
730 LET L=3
|
||||
740 LET M=INT(3*(RND(X)))
|
||||
750 IF M<>0 THEN 770
|
||||
760 LET M=3
|
||||
770 LET N=INT(3*(RND(X)))
|
||||
780 IF N<>0 THEN 800
|
||||
790 LET N=1
|
||||
800 LET O=INT (3*(RND(X)))
|
||||
810 IF O <>0 THEN 830
|
||||
820 LET O=3
|
||||
830 PRINT "WANT TO MAKE A WAGER?"
|
||||
840 INPUT Z
|
||||
850 IF Z=0 THEN 880
|
||||
860 PRINT "HOW MUCH ";
|
||||
870 INPUT Z1
|
||||
876 IF A1<Z1 THEN 1522
|
||||
880 LET W=1
|
||||
890 LET X=1
|
||||
900 LET Y=1
|
||||
910 PRINT
|
||||
920 PRINT "IT'S YOUR MOVE: ";
|
||||
930 INPUT P,Q,R
|
||||
940 IF P>W+1 THEN 1030
|
||||
950 IF P=W+1 THEN 1000
|
||||
960 IF Q>X+1 THEN 1030
|
||||
970 IF Q=(X+1) THEN 1010
|
||||
980 IF R >(Y+1) THEN 1030
|
||||
990 GOTO 1050
|
||||
1000 IF Q>= X+1 THEN 1030
|
||||
1010 IF R>=Y+1 THEN 1030
|
||||
1020 GOTO 1050
|
||||
1030 PRINT:PRINT "ILLEGAL MOVE. YOU LOSE."
|
||||
1040 GOTO 1440
|
||||
1050 LET W=P
|
||||
1060 LET X=Q
|
||||
1070 LET Y=R
|
||||
1080 IF P=3 THEN 1100
|
||||
1090 GOTO 1130
|
||||
1100 IF Q=3 THEN 1120
|
||||
1110 GOTO 1130
|
||||
1120 IF R=3 THEN 1530
|
||||
1130 IF P=A THEN 1150
|
||||
1140 GOTO 1180
|
||||
1150 IF Q=B THEN 1170
|
||||
1160 GOTO 1180
|
||||
1170 IF R=C THEN 1400
|
||||
1180 IF P=D THEN 1200
|
||||
1190 GOTO 1230
|
||||
1200 IF Q=E THEN 1220
|
||||
1210 GOTO 1230
|
||||
1220 IF R=F THEN 1400
|
||||
1230 IF P=G THEN 1250
|
||||
1240 GOTO 1280
|
||||
1250 IF Q=H THEN 1270
|
||||
1260 GOTO 1280
|
||||
1270 IF R=I THEN 1400
|
||||
1280 IF P=J THEN 1300
|
||||
1290 GOTO 1330
|
||||
1300 IF Q=K THEN 1320
|
||||
1310 GOTO 1330
|
||||
1320 IF R=L THEN 1400
|
||||
1330 IF P=M THEN 1350
|
||||
1340 GOTO 1380
|
||||
1350 IF Q=N THEN 1370
|
||||
1360 GOTO 1380
|
||||
1370 IF R=O THEN 1400
|
||||
1380 PRINT "NEXT MOVE: ";
|
||||
1390 GOTO 930
|
||||
1400 PRINT"******BANG******"
|
||||
1410 PRINT "YOU LOSE!"
|
||||
1420 PRINT
|
||||
1430 PRINT
|
||||
1440 IF Z=0 THEN 1580
|
||||
1450 PRINT
|
||||
1460 LET Z2=A1-Z1
|
||||
1470 IF Z2>0 THEN 1500
|
||||
1480 PRINT "YOU BUST."
|
||||
1490 GOTO 1610
|
||||
1500 PRINT " YOU NOW HAVE"; Z2; "DOLLARS."
|
||||
1510 LET A1=Z2
|
||||
1520 GOTO 1580
|
||||
1522 PRINT"TRIED TO FOOL ME; BET AGAIN";
|
||||
1525 GOTO 870
|
||||
1530 PRINT"CONGRATULATIONS!"
|
||||
1540 IF Z=0 THEN 1580
|
||||
1550 LET Z2=A1+Z1
|
||||
1560 PRINT "YOU NOW HAVE"; Z2;"DOLLARS."
|
||||
1570 LET A1=Z2
|
||||
1580 PRINT"DO YOU WANT TO TRY AGAIN ";
|
||||
1590 INPUT S
|
||||
1600 IF S=1 THEN 380
|
||||
1610 PRINT "TOUGH LUCK!"
|
||||
1620 PRINT
|
||||
1630 PRINT "GOODBYE."
|
||||
1640 END
|
||||
9
00_Alternate_Languages/31_Depth_Charge/README.md
Normal file
9
00_Alternate_Languages/31_Depth_Charge/README.md
Normal file
@@ -0,0 +1,9 @@
|
||||
Please refer to the `readme.md` in the parent folder.
|
||||
|
||||
Each subfolder represents a port of this program to a language which is _not_ one of the agreed upon 10 languages, which are intended to meet these three criteria:
|
||||
|
||||
1. Popular (by TIOBE index)
|
||||
2. Memory safe
|
||||
3. Generally considered a 'scripting' language
|
||||
|
||||
We welcome additional ports, but these additional ports are for educational purposes only.
|
||||
33
00_Alternate_Languages/31_Depth_Charge/depthcharge.bas
Normal file
33
00_Alternate_Languages/31_Depth_Charge/depthcharge.bas
Normal file
@@ -0,0 +1,33 @@
|
||||
2 PRINT TAB(30);"DEPTH CHARGE"
|
||||
4 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY"
|
||||
6 PRINT: PRINT: PRINT
|
||||
20 INPUT "DIMENSION OF SEARCH AREA";G: PRINT
|
||||
30 N=INT(LOG(G)/LOG(2))+1
|
||||
40 PRINT "YOU ARE THE CAPTAIN OF THE DESTROYER USS COMPUTER"
|
||||
50 PRINT "AN ENEMY SUB HAS BEEN CAUSING YOU TROUBLE. YOUR"
|
||||
60 PRINT "MISSION IS TO DESTROY IT. YOU HAVE";N;"SHOTS."
|
||||
70 PRINT "SPECIFY DEPTH CHARGE EXPLOSION POINT WITH A"
|
||||
80 PRINT "TRIO OF NUMBERS -- THE FIRST TWO ARE THE"
|
||||
90 PRINT "SURFACE COORDINATES; THE THIRD IS THE DEPTH."
|
||||
100 PRINT : PRINT "GOOD LUCK !": PRINT
|
||||
110 A=INT(G*RND(1)) : B=INT(G*RND(1)) : C=INT(G*RND(1))
|
||||
120 FOR D=1 TO N : PRINT : PRINT "TRIAL #";D; : INPUT X,Y,Z
|
||||
130 IF ABS(X-A)+ABS(Y-B)+ABS(Z-C)=0 THEN 300
|
||||
140 GOSUB 500 : PRINT : NEXT D
|
||||
200 PRINT : PRINT "YOU HAVE BEEN TORPEDOED! ABANDON SHIP!"
|
||||
210 PRINT "THE SUBMARINE WAS AT";A;",";B;",";C : GOTO 400
|
||||
300 PRINT : PRINT "B O O M ! ! YOU FOUND IT IN";D;"TRIES!"
|
||||
400 PRINT : PRINT: INPUT "ANOTHER GAME (Y OR N)";A$
|
||||
410 IF A$="Y" THEN 100
|
||||
420 PRINT "OK. HOPE YOU ENJOYED YOURSELF." : GOTO 600
|
||||
500 PRINT "SONAR REPORTS SHOT WAS ";
|
||||
510 IF Y>B THEN PRINT "NORTH";
|
||||
520 IF Y<B THEN PRINT "SOUTH";
|
||||
530 IF X>A THEN PRINT "EAST";
|
||||
540 IF X<A THEN PRINT "WEST";
|
||||
550 IF Y<>B OR X<>A THEN PRINT " AND";
|
||||
560 IF Z>C THEN PRINT " TOO LOW."
|
||||
570 IF Z<C THEN PRINT " TOO HIGH."
|
||||
580 IF Z=C THEN PRINT " DEPTH OK."
|
||||
590 RETURN
|
||||
600 END
|
||||
9
00_Alternate_Languages/32_Diamond/README.md
Normal file
9
00_Alternate_Languages/32_Diamond/README.md
Normal file
@@ -0,0 +1,9 @@
|
||||
Please refer to the `readme.md` in the parent folder.
|
||||
|
||||
Each subfolder represents a port of this program to a language which is _not_ one of the agreed upon 10 languages, which are intended to meet these three criteria:
|
||||
|
||||
1. Popular (by TIOBE index)
|
||||
2. Memory safe
|
||||
3. Generally considered a 'scripting' language
|
||||
|
||||
We welcome additional ports, but these additional ports are for educational purposes only.
|
||||
9
00_Alternate_Languages/32_Diamond/csharp/Diamond.csproj
Normal file
9
00_Alternate_Languages/32_Diamond/csharp/Diamond.csproj
Normal file
@@ -0,0 +1,9 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<LangVersion>10</LangVersion>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
</PropertyGroup>
|
||||
</Project>
|
||||
22
00_Alternate_Languages/32_Diamond/csharp/Diamond.sln
Normal file
22
00_Alternate_Languages/32_Diamond/csharp/Diamond.sln
Normal file
@@ -0,0 +1,22 @@
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio Version 16
|
||||
VisualStudioVersion = 16.0.30114.105
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Diamond", "Diamond.csproj", "{44B406C8-70F0-4183-B19A-5B045A1AEBA4}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
Release|Any CPU = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{44B406C8-70F0-4183-B19A-5B045A1AEBA4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{44B406C8-70F0-4183-B19A-5B045A1AEBA4}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{44B406C8-70F0-4183-B19A-5B045A1AEBA4}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{44B406C8-70F0-4183-B19A-5B045A1AEBA4}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
@@ -1,3 +1,3 @@
|
||||
Original source downloaded [from Vintage Basic](http://www.vintage-basic.net/games.html)
|
||||
|
||||
Conversion to [Pascal](https://en.wikipedia.org/wiki/Pascal_(programming_language))
|
||||
Conversion to [Microsoft C#](https://docs.microsoft.com/en-us/dotnet/csharp/)
|
||||
27
00_Alternate_Languages/32_Diamond/diamond.bas
Normal file
27
00_Alternate_Languages/32_Diamond/diamond.bas
Normal file
@@ -0,0 +1,27 @@
|
||||
1 PRINT TAB(33);"DIAMOND"
|
||||
2 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY"
|
||||
3 PRINT:PRINT:PRINT
|
||||
4 PRINT "FOR A PRETTY DIAMOND PATTERN,"
|
||||
5 INPUT "TYPE IN AN ODD NUMBER BETWEEN 5 AND 21";R:PRINT
|
||||
6 Q=INT(60/R):A$="CC"
|
||||
8 FOR L=1 TO Q
|
||||
10 X=1:Y=R:Z=2
|
||||
20 FOR N=X TO Y STEP Z
|
||||
25 PRINT TAB((R-N)/2);
|
||||
28 FOR M=1 TO Q
|
||||
29 C=1
|
||||
30 FOR A=1 TO N
|
||||
32 IF C>LEN(A$) THEN PRINT "!";:GOTO 50
|
||||
34 PRINT MID$(A$,C,1);
|
||||
36 C=C+1
|
||||
50 NEXT A
|
||||
53 IF M=Q THEN 60
|
||||
55 PRINT TAB(R*M+(R-N)/2);
|
||||
56 NEXT M
|
||||
60 PRINT
|
||||
70 NEXT N
|
||||
83 IF X<>1 THEN 95
|
||||
85 X=R-2:Y=1:Z=-2
|
||||
90 GOTO 20
|
||||
95 NEXT L
|
||||
99 END
|
||||
163
00_Alternate_Languages/32_Diamond/java/Diamond.java
Normal file
163
00_Alternate_Languages/32_Diamond/java/Diamond.java
Normal file
@@ -0,0 +1,163 @@
|
||||
import java.util.Scanner;
|
||||
|
||||
/**
|
||||
* Game of Diamond
|
||||
* <p>
|
||||
* Based on the BASIC game of Diamond here
|
||||
* https://github.com/coding-horror/basic-computer-games/blob/main/32%20Diamond/diamond.bas
|
||||
* <p>
|
||||
* Note: The idea was to create a version of the 1970's BASIC game in Java, without introducing
|
||||
* new features - no additional text, error checking, etc has been added.
|
||||
*
|
||||
* Converted from BASIC to Java by Darren Cardenas.
|
||||
*/
|
||||
|
||||
public class Diamond {
|
||||
|
||||
private static final int LINE_WIDTH = 60;
|
||||
|
||||
private static final String PREFIX = "CC";
|
||||
|
||||
private static final char SYMBOL = '!';
|
||||
|
||||
private final Scanner scan; // For user input
|
||||
|
||||
|
||||
public Diamond() {
|
||||
|
||||
scan = new Scanner(System.in);
|
||||
|
||||
} // End of constructor Diamond
|
||||
|
||||
|
||||
public void play() {
|
||||
|
||||
showIntro();
|
||||
startGame();
|
||||
|
||||
} // End of method play
|
||||
|
||||
|
||||
private void showIntro() {
|
||||
|
||||
System.out.println(" ".repeat(32) + "DIAMOND");
|
||||
System.out.println(" ".repeat(14) + "CREATIVE COMPUTING MORRISTOWN, NEW JERSEY");
|
||||
System.out.println("\n\n");
|
||||
|
||||
} // End of method showIntro
|
||||
|
||||
|
||||
private void startGame() {
|
||||
|
||||
int body = 0;
|
||||
int column = 0;
|
||||
int end = 0;
|
||||
int fill = 0;
|
||||
int increment = 2;
|
||||
int numPerSide = 0;
|
||||
int prefixIndex = 0;
|
||||
int row = 0;
|
||||
int start = 1;
|
||||
int userNum = 0;
|
||||
|
||||
String lineContent = "";
|
||||
|
||||
// Get user input
|
||||
System.out.println("FOR A PRETTY DIAMOND PATTERN,");
|
||||
System.out.print("TYPE IN AN ODD NUMBER BETWEEN 5 AND 21? ");
|
||||
userNum = scan.nextInt();
|
||||
System.out.println("");
|
||||
|
||||
// Calcuate number of diamonds to be drawn on each side of screen
|
||||
numPerSide = (int) (LINE_WIDTH / userNum);
|
||||
|
||||
end = userNum;
|
||||
|
||||
// Begin loop through each row of diamonds
|
||||
for (row = 1; row <= numPerSide; row++) {
|
||||
|
||||
// Begin loop through top and bottom halves of each diamond
|
||||
for (body = start; increment < 0 ? body >= end : body <= end; body += increment) {
|
||||
|
||||
lineContent = "";
|
||||
|
||||
// Add whitespace
|
||||
while (lineContent.length() < ((userNum - body) / 2)) {
|
||||
lineContent += " ";
|
||||
}
|
||||
|
||||
// Begin loop through each column of diamonds
|
||||
for (column = 1; column <= numPerSide; column++) {
|
||||
|
||||
prefixIndex = 1;
|
||||
|
||||
// Begin loop that fills each diamond with characters
|
||||
for (fill = 1; fill <= body; fill++) {
|
||||
|
||||
// Right side of diamond
|
||||
if (prefixIndex > PREFIX.length()) {
|
||||
|
||||
lineContent += SYMBOL;
|
||||
|
||||
}
|
||||
// Left side of diamond
|
||||
else {
|
||||
|
||||
lineContent += PREFIX.charAt(prefixIndex - 1);
|
||||
prefixIndex++;
|
||||
|
||||
}
|
||||
|
||||
} // End loop that fills each diamond with characters
|
||||
|
||||
// Column finished
|
||||
if (column == numPerSide) {
|
||||
|
||||
break;
|
||||
|
||||
}
|
||||
// Column not finishd
|
||||
else {
|
||||
|
||||
// Add whitespace
|
||||
while (lineContent.length() < (userNum * column + (userNum - body) / 2)) {
|
||||
lineContent += " ";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
} // End loop through each column of diamonds
|
||||
|
||||
System.out.println(lineContent);
|
||||
|
||||
} // End loop through top and bottom half of each diamond
|
||||
|
||||
if (start != 1) {
|
||||
|
||||
start = 1;
|
||||
end = userNum;
|
||||
increment = 2;
|
||||
|
||||
}
|
||||
else {
|
||||
|
||||
start = userNum - 2;
|
||||
end = 1;
|
||||
increment = -2;
|
||||
row--;
|
||||
|
||||
}
|
||||
|
||||
} // End loop through each row of diamonds
|
||||
|
||||
} // End of method startGame
|
||||
|
||||
|
||||
public static void main(String[] args) {
|
||||
|
||||
Diamond diamond = new Diamond();
|
||||
diamond.play();
|
||||
|
||||
} // End of method main
|
||||
|
||||
} // End of class Diamond
|
||||
@@ -1,3 +1,3 @@
|
||||
Original source downloaded [from Vintage Basic](http://www.vintage-basic.net/games.html)
|
||||
|
||||
Conversion to [Pascal](https://en.wikipedia.org/wiki/Pascal_(programming_language))
|
||||
Conversion to [Oracle Java](https://openjdk.java.net/)
|
||||
3
00_Alternate_Languages/32_Diamond/javascript/README.md
Normal file
3
00_Alternate_Languages/32_Diamond/javascript/README.md
Normal file
@@ -0,0 +1,3 @@
|
||||
Original source downloaded [from Vintage Basic](http://www.vintage-basic.net/games.html)
|
||||
|
||||
Conversion to [JavaScript](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Shells)
|
||||
@@ -0,0 +1,9 @@
|
||||
<html>
|
||||
<head>
|
||||
<title>DIAMOND</title>
|
||||
</head>
|
||||
<body>
|
||||
<pre id="output" style="font-size: 12pt;"></pre>
|
||||
<script src="diamond.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
94
00_Alternate_Languages/32_Diamond/javascript/diamond.js
Normal file
94
00_Alternate_Languages/32_Diamond/javascript/diamond.js
Normal file
@@ -0,0 +1,94 @@
|
||||
// DIAMOND
|
||||
//
|
||||
// Converted from BASIC to Javascript by Oscar Toledo G. (nanochess)
|
||||
//
|
||||
|
||||
function print(str)
|
||||
{
|
||||
document.getElementById("output").appendChild(document.createTextNode(str));
|
||||
}
|
||||
|
||||
function input()
|
||||
{
|
||||
var input_element;
|
||||
var input_str;
|
||||
|
||||
return new Promise(function (resolve) {
|
||||
input_element = document.createElement("INPUT");
|
||||
|
||||
print("? ");
|
||||
input_element.setAttribute("type", "text");
|
||||
input_element.setAttribute("length", "50");
|
||||
document.getElementById("output").appendChild(input_element);
|
||||
input_element.focus();
|
||||
input_str = undefined;
|
||||
input_element.addEventListener("keydown", function (event) {
|
||||
if (event.keyCode == 13) {
|
||||
input_str = input_element.value;
|
||||
document.getElementById("output").removeChild(input_element);
|
||||
print(input_str);
|
||||
print("\n");
|
||||
resolve(input_str);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function tab(space)
|
||||
{
|
||||
var str = "";
|
||||
while (space-- > 0)
|
||||
str += " ";
|
||||
return str;
|
||||
}
|
||||
|
||||
// Main program
|
||||
async function main()
|
||||
{
|
||||
print(tab(33) + "DIAMOND\n");
|
||||
print(tab(15) + "CREATIVE COMPUTING MORRISTOWN, NEW JERSEY\n");
|
||||
print("\n");
|
||||
print("\n");
|
||||
print("\n");
|
||||
print("FOR A PRETTY DIAMOND PATTERN,\n");
|
||||
print("TYPE IN AN ODD NUMBER BETWEEN 5 AND 21");
|
||||
r = parseInt(await input());
|
||||
q = Math.floor(60 / r);
|
||||
as = "CC"
|
||||
x = 1;
|
||||
y = r;
|
||||
z = 2;
|
||||
for (l = 1; l <= q; l++) {
|
||||
for (n = x; z < 0 ? n >= y : n <= y; n += z) {
|
||||
str = "";
|
||||
while (str.length < (r - n) / 2)
|
||||
str += " ";
|
||||
for (m = 1; m <= q; m++) {
|
||||
c = 1;
|
||||
for (a = 1; a <= n; a++) {
|
||||
if (c > as.length)
|
||||
str += "!";
|
||||
else
|
||||
str += as[c++ - 1];
|
||||
}
|
||||
if (m == q)
|
||||
break;
|
||||
while (str.length < r * m + (r - n) / 2)
|
||||
str += " ";
|
||||
}
|
||||
print(str + "\n");
|
||||
}
|
||||
if (x != 1) {
|
||||
x = 1;
|
||||
y = r;
|
||||
z = 2;
|
||||
} else {
|
||||
x = r - 2;
|
||||
y = 1;
|
||||
z = -2;
|
||||
l--;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
main();
|
||||
@@ -1,3 +1,3 @@
|
||||
Original source downloaded [from Vintage Basic](http://www.vintage-basic.net/games.html)
|
||||
|
||||
Conversion to [Pascal](https://en.wikipedia.org/wiki/Pascal_(programming_language))
|
||||
Conversion to [Perl](https://www.perl.org/)
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user