void gun::update(const float delta) { m_time_to_next_shoot -= delta; if (m_time_to_next_shoot <= 0.0f) { add_new_bullets(1); m_time_to_next_shoot = m_shoot_interval - (get_fire_rate_level()*SHOOT_INTERVAL_STEP); } update_bullets(delta); }
int main() { int i, j; srand(time(NULL)); init(); print_map(); while (1) { char ch = getchar(); if (ch < 'i' || ch > 'l') continue; if (!tgt.isOnMap) { generate_tgt(); update_bullets(); if (ch == 'j') move_left(); if (ch == 'i') shoot(); if (ch == 'l') move_right(); collision(); } else { update_tgt(); update_bullets(); if (ch == 'j') move_left(); if (ch == 'i') shoot(); if (ch == 'l') move_right(); collision(); } print_map(); if (Life == 0) break; } printf("Game Over\n"); printf("Your Score: %d\n", Score); return 0; }
void Controller::loop() { bool gameFinished(false), paused(true); sf::Event event; m_view.resize(); // Useful on Windows where the content is not properly sized. A recalculation fix it. while (!gameFinished) { // Deal with all events. while (m_view.get_window().pollEvent(event)) { if (event.type == sf::Event::Closed) { m_view.get_window().close(); gameFinished = true; } else if (event.type == sf::Event::Resized) m_view.resize(); else if (event.type == sf::Event::KeyPressed && event.key.code == sf::Keyboard::Space) paused = !paused; } // Draw the scene. m_view.draw(m_model.get_circles()); m_view.draw(m_model.get_dead_bots()); m_view.draw(m_model.get_bots()); m_view.draw(m_model.get_bullets()); m_view.draw(m_model.get_scans()); if (paused) m_view.draw_pause(); m_view.render(); if (!paused) { // Manage bullets. update_bullets(); // Manage bots. update_bots(); } } }
/* the main game function */ static int play_game() { ALLEGRO_TIMER *inc_counter; int gameover = 0; int cyclenum = 0; /* init */ score = 0; init_view(); init_player(); init_badguys(); init_bullets(); init_explode(); init_message(); #define TIMER_SPEED ALLEGRO_BPS_TO_SECS(30*(cyclenum+2)) inc_counter = al_create_timer(TIMER_SPEED); al_start_timer(inc_counter); while (!gameover) { /* move everyone */ while ((al_get_timer_count(inc_counter) > 0) && (!gameover)) { update_view(); update_bullets(); update_explode(); update_message(); if (update_badguys()) { if (advance_view()) { cyclenum++; al_set_timer_count(inc_counter, 0); lay_attack_wave(TRUE); advance_player(TRUE); } else { lay_attack_wave(FALSE); advance_player(FALSE); } } gameover = update_player(); al_set_timer_count(inc_counter, al_get_timer_count(inc_counter)-1); } /* take a screenshot? */ if (key[ALLEGRO_KEY_PRINTSCREEN]) { static int ss_count = 0; char fname[80]; sprintf(fname, "speed%03d.tga", ++ss_count); al_save_bitmap(fname, al_get_backbuffer(screen)); while (key[ALLEGRO_KEY_PRINTSCREEN]) poll_input_wait(); al_set_timer_count(inc_counter, 0); } /* toggle fullscreen window */ if (key[ALLEGRO_KEY_F]) { int flags = al_get_display_flags(screen); al_set_display_flag(screen, ALLEGRO_FULLSCREEN_WINDOW, !(flags & ALLEGRO_FULLSCREEN_WINDOW)); while (key[ALLEGRO_KEY_F]) poll_input_wait(); } /* draw everyone */ draw_view(); } /* cleanup */ al_destroy_timer(inc_counter); shutdown_view(); shutdown_player(); shutdown_badguys(); shutdown_bullets(); shutdown_explode(); shutdown_message(); if (gameover < 0) { sfx_ping(1); return FALSE; } return TRUE; }
//-------------------------------------------------------------- void ofApp::update(){ if(game_state=="start"){//スタート画面の更新描画 }else if(game_state=="tutorial"){ }else if(game_state=="game"){//ゲーム画面の更新描画 player_1.update(); update_bullets(); update_bonuses(); boss_1.update(); //ボスの動き、弾バリエーション if(boss_1.lives>0){ if(boss_1.shot()){ if(boss_1.lives>=50){ Bullet b; b.setup(false,boss_1.pos,boss_1.bullet_speed,&boss_bullet_image); bullets.push_back(b); } if(boss_1.lives<50){ Bullet b; b.setup(false,boss_1.pos,boss_1.bullet_speed,&boss_bullet_image2); bullets.push_back(b); } } //敵出現 for(int i=0;i<enemies.size();i++){ enemies[i].update(); if(enemies[i].time_to_shoot()){ Bullet b;//time_to_shot関数にて一瞬だけtrueにしている b.setup(false,enemies[i].pos,enemies[i].speed,&enemy_bullet_image); bullets.push_back(b); } } for(int i=enemies.size()-1;i>0;i--){ //画面外に出たら消す if(enemies[i].pos.y+enemies[i].width/2>ofGetHeight()){ enemies.erase(enemies.begin()+i); } } if(level_controller.should_spawn()==true){ Enemy e; e.setup(max_enemy_amplitude,max_enemy_shoot_interval,&enemy_image); enemies.push_back(e); } if(level_controller.Item_spawn()==true){ Life l; l.setup(&life_image); bonuses.push_back(l); } } else{ for(int i=0;i<enemies.size();i++){ enemies[i].end(); if(boss_1.pos.y<0){ game_state="end"; mainSound.stop(); endingSong.loadSound("end.mp3"); endingSong.play(); } } } }else if(game_state=="end"){ } }