Computer Science Canada getting a character without having to stop the program |
Author: | superman500 [ Tue Nov 14, 2006 11:55 pm ] |
Post subject: | getting a character without having to stop the program |
hey guys...im trying to make a DDR program for my g11 final game project and right now im trying to see how im gonna make the program detect keys without stopping the arrows.... %////////////////////////////////////////////////////////////////////////////// procedure start setscreen ("graphics:800;800") colorback (red) cls var x : array 1 .. 7 of int := init (180, 180, 80, 80, 30, 80, 80) var y : array 1 .. 7 of int := init (740, 710, 700, 675, 725, 775, 750) Draw.FillPolygon (x, y, 7, brightblue) Draw.Polygon (x, y, 7, cyan) end start procedure sety (num : int, var y : array 1 .. 7 of int) y (1) := num + 15 y (2) := num - 15 y (3) := num - 25 y (4) := num - 50 y (5) := num y (6) := num + 50 y (7) := num + 25 end sety procedure leftarrow var x : array 1 .. 7 of int := init (180, 180, 80, 80, 30, 80, 80) var y : array 1 .. 7 of int var key : string (1) for i : 1 .. 800 start View.Set ("offscreenonly") sety (i, y) Draw.FillPolygon (x, y, 7, brightred) Draw.Polygon (x, y, 7, red) View.Update delay (1) Draw.FillPolygon (x, y, 7, colorbg) Draw.Polygon (x, y, 7, colorbg) locate (50, 1) end for end leftarrow start leftarrow %////////////////////////////////////////////////////////////////////////////// thats my program so far...just really basic......theres an arrow at the top of the screen and another arrow is coming upwards from the bottom. Im gonna decide to score by the difference between the one of the y values of the arrow compared to a constant so i have that covered. I just need to figure out how to get a character and make sure its the Left Arrow Key (using ord) without stopping the program (because im gonna have a lot more arrows running at the same time and on the same screen). i need a way to detect what keys the user hits without stopping the program basically. Any suggestions? |
Author: | superman500 [ Tue Nov 14, 2006 11:57 pm ] |
Post subject: | |
wow nvm i just found the answer in another topic XD Input.Keydown now i just have to learn how to use it =\ |
Author: | ericfourfour [ Wed Nov 15, 2006 12:18 am ] | ||
Post subject: | |||
Try this one instead.
That one only gets a character only when there is one in the keyboard buffer. Input.hasch () returns false if no keys are pressed, however if a key is pressed it returns true. Input.getchar () returns the character representing the key being pressed. Plus it handles shift+letter (for capitals) and does not crash with ctrl+z. The only down side is it cannot handle multiple keys at once. |
Author: | Andy [ Wed Nov 15, 2006 1:54 am ] |
Post subject: | |
Input.Keydown is the way you should do it, but getch would work just fine |
Author: | superman500 [ Wed Nov 15, 2006 10:45 pm ] |
Post subject: | |
i've been playing around with it...i realized using Input.Keydown won't work cuz they can just hold the arrow key down and they would still get the points...anyone have a way to bypass this? ><... |
Author: | NikG [ Thu Nov 16, 2006 10:49 am ] |
Post subject: | |
I've had this problem b4 too and I'm not sure there's a really good solution. But for a ddr game, this shouldn't be a problem. If the player is pressing the key when he shouldn't be, shouldn't his points be decreasing? Also, I'm assuming you're gonna have input for all 4 arrow keys, so how exactly is the player getting all the points for holding just one of them down? |
Author: | Wolf_Destiny [ Fri Nov 17, 2006 10:58 pm ] | ||
Post subject: | |||
If the problem is that they can just hold down the key and rack up the points, then after you check to see if the key is pressed, create a loop that only exits when the key is released.
Same thing works with any key, and the mouse, and even a joystick! Just think about the principle, You pressed the key, now let it go, okay now you can press it again! ~Wolf_Destiny |
Author: | ericfourfour [ Fri Nov 17, 2006 11:39 pm ] | ||
Post subject: | |||
Wolf_Destiny wrote: create a loop that only exits when the key is released
You can do that but I would not suggest it. That way will basically stop your program until the key is released. Instead have a flag that is true when the key is pressed and false when it is released. That way you could do what you want and stay in the main loop.
This one is only for the Input.hasch ()/Input.getchar () way. The way you need to do it for DDR is the Input.KeyDown way. I'll let you figure out that one. |
Author: | Chrisd534 [ Wed Nov 29, 2006 9:37 pm ] |
Post subject: | |
yo so did u get the game finished i wanna play it lol |
Author: | PiGuy [ Wed Nov 29, 2006 10:04 pm ] |
Post subject: | |
Just like what NikG say, why don't you just subtract points if they hold down the key when they shouldn't? If, for example, they press the key when the arrow is, say, 50 pixels or more away from the top, subtract points. Also, as soon as you evaluate the player's correct input and add points to their total, you can set flag so that any more input after that will result in point subtraction. Of course, this may get somewhat messy for multiple arrows, but can probably be solved by focusing on the arrow closest to the top. |
Author: | superman500 [ Fri Dec 01, 2006 8:39 am ] |
Post subject: | |
hey guys..just an update on the program...me and my partner are pretty much done now and it works fine cept it might be laggy on slow computers....the only thing that we couldnt do is make the arrows match up with the beats of the song..i guess we could manually do it but it would change on each computer depending on the computer speed..=\....but yeah....measure bar works..scoring works..everything works cept the arrows matching with the song...right now its random... |