bool Game2D::event(QEvent *event){ //qDebug () << event->type(); if (event->type() == QEvent::KeyPress) { QKeyEvent *ke = static_cast<QKeyEvent *>(event); if (!state_) state_=1; else{ if (state_==2) start (); } switch (ke->key()){ case Qt::Key_Up: case Qt::Key_W: direction_=UP; break; case Qt::Key_Right: case Qt::Key_D: direction_=RIGHT; break; case Qt::Key_Down: case Qt::Key_S: direction_=DOWN; break; case Qt::Key_Left: case Qt::Key_A: direction_=LEFT; break; case Qt::Key_Shift: ship_.setFire(1); break; case Qt::Key_Tab: nextLevel (); break; case Qt::Key_Backspace: prevLevel (); break; case Qt::Key_Pause: setPause (); break; } return true; } return QWidget::event(event); }
bool gameLoop() { initLevelManager(); loadLevel(g_LevelManager, 0); initHUD(); bool done = false; int moveStartTime = SDL_GetTicks(); while(!done) { int startTime = SDL_GetTicks(); // handle game lose situation (timer has run out, eaten by monster) // now handled in cLevelManager::update() SDL_Event event; while(SDL_PollEvent(&event)) { //check for messages switch(event.type) { case SDL_QUIT: done = true; break; //check for keypresses case SDL_KEYDOWN: { //handle keypresses switch(event.key.keysym.sym) { case SDLK_ESCAPE: g_LevelManager.stop(); done = true; return true; break; case SDLK_m: g_LevelManager.stop(); done = true; return false; break; case SDLK_r: g_LevelManager.endLevel(); moveStartTime = SDL_GetTicks(); loadLevel(g_LevelManager, g_LevelManager.getCurrentLevel()); break; case SDLK_n: nextLevel(); moveStartTime = SDL_GetTicks(); break; case SDLK_p: prevLevel(); moveStartTime = SDL_GetTicks(); break; default: g_InputManager.updateKey(event.key.keysym.sym); break; } } } //end switch } //end of message processing //autoplay routine (if level autoplay enabled) if(g_LevelManager.activeLevel()->autoPlay()) { if(g_LevelManager.activePlayer()->moveNumber() < g_LevelManager.activePlayer()->movesSize()) { int moveCheckTime = SDL_GetTicks(); if(moveCheckTime - moveStartTime >= 300) { g_InputManager.update(); moveStartTime = moveCheckTime; } } } g_InputManager.autoUpdate(); //do game update /*****update graphics*****/ //clear screen SDL_FillRect(screen,0,SDL_MapRGB(screen->format,0,0,0)); //SDL_FillRect(display,0,SDL_MapRGB(display->format,0,0,0)); //draw image g_RenderManager.update(); int endTime = SDL_GetTicks(); if(endTime - startTime < 1000/fps) SDL_Delay(1000/fps - (endTime - startTime)); //end frame SDL_Flip(screen); //level win now handled in cLevelManager::update() if(g_LevelManager.checkWin()) { done = true; return false; } /* if(levelWon()) { nextLevel(); } */ } return done; //do exit }