예제 #1
0
/************************************************
			update() 
	All update logic goes in this function.
	update will keep track of the status and
	location of the player and tiles.
*************************************************/
void update(int data) {
	if(gameActive) {
		background.Scroll();
		//Calculates the frame rate
		previousTime = currentTime;
		currentTime = (float)glutGet(GLUT_ELAPSED_TIME);
		deltaTime = (currentTime - previousTime);

		enemyCollision();							//Check if the player has collided with an enemy
		playerMove(deltaTime);						//Move the player
		if (enemies.size() < 7 && enemyCount != 48)
			loadEnemies();

		if (enemies.size() == 1 && enemyCount == 48 && killCount < 20)
			cleanUp();

		/* KILL COUNT FOR LEVEL ! only */
		if (player[0]->lives <0) {
			fadeStarted = true;
			cleanUp();
		}
		if(enemies.size() == 1 && enemyCount == 48 && killCount >= 20) {
			killCount = 0;
			fadeStarted = true;
			cleanUp();
		}
	}
	//cout << "X: " <<  player[0]->getX() << " Y:" << player[0]->getY() << "\n";		
	glutPostRedisplay();
}
예제 #2
0
파일: Game.cpp 프로젝트: wmolicki/riverride
void CGame::update()
{
	switch (gamestate)
	{
	case GAME:
		handleEvents();
		plane.move();
		plane.setCamera();

		enemyMovement();
		collideShellsWithEnemies();
		collideShellsWithPowerups();
		powerupsCollision();
		handleEnemyShots();

		if (groundCollision(plane.getBox()) || enemyCollision(plane.getBox()) || collidePlaneWithEnemyShells() || (plane.getFuel() == 0))
		{
			plane.removeLife(); resetLevel();
		}
		if (plane.getLives() == 0)
		{
			gameOverHandler();
			gamestate = GAMEOVER;
		}
		break;
	case START:
		handleMenuEvents();
		break;
	case GAMEOVER:
		handleMenuEvents();
		break;
	}
}
예제 #3
0
void World::handleCollisions()
{
	enemyProjectileCollision();
	playerProjectileCollision();
	enemyCollision();
}
예제 #4
0
파일: main.c 프로젝트: kalshafei/hw9
int game(int maze) {
    ENEMY enemy1 = {0,0,0,0,CYAN};
    ENEMY enemy2 = {0,0,0,0,CYAN};
    ENEMY enemy3 = {0,0,0,0,CYAN};
    ENEMY enemy4 = {0,0,0,0,CYAN};
    PLAYER player;
    GATE gate1;
    SWITCH tile1;
    SWITCH winTile;
    GATE gate2 = {0,0,0,0,RED};
    GATE gate3 = {0,0,0,0,RED};
    SWITCH tile2 = {0,0,0,BLUE};
    SWITCH tile3 = {0,0,0,BLUE};

    player.x = 0;
    player.y = 70;
    player.speed = 1;
    player.size = 5;
    player.color = RED;
    winTile.x = 200;
    winTile.y = 70;
    winTile.size = 20;
    winTile.color = GREEN;
    gate1.x = 49;
    gate1.y = 97;
    gate1.length = 40;
    gate1.direction = 1;
    gate1.color = RED;
    tile1.x = 10;
    tile1.y = 10;
    tile1.size = 10;
    tile1.color = BLUE;
    if (maze == 2) {
        player.x = 0;
        player.y = 75;
        player.speed = 1;
        player.size = 5;
        player.color = RED;
        winTile.x = 75;
        winTile.y = 75;
        winTile.size = 15;
        winTile.color = GREEN;
        gate1.x = 66;
        gate1.y = 65;
        gate1.length = 9;
        gate1.direction = 1;
        gate1.color = RED;
        tile1.x = 10;
        tile1.y = 143;
        tile1.size = 8;
        tile1.color = BLUE;
        gate2.x = 38;
        gate2.y = 46;
        gate2.length = 10;
        gate2.direction = 0;
        gate2.color = RED;
        tile2.x = 10;
        tile2.y = 10;
        tile2.size = 10;
        tile2.color = BLUE;
        gate3.x = 122;
        gate3.y = 148;
        gate3.length = 10;
        gate3.direction = 1;
        gate3.color = RED;
        tile3.x = 66;
        tile3.y = 143;
        tile3.size = 8;
        tile3.color = BLUE;
        enemy1.x = 100;
        enemy1.y = 75;
        enemy1.speed = -1;
        enemy1.size = 5;
        enemy1.color = CYAN;
        enemy2.x = 120;
        enemy2.y = 75;
        enemy2.speed = 2;
        enemy2.size = 5;
        enemy2.color = CYAN;
        enemy3.x = 121;
        enemy3.y = 100;
        enemy3.speed = 2;
        enemy3.size = 5;
        enemy3.color = CYAN;
        enemy4.x = 120;
        enemy4.y = 60;
        enemy4.speed = -1;
        enemy4.size = 5;
        enemy4.color = CYAN;

    }
    drawRect(winTile.y, winTile.x, winTile.size, winTile.size, winTile.color);
    waitForVblank();

    int oldPlayerX = player.x;
    int oldPlayerY = player.y;
    int newPlayerX = oldPlayerX;
    int newPlayerY = oldPlayerY;


    while(1) {
        drawRect(oldPlayerY, oldPlayerX , player.size, player.size, WHITE);
        if(KEY_DOWN_NOW(BUTTON_SELECT)) {
            return 0;
        }
        int neg = -1 * player.speed;
        if(KEY_DOWN_NOW(BUTTON_UP))
        {
            int wall = horWallCollision(oldPlayerX, oldPlayerY, player.size, neg);
            int edge = yEdgeCollision(oldPlayerY, player.size, neg);
            newPlayerY += MAX(edge, wall);

        }
        if(KEY_DOWN_NOW(BUTTON_LEFT))
        {
            int wall = vertWallCollision(oldPlayerX, oldPlayerY, player.size, neg);
            int edge = xEdgeCollision(oldPlayerX, player.size, neg);
            newPlayerX += MAX(edge, wall);
        }
        if(KEY_DOWN_NOW(BUTTON_RIGHT))
        {
            int wall = vertWallCollision(oldPlayerX, oldPlayerY, player.size, player.speed);
            int edge = xEdgeCollision(oldPlayerX, player.size,  player.speed);
            newPlayerX += MIN(edge, wall);
        }
        if(KEY_DOWN_NOW(BUTTON_DOWN))
        {
            int wall = horWallCollision(oldPlayerX, oldPlayerY, player.size, player.speed);
            int edge = yEdgeCollision(oldPlayerY, player.size,  player.speed);
            newPlayerY += MIN(wall, edge);
        }
        //Update
        drawRect(oldPlayerY, oldPlayerX , player.size, player.size, WHITE); //Erase old Player Location
        // drawRect(tile1.x, tile1.y, tile1.size, tile1.size, tile1.color);    //Redraw Tile
        drawLine(gate1.x, gate1.y, gate1.length, gate1.direction, RED);     //Draw Line
        if(tileCollision(oldPlayerX,oldPlayerY , player.size, tile1)) {     //Check collision with tile
            drawLine(gate1.x, gate1.y, gate1.length, gate1.direction, WHITE);//Erase and redraw gate with new direction
            gate1.direction = 0;
            drawLine(gate1.x, gate1.y, gate1.length, gate1.direction, RED);
        }
        drawRect(tile1.y, tile1.x, tile1.size, tile1.size, tile1.color);
        drawRect(tile2.y, tile2.x, tile2.size, tile2.size, tile2.color);
        drawRect(tile3.y, tile3.x, tile3.size, tile3.size, tile3.color);
        drawLine(gate1.x, gate1.y, gate1.length, gate1.direction, RED);
        drawLine(gate2.x, gate2.y, gate2.length, gate2.direction, RED);
        drawLine(gate3.x, gate3.y, gate3.length, gate3.direction, RED);
        if(tileCollision(oldPlayerX,oldPlayerY , player.size, tile1)) {     //Check collision with tile
            drawLine(gate1.x, gate1.y, gate1.length, gate1.direction, WHITE);//Erase and redraw gate with new direction
            gate1.direction = 0;
            drawLine(gate1.x, gate1.y, gate1.length, gate1.direction, RED);
        }
        if(tileCollision(oldPlayerX,oldPlayerY , player.size, tile3)) {     //Check collision with tile
            drawLine(gate2.x, gate2.y, gate2.length, gate2.direction, WHITE);//Erase and redraw gate with new direction
            gate2.direction = 1;
            drawLine(gate2.x, gate2.y, gate2.length, gate2.direction, RED);
        }
        if(tileCollision(oldPlayerX,oldPlayerY , player.size, tile2)) {     //Check collision with tile
            drawLine(gate3.x, gate3.y, gate3.length, gate3.direction, WHITE);//Erase and redraw gate with new direction
            gate3.direction = 0;
            drawLine(gate3.x, gate3.y, gate3.length, gate3.direction, RED);
            drawLine(gate1.x, gate1.y, gate1.length, gate1.direction, BLACK);//Erase and redraw gate with new direction
            gate1.direction = 1;
            drawLine(gate1.x, gate1.y, gate1.length, gate1.direction, RED);
        }

        drawRect(enemy1.y, enemy1.x, enemy1.size, enemy1.size, WHITE);
        if(horWallCollision(enemy1.x, enemy1.y, enemy1.size, enemy1.speed) == 0) {
            enemy1.speed *= -1;
        }
        enemy1.y += enemy1.speed;
        drawRect(enemy1.y, enemy1.x, enemy1.size, enemy1.size, enemy1.color);

        drawRect(enemy2.y, enemy2.x, enemy2.size, enemy2.size, WHITE);
        if(horWallCollision(enemy2.x, enemy2.y, enemy2.size, enemy2.speed) == 0) {
            enemy2.speed *= -1;
        }
        enemy2.y += enemy2.speed;
        drawRect(enemy2.y, enemy2.x, enemy2.size, enemy2.size, enemy2.color);


        drawRect(enemy3.y, enemy3.x, enemy3.size, enemy3.size, WHITE);
        if(vertWallCollision(enemy3.x, enemy3.y, enemy3.size, enemy3.speed) == 0) {
            enemy3.speed *= -1;
        }
        enemy3.x += enemy3.speed;
        drawRect(enemy3.y, enemy3.x, enemy3.size, enemy3.size, enemy3.color);

        drawRect(enemy4.y, enemy4.x, enemy4.size, enemy4.size, WHITE);
        if(vertWallCollision(enemy4.x, enemy4.y, enemy4.size, enemy4.speed) == 0) {
            enemy4.speed *= -1;
        }
        enemy4.x += enemy4.speed;
        drawRect(enemy4.y, enemy4.x, enemy4.size, enemy4.size, enemy4.color);

        if(enemyCollision(newPlayerX, newPlayerY, player.size, enemy1)) {
            return 2;
        }

        if(enemyCollision(newPlayerX, newPlayerY, player.size, enemy2)) {
            return 2;
        }
        if(enemyCollision(newPlayerX, newPlayerY, player.size, enemy3)) {
            return 2;
        }
        if(enemyCollision(newPlayerX, newPlayerY, player.size, enemy4)) {
            return 2;
        }

        if (KEY_DOWN_NOW(BUTTON_SELECT)) {
            return 0;
        }
        if (tileCollision(newPlayerX, newPlayerY, player.size, winTile)) {
            return 1;
        }

        drawRect(newPlayerY, newPlayerX, player.size, player.size, player.color);
        oldPlayerX = newPlayerX;
        oldPlayerY = newPlayerY;
        waitForVblank();
    }
    return 0;
}
예제 #5
0
int main(int argc, char *argv[])
{
    int pos_x = 100;
    int pos_y = 100;
    const int res_x = 640;
    const int res_y = 480;

    int scale = 1;

    setup *app = sdl_setup("Movement", pos_x, pos_y, res_x, res_y);

    if (TTF_Init() != 0)
    {
        logSDLError("TTF_Init");
        cleanup("rw", app->renderer, app->window);
        free(app);
        SDL_Quit();
        return -1;
    }

    SDL_Rect container;
    container.x = 20;
    container.y = 20;
    container.w = res_x - 2 * container.x;
    container.h = res_y - 2 * container.y;

    SDL_Rect box;
    box.w =	scale * container.x;
    box.h = scale * container.y;
    box.x = container.x;//res_x / 2 - box.w / 2;
    box.y = res_y / 2 - box.h / 2;

    SDL_Rect goal;
    goal.w = box.w;
    goal.h = box.h;
    goal.x = res_x - container.x;
    goal.y = res_y / 2 - goal.h / 2;

    SDL_Rect winner;
    winner.h = container.h - 20;
    winner.w = container.w - 20;
    winner.x = container.x + 10;
    winner.y = container.y + 10;

    int size = 26;
    SDL_Rect *army	= addEnemy(size);
//    SDL_Rect *army2	= addEnemy(size);

    bool quit = false;
    bool won = false;
    SDL_Event e;

    while (!quit)
    {
        while (SDL_PollEvent(&e))
        {
            if (e.type == SDL_QUIT)
            {
                quit = true;
                break;
            }
            if (e.type == SDL_KEYDOWN)
            {
                switch(e.key.keysym.sym)
                {
                case SDLK_ESCAPE:
                    quit = true;
                    break;
                case SDLK_UP:
                    box.y -= box.h;
                    break;
                case SDLK_DOWN:
                    box.y += box.h;
                    break;
                case SDLK_LEFT:
                    box.x -= box.w;
                    break;
                case SDLK_RIGHT:
                    box.x += box.w;
                    break;
                default:
                    break;
                }
            }
        }
        if (!won)
        {
            randomMove(army, size, 1);
//        randomMove(army2, size, 3);
            if (contains(&container, &box) || enemyCollision(&box, army, size))// || enemyCollision(&box, army2, size))
            {
                printf("Collision\n");
                if (collision(&goal, &box))
                {
                    won = true;
                    printf("WINNER!\n");
                }
                box.x = container.x;//res_x / 2 - box.w / 2;
                box.y = res_y / 2 - box.h / 2;
            }
            renderHard(app->renderer, &container, &box, &goal, army, NULL, size);
            SDL_Delay(2);
        }
        if (won)
        {
//            SDL_Delay(100);
            SDL_SetRenderDrawColor(app->renderer, 0xff, 0xff, 0xff, 0xff);
            SDL_RenderFillRect(app->renderer, &winner);

            const string f_name = "fonts/Gidole-Regular.ttf";
            SDL_Color f_color = {25, 25, 25, 25};
            SDL_Texture *slogan = renderText(app->renderer, "You have WON the game! BANZAI!!!", f_name, 30, f_color);
            if (slogan == NULL)
            {
                cleanup("rw", app->renderer, app->window);
                free(army);
                free(app);
                TTF_Quit();
                SDL_Quit();
                logSDLError("renderText");
                return -2;
            }
            int slgn_h, slgn_w;
            SDL_QueryTexture(slogan, NULL, NULL, &slgn_w, &slgn_h);

            int x = res_x / 2 - slgn_w / 2;
            int y = res_y / 2 - slgn_h / 2;

            renderTexture(app->renderer, slogan, x, y, NULL);

            SDL_RenderPresent(app->renderer);
        }
    }

    cleanup("rw", app->renderer, app->window);
    free(army);
    free(app);
    SDL_Quit();

    return 0;
}