Exemplo n.º 1
0
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;
}
Exemplo n.º 2
0
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;*/	
}
Exemplo n.º 3
0
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;
}
Exemplo n.º 4
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;
}
Exemplo n.º 5
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;
 }