A collision with an edge of the game window
The code in Listing 8 checks for a collision with an edge of the game window.
If the sprite collides with an edge, the code in Listing 8 causes the sprite to wrap around and reappear at the opposite edge, moving at the same speed in adifferent direction within the same quadrant as before. In other words, if a sprite is moving down and to the right and collides with the right edge of the window, it will reappear at the left edge, still movingdown and to the right but not in exactly the same direction down and to the right.
Listing 8 . Process a collision with an edge of the game window.
if(position.X<-image.Width){
position.X = windowSize.X;NewDirection();
}//end ifif(position.X>windowSize.X){
position.X = -image.Width/2;NewDirection();
}//end ifif(position.Y<-image.Height) {
position.Y = windowSize.Y;NewDirection();
}//end ifif(position.Y>windowSize.Y){
position.Y = -image.Height / 2;NewDirection();
}//end if on position.Y}//end if on elapsed time
}//end Move
Modify the position and call the NewDirection method
In all cases shown in Listing 8 , if a collision occurs, the position of the sprite is modified to position the sprite at the opposite edge. Then the methodnamed NewDirection is called to modify the direction pointed to by the direction vector.
The end of the Move method
Listing 8 signals the end of the Move method.
The method named NewDirection
The method named NewDirection begins in Listing 9 .
Listing 9 . Beginning of the method named NewDirection.
private void NewDirection() {
double length = Math.Sqrt(direction.X * direction.X +
direction.Y * direction.Y);Boolean xNegative = (direction.X<0)?true:false;
Boolean yNegative = (direction.Y<0)?true:false;
The length of the direction vector and the signs of thecomponents
Listing 9 begins by determining the length of the current direction vector along with the signs of the X and Y components of the vector.
Compute the hypotenuse
The first statement in the method in Listing 9 calls the Math.Sqrt method and uses the Pythagorean Theorem to compute the length of the hypotenuse of the right triangle formed by the Xand Y components of the direction vector. This is the length of the direction vector.
Use the conditional operator
Then the last two statements in Listing 9 use the conditional operator to determine if the signs of the components are negative. If so, the variables named xNegative and/or yNegative are set to true.
Compute components of a new direction vector
Having accomplished that task, the code in Listing 10 computes the components for a new direction vector of the same length with the X and Y components having random (but consistent) lengths and the same signs asbefore.
Compute a new random value for the X component
For the code in Listing 10 to make any sense at all, you must know that the call to random . NextDouble returns a pseudo-random value, uniformly distributed between 0.0 and 1.0.