Computer Science Canada

tic tac toe AI

Author:  alnamy [ Sun Jun 06, 2004 5:16 pm ]
Post subject:  tic tac toe AI

hey i am currently taking grade 10 science and i am having a lot of difficulties making a 1 person tic tac toe game (against computer). I have completed a 1v1 (two players) tic tac toe game . but i am stuck on where to start a 1 person tic tac toe game. Could someone kindly show me the programming logic or if possible, show me the source code? Thank you very much

Author:  Tony [ Sun Jun 06, 2004 7:02 pm ]
Post subject: 

basics of AI

doesn't cover tic-tac-toe really, but might be of use anyways...

as for AI... there're 3 possible moves

    defend - block player's 2 in a row to prevent lose

    attack - if no need for defend, form 2 in a row of own

    random - if no place to attack ether, just place your sign randomly

Author:  alnamy [ Sun Jun 06, 2004 8:29 pm ]
Post subject:  please help

Here's what I have now. I understand the logic now but i am not sure how to modify it for the comp

% By BTSP
% The Tic Tac Toe Game

%Sets the screen size
setscreen ("graphics:400;400")

%Makes the background
drawfillbox (0, 0, maxx, maxy, black)

%Draws the large box
drawbox (5, 5, maxx - 5, maxy - 5, yellow)

%Draws the smaller boxes
drawline (maxx div 3, maxy - 5, maxx div 3, 5, yellow)
drawline (maxx div 1.5, maxy - 5, maxx div 1.5, 5, yellow)
drawline (maxx - 5, maxy div 3, 5, maxy div 3, yellow)
drawline (maxx - 5, maxy div 1.5, 5, maxy div 1.5, yellow)

var x, y, button : int
var squares : array 1 .. 9 of int
var playerturn : int := 1
var deemah : int :=0

for a : 1 .. 9
squares (a) := a+2
end for

var players : array 1 .. 2 of string
players (1) := "Judy"
players (2) := "Alice"

loop

mousewhere (x, y, button)
if x >= 5 and x <= maxx div 3 and y >= maxy div 1.5 and y <= maxy - 5 and button = 1 and squares (1) = 3 then
% First square
drawfilloval (maxx div 6, maxy div 1.2, 30, 30, yellow)
drawfilloval (maxx div 6, maxy div 1.2, 20, 20, playerturn)
if playerturn = 1 then
squares (1) := 1
playerturn := 2
elsif playerturn = 2 then
squares (1) := 2
playerturn := 1
end if
elsif x > maxx div 3 and x <= maxx div 1.5 and y >= maxy div 1.5 and y <= maxy - 5 and button = 1 and squares (2) = 4 then
% Second Square
drawfilloval (maxx div 2, maxy div 1.2, 30, 30, yellow)
drawfilloval (maxx div 2, maxy div 1.2, 20, 20, playerturn)
if playerturn = 1 then
squares (2) := 1
playerturn := 2
elsif playerturn = 2 then
squares (2) := 2
playerturn := 1
end if
elsif x > maxx div 1.5 and x <= maxx - 5 and y >= maxy div 1.5 and y <= maxy - 5 and button = 1 and squares (3) = 5 then
% Third Square
drawfilloval (maxx div 1.2, maxy div 1.2, 30, 30, yellow)
drawfilloval (maxx div 1.2, maxy div 1.2, 20, 20, playerturn)
if playerturn = 1 then
squares (3) := 1
playerturn := 2
elsif playerturn = 2 then
squares (3) := 2
playerturn := 1
end if
elsif x >= 5 and x <= maxx div 3 and y >= maxy div 3 and y <= maxy div 1.5 and button = 1 and squares (4) = 6 then
% Fourth Square
drawfilloval (maxx div 6, maxy div 2, 30, 30, yellow)
drawfilloval (maxx div 6, maxy div 2, 20, 20, playerturn)
if playerturn = 1 then
squares (4) := 1
playerturn := 2
elsif playerturn = 2 then
squares (4) := 2
playerturn := 1
end if
elsif x > maxx div 3 and x <= maxx div 1.5 and y >= maxy div 3 and y <= maxy div 1.5 and button = 1 and squares (5) = 7 then
% Fifth Square
drawfilloval (maxx div 2, maxy div 2, 30, 30, yellow)
drawfilloval (maxx div 2, maxy div 2, 20, 20, playerturn)
if playerturn = 1 then
squares (5) := 1
playerturn := 2
elsif playerturn = 2 then
squares (5) := 2
playerturn := 1
end if
elsif x > maxx div 1.5 and x <= maxx - 5 and y >= maxy div 3 and y <= maxy div 1.5 and button = 1 and squares (6) = 8 then
% Sixth Square
drawfilloval (maxx div 1.2, maxy div 2, 30, 30, yellow)
drawfilloval (maxx div 1.2, maxy div 2, 20, 20, playerturn)
if playerturn = 1 then
squares (6) := 1
playerturn := 2
elsif playerturn = 2 then
squares (6) := 2
playerturn := 1
end if
elsif x >= 5 and x <= maxx div 3 and y > 5 and y <= maxy div 3 and button = 1 and squares (7) = 9 then
% Seventh Square
drawfilloval (maxx div 6, maxy div 6, 30, 30, yellow)
drawfilloval (maxx div 6, maxy div 6, 20, 20, playerturn)
if playerturn = 1 then
squares (7) := 1
playerturn := 2
elsif playerturn = 2 then
squares (7) := 2
playerturn := 1
end if
elsif x > maxx div 3 and x <= maxx div 1.5 and y > 5 and y <= maxy div 3 and button = 1 and squares (8) = 10 then
% Eighth Square
drawfilloval (maxx div 2, maxy div 6, 30, 30, yellow)
drawfilloval (maxx div 2, maxy div 6, 20, 20, playerturn)
if playerturn = 1 then
squares (8) := 1
playerturn := 2
elsif playerturn = 2 then
squares (8) := 2
playerturn := 1
end if
elsif x > maxx div 1.5 and x <= maxx - 5 and y > 5 and y <= maxy div 3 and button = 1 and squares (9) = 11 then
% Ninth Square
drawfilloval (maxx div 1.2, maxy div 6, 30, 30, yellow)
drawfilloval (maxx div 1.2, maxy div 6, 20, 20, playerturn)
if playerturn = 1 then
squares (9) := 1
playerturn := 2
elsif playerturn = 2 then
squares (9) := 2
playerturn := 1
end if
end if

if squares (1) = squares (2) and squares (2) = squares (3) then
deemah := squares (1)
exit
elsif squares (1) = squares (4) and squares (4) = squares (7) then
deemah := squares (1)
exit
elsif squares (3) = squares (6) and squares (6) = squares (9) then
deemah := squares (3)
exit
elsif squares (7) = squares (8) and squares (8) = squares (9) then
deemah := squares (7)
exit
elsif squares (2) = squares (5) and squares (5) = squares (8) then
deemah := squares (2)
exit
elsif squares (4) = squares (5) and squares (5) = squares (6) then
deemah := squares (4)
exit
elsif squares (1) = squares (5) and squares (5) = squares (9) then
deemah := squares (1)
exit
elsif squares (3) = squares (5) and squares (5) = squares (7) then
deemah := squares (3)
exit
end if

delay (50)
exit when squares (1) not= 3 and squares (2) not= 4 and squares (3) not= 5 and squares (4) not= 6 and squares (5) not= 7 and squares (6) not= 8 and squares (7) not= 9 and squares (8) not= 10 and
squares (9) not= 11
end loop


: