While playable, Flood Control in its current form is rather rough. When the player clicks on game pieces, they simply flop to their new orientation. Completed rows vanish without a trace, being filled in so rapidly that it is hard to tell if they actually disappeared at all. The game never ends! Once you have started, you can play forever, not worrying about the underwater research lab actually filling up with water.
In this chapter, we will address these issues by:
- Animating the rotation of pieces when manipulated by the player
- Gradually fading out pieces of completed scoring chains
- Animating the falling of pieces into place on the board
- Implementing the flooding of the dome and adding increasing difficulty levels
- Adding a SpriteFont to the game and displaying the current level and score in their appropriate positions on the screen
All of these enhancements will give the player a better game experience, as well as give us the opportunity to learn more about how the SpriteBatch class can be used for animation and text display.
We will define three different types of animated pieces: rotating, falling, and fading. The animation for each of these types will be accomplished by altering the parameters of the SpriteBatch.Draw()
call.
In order to represent the three types of animated pieces, we will create three new classes. Each of these classes will inherit from the GamePiece class, meaning they will contain all of the methods and members of the GamePiece class, but add additional information to support the animation.
Tip
Child classes
Child classes inherit all of their parent's members and methods. The RotatingPiece class can refer to the pieceType
and suffix
of the piece without recreating them within RotatingPiece itself. Additionally, child classes can extend the functionality of their base class, adding new methods and properties or overriding old ones. In fact, Game1 itself is a child of the Micrsoft.Xna.Game class
, which is why all of the methods we use (Update()
, Draw()
, LoadContent()
, and so on) are declared as "override".
Let's begin by creating the class we will use for rotating pieces.