Years ago I programmed regularly in Revolution. I hardly do anymore, but I’m still subscribed to the mailing list and every once in a while someone posts something that I used to be pretty decent at, so I dive back in. This is an example of that.
An anonymous poster is trying to replicate Galaga
in Revolution. Graphic video games like that aren’t really Rev’s strength, and the poster immediately ran into speed problems. Rev just doesn’t have the ability to directly update the locations of multiple objects repeatedly in a way that makes sense for video games. In short, it’s no Flash killer.
That said, there are things you can do to get things done anyway. In particular, the move to points command is your friend. You can use
put the width of this stack into w
put random into x
repeat with y = –25 to the height of this stack + 25 step 10
put abs(x + 20 * random(2) – 30) into x
if x > w then put 2 * w – x into x
put x,y & cr after p
move image “enemy” to pointsList in 5 seconds without waiting
and if you have set up the points in pointsList appropriately, you’re set for five seconds. Further, image “enemy” will receive a moveStopped message when it finishes, allowing you to start the process over again. In this version of Galaga, enemies start above screen and go off the bottom, so this works perfectly.
One drawback of this is that they can’t (easily) go off the left side and come in on the right, or vice versa. Off the top of my head the easiest way to do that would be to check as you go along and if the ship ever goes off the side, stop there, calculate how long the move should take, and then write code to pick up from the opposite side when the moveStopped message arrives.
The same sort of thing is even easier for the bullets:
repeat with i = 1 to 12
if i > 11 or item 2 of the loc of grc (“fire” & i) < 0 then exit repeat
if i = 6 then exit rawkeydown
set the loc of grc (“fire” & i) to the loc of image “ship”
move grc (“fire” & i) relative (0,(- the height of this stack)) in 2 seconds without waiting
I could have kept track of which bullets were available but I took the easy way and just checked to see if they were off the top of the screen.
Performance. The original code had a hard time moving one enemy and a few bullets. This version handles three enemies and 11 bullets smoothly (on my computer). I’m still simply moving the player’s ship; I’d fix that if I were going to spend any more time on this. If you have Revolution, feel free to download this and poke around.