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 Initialize(bool* Continue, bool* Error) { if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_JOYSTICK) < 0) { *Continue = false; *Error = true; printf("SDL initialisation failed: %s\n", SDL_GetError()); SDL_ClearError(); return; } else printf("SDL initialisation succeeded\n"); Screen = SDL_SetVideoMode(SCREEN_WIDTH, SCREEN_HEIGHT, 32, SDL_HWSURFACE | #ifdef SDL_TRIPLEBUF SDL_TRIPLEBUF #else SDL_DOUBLEBUF #endif ); if (Screen == NULL) { *Continue = false; *Error = true; printf("SDL_SetVideoMode failed: %s\n", SDL_GetError()); SDL_ClearError(); return; } else printf("SDL_SetVideoMode succeeded\n"); SDL_ShowCursor(0); uint32_t i; for (i = 0; i < BG_LAYER_COUNT; i++) { BackgroundImages[i] = IMG_Load(BackgroundImageNames[i]); if (!CheckImage(Continue, Error, BackgroundImages[i], BackgroundImageNames[i])) return; if ((BackgroundImages[i] = ConvertSurface(Continue, Error, BackgroundImages[i], BackgroundImageNames[i])) == NULL) return; } CharacterFrames = IMG_Load("Bee.png"); if (!CheckImage(Continue, Error, CharacterFrames, "Bee.png")) return; if ((CharacterFrames = ConvertSurface(Continue, Error, CharacterFrames, "Bee.png")) == NULL) return; CollisionImage = IMG_Load("Crash.png"); if (!CheckImage(Continue, Error, CollisionImage, "Crash.png")) return; if ((CollisionImage = ConvertSurface(Continue, Error, CollisionImage, "Crash.png")) == NULL) return; ColumnImage = IMG_Load("Bamboo.png"); if (!CheckImage(Continue, Error, ColumnImage, "Bamboo.png")) return; if ((ColumnImage = ConvertSurface(Continue, Error, ColumnImage, "Bamboo.png")) == NULL) return; InitializePlatform(); // Title screen. (-> title.c) ToTitleScreen(); }