Computer Science Canada Error stopping a process also code help |
Author: | Copler [ Thu Nov 20, 2003 9:01 pm ] |
Post subject: | Error stopping a process also code help |
I need help with my code: For one thing I cant actually stop the proc Star_Feild (a little program made to simulate travel through space) When I try navigating when I click New the StarFeild is still going and i cant figure out how to stop/pause the proc can I have some help please? ![]() PS Not Finished Yet [code] /* 21st Century Sports Trivia By Matthew Harford */ var guimain : int := Pic.FileNew ("Trivia_1024x768_GUI.jpg") var win := Window.Open ("offscreenonly,nobuttonbar,noecho,graphics:800;600" + ",position:center;truemiddle") Pic.ScreenLoad ("Trivia_1024x768_GUI.jpg", 0, 0, picCopy) %Variable for the Mouse var Mouse_Pos_X, %Mouse Posistion X Pixels Mouse_Pos_Y, %Mouse Posistion Y Pixels buttonnumber, %Which button Right, Left Mouse_Button_UpDown, %Weather The button is up or down Mouse_Buttons : int %How many buttons the mouse has %Variables for use in GUI Topic Bar var Topic_Name, Topic_NameR : string %Varibles for what will show in the Topic Header var New : boolean := false var Run : boolean := false var Credits : flexible array 1 .. 0 of string var Trivia_Credits : int %Variables for the file names var Topic_Baseball, %For the Baseball Data File Topic_Basketball, %For the Basketball Data File Topic_Football, %For the Football Data File Topic_Hockey : int %For the Hockey Data File var ifexited : int %Variables for Basic Information var Player_Name : string (8) %The Players Name var Answers_Right, Answers_Wrong : int := 0 %The Variables for the Players Scores var Answers_Averg : real %The variable for the players playing average const Guesses : int := 3 %A constant variable for how many guesses there are var Guesses_Left : int %A variable for how many gueses aer left := Guesses var Question, %The variable to collect and display the question Answer_A, %The variable to collect and display the Answer A Answer_B, %The variable to collect and display the Answer B Answer_C, %The variable to collect and display the Answer C Answer_D, %The variable to collect and display the Answer D Answer_R, %The variable to collect and compare the Answer Answer_Write : array 1 .. 8 of string const nomofstar : int := 900 const Screen_Center_X : int := maxx div 2 const Screen_Center_Y : int := maxy div 2 var Star_X : array 1 .. nomofstar of int var Star_Y : array 1 .. nomofstar of int var Star_Z : array 1 .. nomofstar of int var Star_X_Draw : array 1 .. nomofstar of int var Star_Y_Draw : array 1 .. nomofstar of int var Topic_Choice := Rand.Int (1, 1) %For the holding of what topic the user selects var Star_SC : int %Variables for the fonts used var Font_Splash : int := Font.New ("Agency FB:30") %Font for the Topic Header var Font_Menu : int := Font.New ("Agency FB:30") %Font for the Menu Butons var Font_Quit : int := Font.New ("Ariel:20") %Font for the exit warning var Font_Topic : int := Font.New ("Agency FB:30") %Font for the Topic Header var Font_Question : int := Font.New ("Ariel:15") %Font for the Question Header var Font_Answer : int := Font.New ("Times New Roman:20") %Font For the Answer selection and input function center (text : string, y, Color : int) : string Font.Draw (text, (maxx div 2) - (Font.Width (text, Font_Topic) div 2), y, Font_Topic, Color) locate (1, 1) result "" end center open : Trivia_Credits, "Credits.c", get loop exit when eof (Trivia_Credits) new Credits, upper (Credits) + 1 get : Trivia_Credits, Credits (upper (Credits)) : * end loop close : Trivia_Credits /*Processes/Functions/Procedures/etc*/ proc Load_Rand_Topic if Topic_Choice = 1 then Topic_Name := "Basketball" open : Topic_Basketball, "Basketball.Mc", get for i : 1 .. 4 get : Topic_Basketball, Question (i) : * get : Topic_Basketball, Answer_A (i) : * get : Topic_Basketball, Answer_B (i) : * get : Topic_Basketball, Answer_C (i) : * get : Topic_Basketball, Answer_D (i) : * get : Topic_Basketball, Answer_R (i) : * end for close : Topic_Basketball open : Topic_Basketball, "Basketball.Fill", get for i : 5 .. 8 get : Topic_Basketball, Question (i) : * get : Topic_Basketball, Answer_R (i) : * end for close : Topic_Basketball elsif Topic_Choice = 2 then Topic_Name := "Baseball" open : Topic_Baseball, "Baseball.Mc", get for i : 1 .. 4 get : Topic_Baseball, Question (i) : * get : Topic_Baseball, Answer_A (i) : * get : Topic_Baseball, Answer_B (i) : * get : Topic_Baseball, Answer_C (i) : * get : Topic_Baseball, Answer_D (i) : * get : Topic_Baseball, Answer_R (i) : * end for close : Topic_Baseball open : Topic_Baseball, "Baseball.Fill", get for i : 5 .. 8 get : Topic_Baseball, Question (i) : * get : Topic_Baseball, Answer_R (i) : * end for close : Topic_Baseball elsif Topic_Choice = 3 then Topic_Name := "Football" open : Topic_Football, "Football.Mc", get for i : 1 .. 4 get : Topic_Football, Question (i) : * get : Topic_Football, Answer_A (i) : * get : Topic_Football, Answer_B (i) : * get : Topic_Football, Answer_C (i) : * get : Topic_Football, Answer_D (i) : * get : Topic_Football, Answer_R (i) : * end for close : Topic_Football open : Topic_Football, "Football.Fill", get for i : 5 .. 8 get : Topic_Football, Question (i) : * get : Topic_Football, Answer_R (i) : * end for close : Topic_Football elsif Topic_Choice = 4 then Topic_Name := "Hockey" open : Topic_Hockey, "Hockey.Mc", get for i : 1 .. 4 get : Topic_Hockey, Question (i) : * get : Topic_Hockey, Answer_A (i) : * get : Topic_Hockey, Answer_B (i) : * get : Topic_Hockey, Answer_C (i) : * get : Topic_Hockey, Answer_D (i) : * get : Topic_Hockey, Answer_R (i) : * end for close : Topic_Hockey open : Topic_Hockey, "Hockey.Fill", get for i : 5 .. 8 get : Topic_Hockey, Question (i) : * get : Topic_Hockey, Answer_R (i) : * end for close : Topic_Hockey end if end Load_Rand_Topic proc Star for i : 1 .. nomofstar Star_X (i) := Rand.Int (-500, 500) Star_Y (i) := Rand.Int (-500, 500) Star_Z (i) := Rand.Int (100, 1000) end for end Star proc Star_Col for i : 1 .. maxcolor RGB.SetColor (255 - i, i, i, i) end for end Star_Col proc Star_Draw for i : 1 .. nomofstar Star_X_Draw (i) := round (Star_X (i) / Star_Z (i) * 100 + (maxx div 2)) Star_Y_Draw (i) := round (Star_Y (i) / Star_Z (i) * 100 + (maxy div 2)) end for end Star_Draw proc Star_Feild (Run : boolean) Star Star_Draw Star_Col var b : int if Run = true then loop exit when Run = false colorback (black) cls for t : 1 .. upper (Credits) for a : -190 .. 190 by 6 for i : 1 .. nomofstar drawdot (Star_X_Draw (i), Star_Y_Draw (i), black) Star_Z (i) -= 5 if Star_X_Draw (i) > maxx and Star_Y_Draw (i) > maxy or Star_X_Draw (i) < 1 and Star_Y_Draw (i) < 1 then Star_X_Draw (i) := Screen_Center_X Star_Y_Draw (i) := Screen_Center_Y Star_Z (i) := Rand.Int (100, 1000) elsif Star_Z (i) <= 0 then Star_Z (i) := Rand.Int (100, 1000) end if Star_X_Draw (i) := round (Star_X (i) / Star_Z (i) * 100 + (maxx div 2)) Star_Y_Draw (i) := round (Star_Y (i) / Star_Z (i) * 100 + (maxy div 2)) b := 255 - round ((Star_Z (i) * (255. / 1000.))) drawdot (Star_X_Draw (i), Star_Y_Draw (i), b) end for if Run = true then Font.Draw ("Welcome to 21st Century Sports Trivia", 418, maxy - 36, Font_Question, b) Font.Draw ("(Click One of the buttons to continue)", 418, maxy - 60, Font_Question, b) Font.Draw (Topic_Name, ((385 div 2) - (Font.Width (Topic_Name, Font_Topic) div 2)) + 8, maxy - 57, Font_Topic, b) put center (Credits (t), maxy div 2 + a, b) View.Update Font.Draw ("Welcome to 21st Century Sports Trivia", 418, maxy - 36, Font_Question, black) Font.Draw ("(Click One of the buttons to continue)", 418, maxy - 60, Font_Question, black) Font.Draw (Topic_Name, ((385 div 2) - (Font.Width (Topic_Name, Font_Topic) div 2)) + 8, maxy - 57, Font_Topic, black) put center (Credits (t), maxy div 2 + a, black) end if end for end for end loop else View.ClipOff return end if end Star_Feild process Selection_System loop Mouse.ButtonWait ("downup", Mouse_Pos_X, Mouse_Pos_Y, Mouse_Buttons, Mouse_Button_UpDown) if Mouse_Pos_X >= 0 and Mouse_Pos_X <= 85 then if Mouse_Pos_Y >= 100 and Mouse_Pos_Y <= 145 then Window.Close (win) elsif Mouse_Pos_Y >= 165 and Mouse_Pos_Y <= 210 then elsif Mouse_Pos_Y >= 230 and Mouse_Pos_Y <= 270 then elsif Mouse_Pos_Y >= 295 and Mouse_Pos_Y <= 330 then Font.Draw ("Basketball", 225 - (Font.Width ("Basketball", Font_Topic) div 2), 60, Font_Topic, white) Font.Draw ("Baseball", 575 - (Font.Width ("Baseball", Font_Topic) div 2), 60, Font_Topic, white) Font.Draw ("Football", 225 - (Font.Width ("Football", Font_Topic) div 2), 10, Font_Topic, white) Font.Draw ("Hockey", 575 - (Font.Width ("Hockey", Font_Topic) div 2), 10, Font_Topic, white) Mouse.ButtonWait ("downup", Mouse_Pos_X, Mouse_Pos_Y, Mouse_Buttons, Mouse_Button_UpDown) if Mouse_Pos_X >= 350 and Mouse_Pos_X <= 388 then %Buttons A and C if Mouse_Pos_Y >= 50 and Mouse_Pos_Y <= 90 then Topic_Choice := 1 return elsif Mouse_Pos_Y >= 5 and Mouse_Pos_Y <= 45 then Topic_Choice := 3 return end if elsif Mouse_Pos_X >= 410 and Mouse_Pos_X <= 75 then %Buttons B and D if Mouse_Pos_Y >= 50 and Mouse_Pos_Y <= 90 then Topic_Choice := 2 return elsif Mouse_Pos_Y >= 5 and Mouse_Pos_Y <= 45 then Topic_Choice := 4 return end if end if Font.Draw (Topic_NameR, ((385 div 2) - (Font.Width (Topic_NameR, Font_Topic) div 2)) + 8, maxy - 57, Font_Topic, white) elsif Mouse_Pos_Y >= 445 and Mouse_Pos_Y <= 485 then cls Pic.ScreenLoad ("Trivia_1024x768_GUI.jpg", 0, 0, picCopy) for i : 1 .. 8 Font.Draw (Topic_Name, ((385 div 2) - (Font.Width (Topic_Name, Font_Topic) div 2)) + 8, maxy - 57, Font_Topic, white) Pic.ScreenLoad ("Trivia_1024x768_GUI.jpg", 0, 0, picCopy) if length (Question (i)) >= 0 and length (Question (i)) <= 40 then Font.Draw (Question (i) (1 .. *), 418, maxy - 36, Font_Question, white) else Font.Draw (Question (i) (1 .. 40), 418, maxy - 36, Font_Question, white) if Question (i) (41) = " " then Font.Draw (Question (i) (42 .. *), 418, maxy - 58, Font_Question, white) else Font.Draw (Question (i) (41 .. *), 418, maxy - 58, Font_Question, white) end if end if if i >= 1 and i <= 4 then Font.Draw (Answer_A (i), 225 - (Font.Width (Answer_A (i), Font_Topic) div 2), 60, Font_Topic, white) Font.Draw (Answer_B (i), 575 - (Font.Width (Answer_B (i), Font_Topic) div 2), 60, Font_Topic, white) Font.Draw (Answer_C (i), 225 - (Font.Width (Answer_C (i), Font_Topic) div 2), 10, Font_Topic, white) Font.Draw (Answer_D (i), 575 - (Font.Width (Answer_D (i), Font_Topic) div 2), 10, Font_Topic, white) loop if Guesses_Left = 0 then elsif Guesses_Left > 0 then Mouse.ButtonWait ("downup", Mouse_Pos_X, Mouse_Pos_Y, Mouse_Buttons, Mouse_Button_UpDown) if Mouse_Pos_X >= 350 and Mouse_Pos_X <= 388 then %Buttons A and C if Mouse_Pos_Y >= 50 and Mouse_Pos_Y <= 90 then if Answer_R (i) = Answer_A (i) then Answers_Right += 1 else Answers_Wrong += 1 Guesses_Left -= 1 end if elsif Mouse_Pos_Y >= 5 and Mouse_Pos_Y <= 45 then if Answer_R (i) = Answer_C (i) then Answers_Right += 1 else Answers_Wrong += 1 Guesses_Left -= 1 end if end if elsif Mouse_Pos_X >= 410 and Mouse_Pos_X <= 75 then %Buttons B and D if Mouse_Pos_Y >= 50 and Mouse_Pos_Y <= 90 then if Answer_R (i) = Answer_B (i) then Answers_Right += 1 else Answers_Wrong += 1 Guesses_Left -= 1 end if elsif Mouse_Pos_Y >= 5 and Mouse_Pos_Y <= 45 then if Answer_R (i) = Answer_D (i) then Answers_Right += 1 else Answers_Wrong += 1 Guesses_Left -= 1 end if end if end if end if end loop else end if end for end if end if end loop end Selection_System /*Load Trivia Screen========================================================*/ proc Load_Trivia_Screen /*The below procedures sets the clipping region to the rectangle specified by (x1, y1) -(x2, y2). If a clipping region already exist, it is replaced by the specified rectangle. A clipping region is the region in which the output will appear. If the rectangle is specified as the clipping region, any drawing done outside the rectangle will not appear.*/ View.ClipSet (112, 115, 685, 485) View.ClipAdd (415, 530, 785, 585) View.ClipAdd (015, 535, 380, 575) View.ClipAdd (100, 000, 695, 095) /*The below procedure activates (starts the concurrent execution of) a process declaration. If the process has parameters, a parenthesized list of expressions (expns) must follow the process' name (processId). */ Load_Rand_Topic Star_Feild (true) /* The below procedure gets information about a mouse event and removes it from the queue.*/ Mouse.ButtonWait ("downup", Mouse_Pos_X, Mouse_Pos_Y, Mouse_Buttons , Mouse_Button_UpDown) end Load_Trivia_Screen /*==========================================================================*/ /*Load Splash Screen========================================================*/ proc Load_Splash_Screen /*The below procedures sets the clipping region to the rectangle specified by (x1, y1) -(x2, y2). If a clipping region already exist, it is replaced by the specified rectangle. A clipping region is the region in which the output will appear. If the rectangle is specified as the clipping region, any drawing done outside the rectangle will not appear.*/ View.ClipSet (112, 115, 685, 485) /*The Below procedure displays a picture from a file straight to the screen*/ Pic.ScreenLoad ("Trivia_Splash.jpg", 112, 120, picCopy) /*The below procedure updates a Run window from an offscreen bitmap. It is used with the command View.Set( "offscreenonly" ) which prevents the Run window from being updated until the View.Update command is given.*/ View.Update %The below procedure gets information about a mouse event and removes it %from the queue. Mouse.ButtonWait ("downup", Mouse_Pos_X, Mouse_Pos_Y, Mouse_Buttons , Mouse_Button_UpDown) %The below procedure is used to change the color upon which text appears colorback (red) %The below procedure is used to blank the output window. The cursor is set %to the top left (to row 1, column 1) cls /*The below procedure turns off clipping. This means that any drawing commands can appear on the entire drawing surface*/ View.ClipOff end Load_Splash_Screen /*==========================================================================*/ /*Debuger : Developer Uses =================================================*/ proc Debug var x, y, button : int loop mousewhere (x, y, button) locate (1, 1) put x, ":", y View.Update end loop end Debug /*==========================================================================*/ /*================ALGORITHEM FOR 20TH CENTURY SPORTS TRIVIA=================*/ /*Step One: I Want to call the game and load the Splash Screen * Waiting for the mouse to click before running the Game GUI*/ Load_Splash_Screen %Calls the Load_Splash_Screen Procedure %Debug /*Step Two: I Want to call the Game GUI: * Load the Buttons Procedures Which will be in a constant loop throughout the Game so that they can play the game while being able to navigate the menus * The Loop must be called as a process allowing the procedure to run similtaniously with the program. Depending on which mode you are in and having the program specify those conditions eg. When I am in the Main Menu and I click Exit it will just Exit and when I am in a game it will ask me to click Exit to confirm it. * */ fork Selection_System %Calls the Navigational Game System Load_Trivia_Screen %Calls the Load_Trivia_Screen Procedure [/code] |