void testEnemyMovement() { Enemy e = createTestEnemy(); sput_fail_unless(distanceToEndOfPath(getNumberOfEnemies()) == e->enemyPath->pathLength, "Valid: Enemy has the correct number of steps to the end of its path"); int enemyOriginX = e->x; int enemyOriginY = e->y; for(int i = 0; i < 200; i++) { moveEnemy(getNumberOfEnemies()); } sput_fail_unless(e->x != enemyOriginX, "Valid: Enemy has changed X coordinate after 200 moves"); sput_fail_unless(e->y != enemyOriginY, "Valid: Enemy has changed Y coordinate after 200 moves"); sput_fail_unless(distanceToEndOfPath(getNumberOfEnemies()) == e->enemyPath->pathLength-(200*e->speed), "Valid: Enemy has the correct number of steps to the end of its path after 200 moves"); int startingHealth = getHealth(getGame(NULL)); int howFarToGo = distanceToEndOfPath(getNumberOfEnemies()); int howManyMovesToEnd = (howFarToGo/e->speed)+1; for(int i = 0; i < howManyMovesToEnd; i++) { moveEnemy(getNumberOfEnemies()); } sput_fail_unless(isDead(getNumberOfEnemies()), "Valid: Enemy has died after reaching end of path"); sput_fail_unless(getHealth(getGame(NULL)) == startingHealth-e->damage, "Valid: Enemy has damaged health by correct amount at end of path"); }
void SurvivalMode::run() { while (_running) { event(); moveEnemy(); checkBallAndWindowCollision(); checkBallAndEnemiesCollision(); checkEnemiesAndWindowCollision(); update(); render(); } }
void Rgame::resolveTurn(int move_x, int move_y) { if (mapSpr.GetPixel(hero.x+move_x, hero.y+move_y) == color::exit) deeper(); if (mapSpr.GetPixel(hero.x+move_x, hero.y+move_y) != Color::Black) { hero.x+=move_x; hero.y+=move_y; } moveEnemy(); }
void calculateEnemyMove(Entity* enemy){ if((abs(enemy->position.x - player.position.x) == 1 && enemy->position.y - player.position.y == 0) || (abs(enemy->position.y - player.position.y) == 1 && enemy->position.x - player.position.x == 0)){ attackPlayer(enemy); return; } Position playerPos = player.position; Position enemyPos = enemy->position; int enemyX = enemyPos.x; int enemyY = enemyPos.y; // int best = 1000000000; Position up = (Position){enemyX, enemyY-1}; Position right = (Position){enemyX+1, enemyY}; Position down = (Position){enemyX, enemyY+1}; Position left = (Position){enemyX-1, enemyY}; if(isFreeSpace(up) && hamiltonDistance(up, playerPos) < hamiltonDistance(enemyPos, playerPos)){ unchanged[enemyY*MAP_WIDTH + enemyX] = FALSE; unchanged[(enemyY-1) * MAP_WIDTH + enemyX] = FALSE; moveEnemy(enemy, EVENT_MOVE_UP); }else if(isFreeSpace(right) && hamiltonDistance(right, playerPos) < hamiltonDistance(enemyPos, playerPos)){ unchanged[enemyY*MAP_WIDTH + enemyX + 1] = FALSE; unchanged[enemyY*MAP_WIDTH + enemyX] = FALSE; moveEnemy(enemy, EVENT_MOVE_RIGHT); }else if(isFreeSpace(down) && hamiltonDistance(down, playerPos) < hamiltonDistance(enemyPos, playerPos)){ unchanged[(enemyY+1)*MAP_WIDTH + enemyX] = FALSE; unchanged[enemyY*MAP_WIDTH + enemyX] = FALSE; moveEnemy(enemy, EVENT_MOVE_DOWN); }else if(isFreeSpace(left) && hamiltonDistance(left, playerPos) < hamiltonDistance(enemyPos, playerPos)){ unchanged[enemyY*MAP_WIDTH + enemyX-1] = FALSE; unchanged[enemyY*MAP_WIDTH + enemyX] = FALSE; moveEnemy(enemy, EVENT_MOVE_LEFT); } }
void Game2D::timer(){ if (pause()) return; if (!evec_.size() && state_==1){ //if (level () >=2) state_=2; //else nextLevel (); } if (state_==1){ bool destroy=0; ship_.onFire(); ship_.timer(direction_, width (), height ()); for (int i=0; i<evec_.size(); i++){ int x1=evec_[i].x (); int y1=evec_[i].y (); int x2=evec_[i].x () + evec_[i].width(); int y2=evec_[i].y () + evec_[i].height(); //ship hit in vertical line if (direction_==1 || direction_==3){ if (isInInterval (ship_.y (), y1, y2) || isInInterval (ship_.y () + ship_.height()/2, y1, y2) || isInInterval (ship_.y () + ship_.height(), y1, y2)){ if (ship_.x() > x1) destroy=ship_.hitMinX(x2); //right else{ if (ship_.x() + ship_.width () > x1) destroy=ship_.hitMaxX(x1-ship_.width ()); //left } } } //ship hit in horizontal line if (direction_==0 || direction_==2){ if (isInInterval (ship_.x (), x1, x2) || isInInterval (ship_.x () + ship_.width()/2, x1, x2) || isInInterval (ship_.x () + ship_.width(), x1, x2)){ if (ship_.y() > y1) destroy=ship_.hitMinY(y2); //down else{ if (ship_.y() + ship_.height () > y1) destroy=ship_.hitMaxY(y1-ship_.height ()); //up } } } if (ship_.fire()){ bool damaged=0; QRect rc; ship_.getFireRect (rc, direction()); //in fire axis y if (direction_==1 || direction_==3){ if (isInInterval (rc.y(), y1, y2) || isInInterval (rc.y()+rc.height(), y1, y2)){ //cross fire line & left enemy || //cross fire line & right enemy if ((x1 > rc.x() && x1 < rc.x()+rc.width()) || (x2 < rc.x() && x2 > rc.x()+rc.width())){ damaged=1; } } } if (direction_==0 || direction_==2){ if (isInInterval (rc.x(), x1, x2) || isInInterval (rc.x()+rc.width(), x1, x2)){ //cross fire line & up enemy || //cross fire line & down enemy if ((y1 > rc.y() && y1 < rc.y()+rc.height()) || (y2 < rc.y() && y2 > rc.y()+rc.height())){ damaged=1; } } } if (damaged){ ++score_; evec_[i].addHealth (-(ship_.damage ())); if (evec_[i].health () == 0) evec_.erase (evec_.begin () + i); } } if (destroy){ state_=2; /*ship_.addHealth (-1); switch(direction_){ case 0: direction_=2; break; case 1: direction_=3; break; case 2: direction_=0; break; case 3: direction_=1; break; } if (ship_.health () == 0) state_=2; */ /*QMessageBox box; box.warning(0,"Game over", "Ship destroyed!", 0, 1); box.show(); */ } } incTime (); if (movable()) moveEnemy (); } }
void MiddleEnemys::update(float dt) { moveEnemy(); }
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; }
void render() { // Clears the buffer with this colour attribute clearBuffer(0x00); // Set up sample colours, and output shadings const WORD colors[] = { 0x1A, 0x2B, 0x3C, 0x4D, 0x5E, 0x6F, 0xA1, 0xB2, 0xC3, 0xD4, 0xE5, 0xF6 }; COORD c; // displays the framerate std::ostringstream ss; ss << std::fixed << std::setprecision(3); ss << 1.0 / deltaTime << "fps"; c.X = ConsoleSize.X-9; c.Y = 0; writeToBuffer(c, ss.str()); // displays the elapsed time ss.str(""); ss << elapsedTime << "secs"; c.X = 0; c.Y = ConsoleSize.Y - 1; writeToBuffer(c, ss.str(), 0x59); if (!levelStart) levelStart = initLevel(); renderShip(); moveBullets(); checkBulletCollision(enemyArr, levelInfo.number); renderBullets(); if (!spawnBufferCount && enemiesSpawned < levelInfo.number) { if (spawnEnemy(enemyArr, levelInfo.number)) { spawnBufferCount += levelInfo.spawnBuffer; enemiesSpawned++; } } else if (spawnBufferCount) spawnBufferCount--; moveEnemy(enemyArr, levelInfo.number); checkBulletCollision(enemyArr, levelInfo.number); checkEnemyCollision(enemyArr, levelInfo.number); renderEnemy(enemyArr, levelInfo.number); if (levelInfo.bullets) { if (spawnEnemyBullet(enemyArr)) { spawnBufferCount += bulletInfo.spawnBuffer; } moveEnemy(enemyBulletArr, bulletInfo.number); checkEnemyCollision(enemyBulletArr, bulletInfo.number); renderEnemy(enemyBulletArr, bulletInfo.number); } // Writes the buffer to the console, hence you will see what you have written flushBufferToConsole(); if (enemiesSpawned == levelInfo.number) { if (checkClear(enemyArr, levelInfo.number)) { levelStart = false; enemiesSpawned = 0; spawnBufferCount = 0; delete[] enemyArr; delete[] enemyBulletArr; levelInfo.level = levelInfo.nextLevel; } } }