This module is part of the original MMBasic library. It is reproduced here with kind permission of Hugh Buckle and Geoff Graham. Be aware it may reference functionality which has changed or is deprecated in the latest versions of MMBasic.¶
Note: Any required file(s) are available in the attachments tab (top right).
MMFOUR.BAS
10: REM This program was originally found on a demo
20: REM tape for the MicroBee computer. It was ported
30: REM to GWbasic and then Qbasic for use on a BBS
40: REM in 1995.
50: REM In 2011 yet another port, this time to
60: REM MMBasic to run on the Maximite computer.
70: REM Glenn Littleford. www.thebackshed.com
80: CLS
90: PRINT TAB(10); "F O U R - R O W": PRINT : PRINT TAB(15); "Ver 1.3"
100: PRINT : PRINT
110: PRINT "Try to beat the computer in a simple yet addictive"
120: PRINT "game similar to CONNECT FOUR": PRINT
130: PRINT "Using the < and > keys position the arrow above"
140: PRINT "the column you want, then use the space key to"
150: PRINT "drop your marker. Press Q to quit."
160: PRINT : PRINT "Hit any key to continue"
170: RANDOMIZE TIMER
180: DIM t(11), s(44), n(7)
190: IF INKEY$ = "" THEN GOTO 190
200: CLS
210: e = 0: f = 0: g = 0
220: FOR a = 1 TO 44: s(a) = 0: NEXT a
230: IF s2 = 4 AND s1 = 0 THEN LOCATE 0, 165: PRINT "You really havn't got the hang of this, have you?"
240: IF s1 - s2 = 3 THEN LOCATE 0,165: PRINT "You think your good, dont ya!"
250: IF s2 - s1 = 5 THEN LOCATE 0,165: PRINT "Your loosing, ha ha."
260: FOR x = 1 TO 141 STEP 20
270: LINE (x, 20)-(x, 140)
280: FOR y = 20 TO 120 STEP 20
290: LINE (x - 1, y)-(x + 1, y)
300: NEXT
310: NEXT
320: LINE (1, 140)-(141, 140)
330: LOCATE 150,25 : PRINT "Four in a Row"
340: LOCATE 150,45 : PRINT "Scores...."
350: LOCATE 150,60 : PRINT " You:"; s1
360: LOCATE 150,70 : PRINT " Me:"; s2
370: LOCATE 150,80 : PRINT "Drawn:"; s3
380: LOCATE 150,100 : PRINT "Keys...."
390: LOCATE 150,115 : PRINT "< > to move"
400: LOCATE 150,125 : PRINT "[SPACE] to drop"
410: LOCATE 150,135 : PRINT "Q to quit"
420: CIRCLE (153,62),3
430: LINE (150,70)-(156,76),1,"BF"
440: w = 36
450: FOR c = 1 TO 7
460: n(c) = w
470: w = w + 1
480: NEXT c
490: c = 4
500: s4 = s1 + s2 + s3
510: IF s4 / 2 <> INT(s4 / 2) THEN GOTO 1170
520: m1$ = " My Move" : GOSUB 2000
530: IF g <> 0 THEN g = 0 : GOTO 190
540: v = 0: x = 0: y = 0: z = 0
550: j=j+1
560: IF j>7 THEN
570: j=0
580: GOTO 670
590: ELSE
600: c=c+1
610: IF c>7 THEN c=1
620: ENDIF
630: p = c
640: IF n(c) > 0 THEN GOSUB 1520
650: IF f <> 0 THEN j = 0 : GOTO 1030
660: GOTO 550
670: IF x <> 0 THEN c = x : GOTO 1030
680: IF y <> 0 THEN c = y: GOTO 740
690: IF z <> 0 THEN c = z: GOTO 740
700: c=INT(RND()*7)+1
710: IF n(c)<1 THEN 700
720: v = v + 1
730: IF c <> 4 AND v < 5 THEN GOTO 700
740: IF n(c) < 8 THEN f = 0: GOTO 1030
750: IF v < 10 THEN GOTO 870
760: IF v / 3 = INT(v / 3) THEN m = 1
770: m1$ = "Now what do I do ???": GOSUB 2130
780: IF v < 21 THEN GOTO 870
790: FOR t1=1 TO 200
800: LOCATE RND()*300, RND()*300
810: PRINT "?"
820: SOUND RND()*1000+20,20 : PAUSE 20
830: NEXT t1
840: PAUSE 1000
850: e = 1
860: GOTO 1420
870: n(c) = n(c) - 7
880: z = 0
890: GOSUB 1520
900: n(c) = n(c) + 7
910: IF f <> 0 THEN
920: f = 0
930: IF v < 9 THEN GOTO 700
940: ENDIF
950: IF z <> 0 THEN
960: z = 0
970: IF v < 6 THEN GOTO 700
980: ENDIF
990: IF x <> 0 THEN
1000: x = 0
1010: GOTO 700
1020: ENDIF
1030: ne=((n(c)-c)/7)*20+30
1040: m=c*20-9
1050: LINE (m - 5, ne - 5)-(m + 5, ne + 5), 1, BF
1060: s(n(c)) = 5
1070: n(c) = n(c) - 7
1080: IF f<>0 THEN
1090: m1$="I Win! haha! Press any key."
1100: GOSUB 2130
1110: FOR noise1 = 1 TO 3 : FOR noise2=1000 TO 4000 STEP 500
1120: SOUND noise2,100 : PAUSE 100
1130: NEXT noise2 : NEXT noise1
1140: s2=s2+1
1150: GOTO 190
1160: ENDIF
1170: m1$ = "Your Move": GOSUB 2000
1180: IF g <> 0 THEN
1190: g = 0
1200: GOTO 190
1210: ENDIF
1220: p = c
1230: LINE (0, 0)-(200, 19), 0, BF
1240: CIRCLE (p*20-9,10),6
1250: K1$ = INKEY$
1260: IF K1$ = "," OR K1$ = "." OR K1$ = "q" THEN GOTO 1290
1270: IF K1$ = " " THEN GOTO 1340
1280: GOTO 1250
1290: IF K1$ = "." AND c < 7 THEN c = c + 1
1300: IF K1$ = "," AND c > 1 THEN c = c - 1
1310: IF K1$ = "q" OR K1$ = "Q" THEN GOTO 2200
1320: REM
1330: GOTO 1220
1340: w1 = 0
1350: ne=((n(c)-c)/7)*20+30
1360: m=p*20-9
1370: IF (n(c)-c)/7 < 0 THEN GOTO 1220
1380: CIRCLE (m, ne), 6
1390: s(n(c)) = 1
1400: e = 0
1410: GOSUB 1520
1420: IF e<>0 THEN
1430: m1$="you win. Press any key."
1440: GOSUB 2000
1450: SOUND 50,500 : PAUSE 500 : SOUND 30,700
1460: s1=s1+1
1470: PAUSE 2000
1480: GOTO 190
1490: ENDIF
1500: n(c) = n(c) - 7
1510: GOTO 520
1520: p=c*20-9
1530: PAUSE 200
1540: LINE (0, 0)-(300, 19), 0, BF
1550: LINE (p - 5, 5)-(p + 5, 15), 1, BF
1560: FOR a = 0 TO 11
1570: t(a) = 0
1580: NEXT a
1590: i = 0
1600: o = n(c)
1610: FOR u = o TO o + 21 STEP 7
1620: IF u > 42 THEN GOTO 1640
1630: t(i) = t(i) + s(u)
1640: NEXT u
1650: i = i + 1
1660: k = c - 3
1670: IF k < 1 THEN k = 1
1680: FOR a = k TO c + 3
1690: IF a > 4 OR a > c THEN GOTO 1810
1700: FOR B = a TO a + 3
1710: t(i) = t(i) + s(o - c + B)
1720: NEXT B
1730: i = i + 1
1740: w = o - (c - a) * 8
1750: IF w < 1 OR w > 18 THEN GOTO 1810
1760: FOR d = 0 TO 3
1770: t(i) = t(i) + s(w)
1780: w = w + 8
1790: NEXT d
1800: i = i + 1
1810: IF a > 7 THEN GOTO 1900
1820: IF a < 4 OR a < c THEN GOTO 1900
1830: w = o + (c - a) * 6
1840: IF w < 4 OR w > 21 THEN GOTO 1900
1850: FOR d = 0 TO 3
1860: t(i) = t(i) + s(w)
1870: w = w + 6
1880: NEXT d
1890: i = i + 1
1900: NEXT a
1910: FOR h = 0 TO i
1920: d = t(h)
1930: IF d = 4 THEN e = 1
1940: IF d = 15 THEN f = c
1950: IF d = 10 THEN z = c
1960: IF d = 3 THEN x = c
1970: IF h <> 0 AND d = 2 THEN y = c
1980: NEXT h
1990: RETURN
2000: a = 0
2010: a = a + 1
2020: IF a > 7 THEN
2030: GOTO 2110
2040: ELSE
2050: IF s(a) = 0 THEN
2060: a = 0
2070: GOTO 2130
2080: ENDIF
2090: ENDIF
2100: GOTO 2010
2110: m1$ = "Its a draw"
2120: g = 1
2130: LOCATE 10,150
2140: PRINT m1$; " ";
2150: IF m = 0 THEN GOTO 2180
2160: m = 0
2170: GOTO 2130
2180: IF g <> 0 THEN s3 = s3 + 1
2190: RETURN
2200: CLS
2210: PRINT : PRINT
2220: PRINT TAB(20); "Thanks for playing."
2230: PRINT
2240: PRINT TAB(20); "www.thebackshed.com"
2250: END
>