HTML and CSS Reference
In-Depth Information
Simple Homegrown AI Overview
Theenemytankschasethe player objectbasedonasetofsimplerules.Wehavecodedthose
rules into the gameStateEnemyMove() function, which is one of the longest and most com-
plicated 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-2 .
This function starts by looping through the enemy array. It must determine a new tile location
onwhichtomoveeachenemy.Todoso,itfollowssomesimplerulesthatdeterminetheorder
in which the testBounds() function will test the movement directions:
1. First, it tests to see whether the player is closer to the enemy vertically or horizontally.
2. If vertically, and the player is above the enemy, it places up and then down in the dir-
ectionsToTest array.
3. If vertically, and the player is below the enemy, it places down and then up in the dir-
ectionsToTest array.
NOTE
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
isblockedbyanobject,theenemywilltrytheoppositedirectionfirst.Inourgame,therewill
be no instance when an object blocks the direction the enemy tank wants to move in, 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 included this entire homegrown chase AI in our game in case more of
these tile types are added.
4. It then looks 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
thesametypeoflogic,butthistimeusing left andthen right ,then up andthen down .
6. When this is complete, all four directions will be in the directionsToTest array.
Next, the logic finds a number between 0 and 99 and checks whether it is less than the
chanceRandomEnemyMovement value. If it is, it ignores the directionsToTest array and
simply tries to find a random direction to move in. In either case, all the directions (either
Search WWH ::




Custom Search