'This program was created by:John Woodill 'Please feel free to distribute this program for free. thanx DEFINT A-Z CLS PRINT "Select Video Type" PRINT PRINT "1. EGA" PRINT "2. VGA" LOCATE , , 1 DO G$ = INPUT$(1) LOOP UNTIL G$ = "1" OR G$ = "2" IF G$ = "1" THEN SCREEN 7 IF G$ = "2" THEN SCREEN 13 BEGINGAME: X = 0: Y = 0: W = 230: Z = 190 IF G$ = "2" THEN FOR C = 16 TO 31 LINE (X, Y)-(W, Z), C, B X = X + 1: Y = Y + 1: W = W - 1: Z = Z - 1 NEXT C ELSE LINE (15, 15)-(215, 175), 15, B LINE (14, 14)-(216, 176), 7, B LINE (13, 13)-(217, 177), 8, B END IF IF G$ = "2" THEN PAINT (150, 100), 7, 31 ELSE PAINT (150, 100), 7, 15 FOR X = 35 TO 205 STEP 20 LINE (X, 15)-(X, 175), 15 NEXT X FOR Y = 31 TO 180 STEP 16 LINE (15, Y)-(215, Y), 15 NEXT Y PC = 12 PLAYERC = 9 CIRCLE (105, 87), 7, PLAYERC PAINT (105, 87), PLAYERC CIRCLE (125, 87), 7, PC PAINT (125, 87), PC CIRCLE (105, 103), 7, PC PAINT (105, 103), PC CIRCLE (125, 103), 7, PLAYERC PAINT (125, 103), PLAYERC LOCATE 2, 32: COLOR 15: PRINT "OTHELLO" LINE (95, 79)-(115, 95), 0, B X = 95: Y = 79: W = 115: Z = 95 CIRCLE (275, 30), 7, PLAYERC PAINT (275, 30), PLAYERC LOCATE 9, 32: PRINT "PLAYERS" LOCATE 11, 31: PRINT "1. ONE" LOCATE 13, 31: PRINT "2. TWO" DO A$ = INPUT$(1) LOOP UNTIL A$ = "1" OR A$ = "2" LOCATE 9, 32: PRINT SPACE$(7) LOCATE 11, 31: PRINT SPACE$(6) LOCATE 13, 31: PRINT SPACE$(6) IF A$ = "1" THEN PLAYER = 1 ELSE PLAYER = 2 LOCATE 20, 32: PRINT CHR$(34); : COLOR 10: PRINT "P"; : COLOR 15: PRINT CHR$(34); "ass" LOCATE 22, 32: PRINT CHR$(34); : COLOR 10: PRINT "Q"; : COLOR 15: PRINT CHR$(34); "uit" BOX = 4 DO IF PLAYERC = 12 AND PLAYER = 1 THEN GOSUB COMPUTER V$ = INKEY$ IF V$ = CHR$(0) + "P" THEN GOSUB DOWN IF V$ = CHR$(0) + "K" THEN GOSUB LEFT IF V$ = CHR$(0) + "M" THEN GOSUB RIGHT IF V$ = CHR$(0) + "H" THEN GOSUB UP IF UCASE$(V$) = "P" THEN SWAP PLAYERC, PC: PAINT (275, 30), PLAYERC, 0 IF UCASE$(V$) = "Q" THEN GOTO OTHELLOEND IF V$ = CHR$(13) THEN GOSUB PUTSQUARE IF V$ = CHR$(27) THEN GOTO OTHELLOEND LOOP LEFT: IF X = 15 THEN RETURN LINE (X, Y)-(W, Z), 15, B X = X - 20: W = W - 20 LINE (X, Y)-(W, Z), 0, B RETURN RIGHT: IF W = 215 THEN RETURN LINE (X, Y)-(W, Z), 15, B X = X + 20: W = W + 20 LINE (X, Y)-(W, Z), 0, B RETURN DOWN: IF Z = 175 THEN RETURN LINE (X, Y)-(W, Z), 15, B Y = Y + 16: Z = Z + 16 LINE (X, Y)-(W, Z), 0, B RETURN UP: IF Y = 15 THEN RETURN LINE (X, Y)-(W, Z), 15, B Y = Y - 16: Z = Z - 16 LINE (X, Y)-(W, Z), 0, B RETURN COMPUTER: LOCATE 9, 31: COLOR 14: PRINT "COMPUTING" BACKX = X BACKY = Y AGAIN = 0 DO V$ = INKEY$ IF V$ = CHR$(27) THEN GOTO DECIDEWINNER RANDOMIZE TIMER RNY = INT(RND * 10) + 1 RNX = INT(RND * 10) + 1 IF RNY = 1 THEN Y = 15 ELSE Y = 15 + ((RNY - 1) * 16) IF RNX = 1 THEN X = 15 ELSE X = 15 + ((RNX - 1) * 20) GOSUB PUTSQUARE AGAIN = AGAIN + 1 IF AGAIN = 250 THEN LOCATE 9, 31: COLOR 11: PRINT " PASS! " SLEEP 1 SWAP PLAYERC, PC PAINT (275, 30), PLAYERC, 0 LOCATE 9, 31: PRINT SPACE$(9) X = BACKX Y = BACKY RETURN END IF LOOP UNTIL VALID = 1 IF VALID <> 1 THEN FOR Y = 15 TO 170 STEP 16 FOR X = 15 TO 200 STEP 20 GOSUB PUTSQUARE IF VALID = 1 THEN EXIT FOR NEXT X IF VALID = 1 THEN EXIT FOR NEXT Y X = BACKX Y = BACKY END IF LOCATE 9, 31: PRINT SPACE$(9) X = BACKX Y = BACKY RETURN PUTSQUARE: VALID = -1 Colour = POINT(X + 10, Y + 10) IF Colour <> 7 THEN IF PLAYERC = 12 AND PLAYER = 1 THEN RETURN ELSE LOCATE 10, 31: COLOR 10: PRINT "OCCUPIED!": SLEEP 1: LOCATE 10, 31: PRINT SPACE$(9): RETURN END IF END IF ' Check side on Right N = X + 20 M = N C = 0 FOR R = N TO 200 STEP 20 C = POINT(R + 10, Y + 10) IF C = 7 THEN EXIT FOR IF C = PLAYERC THEN EXIT FOR NEXT R IF C = PLAYERC AND N <> R THEN VALID = 1 N = R - 20 FOR R = M TO N STEP 20 PAINT (R + 10, Y + 10), PLAYERC, 7 NEXT R END IF ' Check side on Left N = X - 20 M = N C = 0 FOR R = N TO 10 STEP -20 C = POINT(R + 10, Y + 10) IF C = 7 THEN EXIT FOR IF C = PLAYERC THEN EXIT FOR NEXT R IF C = PLAYERC AND N <> R THEN VALID = 1 N = R + 20 FOR R = N TO M STEP 20 PAINT (R + 10, Y + 10), PLAYERC, 7 NEXT R END IF ' Check Up N = Y - 18 M = N C = 0 FOR R = N TO 10 STEP -16 C = POINT(X + 10, R + 10) IF C = 7 THEN EXIT FOR IF C = PLAYERC THEN EXIT FOR NEXT R IF C = PLAYERC AND N <> R THEN VALID = 1 N = R + 16 FOR R = N TO M STEP 16 PAINT (X + 10, R + 10), PLAYERC, 7 NEXT R END IF ' Check Down N = Y + 14 M = N C = 0 FOR R = N TO 170 STEP 16 C = POINT(X + 10, R + 10) IF C = 7 THEN EXIT FOR IF C = PLAYERC THEN EXIT FOR NEXT R IF C = PLAYERC AND N <> R THEN VALID = 1 N = R - 14 FOR R = M TO N STEP 16 PAINT (X + 10, R + 10), PLAYERC, 7 NEXT R END IF ' Check Diagonals ' Right & Down N = Y + 14 F = X + 20 M = N G = F C = 0 FOR R = N TO 170 STEP 16 C = POINT(F + 10, R + 10) IF C = 7 THEN EXIT FOR IF C = PLAYERC THEN EXIT FOR F = F + 20 NEXT R IF C = PLAYERC AND N <> R THEN VALID = 1 N = R - 14 F = X + 20 FOR R = M TO N STEP 16 PAINT (F + 10, R + 10), PLAYERC, 7 F = F + 20 NEXT R END IF ' Right & Up N = Y - 18 F = X - 20 M = N G = F C = 0 FOR R = N TO 10 STEP -16 C = POINT(F + 10, R + 10) IF C = 7 THEN EXIT FOR IF C = PLAYERC THEN EXIT FOR F = F - 20 NEXT R IF C = PLAYERC AND N <> R THEN VALID = 1 N = R + 16 F = F + 20 FOR R = N TO M STEP 16 PAINT (F + 10, R + 10), PLAYERC, 7 F = F + 20 NEXT R END IF ' Left & Down N = Y + 14 F = X - 20 M = N G = F C = 0 FOR R = N TO 170 STEP 16 C = POINT(F + 10, R + 10) IF C = 7 THEN EXIT FOR IF C = PLAYERC THEN EXIT FOR F = F - 20 NEXT R IF C = PLAYERC AND N <> R THEN VALID = 1 N = R - 14 F = X - 20 FOR R = M TO N STEP 16 PAINT (F + 10, R + 10), PLAYERC, 7 F = F - 20 NEXT R END IF ' Left & Up N = Y - 18 F = X + 20 M = N G = F C = 0 FOR R = N TO 10 STEP -16 C = POINT(F + 10, R + 10) IF C = 7 THEN EXIT FOR IF C = PLAYERC THEN EXIT FOR F = F + 20 NEXT R IF C = PLAYERC AND N <> R THEN VALID = 1 N = R + 16 F = F - 20 FOR R = N TO M STEP 16 PAINT (F + 10, R + 10), PLAYERC, 7 F = F - 20 NEXT R END IF IF VALID = -1 THEN IF PLAYER = 1 AND PLAYERC = 12 THEN ELSE LOCATE 9, 32: COLOR 14: PRINT "ILLEGAL" LOCATE 11, 33: PRINT "MOVE!" SLEEP 1 LOCATE 9, 32: PRINT SPACE$(9) LOCATE 11, 33: PRINT SPACE$(5) END IF RETURN ELSE BOX = BOX + 1 END IF CIRCLE (X + 10, Y + 8), 7, PLAYERC PAINT (X + 10, Y + 8), PLAYERC SWAP PLAYERC, PC PAINT (275, 30), PLAYERC, 0 IF BOX = 100 THEN LOCATE 9, 31: PRINT SPACE$(9): GOTO DECIDEWINNER RETURN DECIDEWINNER: BLUE = 0 RED = 0 LOCATE 20, 31: PRINT SPACE$(9) LOCATE 22, 31: PRINT SPACE$(9) LOCATE 8, 33: COLOR 10: PRINT "FINAL" LOCATE 10, 33: PRINT "SCORE" LOCATE 13, 31: COLOR 9: PRINT "BLUE:" LOCATE 15, 31: COLOR 12: PRINT "RED: " COLOR 15 Y = 24 DO FOR X = 25 TO 220 STEP 20 CL = POINT(X, Y) IF CL = 9 THEN BLUE = BLUE + 1: LOCATE 13, 36: PRINT BLUE IF CL = 12 THEN RED = RED + 1: LOCATE 15, 36: PRINT RED NEXT X Y = Y + 16 LOOP UNTIL Y >= 170 COLOR 14 IF BLUE > RED THEN LOCATE 19, 31: PRINT "BLUE WINS!" IF RED > BLUE THEN LOCATE 19, 31: PRINT "RED WINS!" IF BLUE = RED THEN LOCATE 19, 31: PRINT "IT'S A TIE" LOCATE 25, 1: PRINT "ANOTHER GAME [Y/N] "; : COLOR 12 DO A$ = INPUT$(1) ANS$ = UCASE$(A$) LOOP UNTIL ANS$ = "Y" OR ANS$ = "N" IF UCASE$(A$) = "Y" THEN CLS : GOTO BEGINGAME OTHELLOEND: SCREEN 0, 0, , 0: CLS WIDTH 80, 25