SQUARE - A lost gem from Mac Oglesby

Mac Oglesby was one of the creative BASIC pioneers, that published a huuuuge amount of small games for the early 70s computers. If you wan to find out more, watch Dave Hasslers brilliant video: https://www.youtube.com/watch?v=c05in7dH8bM

The interested reader of my little blog may have noticed that I scanned all early newspaers called 'Peoples Computer Company' that contained dozens of Mac's games.

A lot are available online, but the following one seemed lost:

Square

enter image description here

A two player game which is a bit like Tic Tac Toe, but instead of trying to create a line, you have to mark a square with your dots.

 100 REM ELEMLIB***:SQUARE
120 REM BY MAC OGLESBY ON 25 NOV 1975
140 REM DESCRIPTION: A GAME FOR TWO PLAYERS ON A BOARD OF 25 POINTS
150 REM THE OBJECT IS TO CHOOSE POINTS TO FORM A SQUARE.

200 DIM S$(50)
201 DIM S(24,12)
202 DIM A$(2)
203 DIM D$(4,4)
210 A$(1)="X"
220 A$(2)="0"
250 FOR R0= 0 TO 4
260 FOR C0= 0 TO 4
270 D$(R0,C0)=".":REM NORMAL BOARD HAS 25 DOTS
280 NEXT C0
290 NEXT R0
310 PRINT "     SQUARE"
311 PRINT " A 2 PLAYER GAME BY"
312 PRINT "MAC OGLESBY (C) 1977"
313 PRINT ""
319 PRINT " WANT INSTRUCTIONS FOR SQUARE (Y/N)";
320 INPUT A$
330 IF A$="N" THEN 520

380 PRINT "THE GAME OF SQUARE IS FOR TWO PLAYERS. THE NORMAL BOARD"
390 PRINT "LOOKS LIKE THIS ON START:"
391 PRINT
410 GOSUB 1810
411 PRINT 
420 PRINT "THE PLAYERS GO IN TURN AND CHOOSE ANY UNOCCUPIED POINT"
430 PRINT "(SHOWN AS A DOT). EACH PLAYER HAS 12 MARKERS (X'S OR O'S"
440 PRINT "WHICH ARE USED TO IDENTIFY THE CHOSEN POINTS."
450 PRINT "THE WINNER IS THE FIRST PLAYER WHO HAS CHOSEN 4 POINTS"
460 PRINT "WHICH COULD FORM THE CORNERS OF A SQUARE."
470 PRINT "TO CHOOSE A POINT, TYPE TWO DIGITS (0 TO 4) SEPERATED BY A"
480 PRINT "COMMA. THE FIRST TELLS THE DISTANCE OVER TO THE RIGHT"
490 PRINT "FROM POINT 0,0. THE SECOND DIGIT TELS THE DISTANCE UP"
500 PRINT "REMEMBER: OVER, UP (X,Y)"
510 PRINT
515 PRINT " CHOOSE YOUR LEVEL"
520 PRINT " 1=NORMAL (25 DOTS)  2=EXPERT'S GAME (NO MID DOT)"
530 INPUT B
540 IF B=1 THEN 620
545 IF B=2 THEN 580
550 PRINT" PLEASE TYPE 1 OR 2"
560 GOTO 520
580 D$(2,2)=" "
600 N=38
610 GOTO 640
620 N=50
640 FOR J=0TO24
650 READ S(J,0)
660 NEXT J
670 REM EACH OF 25 POINTS HAVE THIS MANY SOLUTIONS (should be symetric...)
680 DATA 4,7,8,7,4,7,10,11,10,7,8,11,12,11,8,7,10,11,10,7,4,7,8,7,4

700 FOR J = 0 TO 24
710 FOR K= 1 TO S(J,0)
720 READ S(J,K)
730 NEXT K
740 NEXT J
750 REM WHICH SOLUTION NR IS FOR POINT S() IS FITTING
760 DATA 1,11,35,43
770 DATA 1,2,15,20,28,31,36
780 DATA 2,3,21,24,29,43,44,47
790 DATA 3,4,16,25,30,34,35
800 DATA 4,13,36,44
810 DATA 1,5,15,24,30,32,37
820 DATA 1,2,5,14,22,25,38,39,47,48
830 DATA 2,3,15,16,17,23,26,32,33,39,40
840 DATA 3,4,6,14,20,27,37,40,47,49
850 DATA 4,6,16,21,28,33,38
860 DATA 5,7,20,26,29,43,45,48
870 DATA 5,7,15,17,18,21,27,31,34,39,41
880 DATA 39,40,41,42,43,44,45,46,47,45,49,50
890 DATA 6,8,16,17,19,22,24,31,34,40,42
900 DATA 6,8,23,25,29,44,46,49
910 DATA 7,9,18,22,28,32,35
920 DATA 7,9,10,14,23,24,36,41,45,50
930 DATA 10,11,17,18,19,20,25,32,33,41,42
940 DATA 8,11,12,14,21,26,35,42,49,50
950 DATA 8,12,19,27,30,33,36
960 DATA 9,13,37,45
970 DATA 9,10,18,26,30,34,38
980 DATA 10,11,22,27,29,45,46,50
990 DATA 11,12,19,23,28,34,37
1000 DATA 12,13,38,46

