// update the game logic here void updateGame() { updateBallPosition(ball); movePlayer(player1); if(ball.speed.x < 0) seek(player2, ball); if( testOnScreen(ball) ) { // ball hit side of screen if(ball.position.x < 50) { // player 1 lost player2Score++; } else { // player 2 lost player1Score++; } } if(g_gameOver == false) { if( abs(player1Score - player2Score) >= 3) { // Game Over g_gameOver = true; int highestScore = player1Score; if(player2Score > highestScore) { highestScore = player2Score; } for(int i=0; i<5; i++) { if(highestScore > g_highScores[i]) { g_highScores[i] = highestScore; break; } } // sort the high scores array sort(g_highScores, 5); } } if(ball.speed.x < 0) { if(checkPaddleCollision(ball, player1) == true) { ball.speed.x *= -1; } } else { if(checkPaddleCollision(ball, player2) == true) { ball.speed.x *= -1; } } RotateSprite(player1.sprite, 0); MoveSprite(player1.sprite, player1.position.x, player1.position.y); RotateSprite(player2.sprite, 0 ); MoveSprite(player2.sprite, player2.position.x, player2.position.y); MoveSprite(ball.sprite, (int)ball.position.x, (int)ball.position.y); }
void resetGame(){ speedFactor=SpeedFactorInitial; modelB = identity(); collision.isColliding = false; collision.isComingFromPlayer1 = false; collision.location = 0.0; ballTrajectory = BallTrajectoryInitial; updateBallPosition(true); }
/** Update the world and the track. * \param dt Time step size. */ void SoccerWorld::update(float dt) { updateBallPosition(dt); if (m_track->hasNavMesh()) { updateKartNodes(); updateAIData(); } WorldWithRank::update(dt); WorldWithRank::updateTrack(dt); if (getPhase() == World::GOAL_PHASE) { if (m_goal_timer == 0.0f) { // Stop all karts for (unsigned int i = 0; i < m_karts.size(); i++) m_karts[i]->setVelocity(btVector3(0, 0, 0)); } m_goal_timer += dt; if (m_goal_timer > 3.0f) { setPhase(WorldStatus::RACE_PHASE); m_goal_timer = 0.0f; if (!isRaceOver()) { // Reset all karts for (unsigned int i = 0; i < m_karts.size(); i++) moveKartAfterRescue(m_karts[i]); if (UserConfigParams::m_arena_ai_stats) getKart(8)->flyUp(); } } } if (UserConfigParams::m_arena_ai_stats) m_frame_count++; } // update
/** Update the world and the track. * \param ticks Physics time steps - should be 1. */ void SoccerWorld::update(int ticks) { updateBallPosition(ticks); if (Track::getCurrentTrack()->hasNavMesh()) { updateSectorForKarts(); updateAIData(); } WorldWithRank::update(ticks); WorldWithRank::updateTrack(ticks); if (getPhase() == World::GOAL_PHASE) { if (m_goal_timer == 0) { // Stop all karts for (unsigned int i = 0; i < m_karts.size(); i++) m_karts[i]->setVelocity(btVector3(0, 0, 0)); } m_goal_timer += ticks; if (m_goal_timer > stk_config->time2Ticks(3.0f)) { setPhase(WorldStatus::RACE_PHASE); m_goal_timer = 0; if (!isRaceOver()) { // Reset all karts for (unsigned int i = 0; i < m_karts.size(); i++) moveKartAfterRescue(m_karts[i]); if (UserConfigParams::m_arena_ai_stats) getKart(8)->flyUp(); } } } if (UserConfigParams::m_arena_ai_stats) m_frame_count++; } // update
/** Update the world and the track. * \param dt Time step size. */ void SoccerWorld::update(float dt) { World *world = World::getWorld(); WorldWithRank::update(dt); WorldWithRank::updateTrack(dt); updateBallPosition(dt); if (m_track->hasNavMesh()) { updateKartNodes(); updateDefenders(); } if (world->getPhase() == World::GOAL_PHASE) { if (m_goal_timer == 0.0f) { // Stop all karts for (unsigned int i = 0; i < m_karts.size(); i++) m_karts[i]->setVelocity(btVector3(0, 0, 0)); } m_goal_timer += dt; if (m_goal_timer > 3.0f) { world->setPhase(WorldStatus::RACE_PHASE); m_goal_timer = 0.0f; if (!isRaceOver()) { // Reset all karts for (unsigned int i = 0; i < m_karts.size(); i++) moveKartAfterRescue(m_karts[i]); } } } } // update
int main( int argc, char **argv ) { //SDL window and context management SDL_Window *window; //used in main loop int sleepTime = 0; int ticks_0, ticks_1; if(SDL_Init(SDL_INIT_VIDEO)<0){//initilizes the SDL video subsystem fprintf(stderr,"Unable to create window: %s\n", SDL_GetError()); SDL_Quit(); exit(1);//die on error } //create window window = SDL_CreateWindow( "Beamer's Crew - Project 1", //Window title SDL_WINDOWPOS_UNDEFINED, //initial x position SDL_WINDOWPOS_UNDEFINED, //initial y position 512, //width, in pixels 384, //height, in pixels SDL_WINDOW_OPENGL //flags to be had ); //check window creation if(window==NULL){ fprintf(stderr,"Unable to create window: %s\n",SDL_GetError()); } //creates opengl context associated with the window SDL_GLContext glcontext=SDL_GL_CreateContext(window); //initializes glew glewExperimental=GL_TRUE; if(glewInit()){ fprintf(stderr, "Unable to initalize GLEW"); exit(EXIT_FAILURE); } init(); while (true) { ticks_0 = SDL_GetTicks(); input(window); collision = detectCollision(); updateScore(); updateSpeed(); updateBallPosition(false); reshape(512,384); display(window); ticks_1 = SDL_GetTicks(); sleepTime = ms_per_frame - (ticks_1 - ticks_0); while (sleepTime < 0){ sleepTime = sleepTime + ms_per_frame; //std::cout<<"*Frame Dropped*\n"; } std::chrono::milliseconds dura(sleepTime); std::this_thread::sleep_for(dura); } SDL_GL_DeleteContext(glcontext); SDL_DestroyWindow(window); SDL_Quit(); return 0; }
//update the game logic here void updateGame() { if( g_bGameOver != true ) { updateBallPosition(g_ball); } if( !g_bGameOver ) { //player 1 on auto seek(g_player1, g_ball); //input for player 2 movePlayer(g_player2); } if( testOnScreen(g_ball, SCREEN_X, SCREEN_Y) ) { //ball hit side of screen if(g_ball.v2Position.fX < 100 ) { //player 1 lost g_iPlayer2Score++; } else { //player 2 lost g_iPlayer1Score++; } } if( g_bGameOver == false ) { if( abs(g_iPlayer1Score - g_iPlayer2Score) >= 3 ) { //game over g_bGameOver = true; int iHighestScore = g_iPlayer1Score; if( g_iPlayer2Score > g_iPlayer1Score ) { iHighestScore = g_iPlayer2Score; } for(int i = 0; i < 5; i++ ) { if( iHighestScore > g_aiHighScores[i]) { g_aiHighScores[i] = iHighestScore; break; } } //sort the scores array sort(g_aiHighScores, 5); } } if( g_ball.v2Speed.fX < 0 ) { if(checkPaddleCollision(g_ball, g_player1) == true) { g_ball.v2Speed.fX *= -1; } } else { if( checkPaddleCollision(g_ball, g_player2) == true) { g_ball.v2Speed.fX *= -1; } } RotateSprite(g_player1.iSprite, 0); MoveSprite(g_player1.iSprite, g_player1.v2Position.fX, g_player1.v2Position.fY ); RotateSprite(g_player2.iSprite, 0); MoveSprite(g_player2.iSprite, g_player2.v2Position.fX, g_player2.v2Position.fY); MoveSprite(g_ball.iSprite, (int)g_ball.v2Position.fX, (int)g_ball.v2Position.fY); }