//----------------------------------------Game Loop int main() { SetupGame(); //this is the game loop. this loops forever. while (1) { SHOW_SPRITES; //monster stuff MonsterUpdate(SpriteNum); //player stuff num = PlayerCheckControls(SpriteNum); if (num == 1) //then a bullet was instantiated { SpriteNum++; PlayerSlideBack(); PlayerSlideBack(); PlayerSlideBack(); PlayerSlideBack(); PlayerUpdate(SpriteNum); HIDE_SPRITES; //clear unused sprites } num = PlayerUpdate(SpriteNum); if (num == 1) //then a bullet died { set_sprite_tile(SpriteNum, 5); //hide the players current sprite SpriteNum--; move_sprite(SpriteNum, P_PosX, P_PosY); //and show the new } //woah there sparky delay(20); } }
void TitleScreenDoLogic(bool* Continue, bool* Error, Uint32 Milliseconds) { (void)Continue; (void)Error; cpSpaceStep(space.Space, Milliseconds * 0.001); for (int i = 0; i < MAX_PLAYERS; i++) { PlayerUpdate(&players[i], Milliseconds); // Check which players have fallen below their start pads cpVect pos = cpBodyGetPosition(players[i].Body); if (pos.y < BLOCK_Y) { if (!playersEnabled[i]) { // New player entered countdownMs = COUNTDOWN_START_MS; SoundPlay(SoundStart, 1.0); } playersEnabled[i] = true; } } if (countdownMs >= 0) { const int countdownMsNext = countdownMs - Milliseconds; // Play a beep every second if ((countdownMs / 1000) > (countdownMsNext / 1000)) { SoundPlay(SoundBeep, 1.0); } // Start game if counted down to zero if (countdownMsNext <= 0) { TitleScreenEnd(); ToGame(); return; } countdownMs = countdownMsNext; } Animation *a = Start ? &TitleAnim : &GameOverAnim; AnimationUpdate(a, Milliseconds); HighScoreDisplayUpdate(&HSD, Milliseconds); }
//****************************************************************** // 更新・描画 //****************************************************************** bool sceneMain::Update() { PlayerCtrl(); PlayerUpdate(); SoundManager::Update(); if (KeyBoard(KB_F))cameraPos.z += 1; if (KeyBoard(KB_G))cameraPos.z -= 1; tdnView::Set(cameraPos, VECTOR_ZERO); // メッシュテスト shader3D->SetValue( "viewPosition", cameraPos ); static float meshAngle = 0; meshAngle += 0.01f; TestMesh->Rot( *D3DXQuaternionRotationYawPitchRoll( &Quaternion(), meshAngle, meshAngle * 0.9f, meshAngle * 0.7f ) ); TestMesh->Pos( Vector3( 0.0f, 0.0f, 0.0f ) ); TestMesh->UpdateWorldMatrix(); return true; }
void GameDoLogic(bool* Continue, bool* Error, Uint32 Milliseconds) { (void)Continue; (void)Error; if (Pause) return; cpSpaceStep(space.Space, Milliseconds * 0.001); CameraUpdate(&camera, PlayerMiddleY(), Milliseconds); bool hasPlayers = false; for (int i = 0; i < MAX_PLAYERS; i++) { Player *p = &players[i]; if (!p->Enabled) continue; PlayerUpdate(p, Milliseconds); // Check if the player needs to be respawned if (p->RespawnCounter == 0 && !p->Alive && space.Gaps.size > 0) { SpaceRespawnPlayer(&space, p); } if (!p->Alive) { // Check if any players are past ones that await reenabling if (p->RespawnCounter == -1 && PlayerMinY() < p->y) { PlayerRevive(p); } else { continue; } } hasPlayers = true; // Check player pickups if (PickupsCollide(p->x, p->y, PLAYER_RADIUS)) { PlayerScore(p, false); } // Players that hit the top of the screen die if (cpBodyGetPosition(p->Body).y + PLAYER_RADIUS >= camera.Y + FIELD_HEIGHT / 2) { PlayerKill(p); } } // If no players left alive, end the game if (!hasPlayers) { ToTitleScreen(false); } SpaceUpdate(&space, PlayerMinY(), camera.Y, PlayerMaxY(), &players[0]); ParticlesUpdate(Milliseconds); // Players that hit the top of the screen die if (PlayerMaxY() + PLAYER_RADIUS >= camera.Y + FIELD_HEIGHT / 2) { ToTitleScreen(false); } }
void Ship::Update() { PlayerUpdate(); }