Animation and Keyboard
Moving in All Four Directions
Expanding the previous program so that the ball moves in all four directions seems simple enough. Let us provide the source code:
int previousTime = tickCount; double x = SCREEN_W/2; double y = SCREEN_H/2; double vx = 0; double vy = 0; while (!key[KEY_ESC]) { int elapsedTimeInTicks = tickCount - previousTime; previousTime += elapsedTimeInTicks; if (key[KEY_LEFT]) vx -= elapsedTimeInTicks; if (key[KEY_RIGHT]) vx += elapsedTimeInTicks; if (key[KEY_UP]) vy -= elapsedTimeInTicks; if (key[KEY_DOWN]) vy += elapsedTimeInTicks; x += vx*elapsedTimeInTicks/1000; y += vy*elapsedTimeInTicks/1000; clear_to_color(surface, makecol(255,255,255)); circlefill(surface, int(x), int(y), 50, makecol(0,0,255)); blit(surface, screen, 0,0, 0,0, SCREEN_W,SCREEN_H); rest(20); } return 0;
This will enable you to move the ball anywhere across the screen by using all four cursor keys.
To enable this functionality, the program
has to process the y-coordinate
in the same manner it processes the x-coordinate.
Accordingly, there are now two variables for position,
named x
and y
, and two variables for velocity,
named vx
and vy
. There
have to be two statements for applying the motion, one for each coordinate.
Finally, the circle has to be drawn at coordinates given by variables x
and y
.
Needless to
say, this all is the consequence of our drawing surfaces being two-dimensional,
like a piece of paper is. To work in three dimensions, we would have to add the
code for the third coordinate usually named z
. Unfortunately, the Allegro library
does not have the functionality to draw three-dimensional objects, as such
functionality usually entails many other complications.