HTML and CSS Reference
The drawPlayField() function loops through the rows in the playField array, and then
through each column inside each row. If the tile id number at playField[rowCtr]
[colCtr] is a road tile, it simply paints that tile at the correct location on the play
Field . If the tile id is a game object (not a road tile), it first paints a road tile in that spot
and then paints the object tile in that spot.
Simple Homegrown AI Overview
The enemy tanks chase the player object based on a set of simple rules. We have coded
those rules into the gameStateEnemyMove() function, which is one of the longest and
most complicated functions in this topic. Let's first step through the logic used to create
the function, and then you can examine it in Example 9-3 .
This function starts by looping through the enemy array. It must determine a new tile
location on which to move each enemy. To do so, it follows some simple rules that
determine the order in which the testBounds() function will test the movement
1. First, it tests to see whether the player is closer to the enemy vertically or
2. If vertically, and the player is above the enemy, it places up and then down into the
3. If vertically, and the player is below the enemy, it places down and then up into the
The up and then down , or down and then up , directions are pushed
into the directionsTest array to simplify the AI. The logic here is
if the player is “up” from the enemy, but the enemy is blocked by
an object, the enemy will try the opposite direction first. In our
game, there will be no instance where an object blocks the direction
the enemy tank wants to move in. This is because the only illegal
direction is trying to move off the bounds of the screen. If we add
tiles to our playfield that “block” the enemy, this entire set of AI
code suddenly becomes very useful and necessary. We have inclu-
ded this entire “homegrown chase AI” in our game in case more of
these tile types are added.
4. It then looks to see where to add the left and right directions. It does this based
on which way will put it closer to the player.
5. If the horizontal direction and not the vertical direction is the shortest, it runs
through the same type of logic, but this time using left and then right , then up
and then down .
6. When this is complete, all four directions will be in the directionsToTest array.