' ' ' TicTacToe ' by Steve Nunnally ' ' ' ' NOTE: winner goes first, if no winner first move alternates ' ' DEFINT A-Z DECLARE SUB Mouse (cx, dx, bx) DECLARE SUB MousePointer (SW) DIM SHARED a(9), board(1 TO 3) AS STRING DIM SHARED arrow(100) DEF SEG = VARSEG(a(0)) FOR i = 0 TO 17 READ r POKE VARPTR(a(0)) + i, r NEXT i CALL MousePointer(0) CALL MousePointer(3) SCREEN 12 LINE (20, 120)-(20, 135), 15: LINE (20, 120)-(30, 135), 15 LINE (20, 135)-(30, 135), 15: PAINT (21, 129), 15 LINE (22, 135)-(24, 140), 15: LINE (24, 140)-(28, 140), 15 LINE (28, 140)-(26, 135), 15: PAINT (25, 137), 15 GET (20, 120)-(30, 140), arrow turn$ = "O's Turn" 'Change the capital O to a capital X for the X's to 'go first PlayAgain: gone = 0 CLS ocolor = 14 'Change these numbers from 1 - 15 to make the xcolor = 4 'X's and O's different colors board(1) = " " board(2) = " " board(3) = " " LINE (171, 191)-(471, 191), 15: LINE (171, 291)-(471, 291), 15 LINE (271, 91)-(271, 391), 15: LINE (371, 91)-(371, 391), 15 CALL Mouse(up, over, button) PUT (over, up), arrow, XOR COLOR 15: LOCATE 3, 36: PRINT turn$ DO o = over: u = up CALL Mouse(up, over, button) IF o <> over OR u <> up THEN PUT (o, u), arrow, XOR IF over > 460 THEN over = 460 IF over < 171 THEN over = 171 IF up > 371 THEN up = 371 IF up < 91 THEN up = 91 PUT (over, up), arrow, XOR END IF mo = INT((over - 171) / 100): mu = INT((up - 91) / 100) mo = mo + 1: mu = mu + 1 IF button = 1 AND MID$(board$(mu), mo, 1) = " " THEN gone = gone + 1 IF turn$ = "O's Turn" THEN mo = INT((over - 171) / 100): mu = INT((up - 91) / 100) mo = mo + 1: mu = mu + 1 MID$(board$(mu), mo, 1) = "o" mo = mo - 1: mu = mu - 1 CIRCLE ((100 * mo) + 221, (100 * mu) + 141), 49, ocolor IF MID$(board(1), 1, 3) = "ooo" THEN GOSUB PlayerWon IF MID$(board(2), 1, 3) = "ooo" THEN GOSUB PlayerWon IF MID$(board(3), 1, 3) = "ooo" THEN GOSUB PlayerWon IF MID$(board(1), 1, 1) = "o" AND MID$(board(2), 1, 1) = "o" AND MID$(board(3), 1, 1) = "o" THEN GOSUB PlayerWon IF MID$(board(1), 2, 1) = "o" AND MID$(board(2), 2, 1) = "o" AND MID$(board(3), 2, 1) = "o" THEN GOSUB PlayerWon IF MID$(board(1), 3, 1) = "o" AND MID$(board(2), 3, 1) = "o" AND MID$(board(3), 3, 1) = "o" THEN GOSUB PlayerWon IF MID$(board(1), 1, 1) = "o" AND MID$(board(2), 2, 1) = "o" AND MID$(board(3), 3, 1) = "o" THEN GOSUB PlayerWon IF MID$(board(3), 1, 1) = "o" AND MID$(board(2), 2, 1) = "o" AND MID$(board(1), 3, 1) = "o" THEN GOSUB PlayerWon END IF IF turn$ = "X's Turn" THEN mo = INT((over - 171) / 100): mu = INT((up - 91) / 100) mo = mo + 1: mu = mu + 1 MID$(board$(mu), mo, 1) = "x" mo = mo - 1: mu = mu - 1 PUT (over, up), arrow, XOR LINE ((100 * mo) + 172, (100 * mu) + 92)-((100 * mo) + 270, (100 * mu) + 190), xcolor LINE ((100 * mo) + 172, (100 * mu) + 190)-((100 * mo) + 270, (100 * mu) + 92), xcolor PUT (over, up), arrow, XOR IF MID$(board(1), 1, 3) = "xxx" THEN GOSUB PlayerWon IF MID$(board(2), 1, 3) = "xxx" THEN GOSUB PlayerWon IF MID$(board(3), 1, 3) = "xxx" THEN GOSUB PlayerWon IF MID$(board(1), 1, 1) = "x" AND MID$(board(2), 1, 1) = "x" AND MID$(board(3), 1, 1) = "x" THEN GOSUB PlayerWon IF MID$(board(1), 2, 1) = "x" AND MID$(board(2), 2, 1) = "x" AND MID$(board(3), 2, 1) = "x" THEN GOSUB PlayerWon IF MID$(board(1), 3, 1) = "x" AND MID$(board(2), 3, 1) = "x" AND MID$(board(3), 3, 1) = "x" THEN GOSUB PlayerWon IF MID$(board(1), 1, 1) = "x" AND MID$(board(2), 2, 1) = "x" AND MID$(board(3), 3, 1) = "x" THEN GOSUB PlayerWon IF MID$(board(3), 1, 1) = "x" AND MID$(board(2), 2, 1) = "x" AND MID$(board(1), 3, 1) = "x" THEN GOSUB PlayerWon END IF IF turn$ = "O's Turn" THEN turn$ = "X's Turn" ELSE turn$ = "O's Turn" END IF COLOR 15: LOCATE 3, 36: PRINT turn$ button = 0 END IF IF gone = 9 THEN GOSUB Tie LOOP PlayerWon: COLOR 15 LOCATE 3, 36: PRINT " " LOCATE 3, 38: PRINT MID$(turn$, 1, 1); " WON!!" LOCATE 4, 28: PRINT "Press Any Key To Continue" SLEEP Menu: LOCATE 3, 34: PRINT " " LOCATE 4, 28: PRINT " " LOCATE 3, 34: PRINT "Play Again??" LOCATE 4, 34: PRINT "1: Yes" LOCATE 5, 34: PRINT "2: No" DO key$ = INKEY$ IF key$ = "1" THEN GOSUB PlayAgain LOOP UNTIL key$ = "2" SYSTEM Tie: COLOR 15 LOCATE 3, 34: PRINT "NOBODY WON!!" LOCATE 4, 28: PRINT "Press Any Key To Continue" SLEEP GOSUB Menu DATA &HB8,&H00,&H00 : DATA &H55 : DATA &H8B,&HEC : DATA &HCD,&H33 : DATA &H92 : DATA &H8B,&H5E,&H06 : DATA &H89,&H07 : DATA &H5D : DATA &HCA,&H02,&H00 : SUB Mouse (up, over, button) POKE VARPTR(a(4)), &H92 CALL absolute(up, VARPTR(a(0))) up = up POKE VARPTR(a(4)), &H91 CALL absolute(over, VARPTR(a(0))) over = over POKE VARPTR(a(4)), &H93 CALL absolute(button, VARPTR(a(0))) END SUB SUB MousePointer (SW) POKE VARPTR(a(0)) + 1, SW CALL absolute(c, VARPTR(a(0))) END SUB