FLIPPER

Charlie Veniot6th July 2022 at 12:48am
' https://hwiegman.home.xs4all.nl/gw-games/FLIPPER.BAS.html
' Modified by Charlie to match https://www.myabandonware.com/game/flipper-3tk/play-420

10 KEY OFF:CLS
dim p(1000) as integer
20 screen 0
30 WIDTH 40
40 print string$(39, chr$(177))
50 print CHR$(177) + CHR$(218) + string$(35, chr$(196)) + CHR$(191) + CHR$(177)
60 PRINT CHR$(177) + CHR$(179) + "                                   " + CHR$(179) + CHR$(177)
70 PRINT CHR$(177) + CHR$(179) + "            2070-A.BAS             " + CHR$(179) + CHR$(177)
80 PRINT CHR$(177) + CHR$(179) + "             FLIPPER               " + CHR$(179) + CHR$(177)
90 PRINT CHR$(177) + CHR$(179) + "                                   " + CHR$(179) + CHR$(177)
100 PRINT CHR$(177) + CHR$(179) + "                                   " + CHR$(179) + CHR$(177)
110 PRINT CHR$(177) + CHR$(179) + " BROUGHT TO YOU BY THE MEMBERS OF  " + CHR$(179) + CHR$(177)
120 PRINT CHR$(177) + CHR$(179) + "      " + string$(4, string$(5, chr$(220)) + " ") + "     " + CHR$(179) + CHR$(177)
130 PRINT CHR$(177) + CHR$(179) + "        " + chr$(219) + "   " + chr$(219) + "   " + chr$(219) + " " + chr$(219) + "     " + chr$(219) + "   " + chr$(219) + "      " + CHR$(179) + CHR$(177)
140 PRINT CHR$(177) + CHR$(179) + "        " + chr$(219) + "   " + chr$(219) + string$(3, chr$(220)) + chr$(219) + " " + chr$(219) + "     " + chr$(219) + "   " + chr$(219) + "      " + CHR$(179) + CHR$(177)
150 PRINT CHR$(177) + CHR$(179) + "        " + chr$(219) + "   " + chr$(219) + "     " + chr$(219) + "     " + chr$(219) + "   " + chr$(219) + "      " + CHR$(179) + CHR$(177)
160 PRINT CHR$(177) + CHR$(179) + "      " + string$(5, chr$(223)) + " " + chr$(223) + "     " + string$(2, string$(5, chr$(223)) + " ") + "     " + CHR$(179) + CHR$(177)
170 PRINT CHR$(177) + CHR$(179) + "                                   " + CHR$(179) + CHR$(177)
180 PRINT CHR$(177) + CHR$(179) + "      International PC Owners      " + CHR$(179) + CHR$(177)
190 PRINT CHR$(177) + CHR$(179) + "                                   " + CHR$(179) + CHR$(177)
200 PRINT CHR$(177) + CHR$(179) + "P.O. Box 10426, Pittsburgh PA 15234" + CHR$(179) + CHR$(177)
210 PRINT CHR$(177) + CHR$(179) + "                                   " + CHR$(179) + CHR$(177)
220 PRINT CHR$(177) + CHR$(192) + string$(35, chr$(196)) + CHR$(217) + CHR$(177)
230 print string$(39, chr$(177))
240 PRINT
250 PRINT "       PRESS ANY KEY TO CONTINUE       "
260 A$=INKEY$: IF A$="" THEN 260
270 WIDTH 80
280 CLS
1000 REM <<<<< FLIPPER >>>>> 23 JUN 83
1010 CLS:FOR I=1 TO 23
1020 LOCATE I,I+37:PRINT "FLIPPER":LOCATE I,39-I:PRINT "FLIPPER"
1030 LOCATE 24-I,39-I:PRINT "FLIPPER":LOCATE 24-I,I+37:PRINT "FLIPPER":NEXT I
1040 LOCATE 12,1:PRINT "A GAME FOR THE `IBM PC'":LOCATE 12,60:PRINT "BY PETER AIRD"
1050 FOR II=1 TO 10:LOCATE 12,38:PRINT "FLIPPER":FOR I=1 TO 200:NEXT I:LOCATE 12,38:PRINT "       " :FOR I=1 TO 150:NEXT I:NEXT II
sleep 4 ' ๐ŸŸ 
1060 CLS:DEFINT A-X
1070 DEF SEG=&H40:POKE &H17,PEEK(&H17) OR 64
1080 GOTO 1100
1090 LOCATE 1,70:PRINT TIME$:RETURN
1100 TI=VAL(RIGHT$(TIME$,2)):RANDOMIZE TI:Z=RND(Z)
1110 LOCATE 20,24,1:PRINT "DO YOU WANT INSTRUCTIONS (Y/N) -";
' ๐ŸŸ  1120 D$=ucase$(INKEY$):IF D$="" or D$ <> "Y" or D$ <> "N" THEN 1120
1120 D$=ucase$(INKEY$):IF D$="" or ( D$ <> "Y" and D$ <> "N" ) THEN 1120 ' ๐ŸŸ 
1130 IF D$="Y" THEN GOSUB 1760
1140 CLS:N=0:T=0
1150 LOCATE 5,26:PRINT 1;:PRINT space$(14); 2;:PRINT space$(14); 3
1160 LOCATE 11,26:PRINT 4;:PRINT space$(14); 5;:PRINT space$(14); 6
1170 LOCATE 17,26:PRINT 7;:PRINT space$(14); 8;:PRINT space$(14); 9
1180 FOR I=1 TO 9:Z=INT(RND(Z)*3)+1
1190 IF Z<2 THEN 1210
1200 P(I)=0:GOTO 1220
1210 P(I)=1
1220 NEXT I
1230 FOR I=1 TO 9:T=T+P(I):NEXT I
1240 IF T<1 OR T>7 THEN 1180
1250 FOR I=1 TO 9:M=I:X=I:GOSUB 1460:NEXT I
1260 LOCATE 1,34:PRINT "MOVE NUMBER -";N:TIME$="00:00:00"
1270 GOSUB 1090:LOCATE 21,34:PRINT "YOUR MOVE IS - ";
1280 M$=INKEY$:IF M$="" THEN GOSUB 1090:GOTO 1280
1290 M=ASC(M$):M=M-48:IF M<1 OR M>9 THEN 1280
1300 LOCATE 21,48:PRINT M
1310 IF P(M)<>1 THEN 1730
1320 N=N+1:LOCATE 1,47:PRINT N
1330 ON M GOTO 1340,1350,1360,1370,1380,1390,1400,1410,1420
1340 X=1:GOSUB 1430:X=2:GOSUB 1430:X=4:GOSUB 1430:X=5:GOSUB 1430:GOTO 1630
1350 X=2:GOSUB 1430:X=1:GOSUB 1430:X=3:GOSUB 1430:GOTO 1630
1360 X=3:GOSUB 1430:X=2:GOSUB 1430:X=5:GOSUB 1430:X=6:GOSUB 1430:GOTO 1630
1370 X=4:GOSUB 1430:X=1:GOSUB 1430:X=7:GOSUB 1430:GOTO 1630
1380 X=5:GOSUB 1430:X=2:GOSUB 1430:X=4:GOSUB 1430:X=8:GOSUB 1430:X=6:GOSUB 1430:GOTO 1630
1390 X=6:GOSUB 1430:X=3:GOSUB 1430:X=9:GOSUB 1430:GOTO 1630
1400 X=7:GOSUB 1430:X=4:GOSUB 1430:X=5:GOSUB 1430:X=8:GOSUB 1430:GOTO 1630
1410 X=8:GOSUB 1430:X=7:GOSUB 1430:X=9:GOSUB 1430:GOTO 1630
1420 X=9:GOSUB 1430:X=8:GOSUB 1430:X=5:GOSUB 1430:X=6:GOSUB 1430:GOTO 1630
1430 IF P(X)=1 THEN 1450
1440 P(X)=1:GOTO 1460
1450 P(X)=0
1460 ON X GOTO 1470,1480,1490,1500,1510,1520,1530,1540,1550
1470 A=3:B=22:GOTO 1560
1480 A=3:B=37:GOTO 1560
1490 A=3:B=52:GOTO 1560
1500 A=9:B=22:GOTO 1560
1510 A=9:B=37:GOTO 1560
1520 A=9:B=52:GOTO 1560
1530 A=15:B=22:GOTO 1560
1540 A=15:B=37:GOTO 1560
1550 A=15:B=52
1560 IF P(X)<>1 THEN 1600
1570 LOCATE A,B:PRINT string$(9, chr$(219)):LOCATE A+1,B:PRINT string$(2, chr$(219)) + string$(5, " ")+ string$(2, chr$(219))
1580 LOCATE A+2,B:PRINT string$(2, chr$(219)):LOCATE A+2,B+7:PRINT string$(2, chr$(219))
1590 LOCATE A+3,B:PRINT string$(2, chr$(219)) + string$(5, " ")+ string$(2, chr$(219)):LOCATE A+4,B:PRINT string$(9, chr$(219)):RETURN

