Computer Science Canada Pong - How to restart the game |
Author: | BreeG16 [ Sat Jun 14, 2008 12:16 pm ] |
Post subject: | Pong - How to restart the game |
When one of the players wins i want to give them the option to play again. WriteScore if player (2).score > 11 then %Declares player2's name as winner when their score is above 11. locate (13, 65) put "player2 Wins!" end if if player (1).score > 11 then %Declares player1's name as winner when the score is above 11. locate (13, 65) put "player1 Wins!" end if locate (11, 20) if player (2).score > 11 then put "Would you like to play again? Y/N" if true then ????? end if locate (11, 20) if player (1).score > 11 then put "Would you like to play again? Y/N" end if exit when player (1).score > 11 exit when player (2).score > 11 %Stops the game when one of the players score is greater than 11 (game point at 12) I'm almost certain this is all wrong. What do i write to get the game to go back to the beginning when they put Y? I'm hopeless, i kno. |
Author: | Lithium_Debator [ Sat Jun 14, 2008 12:28 pm ] |
Post subject: | Re: Pong - How to restart the game |
Looks pretty good, what your looking for is the "hasch" command, look it up in the truing reference, it'll fully explain how to use it. then it's just a matter of writing a simple if statement to test for y or n |
Author: | Tony [ Sat Jun 14, 2008 1:22 pm ] | ||
Post subject: | RE:Pong - How to restart the game | ||
Not quite. hasch is used to skip over getch, so not to halt the program. What you need to do is wrap your game in another loop, and place this "play again" before the end of the outer loop.
|
Author: | BreeG16 [ Sat Jun 14, 2008 9:36 pm ] |
Post subject: | Re: Pong - How to restart the game |
i tried that out but it keeps telling me "operands of comparison operators must be of the same type" and it highlights this part: exit when replay_reply = "n" with the "n" in black. I have no clue what that means. |
Author: | Tony [ Sat Jun 14, 2008 9:49 pm ] |
Post subject: | RE:Pong - How to restart the game |
it means that variable replay_reply and literal value "n" are not of the same type. "n" is a string (I think it's a string. 'n' is character?) your replay_reply was likely declared as string(1) or char, for getch to work. |
Author: | BreeG16 [ Sat Jun 14, 2008 10:35 pm ] |
Post subject: | Re: Pong - How to restart the game |
ha, oh. Mmk, so I fixed that...but now theres some new problem. This is getting frustrating. Now my variable has no value? This is my entire code. var paddle1, paddle2, ballx, bally, introFont, reboundx, reboundy, instructFont : int := 0 %Sets the variables that are integers. var y, n, replay_reply : string View.Set ("graphics, offscreenonly") type entryType : %Creates an array of records record name : string %Sets variables for the array of records score : int end record var player : array 1 .. 2 of entryType %Declares the array of records player (1).score := 0 player (2).score := 0 procedure DrawText introFont := Font.New ("Snap :25:bold") %Sets the font for the welcome message instructFont := Font.New ("Comicsans:12:italic") for i : 0 .. 255 Draw.Text ("WELCOME TO PONG", 33, maxy div 2, introFont, 11) %Outputs a welcome message on the main menu screen. Draw.Text ("Instructions:", 1, maxx div 4, introFont, 11) Draw.Text ("-Player 1 controls his/her paddle by pressing the up and down arrow keys.", 1, maxx div 5, instructFont, 94) Draw.Text ("-Player 2 controls his/her paddle by pressing the w key for up and the s key for down.", 1, maxx div 6, instructFont, 94) Draw.Text ("-Move your paddle up and down to stop the ball from hitting your wall.", 1, maxx div 7.5, instructFont, 94) Draw.Text ("-At the same time, attempt to hit the wall of your opponent.", 1, maxx div 10, instructFont, 94) Draw.Text ("-Everytime the ball hits your wall your opponent gains a point.", 1, maxx div 15, instructFont, 94) Draw.Text ("-The first player to gain 12 points is the winner.", 1, maxx div 29.5, instructFont, 94) end for end DrawText %Programming the Main Menu. procedure MainMenu colorback (85) %Sets the main menus background colour View.Set ("graphics, nooffscreenonly") %View.Set graphics allows for a diminished amount of glitches. drawfillbox (0, 0, maxx, maxy, 85) DrawText color (11) %Sets the following text's colour. put "Enter Player 1's Name: " .. get player (1).name %Outputs first players name. put "Enter Player 2's Name: " .. get player (2).name %Outputs second players name. View.Set ("graphics, offscreenonly") colorback (67) end MainMenu procedure WriteScore locate (2, 65) put "Score" locate (7, 65) put player (1).name, " : ", player (1).score %Outputs Player1's name and then a colon for the scoreboard locate (9, 65) put player (2).name, " : ", player (2).score %Outputs Player2's name and then a colon for the scoreboard end WriteScore %Setting the starting positions of the paddles and the ball. paddle1 := 50 paddle2 := 50 ballx := 245 bally := 150 %Setting the rebound speeds of the ball. reboundx := 3 reboundy := 2 MainMenu %Programming background music process playstuff loop play (">4a>c1d4dc<1a4a>c1d4fec<1a4a>c1d<4f1f2g4a1>c<4a>c1d4dc1<a4a>c1d<4fg1a4ag1f4e4dcaf>1dpppp") %Code for piano notes end loop end playstuff fork playstuff %Fork allows the music to play. loop loop %Programming the paddles to move. var w : array char of boolean Input.KeyDown (w) if w ('w') then paddle1 := paddle1 + 2 %Programs the first paddle to move up by pushing W on the keyboard. end if var s : array char of boolean %Boolean variables allow for true and false values. Input.KeyDown (s) if s ('s') then paddle1 := paddle1 - 2 %Programs the first paddle to move down by pushing S on the keyboard. end if var uparrow : array char of boolean Input.KeyDown (uparrow) if uparrow (KEY_UP_ARROW) then paddle2 := paddle2 + 2 %Programs the second paddle to move up by pushing the up arrow on the keyboard. end if var downarrow : array char of boolean Input.KeyDown (downarrow) if downarrow (KEY_DOWN_ARROW) then paddle2 := paddle2 - 2 %Programs the second paddle to move down by pushing the down arrow on the keyboard. end if delay (3) %Slows the ball down by a factor of 3 cls %Background Draw.FillBox (0, 0, maxx, maxy, 67) Draw.Box (0, 0, maxx, maxy, 87) Draw.Line (500, maxy, maxx, -200000, 87) %Outputs the background and background outline. %Player1 paddle Draw.FillBox (50, paddle1, 65, paddle1 + 150, 87) %Draws the first paddle. if paddle1 <= 0 then paddle1 := 0 %Sets the boundaries of the bottom of the screen for the left paddle. end if if paddle1 >= maxy - 150 then paddle1 := maxy - 150 %Sets the boundaries of the top of the screen for the left paddle. end if %Player2 paddle Draw.FillBox (450, paddle2, 465, paddle2 + 150, 87) %Draws the second paddle. if paddle2 <= 0 then paddle2 := 0 %Sets the boundaries of the bottom of the screen for the right paddle. end if if paddle2 >= maxy - 150 then paddle2 := maxy - 150 %Sets the boundaries for the top of the screen for the right paddle. end if %Draws the Ball. Draw.FillOval (ballx, bally, 10, 10, 0) %Sets Note Boundries and Speed. ballx := ballx + reboundx %Makes the ball bounce left and right on a horozontal line. bally := bally + reboundy %Makes the ball bounce up and down on a vertical line. if bally >= maxy - 10 then reboundy := -2 %Sets the boundaries of the top of the screen for the ball to bounce off of it. end if if bally <= 10 then reboundy := 2 %Sets the boundaries of the bottom of the screen for the ball to bounce off of it. end if if ballx >= maxx - 150 then reboundx := -3 %Sets the boundaries of the right side of the screen for the ball to bounce off of it. end if if ballx <= 10 then reboundx := 3 %Sets the boundaries for the left side of the screen for the ball to bounce off of it. end if %Making the Ball bounce off the paddles. if bally >= paddle1 and bally <= paddle1 + 150 and ballx <= 75 then reboundx := 3 %Sets the boundaries for the left paddle so that the ball can bounce off of it. end if if bally >= paddle2 and bally <= paddle2 + 150 and ballx >= 440 then reboundx := -3 %Sets the boundaries for the right paddle so that the ball can bounce off of it. end if %Keeps score if ballx <= 10 then player (1).score := player (1).score + 1 %Outputs +1 point for everytime the ball hits Player2's wall. end if if ballx >= 490 then player (2).score := player (2).score + 1 %Outputs +1 point for everytime the ball hits Player1's wall. end if WriteScore if player (2).score > 11 then %Declares player2's name as winner when their score is above 11. locate (13, 65) put "player2 Wins!" end if if player (1).score > 11 then %Declares player1's name as winner when the score is above 11. locate (13, 65) put "player1 Wins!" end if exit when player (1).score > 11 exit when player (2).score > 11 %Stops the game when one of the players score is greater than 11 (game point at 12) if player (1).score > 11 then put "Would you like to play again? Y/N" end if View.Update end loop exit when replay_reply = "n" end loop |
Author: | Tony [ Sat Jun 14, 2008 10:58 pm ] | ||||||||
Post subject: | RE:Pong - How to restart the game | ||||||||
which variable has no value? also, a couple of comments about the code: the way Input.KeyDown works is that it captures all of the keys, so doing it once is enough
It's not a "factor" of 3. It's 0.003 of a second.
-200000 ? .... Ok, I've noticed the problem. Your replay_reply variable has no value. That is because you've never gotten a reply from the user.
since the loop exists during the exit when condition, the player is never told that they could play again, that part is skipped over. And even if it wasn't, you are still not recording the user's response in any variable. |