Tic Tac Toe
View.Set ("graphics:500;600")
var x, y, b : int % X and Y coordinates, button variables var winsX, winsO, winNo : int := 0 % Counter for wins, losses, and ties var font, fontWins : int var turn : boolean := false % True for X, false for O var picX, picO : int % Picture variable for the X and O var randCell : int % Random cell variable for AI var steve : boolean := true % Set Steve to "False" to play 2 player game var turns : int := 1 % Variable counting who's turn it is var gameOn, exitVar : boolean := false % Flags for exiting the whole game loop, or single game instance var keyCheck : array char of boolean % Array controlling keyboard input var AICheck : array 1 .. 8 of boolean := init (false, false, false, false, false, false, false, false) % Row/Column/Diagonal check array var posX, posO : array 1 .. 8 of int := init (0, 0, 0, 0, 0, 0, 0, 0) % Row/Column/Diagonal points counter (O and X) var square : array 1 .. 9 of boolean := init (false, false, false, false, false, false, false, false, false)% Row/Column/Diagonal cell check font := Font.New ("Times New Roman:14:bold") fontWins := Font.New ("Times New Roman:12") /* Draws X picture then saves it in a variable */ Draw.ThickLine (5, 5, 95, 95, 3, 16) Draw.ThickLine (5, 95, 95, 5, 3, 16) picX := Pic.New (0, 0, 100, 100) cls /* Draws O picture then saves it in a variable */ Draw.FillOval (50, 50, 45, 45, 16) Draw.FillOval (50, 50, 42, 42, 0) picO := Pic.New (0, 0, 100, 100) cls /* Sets all required game variables to default values */ procedure Restart for i : 1 .. 9 square (i) := false end for for i : 1 .. 8 AICheck (i) := false posX (i) := 0 posO (i) := 0 end for if turns mod 2 = 0 then turn := true else turn := false end if end Restart /* Artificial Intelligence, Steve. Used for Single-Player games */ procedure AI if turn = false then if square (1) = true and square (2) = true and square (3) = true then AICheck (1) := true end if if square (4) = true and square (5) = true and square (6) = true then AICheck (2) := true end if if square (7) = true and square (8) = true and square (9) = true then AICheck (3) := true end if if square (1) = true and square (4) = true and square (7) = true then AICheck (4) := true end if if square (2) = true and square (5) = true and square (8) = true then AICheck (5) := true end if if square (3) = true and square (6) = true and square (9) = true then AICheck (6) := true end if if square (1) = true and square (5) = true and square (9) = true then AICheck (7) := true end if if square (7) = true and square (5) = true and square (3) = true then AICheck (8) := true end if loop if AICheck (1) = false then if posO (1) = 7 then Pic.Draw (picO, 300, 100, picMerge) posO (1) += 8 posO (6) += 8 posO (8) += 8 turn := true square (3) := true exit elsif posO (1) = 9 then Pic.Draw (picO, 100, 100, picMerge) posO (1) += 6 posO (4) += 6 posO (7) += 6 turn := true square (1) := true exit elsif posO (1) = 14 then Pic.Draw (picO, 200, 100, picMerge) posO (1) += 1 posO (5) += 1 turn := true square (2) := true exit end if end if if AICheck (2) = false then if posO (2) = 10 then Pic.Draw (picO, 200, 200, picMerge) posO (2) += 5 posO (5) += 5 posO (7) += 5 posO (8) += 5 turn := true square (5) := true exit elsif posO (2) = 12 then Pic.Draw (picO, 300, 200, picMerge) posO (2) += 3 posO (6) += 3 turn := true square (6) := true exit elsif posO (2) = 8 then Pic.Draw (picO, 100, 200, picMerge) posO (2) += 7 posO (4) += 7 turn := true square (4) := true exit end if end if if AICheck (3) = false then if posO (3) = 13 then Pic.Draw (picO, 100, 300, picMerge) posO (3) += 2 posO (4) += 2 posO (8) += 2 turn := true square (7) := true exit elsif posO (3) = 6 then Pic.Draw (picO, 200, 300, picMerge) posO (3) += 9 posO (5) += 9 turn := true square (8) := true exit elsif posO (3) = 11 then Pic.Draw (picO, 300, 300, picMerge) posO (3) += 4 posO (6) += 4 posO (7) += 4 turn := true square (9) := true exit end if end if if AICheck (4) = false then if posO (4) = 9 then Pic.Draw (picO, 100, 100, picMerge) posO (1) += 6 posO (4) += 6 posO (7) += 6 turn := true square (1) := true exit elsif posO (4) = 8 then Pic.Draw (picO, 100, 200, picMerge) posO (2) += 7 posO (4) += 7 turn := true square (4) := true exit elsif posO (4) = 13 then Pic.Draw (picO, 100, 300, picMerge) posO (3) += 2 posO (4) += 2 posO (8) += 2 turn := true square (7) := true exit end if end if if AICheck (5) = false then if posO (5) = 14 then Pic.Draw (picO, 200, 100, picMerge) posO (1) += 1 posO (5) += 1 turn := true square (2) := true exit elsif posO (5) = 10 then Pic.Draw (picO, 200, 200, picMerge) posO (2) += 5 posO (5) += 5 posO (7) += 5 posO (8) += 5 turn := true square (5) := true exit elsif posO (5) = 6 then Pic.Draw (picO, 200, 300, picMerge) posO (3) += 9 posO (5) += 9 turn := true square (8) := true exit end if end if if AICheck (6) = false then if posO (6) = 7 then Pic.Draw (picO, 300, 100, picMerge) posO (1) += 8 posO (6) += 8 posO (8) += 8 turn := true square (3) := true exit elsif posO (6) = 12 then Pic.Draw (picO, 300, 200, picMerge) posO (2) += 3 posO (6) += 3 turn := true square (6) := true exit elsif posO (6) = 11 then Pic.Draw (picO, 300, 300, picMerge) posO (3) += 4 posO (6) += 4 posO (7) += 4 turn := true square (9) := true exit end if end if if AICheck (7) = false then if posO (7) = 9 then Pic.Draw (picO, 100, 100, picMerge) posO (1) += 6 posO (4) += 6 posO (7) += 6 turn := true square (1) := true exit elsif posO (7) = 10 then Pic.Draw (picO, 200, 200, picMerge) posO (2) += 5 posO (5) += 5 posO (7) += 5 posO (8) += 5 turn := true square (5) := true exit elsif posO (7) = 11 then Pic.Draw (picO, 300, 300, picMerge) posO (3) += 4 posO (6) += 4 posO (7) += 4 turn := true square (9) := true exit end if end if if AICheck (8) = false then if posO (8) = 13 then Pic.Draw (picO, 100, 300, picMerge) posO (3) += 2 posO (4) += 2 posO (8) += 2 turn := true square (7) := true exit elsif posO (8) = 10 then Pic.Draw (picO, 200, 200, picMerge) posO (2) += 5 posO (5) += 5 posO (7) += 5 posO (8) += 5 turn := true square (5) := true exit elsif posO (8) = 7 then Pic.Draw (picO, 300, 100, picMerge) posO (1) += 8 posO (6) += 8 posO (8) += 8 turn := true square (3) := true exit end if end if if AICheck (1) = false then if posX (1) = 7 then Pic.Draw (picO, 300, 100, picMerge) posO (1) += 8 posO (6) += 8 posO (8) += 8 turn := true square (3) := true exit elsif posX (1) = 9 then Pic.Draw (picO, 100, 100, picMerge) posO (1) += 6 posO (4) += 6 posO (7) += 6 turn := true square (1) := true exit elsif posX (1) = 14 then Pic.Draw (picO, 200, 100, picMerge) posO (1) += 1 posO (5) += 1 turn := true square (2) := true exit end if end if if AICheck (2) = false then if posX (2) = 10 then Pic.Draw (picO, 200, 200, picMerge) posO (2) += 5 posO (5) += 5 posO (7) += 5 posO (8) += 5 turn := true square (5) := true exit elsif posX (2) = 12 then Pic.Draw (picO, 300, 200, picMerge) posO (2) += 3 posO (6) += 3 turn := true square (6) := true exit elsif posX (2) = 8 then Pic.Draw (picO, 100, 200, picMerge) posO (2) += 7 posO (4) += 7 turn := true square (4) := true exit end if end if if AICheck (3) = false then if posX (3) = 13 then Pic.Draw (picO, 100, 300, picMerge) posO (3) += 2 posO (4) += 2 posO (8) += 2 turn := true square (7) := true exit elsif posX (3) = 6 then Pic.Draw (picO, 200, 300, picMerge) posO (3) += 9 posO (5) += 9 turn := true square (8) := true exit elsif posX (3) = 11 then Pic.Draw (picO, 300, 300, picMerge) posO (3) += 4 posO (6) += 4 posO (7) += 4 turn := true square (9) := true exit end if end if if AICheck (4) = false then if posX (4) = 9 then Pic.Draw (picO, 100, 100, picMerge) posO (1) += 6 posO (4) += 6 posO (7) += 6 turn := true square (1) := true exit elsif posX (4) = 8 then Pic.Draw (picO, 100, 200, picMerge) posO (2) += 7 posO (4) += 7 turn := true square (4) := true exit elsif posX (4) = 13 then Pic.Draw (picO, 100, 300, picMerge) posO (3) += 2 posO (4) += 2 posO (8) += 2 turn := true square (7) := true exit end if end if if AICheck (5) = false then if posX (5) = 14 then Pic.Draw (picO, 200, 100, picMerge) posO (1) += 1 posO (5) += 1 turn := true square (2) := true exit elsif posX (5) = 10 then Pic.Draw (picO, 200, 200, picMerge) posO (2) += 5 posO (5) += 5 posO (7) += 5 posO (8) += 5 turn := true square (5) := true exit elsif posX (5) = 6 then Pic.Draw (picO, 200, 300, picMerge) posO (3) += 9 posO (5) += 9 turn := true square (8) := true exit end if end if if AICheck (6) = false then if posX (6) = 7 then Pic.Draw (picO, 300, 100, picMerge) posO (1) += 8 posO (6) += 8 posO (8) += 8 turn := true square (3) := true exit elsif posX (6) = 12 then Pic.Draw (picO, 300, 200, picMerge) posO (2) += 3 posO (6) += 3 turn := true square (6) := true exit elsif posX (6) = 11 then Pic.Draw (picO, 300, 300, picMerge) posO (3) += 4 posO (6) += 4 posO (7) += 4 turn := true square (9) := true exit end if end if if AICheck (7) = false then if posX (7) = 9 then Pic.Draw (picO, 100, 100, picMerge) posO (1) += 6 posO (4) += 6 posO (7) += 6 turn := true square (1) := true exit elsif posX (7) = 10 then Pic.Draw (picO, 200, 200, picMerge) posO (2) += 5 posO (5) += 5 posO (7) += 5 posO (8) += 5 turn := true square (5) := true exit elsif posX (7) = 11 then Pic.Draw (picO, 300, 300, picMerge) posO (3) += 4 posO (6) += 4 posO (7) += 4 turn := true square (9) := true exit end if end if if AICheck (8) = false then if posX (8) = 13 then Pic.Draw (picO, 100, 300, picMerge) posO (3) += 2 posO (4) += 2 posO (8) += 2 turn := true square (7) := true exit elsif posX (8) = 10 then Pic.Draw (picO, 200, 200, picMerge) posO (2) += 5 posO (5) += 5 posO (7) += 5 posO (8) += 5 turn := true square (5) := true exit elsif posX (8) = 7 then Pic.Draw (picO, 300, 100, picMerge) posO (1) += 8 posO (6) += 8 posO (8) += 8 turn := true square (3) := true exit end if end if randCell := Rand.Int (1, 9) if square (randCell) = false then if randCell = 1 then Pic.Draw (picO, 100, 100, picMerge) posO (1) += 6 posO (4) += 6 posO (7) += 6 turn := true square (1) := true exit elsif (randCell = 2 and posX (2) ~= 5) or (randCell = 2 and posO (4) > 0) then Pic.Draw (picO, 200, 100, picMerge) posO (1) += 1 posO (5) += 1 turn := true square (2) := true exit elsif randCell = 3 then Pic.Draw (picO, 300, 100, picMerge) posO (1) += 8 posO (6) += 8 posO (8) += 8 turn := true square (3) := true exit elsif (randCell = 4 and posX (2) ~= 5) or (randCell = 4 and posO (2) > 0) then Pic.Draw (picO, 100, 200, picMerge) posO (2) += 7 posO (4) += 7 turn := true square (4) := true exit elsif randCell = 5 then Pic.Draw (picO, 200, 200, picMerge) posO (2) += 5 posO (5) += 5 posO (7) += 5 posO (8) += 5 turn := true square (5) := true exit elsif (randCell = 6 and posX (2) ~= 5) or (randCell = 6 and posO (2) > 0) then Pic.Draw (picO, 300, 200, picMerge) posO (2) += 3 posO (6) += 3 turn := true square (6) := true exit elsif randCell = 7 then Pic.Draw (picO, 100, 300, picMerge) posO (3) += 2 posO (4) += 2 posO (8) += 2 turn := true square (7) := true exit elsif (randCell = 8 and posX (4) ~= 5) or (randCell = 8 and posO (4) > 0) then Pic.Draw (picO, 200, 300, picMerge) posO (3) += 9 posO (5) += 9 turn := true square (8) := true exit elsif randCell = 9 then Pic.Draw (picO, 300, 300, picMerge) posO (3) += 4 posO (6) += 4 posO (7) += 4 turn := true square (9) := true exit end if end if end loop end if end AI /* */ procedure DrawStuff drawbox (100, 100, 200, 200, 1) % bottom-left drawbox (200, 100, 300, 200, 1) % bottom-centre drawbox (300, 100, 400, 200, 1) % bottom-right drawbox (100, 200, 200, 300, 1) % mid-left drawbox (200, 200, 300, 300, 1) % mid-centre drawbox (300, 200, 400, 300, 1) % mid-right drawbox (100, 300, 200, 400, 1) % top-left drawbox (200, 300, 300, 400, 1) % top-centre drawbox (300, 300, 400, 400, 1) % top-right end DrawStuff loop cls Restart gameOn := true DrawStuff Font.Draw ("Tic Tac Toe", maxx div 2 - 40, maxy - 70, font, 16) Font.Draw ("Wins for X: " + intstr (winsX), maxx div 2 - 90, maxy - 100, fontWins, 16) Font.Draw ("Wins for O: " + intstr (winsO), maxx div 2 + 30, maxy - 100, fontWins, 16) Font.Draw ("Ties: " + intstr (winNo), maxx div 2 - 10, maxy - 120, fontWins, 16) Font.Draw ("Press 'E' to exit and 'R' to play again", maxx div 2 - 100, maxy - 140, fontWins, 16) loop exit when gameOn = false Mouse.Where (x, y, b) if steve = true then AI end if if x > 100 and x < 200 and y > 100 and y < 200 and b = 1 and square (1) = false then if turn = true then Pic.Draw (picX, 100, 100, picMerge) posX (1) += 6 posX (4) += 6 posX (7) += 6 turn := false else Pic.Draw (picO, 100, 100, picMerge) posO (1) += 6 posO (4) += 6 posO (7) += 6 turn := true end if square (1) := true elsif x > 200 and x < 300 and y > 100 and y < 200 and b = 1 and square (2) = false then if turn = true then Pic.Draw (picX, 200, 100, picMerge) posX (1) += 1 posX (5) += 1 turn := false else Pic.Draw (picO, 200, 100, picMerge) posO (1) += 1 posO (5) += 1 turn := true end if square (2) := true elsif x > 300 and x < 400 and y > 100 and y < 200 and b = 1 and square (3) = false then if turn = true then Pic.Draw (picX, 300, 100, picMerge) posX (1) += 8 posX (6) += 8 posX (8) += 8 turn := false else Pic.Draw (picO, 300, 100, picMerge) posO (1) += 8 posO (6) += 8 posO (8) += 8 turn := true end if square (3) := true elsif x > 100 and x < 200 and y > 200 and y < 300 and b = 1 and square (4) = false then if turn = true then Pic.Draw (picX, 100, 200, picMerge) posX (2) += 7 posX (4) += 7 turn := false else Pic.Draw (picO, 100, 200, picMerge) posO (2) += 7 posO (4) += 7 turn := true end if square (4) := true elsif x > 200 and x < 300 and y > 200 and y < 300 and b = 1 and square (5) = false then if turn = true then Pic.Draw (picX, 200, 200, picMerge) posX (2) += 5 posX (5) += 5 posX (7) += 5 posX (8) += 5 turn := false else Pic.Draw (picO, 200, 200, picMerge) posO (2) += 5 posO (5) += 5 posO (7) += 5 posO (8) += 5 turn := true end if square (5) := true elsif x > 300 and x < 400 and y > 200 and y < 300 and b = 1 and square (6) = false then if turn = true then Pic.Draw (picX, 300, 200, picMerge) posX (2) += 3 posX (6) += 3 turn := false else Pic.Draw (picO, 300, 200, picMerge) posO (2) += 3 posO (6) += 3 turn := true end if square (6) := true elsif x > 100 and x < 200 and y > 300 and y < 400 and b = 1 and square (7) = false then if turn = true then Pic.Draw (picX, 100, 300, picMerge) posX (3) += 2 posX (4) += 2 posX (8) += 2 turn := false else Pic.Draw (picO, 100, 300, picMerge) posO (3) += 2 posO (4) += 2 posO (8) += 2 turn := true end if square (7) := true elsif x > 200 and x < 300 and y > 300 and y < 400 and b = 1 and square (8) = false then if turn = true then Pic.Draw (picX, 200, 300, picMerge) posX (3) += 9 posX (5) += 9 turn := false else Pic.Draw (picO, 200, 300, picMerge) posO (3) += 9 posO (5) += 9 turn := true end if square (8) := true elsif x > 300 and x < 400 and y > 300 and y < 400 and b = 1 and square (9) = false then if turn = true then Pic.Draw (picX, 300, 300, picMerge) posX (3) += 4 posX (6) += 4 posX (7) += 4 turn := false else Pic.Draw (picO, 300, 300, picMerge) posO (3) += 4 posO (6) += 4 posO (7) += 4 turn := true end if square (9) := true end if for i : 1 .. 8 if posX (i) = 15 then gameOn := false winsX += 1 if i = 1 then Draw.ThickLine (100, 150, 400, 150, 7, 12) elsif i = 2 then Draw.ThickLine (100, 250, 400, 250, 7, 12) elsif i = 3 then Draw.ThickLine (100, 350, 400, 350, 7, 12) elsif i = 4 then Draw.ThickLine (150, 100, 150, 400, 7, 12) elsif i = 5 then Draw.ThickLine (250, 100, 250, 400, 7, 12) elsif i = 6 then Draw.ThickLine (350, 100, 350, 400, 7, 12) elsif i = 7 then Draw.ThickLine (100, 100, 400, 400, 7, 12) elsif i = 8 then Draw.ThickLine (100, 400, 400, 100, 7, 12) end if elsif posO (i) = 15 then gameOn := false winsO += 1 if i = 1 then Draw.ThickLine (100, 150, 400, 150, 7, 12) elsif i = 2 then Draw.ThickLine (100, 250, 400, 250, 7, 12) elsif i = 3 then Draw.ThickLine (100, 350, 400, 350, 7, 12) elsif i = 4 then Draw.ThickLine (150, 100, 150, 400, 7, 12) elsif i = 5 then Draw.ThickLine (250, 100, 250, 400, 7, 12) elsif i = 6 then Draw.ThickLine (350, 100, 350, 400, 7, 12) elsif i = 7 then Draw.ThickLine (100, 100, 400, 400, 7, 12) elsif i = 8 then Draw.ThickLine (100, 400, 400, 100, 7, 12) end if end if end for if square (1) = true and square (2) = true and square (3) = true and square (4) = true and square (5) = true and square (6) = true and square (7) = true and square (8) = true and square (9) = true then gameOn := false winNo += 1 end if end loop turns += 1 loop Input.KeyDown (keyCheck) if keyCheck ('r') then exit end if if keyCheck ('e') then exitVar := true exit end if end loop exit when exitVar end loop |
I found out that the program i use, Turing that i can have a tic tac toe game.
|