// this function has 3 arguments // the first is the key and the rest are coordinates of the mouse void KeyPressed (int Key, int x, int y) { if ((ScreenType != GAME_ARCADE) && (ScreenType != GAME_CLASSIC)) return; switch (Key) { case GLUT_KEY_LEFT : if (!Pause) Tetris.KeyEvent (Game::LEFT); break; case GLUT_KEY_RIGHT : if (!Pause) Tetris.KeyEvent (Game::RIGHT); break; case GLUT_KEY_UP : if (!Pause) Tetris.KeyEvent (Game::UP); break; case GLUT_KEY_DOWN : if (!Pause) Tetris.KeyEvent (Game::DOWN); break; case GLUT_KEY_F1 : Pause = !Pause; if (!Pause) Timer (0); break; } DisplayGame (); }
// this function is needed for animation (game) void Timer (int) { if ((ScreenType == GAME_ARCADE) || (ScreenType == GAME_CLASSIC)) { Tetris.Tick (); DisplayGame (); if (!Pause) glutTimerFunc (30 * (10 - Tetris.GetLevel ()), Timer, 0); } }
void Run(UI* ui) { if(ui == NULL) return; NewGame(ui->game); NextTurn(ui->game); int c, running = 1; while(running && ui->game->status != GAME_STATUS_ERROR) { DisplayGame(ui); c = getch(); switch(c) { case KEY_LEFT: if(ui->game->status != GAME_STATUS_LOST) { if(PushLeft(ui->game)) NextTurn(ui->game); else CheckTurn(ui->game); } break; case KEY_RIGHT: if(ui->game->status != GAME_STATUS_LOST) { if(PushRight(ui->game)) NextTurn(ui->game); else CheckTurn(ui->game); } break; case KEY_UP: if(ui->game->status != GAME_STATUS_LOST) { if(PushUp(ui->game)) NextTurn(ui->game); else CheckTurn(ui->game); } break; case KEY_DOWN: if(ui->game->status != GAME_STATUS_LOST) { if(PushDown(ui->game)) NextTurn(ui->game); else CheckTurn(ui->game); } break; case 'q': running = 0; break; case 'n': NewGame(ui->game); NextTurn(ui->game); break; case 'r': StartGame(ui->game); NextTurn(ui->game); break; default: break; } } }