Computer Science Canada tic tac toe game |
Author: | yan [ 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? |
Author: | Paul [ Thu May 27, 2004 8:04 pm ] |
Post 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 |
Author: | guruguru [ Thu May 27, 2004 8:05 pm ] | ||
Post 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.
Heh, I made my own tic-tac-toe game while making this ![]() 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. |
Author: | yan [ Thu May 27, 2004 8:17 pm ] |
Post subject: | |
hm.. how come its not drawing in teh position i want it tho? |
Author: | guruguru [ Thu May 27, 2004 8:21 pm ] | ||
Post 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...
|
Author: | yan [ Thu May 27, 2004 8:54 pm ] |
Post 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. |
Author: | Cervantes [ Thu May 27, 2004 9:01 pm ] | ||
Post 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.
all that's left after that is victory checking ![]() |
Author: | guruguru [ Thu May 27, 2004 9:16 pm ] |
Post 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 ![]() |
Author: | yan [ Fri May 28, 2004 9:42 am ] |
Post 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) |
Author: | guruguru [ Fri May 28, 2004 3:27 pm ] |
Post 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! |
Author: | yan [ Fri May 28, 2004 5:56 pm ] |
Post 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? |
Author: | Cervantes [ Fri May 28, 2004 6:38 pm ] |
Post 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. |
Author: | yan [ Fri May 28, 2004 8:43 pm ] |
Post 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??? |
Author: | guruguru [ Fri May 28, 2004 9:45 pm ] | ||
Post subject: | |||
Yes.
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. Edit: Ok got it. Clicky! |
Author: | yan [ Sat May 29, 2004 4:49 pm ] |
Post 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) end if questions (quiz) := "xxx" put "" end for |
Author: | guruguru [ Sat May 29, 2004 7:00 pm ] | ||||
Post subject: | |||||
This should be in the second if statement. Then when you finish the question, it can never be called again. And what does the questions array do? You have a choices array, but it has no relation to questions. It should be something like...
... where choices is a 2d array of a total of 4 choices for each question. |
Author: | yan [ Mon May 31, 2004 5:30 pm ] |
Post subject: | |
wat conditions should i put for that in the if statement then?n also.. i tried the drawing x but it doesnt go in the position i want it to. it always goes a bit higher and to the right. procedure board for i : 30 .. 220 by 70 for j : 30 .. 170 by 70 drawbox (i, j, i + 60, j + 60, 53) end for end for end board procedure draw (player : string, x, y : int) drawline (x, y + 20, x + 40, y + 80, green) drawline (x + 2, y + 22, x + 42, y + 81, green) drawline (x + 4, y + 24, x + 44, y + 82, green) drawline (x + 6, y + 26, x + 46, y + 83, green) drawline (x, y + 80, x + 40, y + 20, green) drawline (x + 1, y + 81, x + 41, y + 21, green) drawline (x + 2, y + 82, x + 42, y + 22, green) drawline (x + 3, y + 83, x + 43, y + 23, green) end draw procedure mouse (var x, y : int) var button : int loop %needs to be in a loop to keep on reading mouse data Mouse.Where (x, y, button) %code to find data on mouse %check to see if button is hit if button = 1 and x <= 170 and x >= 30 and y >= 30 and y <= 220 then locatexy (maxx div 2, maxy div 2) draw (player, x, y) delay (100) exit end if end loop end mouse board mouse(x,y) thats not the entire program so, some variables mite not be declared.. bt then my main concern is that the X doesnt go in the spot i want it to.... i havent tried out the O yet.. i just thought i'd take it step by steph.. i need to get most of it done by thursday to hand in... n then i have my prom on friday...hehehe.. excited.. so, i dun really have much time.. please help |
Author: | yan [ Mon May 31, 2004 5:41 pm ] |
Post subject: | |
http://www.geocities.com/yan_media/program.doc on second thoughts, to avoid complications, i just included my entire program.. its crappy. i no and it is not done yet... |
Author: | yan [ Mon May 31, 2004 5:48 pm ] |
Post subject: | |
and i have a problem.. u no how the questions come up one by one right? well.. sometimes the previous question can still be seen when the next question comes on... it overlaps and become confusing. how do i get rid of that? |
Author: | guruguru [ Mon May 31, 2004 6:10 pm ] | ||
Post subject: | |||
I can't seem to find your program on your site. Just your Violence against Women essay. Pretty good ![]() Quote: i tried the drawing x but it doesnt go in the position i want it to. it always goes a bit higher and to the right.
You probally have you x, and y positions in the center of the square. Thise means that the X will appear up and to the right. To fix this, make the x coordinate equal to the center - (width of letter X div 2). And th y similar: center - (height of letter X div 2). That will align your X properly. Quote: well.. sometimes the previous question can still be seen when the next question comes on... it overlaps and become confusing. how do i get rid of that?
Well I don't know your code, but I am assuming you are not calling View.Update when you display your first question. It should look like this:
Etc... Hope that answers your questions. |
Author: | yan [ Mon May 31, 2004 6:32 pm ] |
Post subject: | |
http://us.f2.yahoofs.com/bc/40bbbf2f_85bf/bc/My+Documents/program.doc?bf5T8uABmUmjFMdW hope this works.. sry abt the previous one..haha |
Author: | yan [ Mon May 31, 2004 6:41 pm ] |
Post subject: | |
View.Update doesnt work. it doesnt recognize this name btw.. wat coorodinate did u mean? the coordinate of the box? cz if u look at my program... u'll c how i drew my box..haha. i got that frm smone... |
Author: | Dan [ Tue Jun 01, 2004 12:21 pm ] |
Post subject: | |
What verson of turing you have? Becuse View.Update dose not work on anything but turing 4.x |
Author: | yan [ Thu Jun 03, 2004 5:39 pm ] |
Post subject: | :?: |
The one i got to use at home is an older version. View.Update works in the computers at school. Uptil now, the questions work fine bt the X and O doesnt work.. at the same time, I have an indicator that tells the user whose turn it is.. bt its not working well.. cz at times it works and at other times, it stays at the same user for few questions before changing. And also, I've been trying to make that indicator appear before the first player take any turns bt then it didnt work and the indicator appears only after the first player takes a turn. |