Listing 3: Handling timer messages


void TrisField::Notify(void) {
  BeginDrawing();
  if (trisApp.GameState() == GAME_PAUSED) {
    return;
  }
  Stop();
  
  if (trisApp.GameState() == NO_GAME) {
    return;
  }
  currentPiece->TryMove(0,-1);
  if (PieceFits()) {
    ErasePiece(currentPiece, trisBLACK);
    currentPiece->ConfirmMove();
    DrawPiece(currentPiece);
    if (!ignoreTickTime){
      logo->Draw();
    }
  }
  else {
    LockPiece(); 
    StripRows();
    EnterPiece(intPair(5, 18));
    ignoreTickTime = FALSE;
  }
  if (ignoreTickTime) {
    Start(0, FALSE);
  }
  else {
    // Start(tickTime, TRUE);  Doesn't work
    // properly with Watcom build (?)
    Start(tickTime, FALSE);
  }
  // Other windows within the same app
  // including menu panes and panels
  // occasionally steal keyboard focus when
  // the user clicks on them. This (greedily)
  //keeps the focus on the playing field.
  SetFocus();
  EndDrawing();
}
//End of File