bool PlayArea::MsgChar(int c) { if (!curPiece || !playing) return false; switch (c>>8) { case ALLEGRO_KEY_LEFT: curPiece->MoveLeft(); break; case ALLEGRO_KEY_RIGHT: curPiece->MoveRight(); break; case ALLEGRO_KEY_DOWN: if (curPiece->MoveDown()) { parent->HandleEvent(*this, MyDialog::MSG_UPDATESCORE, lines, score += ((600 - frameInterval)/100)); } break; case ALLEGRO_KEY_UP: curPiece->RotateRight(); break; case ALLEGRO_KEY_SPACE: while (curPiece->MoveDown()) { parent->HandleEvent(*this, MyDialog::MSG_UPDATESCORE, lines, score += ((600 - frameInterval)/100)); } break; case ALLEGRO_KEY_ESCAPE: GameOver(); break; default: return false; }; return true; }
void PlayArea::MsgTimer(ALLEGRO_TIMER_EVENT *t) { Widget::MsgTimer(t); if (t->source == timer) { if (curPiece->MoveDown() == false) { DropCurrentPiece(); delete curPiece; curPiece = nextPiece; nextPiece = new Piece; nextPiece->map = this; nextPiece->CreateRandomPiece(); if (!curPiece->CanMoveDown()) { GameOver(); } else { parent->HandleEvent(*this, MyDialog::MSG_NEWPIECE); } } } }