void update_movement(GameState * state) { register int i; if (((state->wave.spawn_counter % 10 == 0 && !state->wave.completed) || (state->wave.cool_down_counter % 10 == 0 && state->wave.cool_down_counter != 0)) && state->mana != MANA_MAX) { if (state->mana + MANA_UPDATE < MANA_MAX) { state->mana += MANA_UPDATE; } else { state->mana += MANA_MAX - state->mana; } } //als frost wave actief is is er geen movement if (!state->spells.frost_wave_active) { //pad moet herberekend worden if (state->refresh_paths) { for (i = 0; i < state->enemies_length; i++) { if (state->enemies[i].enemy.alive) { refresh_path(&state->enemies[i].enemy.path, &state->world); } } state->refresh_paths = 0; } move_enemies(state); } move_projectiles(state); }
void* init_world() { /* Incase the server crashed with users online * set all users to offline so they can reconnect */ db_set_all_users_offline(); /* Initialize and cache all maps from DB */ maps = init_maps(); while(1) { /* sleep for 500,000 microseconds, or 0.5 seconds */ usleep(500000); respawn_npcs(); npcs_attack_target(); move_enemies(); } return NULL; }
int main() { //initscr(); n_enemies=0; srand(time(NULL)); player.x=rand()%MAXLIN; player.y=rand()%MAXCOL; /*inicializa o player numa posição qualquer*/ int temp_life,lvl=0; do{ int f; if(kill==1) { kill=0; n_enemies=10; lvl=1; } else n_enemies+=10; lvl++; new_map_enemies(); print_map(); temp_life=1; do{ move_human(); if(enable_mv==1) { move_enemies(); print_map(); temp_life=test_enemies(); enable_mv=0; } }while(temp_life!=0 && master_quit==0 && kill==0); for(f=0;f<n_enemies;f++) robot[f].alive=0; }while(master_quit==0); printf("\nLevel: %d", lvl); __fpurge(stdin); getchar(); return EXIT_SUCCESS; }
void GameUpdate(float elapsed, std::vector<Entity*>& entities, std::vector<Entity*> enemy_bullets, Entity& player_bullet, Entity& explosion, Entity& player){ static float timer = 0; static bool right = 1; static float explosion_life = 0; int randEnemy = 0; timer += elapsed; explosion_life += elapsed; size_t count = 44; for (size_t i = 0; i < 44; ++i){ if (entities[i]->isDead){ --count; } } for (size_t i = 0; i < ENEMY_BULLETS && i < count; ++i){ if (bullet_not_on_screen(*enemy_bullets[i])){ randEnemy = rand() % 44; while (entities[randEnemy]->isDead){ randEnemy = rand() % 44; } enemy_bullets[i]->x = entities[randEnemy]->x; enemy_bullets[i]->y = entities[randEnemy]->y - entities[randEnemy]->height; enemy_bullets[i]->velocity_y = -2; } enemy_bullets[i]->Update(elapsed, friction_x, gravity); if (!player.isDead && enemy_bullets[i]->hasSqCollision(player)){ enemy_bullets[i]->x = 7.0f; lives--; if (lives <= 0){ player.isDead = 1; } } } player.Update(elapsed, friction_x, gravity); if (player.x >= (6.22 - player.width / 2)){ player.x = (6.22 - player.width / 2); } else if ((player.x <= (-6.22 + player.width / 2))){ player.x = (-6.22 + player.width / 2); } player_bullet.Update(elapsed, friction_x, gravity); if (bullet_not_on_screen(player_bullet)){ player_bullet.velocity_y = 0; player_bullet.x = 7.0f; player_bullet.y = 0.0f; } if (explosion_life > 0.2){ if (explosion.isDead){ explosion.x = 7.0f; explosion.y = 0.0f; } explosion_life = 0; } for (size_t i = 44; i < 44 + (MAX_LIVES - lives); ++i){ /*show life amount based on lives variable*/ entities[i]->isDead = 1; } for (size_t i = 0; i < 44; ++i){ if (!entities[i]->isDead && entities[i]->hasSqCollision(player_bullet)){ entities[i]->isDead = 1; player_bullet.velocity_y = 0; player_bullet.x = 7.0f; player_bullet.y = 0.0f; explosion.x = entities[i]->x; explosion.y = entities[i]->y; explosion.isDead = 1; } } move_enemies(entities, right,timer, 0, 44); }
void Game::main_loop(){ //Quit flag bool quit = false; Timer fps; timer.start(); int ticks = timer.get_ticks(); int last_ticks = 0; //While the user hasn't quit while( quit == false ) { //While there's events to handle while( SDL_PollEvent( &event ) ) { //Handle events for the player player.handle_input(event); OutputDebugString(toString().c_str()); //If the user has clicked X if( event.type == SDL_QUIT ) { //Quit the program quit = true; } } if(ticks - last_ticks > 10000){ // if it has been ten seconds since the last enemy spawned last_ticks = ticks; //step up speed for existing enemies for(int i = 0; i < enemies.size(); i++){ enemies[i].setSpeed(enemies[i].speed + 0.5f); } //add an enemy setup_enemy(); } //Move enemies and player if(!move_enemies()){ //if there was a collision between enemies and player quit = true; //quit the game altogether } move_player(); //Render background //Show the dot on the screen render_game(); //Update the screen if( SDL_Flip( screen ) == -1 ) { return; //FAIL! } //Cap the frame rate if( fps.get_ticks() < 1000 / fpsCap ) { SDL_Delay( ( 1000 / fpsCap ) - fps.get_ticks() ); } ticks = timer.get_ticks(); } //stop timer timer.stop(); //Clean up clean_up(); }
//posun hry o casovy tik void update_game(float time, int k_up, int k_down, int k_right, int k_left, int k_fire) { //pozadi pro koncovy screen hry if (playerdead) { move_stars(time); move_enemies(time); move_bullets(time); update_particles(time); move_bonuses(time); deathtimer-=time; if ((deathtimer<=0) && k_fire) { //zacatek nove hry finish_game(); init_game(); } } else { handle_levels(); //odecteni casu od casovacu bonusu shieldtimer-=time; canontimer-=time; reload+=time; //ovladani raketky (funkce z main.c) if (k_left) speedx-=time*1300; if (k_right) speedx+=time*1300; if (k_up) speedy+=time*1300; if (k_down) speedy-=time*1300; //strelba mozna jen po specifickem casovem intervalu if (k_fire && ((canontimer>0)?(reload>(0.2/(plevel))):(reload>(0.5/(plevel*0.9))))) { if (canontimer<=0) //strelba zavisla na power levelu add_bullet(posx, posy+50, 0, 200, plevel, 1, 1); else //silenej gun po sebrani zeleneho bonusu add_bullet(posx, posy+50, 0.8*speedx+200*DFRAND*DFRAND*DFRAND, 300+speedy+20*DFRAND, 10*plevel, 1, 1); reload=0; } //aplikace rychlosti raketky na pozici posx+=speedx*time; posy+=speedy*time; //aby raketka brzdila stejne pri ruznem frameratu speedx*=powf(0.02, time); //powf = exponenciela speedy*=powf(0.02, time); //okraje hraciho pole pro raketku if (posx<-225) {posx=-225; speedx=0;} if (posx>225) {posx=225; speedx=0;} if (posy<-335) {posy=-335; speedy=0;} if (posy>-100) {posy=-100; speedy=0;} move_stars(time); move_enemies(time); move_bullets(time); update_particles(time); move_bonuses(time); } }