' Welcome to Chris's TicTacToe Game! ' ' ********************************** ' * Press Shift+F5 * ' * to start playing * ' * * ' * copyright 1999 cem * ' ********************************** ' ' ' ' ' ' ' ' ' ' DECLARE SUB TitleScreen () DECLARE SUB DrawBoard () CALL TitleScreen Beginning: CLS SCREEN 12 DRAW "bm1,1c15r638d478l638u478" LOCATE 1, 31: COLOR 15: PRINT "Chris's TicTacToe!" COLOR 2 LOCATE 3, 20: INPUT "One or two player game (1 = one/2 = two)?", q x1 = 0 x2 = 0 x3 = 0 x4 = 0 x5 = 0 x6 = 0 x7 = 0 x8 = 0 x9 = 0 x = 14 y = 16 z = 19 a = 35 b = 40 c = 45 IF q = 2 THEN GOTO TwoPlayer LOCATE 5, 22: INPUT "Who goes first (c=computer/u=user) ?", u$ CALL DrawBoard IF u$ = "c" THEN GOTO CompMove IF u$ = "u" THEN GOTO Game GOTO Beginning Game: LOCATE 8, 57: PRINT " " COLOR 4: LOCATE 8, 2: INPUT "Where would you like to put your X? (q=quit, n=no move)", a$ IF a$ = "q" THEN GOTO TheEnd IF a$ = "n" THEN GOTO CatGame COLOR 15 IF a$ = "xa" AND x1 = 0 THEN LOCATE x, a: PRINT "X": x1 = 1: GOTO CheckUWin IF a$ = "xb" AND x2 = 0 THEN LOCATE x, b: PRINT "X": x2 = 1: GOTO CheckUWin IF a$ = "xc" AND x3 = 0 THEN LOCATE x, c: PRINT "X": x3 = 1: GOTO CheckUWin IF a$ = "ya" AND x4 = 0 THEN LOCATE y, a: PRINT "X": x4 = 1: GOTO CheckUWin IF a$ = "yb" AND x5 = 0 THEN LOCATE y, b: PRINT "X": x5 = 1: GOTO CheckUWin IF a$ = "yc" AND x6 = 0 THEN LOCATE y, c: PRINT "X": x6 = 1: GOTO CheckUWin IF a$ = "za" AND x7 = 0 THEN LOCATE z, a: PRINT "X": x7 = 1: GOTO CheckUWin IF a$ = "zb" AND x8 = 0 THEN LOCATE z, b: PRINT "X": x8 = 1: GOTO CheckUWin IF a$ = "zc" AND x9 = 0 THEN LOCATE z, c: PRINT "X": x9 = 1: GOTO CheckUWin GOTO Game CheckUWin: COLOR 15 IF x1 = x2 AND x1 = x3 AND x1 > 0 THEN LINE (280, 215)-(360, 215): LOCATE 13, 12: COLOR 5: GOTO UserWin IF x4 = x5 AND x4 = x6 AND x4 > 0 THEN LINE (280, 255)-(360, 255): LOCATE 13, 12: COLOR 5: GOTO UserWin IF x7 = x8 AND x7 = x9 AND x7 > 0 THEN LINE (280, 295)-(360, 295): LOCATE 13, 12: COLOR 5: GOTO UserWin IF x1 = x4 AND x1 = x7 AND x1 > 0 THEN LINE (280, 215)-(280, 295): LOCATE 13, 12: COLOR 5: GOTO UserWin IF x2 = x5 AND x2 = x8 AND x2 > 0 THEN LINE (320, 215)-(320, 295): LOCATE 13, 12: COLOR 5: GOTO UserWin IF x3 = x6 AND x3 = x9 AND x3 > 0 THEN LINE (360, 215)-(360, 295): LOCATE 13, 12: COLOR 5: GOTO UserWin IF x1 = x5 AND x1 = x9 AND x1 > 0 THEN LINE (280, 215)-(360, 295): LOCATE 13, 12: COLOR 5: GOTO UserWin IF x3 = x5 AND x3 = x7 AND x3 > 0 THEN LINE (360, 215)-(280, 295): LOCATE 13, 12: COLOR 5: GOTO UserWin CompMove: COLOR 15 IF x5 = 0 THEN LOCATE y, b: PRINT "O": x5 = 2: GOTO Game IF x1 = 0 AND x2 = 2 AND x3 = 2 THEN LOCATE x, a: PRINT "O": LINE (280, 215)-(360, 215): GOTO CompWins IF x1 = 0 AND x4 = 2 AND x7 = 2 THEN LOCATE x, a: PRINT "O": LINE (280, 215)-(280, 295): GOTO CompWins IF x1 = 0 AND x5 = 2 AND x9 = 2 THEN LOCATE x, a: PRINT "O": LINE (280, 215)-(360, 295): GOTO CompWins IF x2 = 0 AND x5 = 2 AND x8 = 2 THEN LOCATE x, b: PRINT "O": LINE (320, 215)-(320, 295): GOTO CompWins IF x2 = 0 AND x1 = 2 AND x3 = 2 THEN LOCATE x, b: PRINT "O": LINE (280, 215)-(360, 215): GOTO CompWins IF x3 = 0 AND x1 = 2 AND x2 = 2 THEN LOCATE x, c: PRINT "O": LINE (280, 215)-(360, 215): GOTO CompWins IF x3 = 0 AND x5 = 2 AND x7 = 2 THEN LOCATE x, c: PRINT "O": LINE (360, 215)-(280, 295): GOTO CompWins IF x3 = 0 AND x6 = 2 AND x9 = 2 THEN LOCATE x, c: PRINT "O": LINE (360, 215)-(360, 295): GOTO CompWins IF x4 = 0 AND x1 = 2 AND x7 = 2 THEN LOCATE y, a: PRINT "O": LINE (280, 215)-(280, 295): GOTO CompWins IF x4 = 0 AND x5 = 2 AND x6 = 2 THEN LOCATE y, a: PRINT "O": LINE (280, 255)-(360, 255): GOTO CompWins IF x6 = 0 AND x3 = 2 AND x9 = 2 THEN LOCATE y, c: PRINT "O": LINE (360, 215)-(360, 295): GOTO CompWins IF x6 = 0 AND x4 = 2 AND x5 = 2 THEN LOCATE y, c: PRINT "O": LINE (280, 255)-(360, 255): GOTO CompWins IF x7 = 0 AND x4 = 2 AND x1 = 2 THEN LOCATE z, a: PRINT "O": LINE (280, 215)-(280, 295): GOTO CompWins IF x7 = 0 AND x8 = 2 AND x9 = 2 THEN LOCATE z, a: PRINT "O": LINE (280, 295)-(360, 295): GOTO CompWins IF x7 = 0 AND x5 = 2 AND x3 = 2 THEN LOCATE z, a: PRINT "O": LINE (360, 215)-(280, 295): GOTO CompWins IF x8 = 0 AND x5 = 2 AND x2 = 2 THEN LOCATE z, b: PRINT "O": LINE (320, 215)-(320, 295): GOTO CompWins IF x8 = 0 AND x7 = 2 AND x9 = 2 THEN LOCATE z, b: PRINT "O": LINE (280, 295)-(360, 295): GOTO CompWins IF x9 = 0 AND x8 = 2 AND x7 = 2 THEN LOCATE z, c: PRINT "O": LINE (280, 295)-(360, 295): GOTO CompWins IF x9 = 0 AND x6 = 2 AND x3 = 2 THEN LOCATE z, c: PRINT "O": LINE (360, 215)-(360, 295): GOTO CompWins IF x9 = 0 AND x5 = 2 AND x1 = 2 THEN LOCATE z, c: PRINT "O": LINE (280, 215)-(360, 295): GOTO CompWins IF x1 = 0 AND x2 = 1 AND x3 = 1 THEN LOCATE x, a: PRINT "O": x1 = 2: GOTO Game IF x1 = 0 AND x4 = 1 AND x7 = 1 THEN LOCATE x, a: PRINT "O": x1 = 2: GOTO Game IF x1 = 0 AND x5 = 1 AND x9 = 1 THEN LOCATE x, a: PRINT "O": x1 = 2: GOTO Game IF x2 = 0 AND x5 = 1 AND x8 = 1 THEN LOCATE x, b: PRINT "O": x2 = 2: GOTO Game IF x2 = 0 AND x1 = 1 AND x3 = 1 THEN LOCATE x, b: PRINT "O": x2 = 2: GOTO Game IF x3 = 0 AND x1 = 1 AND x2 = 1 THEN LOCATE x, c: PRINT "O": x3 = 2: GOTO Game IF x3 = 0 AND x5 = 1 AND x7 = 1 THEN LOCATE x, c: PRINT "O": x3 = 2: GOTO Game IF x3 = 0 AND x6 = 1 AND x9 = 1 THEN LOCATE x, c: PRINT "O": x3 = 2: GOTO Game IF x4 = 0 AND x1 = 1 AND x7 = 1 THEN LOCATE y, a: PRINT "O": x4 = 2: GOTO Game IF x4 = 0 AND x5 = 1 AND x6 = 1 THEN LOCATE y, a: PRINT "O": x4 = 2: GOTO Game IF x6 = 0 AND x3 = 1 AND x9 = 1 THEN LOCATE y, c: PRINT "O": x6 = 2: GOTO Game IF x6 = 0 AND x4 = 1 AND x5 = 1 THEN LOCATE y, c: PRINT "O": x6 = 2: GOTO Game IF x7 = 0 AND x4 = 1 AND x1 = 1 THEN LOCATE z, a: PRINT "O": x7 = 2: GOTO Game IF x7 = 0 AND x8 = 1 AND x9 = 1 THEN LOCATE z, a: PRINT "O": x7 = 2: GOTO Game IF x7 = 0 AND x5 = 1 AND x3 = 1 THEN LOCATE z, a: PRINT "O": x7 = 2: GOTO Game IF x8 = 0 AND x4 = 1 AND x2 = 1 THEN LOCATE z, b: PRINT "O": x8 = 2: GOTO Game IF x8 = 0 AND x7 = 1 AND x9 = 1 THEN LOCATE z, b: PRINT "O": x8 = 2: GOTO Game IF x9 = 0 AND x8 = 1 AND x7 = 1 THEN LOCATE z, c: PRINT "O": x9 = 2: GOTO Game IF x9 = 0 AND x6 = 1 AND x3 = 1 THEN LOCATE z, c: PRINT "O": x9 = 2: GOTO Game IF x9 = 0 AND x5 = 1 AND x1 = 1 THEN LOCATE z, c: PRINT "O": x9 = 2: GOTO Game p = INT(RND * 4) + 1 IF p = 1 AND x5 = 1 AND x1 = 0 THEN LOCATE x, a: PRINT "O": x1 = 2: GOTO Game IF p = 2 AND x5 = 1 AND x7 = 0 THEN LOCATE z, a: PRINT "O": x7 = 2: GOTO Game IF p = 3 AND x5 = 1 AND x9 = 0 THEN LOCATE z, c: PRINT "O": x9 = 2: GOTO Game IF p = 4 AND x5 = 1 AND x3 = 0 THEN LOCATE x, c: PRINT "O": x3 = 2: GOTO Game g = INT(RND * 9) + 1 k = 1 TestSpot: g = (g + 1) MOD 10 IF g = 1 AND x1 = 0 THEN LOCATE x, a: PRINT "O": x1 = 2: GOTO Game IF g = 2 AND x2 = 0 THEN LOCATE x, b: PRINT "O": x2 = 2: GOTO Game IF g = 3 AND x3 = 0 THEN LOCATE x, c: PRINT "O": x3 = 2: GOTO Game IF g = 4 AND x4 = 0 THEN LOCATE y, a: PRINT "O": x4 = 2: GOTO Game IF g = 5 AND x5 = 0 THEN LOCATE y, b: PRINT "O": x5 = 2: GOTO Game IF g = 6 AND x6 = 0 THEN LOCATE y, c: PRINT "O": x6 = 2: GOTO Game IF g = 7 AND x7 = 0 THEN LOCATE z, a: PRINT "O": x7 = 2: GOTO Game IF g = 8 AND x8 = 0 THEN LOCATE z, b: PRINT "O": x8 = 2: GOTO Game IF g = 9 AND x9 = 0 THEN LOCATE z, c: PRINT "O": x9 = 2: GOTO Game IF k = 11 THEN GOTO CatGame k = k + 1 GOTO TestSpot CompWins: LOCATE 20, 12: COLOR 5: PRINT "COMPUTER WINS!!!" PLAY "o1l8bcb" GOTO TheEnd UserWin: PLAY "l10o3co2gaggbo3c" LOCATE 20, 12: COLOR 5: PRINT "YOU WIN!!" GOTO TheEnd TheEnd: LOCATE 23, 1 PRINT "Do you want to play again?" INPUT j$ IF j$ = "y" THEN GOTO Beginning IF j$ = "n" THEN END GOTO TheEnd CatGame: LOCATE 23, 1 COLOR 5 PRINT "Cat Game! Nobody Wins! Do you want to play again?" INPUT j$ IF j$ = "y" THEN GOTO Beginning IF j$ = "n" THEN END GOTO CatGame TwoPlayer: LOCATE 5, 34: COLOR 2: PRINT "X goes first" CALL DrawBoard Game2: LOCATE 8, 57: PRINT " " COLOR 4: LOCATE 8, 2: INPUT "Where would you like to put your X? (q=quit, n=no move)", a$ IF a$ = "q" THEN GOTO TheEnd IF a$ = "n" THEN GOTO CatGame COLOR 15 IF a$ = "xa" AND x1 = 0 THEN LOCATE x, a: PRINT "X": x1 = 1: GOTO CheckUWin2 IF a$ = "xb" AND x2 = 0 THEN LOCATE x, b: PRINT "X": x2 = 1: GOTO CheckUWin2 IF a$ = "xc" AND x3 = 0 THEN LOCATE x, c: PRINT "X": x3 = 1: GOTO CheckUWin2 IF a$ = "ya" AND x4 = 0 THEN LOCATE y, a: PRINT "X": x4 = 1: GOTO CheckUWin2 IF a$ = "yb" AND x5 = 0 THEN LOCATE y, b: PRINT "X": x5 = 1: GOTO CheckUWin2 IF a$ = "yc" AND x6 = 0 THEN LOCATE y, c: PRINT "X": x6 = 1: GOTO CheckUWin2 IF a$ = "za" AND x7 = 0 THEN LOCATE z, a: PRINT "X": x7 = 1: GOTO CheckUWin2 IF a$ = "zb" AND x8 = 0 THEN LOCATE z, b: PRINT "X": x8 = 1: GOTO CheckUWin2 IF a$ = "zc" AND x9 = 0 THEN LOCATE z, c: PRINT "X": x9 = 1: GOTO CheckUWin2 GOTO Game2 CheckUWin2: COLOR 15 IF x1 = x2 AND x1 = x3 AND x1 > 0 THEN LINE (280, 215)-(360, 215): LOCATE 13, 12: COLOR 5: GOTO Player1Win IF x4 = x5 AND x4 = x6 AND x4 > 0 THEN LINE (280, 255)-(360, 255): LOCATE 13, 12: COLOR 5: GOTO Player1Win IF x7 = x8 AND x7 = x9 AND x7 > 0 THEN LINE (280, 295)-(360, 295): LOCATE 13, 12: COLOR 5: GOTO Player1Win IF x1 = x4 AND x1 = x7 AND x1 > 0 THEN LINE (280, 215)-(280, 295): LOCATE 13, 12: COLOR 5: GOTO Player1Win IF x2 = x5 AND x2 = x8 AND x2 > 0 THEN LINE (320, 215)-(320, 295): LOCATE 13, 12: COLOR 5: GOTO Player1Win IF x3 = x6 AND x3 = x9 AND x3 > 0 THEN LINE (360, 215)-(360, 295): LOCATE 13, 12: COLOR 5: GOTO Player1Win IF x1 = x5 AND x1 = x9 AND x1 > 0 THEN LINE (280, 215)-(360, 295): LOCATE 13, 12: COLOR 5: GOTO Player1Win IF x3 = x5 AND x3 = x7 AND x3 > 0 THEN LINE (360, 215)-(280, 295): LOCATE 13, 12: COLOR 5: GOTO Player1Win Player2: LOCATE 8, 57: PRINT " " COLOR 4: LOCATE 8, 2: INPUT "Where would you like to put your O? (q=quit, n=no move)", a$ IF a$ = "q" THEN GOTO TheEnd IF a$ = "n" THEN GOTO CatGame COLOR 15 IF a$ = "xa" AND x1 = 0 THEN LOCATE x, a: PRINT "O": x1 = 2: GOTO CheckUWin3 IF a$ = "xb" AND x2 = 0 THEN LOCATE x, b: PRINT "O": x2 = 2: GOTO CheckUWin3 IF a$ = "xc" AND x3 = 0 THEN LOCATE x, c: PRINT "O": x3 = 2: GOTO CheckUWin3 IF a$ = "ya" AND x4 = 0 THEN LOCATE y, a: PRINT "O": x4 = 2: GOTO CheckUWin3 IF a$ = "yb" AND x5 = 0 THEN LOCATE y, b: PRINT "O": x5 = 2: GOTO CheckUWin3 IF a$ = "yc" AND x6 = 0 THEN LOCATE y, c: PRINT "O": x6 = 2: GOTO CheckUWin3 IF a$ = "za" AND x7 = 0 THEN LOCATE z, a: PRINT "O": x7 = 2: GOTO CheckUWin3 IF a$ = "zb" AND x8 = 0 THEN LOCATE z, b: PRINT "O": x8 = 2: GOTO CheckUWin3 IF a$ = "zc" AND x9 = 0 THEN LOCATE z, c: PRINT "O": x9 = 2: GOTO CheckUWin3 GOTO Player2 CheckUWin3: COLOR 15 IF x1 = x2 AND x1 = x3 AND x1 = 2 THEN LINE (280, 215)-(360, 215): LOCATE 13, 12: COLOR 5: GOTO Player2Win IF x4 = x5 AND x4 = x6 AND x4 = 2 THEN LINE (280, 255)-(360, 255): LOCATE 13, 12: COLOR 5: GOTO Player2Win IF x7 = x8 AND x7 = x9 AND x7 = 2 THEN LINE (280, 295)-(360, 295): LOCATE 13, 12: COLOR 5: GOTO Player2Win IF x1 = x4 AND x1 = x7 AND x1 = 2 THEN LINE (280, 215)-(280, 295): LOCATE 13, 12: COLOR 5: GOTO Player2Win IF x2 = x5 AND x2 = x8 AND x2 = 2 THEN LINE (320, 215)-(320, 295): LOCATE 13, 12: COLOR 5: GOTO Player2Win IF x3 = x6 AND x3 = x9 AND x3 = 2 THEN LINE (360, 215)-(360, 295): LOCATE 13, 12: COLOR 5: GOTO Player2Win IF x1 = x5 AND x1 = x9 AND x1 = 2 THEN LINE (280, 215)-(360, 295): LOCATE 13, 12: COLOR 5: GOTO Player2Win IF x3 = x5 AND x3 = x7 AND x3 = 2 THEN LINE (360, 215)-(280, 295): LOCATE 13, 12: COLOR 5: GOTO Player2Win GOTO Game2 Player1Win: LOCATE 20, 12: COLOR 5: PRINT "Player X Wins!" GOTO TheEnd Player2Win: LOCATE 20, 12: COLOR 5: PRINT "Player O Wins!" GOTO TheEnd SUB DrawBoard SCREEN 12 DRAW "bm320,255bl60bu60c15r120d120l120u120r40d120r40u120r40d40l120d40r120u80l120e10r120d120g10u120e10g10l40e10l40g10r80d40e10d40g10" PAINT (320, 240), 4, 15 PAINT (280, 200), 4, 15 PAINT (360, 280), 4, 15 PAINT (360, 200), 4, 15 PAINT (280, 280), 4, 15 PAINT (320, 200), 8, 15 PAINT (280, 240), 8, 15 PAINT (320, 280), 8, 15 PAINT (360, 240), 8, 15 DRAW "c1bm275,340u20r10d20u10l10" DRAW "c1bm315,340u20r10d9l1d1l9r9d1r1d9l10" DRAW "c1bm355,340u20r10l10d20r10" DRAW "c1bm240,200m250,220bm250,200m240,220" DRAW "c1bm240,240m248,248bm250,240m245,260" DRAW "c1bm240,280r10m240,300r10" END SUB SUB TitleScreen CLS SCREEN 12 u = 1 Animate: CLS LOCATE u, 31: PRINT "Chris's TicTacToe!" FOR x = 1 TO 1000: NEXT x u = u + 1 IF u = 15 THEN GOTO FinishIt GOTO Animate FinishIt: BEEP FOR x = 1 TO 30000: NEXT x END SUB