int main(int argc, char* argv[]){ char x; char changed = 0; SetMode(MODE_4 | BG2_ENABLE ); //en este ejemplo vamos a utilizar el modo gráfico 4 de la GBA y además vamos a activar //el background MODE 2. for(x = 0; x < 16; x++) // plaeta paletteMem[x] = gPalette[x]; nPlayerX = 96; // coordenadas iniciales X nPlayerY = 128; // coordenadas iniciales X nPlayerAngle = 0; // hacia la derecha. Flip();// conmuta al buffer que va ser visto por la pantalla de la GBA. drawBackground(); renderWalls(); // dibujamos los muros. Flip();// conmuta al buffer que va ser visto por la pantalla de la GBA. while(true){// bucle infinito. // en el bucle infinito procesamos los movimientos del personaje. if (fKeyLeft){ nPlayerAngle += 10; if (nPlayerAngle >= 360) nPlayerAngle = 0; changed = 1; } else if (fKeyRight){ if (nPlayerAngle < 10) nPlayerAngle = 350; else nPlayerAngle -= 10; changed = 1; } if (fKeyUp){ move(1); // comprueba si ha habido colisiones del personaje con //alguno de los muros después de haberse producido un movimiento. changed = 1; } else if (fKeyDown){ move(0); // comprueba si ha habido colisiones del personaje con //alguno de los muros después de haberse producido un movimiento. changed = 1; } if (changed) // only redraw if they push a key and change the screen { changed = 0; drawBackground(); // esta función básicamente permite limpiar la pantalla de la GBA. renderWalls(); // permite dibujar los muros. WaitForVsync(); // función de espera al vsync. Flip(); // conmuta al buffer que va ser visto por la pantalla de la GBA. } updateKeyVars(); } return 0; }//fin del metodo.
void updateProcEmpty(GContext* _ctx) { renderFloor(_ctx, 0); renderClutter(_ctx); renderPlayer(_ctx); renderWalls(_ctx, true, true, true, true); renderWallClutter(_ctx); renderArrows(_ctx, 15, 4, 4); }
void updateProcStart(GContext* _ctx) { renderFloor(_ctx, 0); static const char* _a = "YOU"; static const char* _b = "CANNOT"; static const char* _c = "GO"; static const char* _d = "BACK!"; renderBorderText(_ctx, GRect(45, 15, 80, 100), fonts_get_system_font(FONT_KEY_GOTHIC_28_BOLD), _a, 2, GTextAlignmentCenter, false); renderBorderText(_ctx, GRect(45, 45, 80, 100), fonts_get_system_font(FONT_KEY_GOTHIC_28_BOLD), _b, 2, GTextAlignmentCenter, true); renderBorderText(_ctx, GRect(45, 75, 80, 100), fonts_get_system_font(FONT_KEY_GOTHIC_28_BOLD), _c, 2, GTextAlignmentCenter, false); renderBorderText(_ctx, GRect(45, 105, 80, 100), fonts_get_system_font(FONT_KEY_GOTHIC_28_BOLD), _d, 2, GTextAlignmentCenter, true); renderClutter(_ctx); renderPlayer(_ctx); renderWalls(_ctx, true, true, true, true); renderWallClutter(_ctx); drawBitmap(_ctx, m_flagstone[ m_dungeon.m_finalPuzzle ], 0, 9); renderArrows(_ctx, 15, 4, 4); }
void playLevel(SDL_Renderer* renderer, SDL_Window* window) { TextureStorage::getInstance().setDifficultyBackground(renderer); bool isScoreRecording = false; bool isHighScore = false; bool isPaused = false; std::random_device rd; std::mt19937 eng(rd()); std::uniform_int_distribution<> randomX(2 * WALL_WIDTH, SCREEN_WIDTH - (2 * WALL_WIDTH)); std::uniform_int_distribution<> randomY(2 * WALL_WIDTH, SCREEN_HEIGHT - (2 * WALL_WIDTH)); std::uniform_int_distribution<> randomVortex(0, VORTEX_LIMIT); std::string inputText = ""; SDL_Event e; Player player(SCREEN_WIDTH / 2, SCREEN_HEIGHT / 2, PLAYER_WIDTH, PLAYER_HEIGHT, PLAYER_VEL); Collectible collectible(randomX(eng), randomY(eng), resolveCoinWidth(), COIN_HEIGHT, 0); Skull skull(0, 0, SKULL_WIDTH, SKULL_HEIGHT, 0); std::vector<SDL_Rect> walls = getBoundaries(); SoundPlayer::getInstance().playMusic(); while (!isQuitting) { if (player.isDead) { SoundPlayer::getInstance().stopMusic(); if (!isScoreRecording) { isScoreRecording = HighScore::getInstance().checkAndAddNewScore(score, gameDifficulty); if (isScoreRecording) { isHighScore = true; SoundPlayer::getInstance().playHighScore(); } } } while (SDL_PollEvent(&e) != 0) { if (!isPaused) SDL_EventState(SDL_KEYUP, SDL_ENABLE); if (e.type == SDL_QUIT) { isQuitting = true; isResetting = false; reset(); } else if (e.type == SDL_KEYDOWN && e.key.keysym.sym == SDLK_ESCAPE) toggleFullscreen(window); else if (e.type == SDL_KEYDOWN && e.key.keysym.sym == SDLK_RETURN && !player.isDead) { SoundPlayer::getInstance().pauseMusic(); SoundPlayer::getInstance().playPause(); if (isPaused) isPaused = false; else { isPaused = true; SDL_EventState(SDL_KEYUP, SDL_IGNORE); } } if (isPaused) SDL_EventState(SDL_KEYDOWN, SDL_IGNORE); if (!player.isDead) { if (!isPaused) player.handleEvent(e); } else { if (e.type == SDL_TEXTINPUT) { if (inputText.size() < 3 && e.text.text[0] != ',') inputText += e.text.text; } else if (e.type == SDL_KEYDOWN) { if (e.key.keysym.sym == SDLK_n && !isHighScore) { isResetting = false; reset(); return; } else if (e.key.keysym.sym == SDLK_y && !isHighScore) { isResetting = true; reset(); return; } else if (e.key.keysym.sym == SDLK_BACKSPACE) { if (inputText.size() != 0) inputText.pop_back(); } else if (e.key.keysym.sym == SDLK_RETURN) { if (isHighScore) HighScore::getInstance().addInitials(inputText); isHighScore = false; } } } SDL_EventState(SDL_KEYDOWN, SDL_ENABLE); } if (!isPaused) { if (!player.isDead) player.move(walls, enemies, skull); else skull.move(walls); for (std::vector<Enemy>::iterator it = enemies.begin(); it != enemies.end(); ++it) { it->move(walls); } if (!collectible.isHit) { prevX = collectible.getX(); prevY = collectible.getY(); } collectible.move(player, randomX(eng), randomY(eng)); } SDL_SetRenderDrawColor(renderer, 0xFF, 0xFF, 0xFF, 0xFF); SDL_RenderClear(renderer); TextureStorage::getInstance().bgTexture.render(0, 0, renderer); renderWalls(renderer, walls); for (std::vector<Enemy>::iterator it = enemies.begin(); it != enemies.end(); ++it) { it->render(renderer); } collectible.render(renderer); if (!player.isDead) player.render(renderer); else skull.render(renderer); TextDraw::getInstance().renderHUD(renderer); if (collectible.isHit) { time++; TextDraw::getInstance().renderScoreGain(prevX, prevY, renderer); prevX++; prevY--; if (time == 20) { time = 0; Enemy enemy(randomX(eng), randomY(eng), ENEMY_WIDTH, ENEMY_HEIGHT, ENEMY_VEL * (int)gameDifficulty, EnemyType::SPIKEBALL); if (randomVortex(eng) > VORTEX_LIMIT / (int)gameDifficulty) { Enemy vortex(randomX(eng), randomY(eng), ENEMY_WIDTH, ENEMY_HEIGHT, 0, EnemyType::VORTEX); while (checkCollision(vortex.getHitbox(), player.getHitbox())) { vortex.setX(randomX(eng)); vortex.setY(randomY(eng)); vortex.setHitbox(); } enemies.push_back(vortex); } while (checkCollision(enemy.getHitbox(), player.getHitbox())) { enemy.setX(randomX(eng)); enemy.setY(randomY(eng)); enemy.setHitbox(); } enemies.push_back(enemy); collectible.isHit = false; } } if (player.isDead) TextDraw::getInstance().renderGameOver(renderer, isHighScore, inputText); if (isPaused)TextDraw::getInstance().renderPause(renderer); SDL_RenderPresent(renderer); frameCount++; if (frameCount == DISPLAY_LIMIT) frameCount = 0; } }