1600 LOCATE A,B:PRINT chr$(218) + string$(7, chr$(196)) +chr$(191):LOCATE A+1,B:PRINT chr$(179) + "       " + chr$(179)

1610 LOCATE A+2,B:PRINT chr$(179) + " ":LOCATE A+2,B+7:PRINT " " + chr$(179)
1620 LOCATE A+3,B:PRINT chr$(179) + "       " + chr$(179):LOCATE A+4,B:PRINT chr$(192) + string$(7, chr$(196)) +chr$(217):RETURN
1630 S=0:FOR I=1 TO 9:S=S+P(I):NEXT I
1640 IF S=0 THEN 1670
1650 IF S=8 AND P(5)=0 THEN 1710
1660 GOTO 1270
1670 LOCATE 23,30:PRINT "SORRY, YOU LOSE..........."
1680 LOCATE 25,30:PRINT "ANOTHER GAME (Y/N) - ";
1690 R$=ucase$(INKEY$):IF (R$<>"Y" and R$<>"N") THEN 1690
1700 IF R$="Y" THEN 1140 ELSE IF R$<>"N" THEN 1690 ELSE CLS:END
1710 LOCATE 23,30:PRINT "THAT'S IT, YOU WON !!!!!"
1720 GOTO 1680
1730 BEEP:LOCATE 23,34:PRINT "- ILLEGAL MOVE -":FOR I=1 TO 400:NEXT I
1740 LOCATE 23,34:PRINT "                "
1750 GOTO 1270
1760 CLS:LOCATE 1,35:PRINT "- FLIPPER -":PRINT
1770 PRINT "FLIPPER is a puzzle played on a 3 X 3 board using tokens which are WHITE on one":PRINT "side and BLACK on the other."
1780 PRINT "The playing positions are numbered 1 to 9."
1790 PRINT "At least one piece is white at the commencement of each game."
1800 PRINT "The object of the game is to FLIP the tokens until the centre piece is BLACK"
1810 PRINT "and all the other pieces are WHITE."
1820 PRINT :PRINT "The board and rules are as follows:-"
1830 PRINT :PRINT space$(10) + "1   2   3":PRINT :PRINT space$(10) + "4   5   6":PRINT :PRINT space$(10) + "7   8   9"
1840 LOCATE 12,25:PRINT "1) Only white pieces may be selected."
1850 LOCATE 14,25:PRINT "2) If a corner piece is selected, as well as FLIPPING":LOCATE 15,28:PRINT "itself, the three adjacent pieces also FLIP."
1860 LOCATE 16,28:PRINT "For example, FLIP '1' and 2,4 and 5 FLIP too."
1870 LOCATE 18,25:PRINT "3) Select the middle of a side and the whole side FLIPS"
1880 LOCATE 20,25:PRINT "4) FLIP '5' and 2,4,6 and 8 will also FLIP."
1890 LOCATE 22,25:PRINT "5) You LOSE if all tokens become BLACK, you":LOCATE 23,28:PRINT "WIN if all tokens except '5' become WHITE."
1900 LOCATE 20,1:PRINT "(PRESS ANY KEY)":LOCATE 21,4:PRINT "(TO PLAY)"
1910 G$=INKEY$:IF G$="" THEN 1910 ELSE RETURN