----------------------------------- kalin Sun Jan 04, 2004 8:15 pm Tic Tac Toe ----------------------------------- Hey, I'm having trouble with the AI for it, could someone please help me?? I've restarted like twenty times and I could use some help... My msn is mynameisamber@hotmail.com feel free to add me!!!! and please help!! ----------------------------------- DanShadow Sun Jan 04, 2004 9:24 pm ----------------------------------- You could make an unbeatable AI that checks moves ahead. Like a bunch of if values: if bottom_left_square="x" and middle_square="x" then Draw.Oval(top_right_corner_x,top_right_corner_y,5,5,2) elsif bottom_left_square="x" and bottom_middle_square="x" then Draw.Oval(bottom_right_corner_x,top_right_corner_y,5,5,2) else %Other things to check all spaces end if This of course isnt completely unbeatable, but you can make it unbeatable if you know a lot of tic tac toe combo moves, lik hitting a bunch of certain ones, so you automatically will get a line if you pick 1 of 2 squares to complete a line. Thats one way you could make AI in tic tac toe. ----------------------------------- Tony Sun Jan 04, 2004 10:32 pm ----------------------------------- the best AI is to make completely random moves :lol: otherwise the simpliest AI would be: DEFEND - block if user has two in a row ATTACK - move so that AI has 2/3 in a row RANDOM - if you're not defending or attacking ----------------------------------- AsianSensation Sun Jan 04, 2004 11:30 pm ----------------------------------- Bugz made his turing 4x4x4 tictactoe unbeatable AI and coded it in c++ and exported to VB so it has the graphics...Im sure if you ask nicely enough, he would give you the code...........................or maybe not. ----------------------------------- kalin Mon Jan 05, 2004 7:14 am ----------------------------------- thanks! That should help! ----------------------------------- DanShadow Mon Jan 05, 2004 9:49 am ----------------------------------- Your welcome... and random moves AI wont win though, lol. ----------------------------------- icedesi Mon Jan 05, 2004 7:42 pm ----------------------------------- That is a good idea eh, never thought of that! 8) :roll: ----------------------------------- kalin Wed Jan 21, 2004 5:48 pm ----------------------------------- Well, either way, I gotta start from scratch!! Boohoo. Oh well. I'll suck it up. Anyone got any tips on making it so that a function says that places are taken?? If not its ok! ----------------------------------- recneps Wed Jan 21, 2004 6:58 pm ----------------------------------- look at my tic tac toe in source code... its not AI, but it shows how i made it so you can only click on sq's with nothing in em ----------------------------------- kalin Wed Jan 21, 2004 7:02 pm ----------------------------------- the one that has the tic tac toe and a couple other games in it?? AKA the zipped up one??? ----------------------------------- Tony Wed Jan 21, 2004 7:04 pm ----------------------------------- just search for "tic tac toe" and "recneps" as the post author in [turing source code] or [turing submissions]... depending on where it was posted and I'm sure you'll find it ----------------------------------- kalin Wed Jan 21, 2004 7:59 pm ----------------------------------- Well, I kinda sorted out a problem I had, now I have a bigger problem . Can anyone help?? var takenx : array 1 .. 9 of boolean var takeny : array 1 .. 9 of int var boxx, boxy : array 1 .. 9 of int var turn, who_won_game : string := "nobody" var x, y, b : int := 0 var answer : string var u, c : array 1 .. 5 of int %process playstuff % loop % Music.PlayFile ("Zelda 2 - Majora's Mask - Deku Palace.mp3") % end loop %end playstuff %fork playstuff procedure Initialize (var c, u : array 1 .. 5 of int) for initial : 1 .. 5 u (initial) := -999 c (initial) := -999 end for end Initialize for i : 1 .. 9 takenx (i) := false takeny (i) := 0 turn := "player 1" end for boxx (1) := 60 boxx (2) := 160 boxx (3) := 260 boxy (1) := 60 boxy (2) := 60 boxy (3) := 60 boxx (4) := 60 boxx (5) := 160 boxx (6) := 260 boxy (4) := 160 boxy (5) := 160 boxy (6) := 160 boxx (7) := 60 boxx (8) := 160 boxx (9) := 260 boxy (7) := 260 boxy (8) := 260 boxy (9) := 260 procedure Draw_Screen for i : 1 .. 9 Draw.Box (boxx (i) - 50, boxy (i) - 50, boxx (i) + 50, boxy (i) + 50, 255) end for end Draw_Screen function Get_Users_Move:int for i : 1 .. 9 if (turn = "player 1") and (x > boxx (i) - 50 and x < boxx (i) + 50) and (y > boxy (i) - 50 and y < boxy (i) + 50) and (b = 1) then takenx (i) := true takeny (i) := 1 turn := "computer" end if end for end Get_Users_Move procedure Plot_Move for i : 1 .. 9 if (takenx (i) = true) and (takeny (i) = 1) then Draw.Line (boxx (i) - 50, boxy (i) + 50, boxx (i) + 50, boxy (i) - 50, 12) Draw.Line (boxx (i) - 50, boxy (i) - 50, boxx (i) + 50, boxy (i) + 50, 12) elsif (takenx (i) = true) and (takeny (i) = 2) then Draw.Oval (boxx (i), boxy (i), 45, 45, 2) end if end for end Plot_Move %!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! function Block_User :int if (takenx (2) = true and takenx (3) = true) and (takeny (2) = 1 and takeny (3) = 1) then Draw.Oval (boxx (1), boxy (1), 45, 45, 2) elsif (takenx (1) = true and takenx (3) = true) and (takeny (1) = 1 and takeny (3) = 1) then Draw.Oval (boxx (4), boxy (2), 45, 45, 2) elsif (takenx (1) = true and takenx (2) = true) and (takeny (1) = 1 and takeny (2) = 1) then Draw.Oval (boxx (7), boxy (3), 45, 45, 2) elsif (takenx (5) = true and takenx (6) = true) and (takeny (5) = 1 and takeny (6) = 1) then Draw.Oval (boxx (2), boxy (4), 45, 45, 2) elsif (takenx (4) = true and takenx (6) = true) and (takeny (4) = 1 and takeny (6) = 1) then Draw.Oval (boxx (5), boxy (5), 45, 45, 2) elsif (takenx (4) = true and takenx (5) = true) and (takeny (4) = 1 and takeny (5) = 1) then Draw.Oval (boxx (8), boxy (6), 45, 45, 2) elsif (takenx (8) = true and takenx (9) = true) and (takeny (8) = 1 and takeny (9) = 1) then Draw.Oval (boxx (3), boxy (7), 45, 45, 2) elsif (takenx (7) = true and takenx (9) = true) and (takeny (7) = 1 and takeny (9) = 1) then Draw.Oval (boxx (6), boxy (8), 45, 45, 2) elsif (takenx (7) = true and takenx (8) = true) and (takeny (7) = 1 and takeny (8) = 1) then Draw.Oval (boxx (9), boxy (9), 45, 45, 2) elsif (takenx (5) = true and takenx (9) = true) and (takeny (5) = 1 and takeny (9) = 1) then Draw.Oval (boxx (1), boxy (1), 45, 45, 2) elsif (takenx (1) = true and takenx (9) = true) and (takeny (1) = 1 and takeny (9) = 1) then Draw.Oval (boxx (5), boxy (5), 45, 45, 2) elsif (takenx (1) = true and takenx (5) = true) and (takeny (1) = 1 and takeny (5) = 1) then Draw.Oval (boxx (9), boxy (9), 45, 45, 2) elsif (takenx (5) = true and takenx (3) = true) and (takeny (5) = 1 and takeny (3) = 1) then Draw.Oval (boxx (3), boxy (7), 45, 45, 2) elsif (takenx (7) = true and takenx (3) = true) and (takeny (7) = 1 and takeny (3) = 1) then Draw.Oval (boxx (5), boxy (5), 45, 45, 2) elsif (takenx (7) = true and takenx (5) = true) and (takeny (7) = 1 and takeny (5) = 1) then Draw.Oval (boxx (7), boxy (3), 45, 45, 2) elsif (takenx (4) = true and takenx (7) = true) and (takeny (4) = 1 and takeny (7) = 1) then Draw.Oval (boxx (1), boxy (1), 45, 45, 2) elsif (takenx (1) = true and takenx (7) = true) and (takeny (1) = 1 and takeny (7) = 1) then Draw.Oval (boxx (2), boxy (4), 45, 45, 2) elsif (takenx (1) = true and takenx (4) = true) and (takeny (1) = 1 and takeny (4) = 1) then Draw.Oval (boxx (3), boxy (7), 45, 45, 2) elsif (takenx (5) = true and takenx (8) = true) and (takeny (5) = 1 and takeny (8) = 1) then Draw.Oval (boxx (2), boxy (4), 45, 45, 2) elsif (takenx (2) = true and takenx (8) = true) and (takeny (2) = 1 and takeny (8) = 1) then Draw.Oval (boxx (5), boxy (5), 45, 45, 2) elsif (takenx (2) = true and takenx (5) = true) and (takeny (2) = 1 and takeny (5) = 1) then Draw.Oval (boxx (6), boxy (8), 45, 45, 2) elsif (takenx (6) = true and takenx (9) = true) and (takeny (6) = 1 and takeny (9) = 1) then Draw.Oval (boxx (7), boxy (3), 45, 45, 2) elsif (takenx (3) = true and takenx (9) = true) and (takeny (3) = 1 and takeny (9) = 1) then Draw.Oval (boxx (8), boxy (6), 45, 45, 2) elsif (takenx (3) = true and takenx (6) = true) and (takeny (3) = 1 and takeny (6) = 1) then Draw.Oval (boxx (9), boxy (9), 45, 45, 2) end if end Block_User %!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! function Get_Computers_Move :int for i : 1 .. 5 if u (i) not= -999 and u (i) = 5 then Draw.Oval (boxx (i), boxy (i), 45, 45, 2) turn := "player 1" end if end for end Get_Computers_Move function User_Won : boolean if (takenx (1) = true and takenx (2) = true and takenx (3) = true) and (takeny (1) = 1 and takeny (2) = 1 and takeny (3) = 1) or (takenx (4) = true and takenx (5) = true and takenx (6) = true) and (takeny (4) = 1 and takeny (5) = 1 and takeny (6) = 1) or (takenx (7) = true and takenx (8) = true and takenx (9) = true) and (takeny (7) = 1 and takeny (8) = 1 and takeny (9) = 1) or (takenx (1) = true and takenx (5) = true and takenx (9) = true) and (takeny (1) = 1 and takeny (5) = 1 and takeny (9) = 1) or (takenx (7) = true and takenx (5) = true and takenx (3) = true) and (takeny (7) = 1 and takeny (5) = 1 and takeny (3) = 1) or (takenx (1) = true and takenx (4) = true and takenx (7) = true) and (takeny (1) = 1 and takeny (4) = 1 and takeny (7) = 1) or (takenx (2) = true and takenx (5) = true and takenx (8) = true) and (takeny (2) = 1 and takeny (5) = 1 and takeny (8) = 1) or (takenx (3) = true and takenx (6) = true and takenx (9) = true) and (takeny (3) = 1 and takeny (6) = 1 and takeny (9) = 1) then who_won_game := "player 1" end if end User_Won function Computer_Won : boolean if (takenx (1) = true and takenx (2) = true and takenx (3) = true) and (takeny (1) = 2 and takeny (2) = 2 and takeny (3) = 2) or (takenx (4) = true and takenx (5) = true and takenx (6) = true) and (takeny (4) = 2 and takeny (5) = 2 and takeny (6) = 2) or (takenx (7) = true and takenx (8) = true and takenx (9) = true) and (takeny (7) = 2 and takeny (8) = 2 and takeny (9) = 2) or (takenx (1) = true and takenx (5) = true and takenx (9) = true) and (takeny (1) = 2 and takeny (5) = 2 and takeny (9) = 2) or (takenx (7) = true and takenx (5) = true and takenx (3) = true) and (takeny (7) = 2 and takeny (5) = 2 and takeny (3) = 2) or (takenx (1) = true and takenx (4) = true and takenx (7) = true) and (takeny (1) = 2 and takeny (4) = 2 and takeny (7) = 2) or (takenx (2) = true and takenx (5) = true and takenx (8) = true) and (takeny (2) = 2 and takeny (5) = 2 and takeny (8) = 2) or (takenx (3) = true and takenx (6) = true and takenx (9) = true) and (takeny (3) = 2 and takeny (6) = 2 and takeny (9) = 2) then who_won_game := "computer" end if end Computer_Won %-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= %-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= loop setscreen ("offscreenonly") mousewhere (x, y, b) Draw_Screen Initialize (c, u) Plot_Move exit when who_won_game not= "nobody" end loop locate (3, 1) if who_won_game = "player 1" then put "You Won!!!" elsif who_won_game = "computer" then put "The computer won... Oh well. Try again next time" end if See the thing is, a) it wont load for me until I go to close it. And b) it refuses to have the 'x' show up. Can anyone help?? If this same problem has been posted, sorry,m I looked, but mustve missed, if its been asked. If it has, give me the link and I'll go there. Thx! ----------------------------------- Cervantes Thu Jan 22, 2004 7:03 pm ----------------------------------- you forgot to put in View.Update ----------------------------------- kalin Thu Jan 22, 2004 7:09 pm ----------------------------------- I know, I can't use that at school....older version bah. Hate that ----------------------------------- Cervantes Thu Jan 22, 2004 7:33 pm ----------------------------------- then petition your teacher to let you use 4.0.5 :D and if you can't use View.Update, take out the View.Set ("offscreenonly") that oughta do it ----------------------------------- kalin Fri Jan 23, 2004 6:13 am ----------------------------------- ok, thx! ----------------------------------- McKenzie Fri Jan 23, 2004 8:55 am ----------------------------------- have your teacher follow shorthair's link. I bet he/she can probably legally upgrade but may not realize. (Warning - some teachers don't want to install the new version because they have to update their knowledge :( ----------------------------------- DanShadow Fri Jan 23, 2004 9:56 am ----------------------------------- lol...thats true. Stupid lazy compsci teachers. (although there are some good ones....like mine isnt half bad...except for the fact th at im as smart as him pretty much now. :D In only 1 semester...I learned double what he tought, an d by the end of the year at ISU time, everyone cam to me for advice and assistance, muahaha :wink: ) ----------------------------------- kalin Fri Jan 23, 2004 3:22 pm ----------------------------------- too late now, the semester is over and its looking like I'm just going to scrape by........oh well.....