17. To help, or not to help

So, our game is almost playable… Well, it is, but there's a lot of stuff to add… Like, random blocks appearing on the game field. The game I 'borrowed' the idea from, had these blocks apearing at radnom time intervals and random places on the game field… And those fields were cool, because, sometimes, they helped to clear you some additional blocks, and sometimes, they filled that valuable empty columns… Ok, back to the drawing board. Litteraly. Here are two examples, first one that shows when the block is helpful, and another one wich shows when it's not that helpful.

Take a look at the picture. The player has only two empty columns left. Let's think about the next situaion:  

a) Let's imagine that in this moment, our game 'spawns' a red field at 4,5. That would help the player, since he would be able to clear that red field, and the field one block to the right. (the one under 5,4). The result would be - three empty columns.

b) If we would spawn a blue field at 4,5 - that wouldn't affect the player a lot - he would clear the field, and the blue one on the left. The result would be the same: Two empty columns.
 
c) If we wolud spawn a green field at that location, that would be the worst case scenario for the player. He would be stuck with only one empty column.
 
Looking at the Field5,4, the best thing for the player would be, if we created a red block there. In that case, he could empty the #5 column. Spawning a green block wouldn't make a big difference. When the columns would be moved to the right, the green fields could be cleared. Creating a blue field there would be the worst thing for the player, but that wouldn't mean any disadvantages for him. The empty column count would stay the same.

So, the code for creating a 'random' block:(Put it in the DropBlock() method)

// Once again, we'll use the
// random function. We'll
// generate a random color,
// and a random position for
// our new block.

Random Rndm = new Random();

// Increasing the random range
// decreases the chance to drop
// the block.

int R = Rndm.Next(1, 3);

switch (R)

  case 1:
    // Drop the block!
    // Generate the position:

    int RX = Rndm.Next(iHeight - 1);
    int RY = Rndm.Next(iWidth - 2);

    // We dont allow the new block to
    // spawn in the last column - so
    // we don't cause possible gameover's ;)


    // We have to see if the field is empty...
    // So we don't overwrite some other field.
    // This also affects the possibility
    // of creating a random block...

    if (FieldRX, RY == 0)
   
      // Fill the block with a random
      // color;

      FieldRX, RY =
      Rndm.Next(1, iColor + 1);
      // Make it fall down...
      GoGravity();
   
    break;

    default:
      break;

 
In the next chapter, we'll make a score method, so we can let the player know how succesful he was...

more:here