Ejemplo n.º 1
0
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");
    
}
Ejemplo n.º 2
0
void SurvivalMode::run() {
	while (_running) {
		event();
		moveEnemy();
		
		checkBallAndWindowCollision();
		checkBallAndEnemiesCollision();
		checkEnemiesAndWindowCollision();
		
		update();
		render();
	}
}
Ejemplo n.º 3
0
Archivo: R.cpp Proyecto: Marneus68/rog
 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();
 }
Ejemplo n.º 4
0
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);
  }
}
Ejemplo n.º 5
0
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 ();
    }
}
Ejemplo n.º 6
0
void MiddleEnemys::update(float dt)
{
    moveEnemy();
}
Ejemplo n.º 7
0
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;
 }
Ejemplo n.º 8
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;
		}
	}
}