/************************************************ 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(); }
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; } }
void World::handleCollisions() { enemyProjectileCollision(); playerProjectileCollision(); enemyCollision(); }
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; }
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; }