STATE GameState::update() { cam = { player.x + 80, player.y + 300 }; sfw::drawTexture(getTexture(backgroundName), 2150 - cam.x, 1100 - cam.y, backWidth, backHeight, 0, true, 1); int nEnemiesActive = 0; if (player.isActive) player.update(cam); for (int i = 0; i < bullets.size(); ++i) { if (bullets[i].isActive) { bullets[i].update(); for (int j = 0; j < enemies.size(); ++j) { if (enemies[j].isActive) { doCollision(enemies[j], bullets[i]); } } } } //example useful for determining when to spawn a new wave of enemies. for (int i = 0; i < enemies.size(); ++i) if (enemies[i].isActive) { nEnemiesActive++; enemies[i].update(); /* doCollision(player, bullets[i]);*/ } if (nEnemiesActive < 10 && enemySpawnTimer < 0) { makeEnemy(player.x, player.y, 50); enemySpawnTimer = 5.f; } enemySpawnTimer -= sfw::getDeltaTime(); // Collision detection between two objects of the same type /* for (int i = 0; i + 1 < bullets.size(); ++i) for (int j = i + 1; j < bullets.size(); ++j) { doCollision(bullets[i], bullets[j]); }*/ std::cout << nEnemiesActive << std::endl; return GAME; }
void Game::setUpShips() { const int maxAmountInSquad = 3; if (wave == 1) { if (nextSquadTimer % timeTillNextSquad == 0 && nextSquadTimer != 0 && !doneIt && squadsCreatedWave < squadsPerWave) { int shipType; int noOfShipsInSquad = rand() % maxAmountInSquad + 1; squadVector.push_back(Squad()); for (int i = 0; i < noOfShipsInSquad; i++) { shipType = rand() % 2; makeEnemy(shipType, squadVector.size() - 1); } timeTillNextSquad = rand() % 4 + minTimeBetweenSquad; doneIt = true; totalShipCreatedLevel = totalShipCreatedLevel + totalEnemyShipCreatedLevel + totalInsectCreatedLevel; //totalShipCreatedWave = ; squadsCreatedLevel++; squadsCreatedWave++; } else if (nextSquadTimer % timeTillNextSquad != 0 && doneIt) doneIt = false; if (squadsDefeatedWave >= squadsPerWave) { wave++; totalShipCreatedWave = 0; //not needed but f**k it for now squadsCreatedWave = 0; squadsDefeatedWave = 0; } } if (wave == 2) { } /*if (nextSquadTimer % 2 == 0 && !doneIt) { int a = rand() % 2; makeEnemy(a, 0); doneIt = true; } else doneIt = false;*/ }
int events(SDL_Event event) { double hyp,op,co; while (SDL_PollEvent(&event)) { switch (event.type) { case SDL_KEYDOWN: switch (event.key.keysym.sym) { case SDLK_1: makeEnemy(_X/2,SC_Interceptor); break; case SDLK_q: return 1; break; case SDLK_LEFT: case SDLK_a: lr--; break; case SDLK_UP: case SDLK_w: ud--; break; case SDLK_RIGHT: case SDLK_d: lr++; break; case SDLK_DOWN: case SDLK_s: ud++; break; case SDLK_SPACE: s++; break; default: break; } break; case SDL_KEYUP: switch(event.key.keysym.sym) { case SDLK_LEFT: case SDLK_a: lr++; break; case SDLK_UP: case SDLK_w: ud++; break; case SDLK_RIGHT: case SDLK_d: lr--; break; case SDLK_DOWN: case SDLK_s: ud--; break; case SDLK_SPACE: s--; break; default: break; } break; case SDL_MOUSEMOTION: mx = event.button.x; my = event.button.y; op = (player.dst.y + player.dst.h/2) - my; co = (player.dst.x + player.dst.w/2) - mx; hyp = (sqrt(pow(((player.dst.x + player.dst.w/2) - mx),2) + pow(((player.dst.y + player.dst.h/2) - my),2))); /* printf("%1.1f %1.1f %1.1f\n", op, co, hyp); */ if (hyp) { playerSin = op / hyp; playerCos = co / hyp; playerCos *= -1; } break; case SDL_QUIT: return 1; break; default: break; } } return 0; }
void update() { struct SC_Unit *dummye; struct SC_Shot *dummys; if((SDL_GetTicks() - lastEnemyTick) > 200) { makeEnemy((rand()%_X), SC_Interceptor); lastEnemyTick = SDL_GetTicks(); } if(s && ((SDL_GetTicks() - lastShotTick) > 100)) { makeShot(); lastShotTick = SDL_GetTicks(); } player.ay += (2.5*ud); player.ax += (2.5*lr); player.ax *= FRICTION; player.ay *= FRICTION; if (player.ax * player.ax < 0.01) player.ax = 0; if (player.ay * player.ay < 0.01) player.ay = 0; player.dst.x += player.ax; player.dst.y += player.ay; if(player.dst.x > (_X - player.dst.w)) player.dst.x = _X - player.dst.w; if(player.dst.x < 0) player.dst.x = 0; if(player.dst.y < 0) player.dst.y = 0; if(player.dst.y > (_Y - player.dst.h)) player.dst.y = _Y - player.dst.h; tmpe = fe; while (tmpe) { tmpe->dst.x = tmpe->from + tmpe->move(tmpe->dst.y,tmpe->amplitude,tmpe->frequency); tmpe->dst.y += 3; dummye = tmpe->next; if(tmpe->dst.y > _Y) { if ((tmpe == fe) && (tmpe == le)) { fe = NULL; le = NULL; } else if (tmpe == fe) { fe = tmpe->next; fe->prev = NULL; } else if (tmpe == le) { le = tmpe->prev; le->next = NULL; } else { tmpe->prev->next = tmpe->next; tmpe->next->prev = tmpe->prev; } points++; free(tmpe); } tmpe = dummye; } tmps = fs; while(tmps) { dummys = tmps->next; tmps->dst.y += (15*tmps->ay); tmps->dst.x += (15*tmps->ax); if(tmps->dst.y <= 0){ if ((tmps == fs) && (tmps == ls)) { fs = NULL; ls = NULL; } else if (tmps == fs) { fs = tmps->next; fs->prev = NULL; } else if (tmps == ls) { ls = tmps->prev; ls->next = NULL; } else { tmps->prev->next = tmps->next; tmps->next->prev = tmps->prev; } free(tmps); } tmps = dummys; } tmpe = fe; while(tmpe) { dummye = tmpe->next; if (((player.dst.x + player.dst.w > tmpe->dst.x) && (player.dst.x < tmpe->dst.x + tmpe->dst.w))){ if(((player.dst.y + player.dst.h) > tmpe->dst.y) && (player.dst.y < (tmpe->dst.y + tmpe->dst.h))){ player.dst.x = 0; player.dst.y = 0; } } tmps = fs; while(tmps){ dummys = tmps->next; if(((tmps->dst.x + tmps->dst.w) > tmpe->dst.x) && (tmps->dst.x < (tmpe->dst.x + tmpe->dst.w))) { if (((tmps->dst.y + tmps->dst.h) > tmpe->dst.y) && (tmps->dst.y < (tmpe->dst.y + tmpe->dst.h))) { if ((tmpe == fe) && (tmpe == le)) { fe = NULL; le = NULL; } else if (tmpe == fe) { fe = tmpe->next; fe->prev = NULL; } else if (tmpe == le) { le = tmpe->prev; le->next = NULL; } else { tmpe->prev->next = tmpe->next; tmpe->next->prev = tmpe->prev; } if((tmps == fs) && (tmps == ls)) { fs = NULL; ls = NULL; } else if (tmps == fs) { fs = tmps->next; fs->prev = NULL; } else if (tmps == ls) { ls = tmps->prev; ls->next = NULL; } else { tmps->prev->next = tmps->next; tmps->next->prev = tmps->prev; } free(tmps); free(tmpe); points+=2; break; } } tmps=dummys; } tmpe = dummye; } points %= 100; }
int main() { int numEnemy = 5; Enemy E[8]; pthread_t tid; //inisialisasi init(); PaintBackground(); initTargetPoint(&TP); setTarget(&TP,140,600); //pindahkan target int i; for(i = 0 ; i < numEnemy; i++) { makeEnemy(1300, i*60+30, &(E[i])); } pthread_create(&tid, NULL, inputHandler, NULL); drawTank(); while(stop == 0) { //cek collision int i; for(i = 0; i < numEnemy; i++) { int collide = detectCollision(B, E[i]); if(collide) { PaintEnemy(getEnemyPosX(E[i]), getEnemyPosY(E[i]), 0, 0, 0); PaintBomb(getPosX(B), getPosY(B), 0,0,0); setActive(&B, 0); makeEnemy(1300, i*60+30, &(E[i])); } } //gerakkan objek & gambar //enemy for(i = 0; i < numEnemy; i++) { moveEnemy(&E[i]); if(getEnemyPosX(E[i]) <= 10) { PaintEnemy(getEnemyPosX(E[i]), getEnemyPosY(E[i]), 0, 0, 0); makeEnemy(1300, i*60+30, &(E[i])); } else { PaintEnemy(getEnemyPosX(E[i]), getEnemyPosY(E[i]), 230, 80, 30); } } //gerakkan & gambar bom jika bom aktif if(isActive(B)) { nextStep(&B); if(getPosX(B) < 0 || getPosX(B) > 1340 || getPosY(B) < 10 || getPosY(B) > 740) { setActive(&B,0); PaintBomb(getPosX(B), getPosY(B), 0,0,0); } else { PaintBomb(getPosX(B), getPosY(B), 211,211,211); } } //render gambar usleep(1000); for(i = 0; i < numEnemy; i++) { clearEnemy(getEnemyPosX(E[i]), getEnemyPosY(E[i])); } if(isActive(B)) { PaintBomb(getPosX(B), getPosY(B), 0,0,0); } usleep(1000); } pthread_join(tid, NULL); //mapping memory munmap(fbp, screensize); close(fbfd); return 0; }