1020 FOR J = 1 TO N
1021 REM N IS 38 OR 50 DEPENDING ON DIFICULTY
1030 READ S$(J)
1040 NEXT J
1060 REM SOLUTIONS 
1070 DATA "00011110","01021211","02031312","03041413","10112120"
1080 DATA "13142423","20213130","23243433","30314140","31324241"
1090 DATA "32334342","33344443","00044440","11133331"
1100 DATA "01122110","03142312","12233221","21324130","23344332"
1110 DATA "01133220","02143321","11234233","12244331"
1120 DATA "02233110","03243211","12334120","13344221"
1130 DATA "01144330","02244220","03344110"
1140 DATA "01032321","10123230","12143432","21234341"
1150 DATA "00033330","01043431","10134340","11144441"
1160 DATA "11122221","12132322","21223231","22233332"
1170 DATA "00022220","02042422","20224240","22244442"
1180 DATA "02132211","11223120","13243322","22334231"
1200 IF A$ <> "Y" THEN 1230
1205 IF B=2 THEN 1230
1210 PRINT
1220 GOTO 1250
1230 GOSUB 1810

1250 T=T+1
1270 FOR J=1TO2
1280 IF T>1 THEN 1310
1290 PRINT "THE ";A$(J);"'s CHOOSE WHICH POINT";
1300 GOTO 1320
1310 PRINT A$(J);"'S CHOICE (X,Y)";
1320 INPUT C1,R1
1338 IF C1>4 THEN 1620
1339 IF R1>4 THEN 1620 
1400 IF D$(R1,C1) <> "." THEN 1620
1410 D$(R1,C1)=A$(J)

1440 IF T<4 THEN 1600
1450 S0=5*R1+C1
1460 FOR J1=1 TO S(S0,0)
1469 REM CHECK FOR EASY MODE, IF NO THEN STOP AT 38, LAST 9 include (2,2)
1470 IF B=1 THEN 1500
1480 IF S(S0,J1)<=38 THEN 1500
1490 GOTO 1670
1500 FOR K1=1 TO 7 STEP 2

1510 D1= VAL(LEFT$(MID$(S$(S(S0,J1)),K1),1))

1520 D2= VAL(LEFT$(MID$(S$(S(S0,J1)),K1+1),1))
1521 REM PRINT D1,D2
1530 IF D$(D1,D2)=A$(J) THEN 1550
1540 GOTO  1590
1550 NEXT K1
1560 PRINT:PRINT:PRINT"********************"
1561 PRINT "*** THE ";A$(J);"'S WIN! ***"
1562 PRINT "********************"
1563 REM PRINT "YOUR WINNING SQUARE IS: ";S$(S(S0,J1))
1564 PRINT
1570 GOSUB 1810
1580 GOTO 1730
1590 NEXT J1
1600 GOTO 1670

1620 PRINT "ILLEGAL CHOICE"
1630 GOTO 1650
1640 PRINT "YOU MUST TYPE 2 DIGITS FROM 0 TO 4 SEPARATED B Y A COMMA"
1650 PRINT "INPUT IGNORED, PLEASE TRY AGAIN"
1660 GOTO 1310
1670 NEXT J

1690 IF T < 12 THEN 1760: REM 12 TURN LIMIT
1700 PRINT "THIS GAME IS A DRAW!"
1710 GOSUB 1810
1730 PRINT " TYPE RUN TO PLAY AGAIN"
1740 END
1760 GOSUB 1810
1780 GOTO 1250: REM GOTO NEXT CHOICE

1800 REM PRINT THE BOARD
1810 PRINT
1820 FOR R0=4 TO 0 STEP -1
1830 PRINT STR$(R0);" ";
1840 FOR C0=0 TO 4
1850 PRINT D$(R0,C0);
1870 PRINT "    ";
1880 NEXT C0
1890 PRINT
1900 IF R0=0 THEN 1930
1910 PRINT
1920 PRINT
1930 NEXT R0
1940 PRINT "   0    1    2    3    4"
1950 PRINT
1960 RETURN

I've typed in the game from PCC5-4 and ported it from the original OS/8 BASIC to KIM (MICROSOFT) BASIC. You can play it right away either in a KIM or C64 or PET or in the excellent vintage Basic for Windows systems.

Have fun, WebDoc