Posted: Thu May 27, 2004 7:49 pm Post subject: tic tac toe game
Hi
I really really need help here. I have to create a tic tac toe game in which users are allowed to take turns only after they answered the questions correctly. I need help in placing the markers ("x" and "O") in the box where the mouse is clicked. How do I do that?
The questions and answers, I had used a procedure in another program to get them and then saved it to a file. I opened the file in a new program but can't get the questions and answers out. How do I randomize them after I get them as well?
Sponsor Sponsor
Paul
Posted: Thu May 27, 2004 8:04 pm Post subject: (No subject)
use Mouse.Where for the clicking part, use F9 on it if you don't know how to use it.
As for randomizing, put questions in an array then randomize the array subscript
guruguru
Posted: Thu May 27, 2004 8:05 pm Post subject: (No subject)
Well, the answer is a lot of nested if statements if they are clicking on where they want to go. If they type where they want to go, it is easier. But, clicking it is! Assuming boxes are 50 x 50.
code:
var x, y, b : int
var boxNumberSelected : array 1 .. 9 of boolean := init (false, false, false, false, false, false, false, false, false)
loop
mousewhere (x, y, b)
if b = 1 then
if y < 50 then
if x > 100 then
boxNumberSelected (9) := true
elsif x > 50 then
boxNumberSelected (8) := true
elsif x > 0 then
boxNumberSelected (7) := true
end if
elsif y < 100 then
if x > 100 then
boxNumberSelected (6) := true
elsif x > 50 then
boxNumberSelected (5) := true
elsif x > 0 then
boxNumberSelected (4) := true
end if
elsif y < 150 then
if x > 100 then
boxNumberSelected (3) := true
elsif x > 50 then
boxNumberSelected (2) := true
elsif x > 0 then
boxNumberSelected (1) := true
end if
end if
end if
% draw your stuff here
end loop
Heh, I made my own tic-tac-toe game while making this . YOu can adjust values. This fits a 150 x 150 board.
EDIT: For the second part of post...
There is a great example in the file i/o portion of the Turing documentations regarding getting stuff from the file. Regarding randomization, make an array of booleans that corrrespond to questions. Choose a random number, and do the questions associated with that boolean.
yan
Posted: Thu May 27, 2004 8:17 pm Post subject: (No subject)
hm.. how come its not drawing in teh position i want it tho?
guruguru
Posted: Thu May 27, 2004 8:21 pm Post subject: (No subject)
Umm... i dont know. Some code would be helpful. Make sure you coordinates are correct. Remember: maxy is the top of the screen!
I'll post my code for drawing one box...
code:
procedure drawCircles
for i : 1 .. 9
if boxNumberSelected (i) then
if i = 1 then
Draw.Oval (25, maxy - 25, 10, 10, black)
% rest of boxes
end if
end if
end for
end drawCircles
yan
Posted: Thu May 27, 2004 8:54 pm Post subject: (No subject)
i was just wondering.. does different versions of turing use different types of codes? we dunt use Draw.Oval.. we use drawoval and drawfilloval Draw.Oval does not work.
Cervantes
Posted: Thu May 27, 2004 9:01 pm Post subject: (No subject)
try to stay on topic here.
guru, you don't have to use so many if statements. thats a very boring and inefficient way of doing it. check this code out.
code:
var mx, my, btnNumber, btnUpDown : int
const gridwidth := 3
const gridheight := 3
const gridwidthsize := maxx div gridwidth
const gridheightsize := maxy div gridheight
var grid : array 0 .. gridwidth, 0 .. gridheight of int
for x : 0 .. gridwidth
for y : 0 .. gridheight
grid (x, y) := -1
end for
end for
var turn := 0
var gx, gy : int %grid x, grid y --> the picked positions
for x : 1 .. gridwidth
drawline (x * gridwidthsize, 0, x * gridwidthsize, maxy, black)
end for
for y : 1 .. gridheight
drawline (0, y * gridheightsize, maxx, y * gridheightsize, black)
end for
var font := Font.New ("Arial:18")
loop
Mouse.ButtonWait ("down", mx, my, btnNumber, btnUpDown)
gx := (mx div gridwidthsize)
gy := (my div gridheightsize)
if grid (gx, gy) = -1 then
grid (gx, gy) := turn mod 2
turn += 1
end if
for x : 0 .. gridwidth
for y : 0 .. gridheight
if grid (x, y) not= -1 then
if grid (x, y) = 0 then
Draw.Text ("X", (x * gridwidthsize) + (gridwidthsize div 2), (y * gridheightsize) + (gridheightsize div 2), font, red)
elsif grid (x, y) = 1 then
Draw.Text ("O", (x * gridwidthsize) + (gridwidthsize div 2), (y * gridheightsize) + (gridheightsize div 2), font, green)
end if
end if
end for
end for
end loop
all that's left after that is victory checking
guruguru
Posted: Thu May 27, 2004 9:16 pm Post subject: (No subject)
Wow. I congratulate you *shakes hand*.
But (muhaha) I spot inefficiencies! When drawing the lines, you draw 3 lines when you need draw only one. Wait nevermind... I realized you were just drawing two lines... I thought it was drawing each portion of the line (length of gridwidthsize) but I caught myself.
Anyways... it was a spur of the moment thing and I may not be so quick of though as Cervantes .
Sponsor Sponsor
yan
Posted: Fri May 28, 2004 9:42 am Post subject: (No subject)
hm.... thanks for everyone's help... my school's version of turing is turing for windows 4.0.4c..... this is wat i got so far...
var player1, player2 : string
var n : int
var choice : array 1 .. 50 of string
procedure x
drawline (20, 200, 70, 260, 0)
drawline (22, 202, 72, 262, 0)
drawline (24, 204, 74, 264, 0)
drawline (26, 206, 76, 266, 0)
drawline (20, 260, 70, 200, 0)
drawline (21, 261, 71, 201, 0)
drawline (22, 262, 72, 202, 0)
drawline (23, 263, 73, 203, 0)
end x
procedure o
drawoval (200, 233, 35, 35, 0)
end o
put "Who wants to go first? X or O?"
get player1
drawfill (maxx, maxy, 1, 2)
if player1 = "x" or player1 = "X" then
player2 := "O"
%x
elsif
player1 = "o" or player1 = "O" then
player2 := "X"
%o
else
loop
put "Try again. Please enter X or O."
get player1
exit when player1 = "x" or player1 = "X" or player1 = "o" or player1 = "O"
end loop
if player1 = "x" or player1 = "X" then
player2 := "O"
%x
elsif
player1 = "o" or player1 = "O" then
player2 := "X"
%o
end if
end if
var file : int
/*
open : file, "questions and answers.txt", get
assert file not = o
for i : 1 .. 50
get : file, choice (i)
end for
put "Enter the question you want to answer (1 to 50). " ..
get n
if choice (n) not= "xxx" then
put choice (n)
choice (n) := "xxx"
else
put "The question was already answered. Choose another one. " ..
loop
get n
exit when choice (n) not= "xxx"
end loop
end if*/
%drawfill (maxx, maxy, 13, 2)
drawbox (100, 200, 150, 250, 10) %last row, first box
drawbox (150, 200, 200, 250, 10) %last row, middle box
drawbox (200, 200, 250, 250, 10) %last row,last box
drawbox (100, 250, 150, 300, 10) %second row, first box
drawbox (150, 250, 200, 300, 10) %second row, middle box
drawbox (200, 250, 250, 300, 10) %second row, last box
drawbox (100, 300, 150, 350, 10) %first row, first box
drawbox (150, 300, 200, 350, 10) %first row, second box
drawbox (200, 300, 250, 350, 10) %first row, last box
var test : array 1 .. 3, 1 .. 3 of string
var over : boolean := true
var whowon : string := "noone"
procedure check1
var z : string
for i : 1 .. 3
if test (i, 1) = "x" or test (i, 1) = "X" or
test (1, i) = "X" or test (1, i) = "x" then
z := "X"
else
z := "Y"
end if
end for
if test (1, 1) = "X" or test (1, 1) = "x" then
z := "X"
else
z := "Y"
end if
if test (1, 3) = "x" or test (1, 3) = "X" then
z := "X"
else
z := "Y"
end if
end check1
procedure check (z : string)
for i : 1 .. 3
if test (i, 1) = z and test (i, 2) = z and test (i, 3) = z or
test (1, i) = z and test (2, i) = z and test (3, i) = z then
over := false
whowon := z
end if
end for
if test (1, 1) = z and test (2, 2) = z and test (3, 3) = z then
over := false
whowon := z
end if
if test (1, 3) = z and test (2, 2) = z and test (3, 1) = z then
over := false
whowon := z
end if
end check
var turn : string
if player1 = "X" or player1 = "x"then
turn := "X"
else
turn := "O"
end if
procedure playing (turn : string)
var a, y, buttonnumber, buttonupdown, buttons : int
loop
buttonwait ("down", a, y, buttonnumber, buttonupdown)
colour (black)
if turn = "X" then
x
else
o
end if
end loop
end playing
playing (turn)
check1
var z : string
check (z)
guruguru
Posted: Fri May 28, 2004 3:27 pm Post subject: (No subject)
Looks ok... but its not tic tac toe yet :p. I like the snazzy "X". Try now to make it work with clicking in the certain areas and a x or o shows up.
A couple notes:
1) All variables should be declared at the top of the program.
2) All procedures should be declared immediately after all variable declarations... not in the middle of the program.
3) Your procedures need bettter names!!! Instead of "x" use "drawFancyX" or something of the sort.
4) At the end, when you "check (z)", z is a blank variable. None of the test agains it will work. You have to give z a value.
Hope that helps for organization!
yan
Posted: Fri May 28, 2004 5:56 pm Post subject: (No subject)
hm.... yea. that is a rough draft tho. so all the declarations and stuffs are not out place.. haha. i just added them in when i test them.. neways... any suggestions on improving my program? i still cant get it to put the x and o... when i click on the box.. wat do i have to do tho?the x and o have the coordinates of the entire screen already, how do i make that within the specific box?
Cervantes
Posted: Fri May 28, 2004 6:38 pm Post subject: (No subject)
why not use the turn += 1 and mod turn method that I used in my above code? its rather simple. and to put it in a specific box, you can do like I did and use a 2D array; change the value of grid (mx div gridwidth, my div gridheight) to whatever you want.
yan
Posted: Fri May 28, 2004 8:43 pm Post subject: (No subject)
wats turn+=1
is it turn:=turn + 1? same thing? i havent really gotten down to modify the program to all the suggestions.. m trying them.. i mean.. putting all the suggestions in my program tho.. just didnt put it up
about the 50 questions that i have to generate randomly.. is it easier to store it in a separate file out of this program or enter them in this program and then randomly generate one???
guruguru
Posted: Fri May 28, 2004 9:45 pm Post subject: (No subject)
Yes.
code:
something += other
is equivalent to
something := something + other
Yes. Reading from files is simpler, saves code space, and is easy enough to generate a random question. There was a recent post on getting a random line in this forum... I'll look for it.
Posted: Sat May 29, 2004 4:49 pm Post subject: (No subject)
hm..thanks...bt then i've decided to just type all teh questions.. its easier for me..haha. less thinking... neways..
it is just a test of my questions... i can generate them randomly but then i want them to appear only once.. which doesnt seem to be working.. the place where i put questions (quiz) := "xxx".. i wanted that question to become xxx so that it doesnt appear again.. bt then it doesnt work.. any suggestions?
for i : 1 .. 2
randint (quiz, 1, 50)
if questions (quiz) = "xxx" then
loop
randint (quiz, 1, 50)
exit when questions (quiz) not= "xxx"
end loop
elsif questions (quiz) not= "xxx" then
count:=count + 1
put count ,". ",questions (quiz)
put choice1 (quiz)
put choice2 (quiz)
put choice3 (quiz)
put choice4 (quiz)