int main() { setupBoard(); titleScreen(); mainRunLoop(); gameOverScreen(); }
void Game::run(){ sf::Event event; sf::Color background(sf::Color::Black); bool gameover(false); while (window->isOpen()){ if (gameover){ gameOverScreen(); gameover = false; // Won't matter if window is closed } while (window->pollEvent(event)){ if (event.type == sf::Event::KeyPressed) snake->process(event); else if (event.type == sf::Event::KeyReleased) snake->process(event); else if (event.type == sf::Event::Closed) window->close(); } snake->update(tiles, info, sounds); gameover = snake->edgeCollision() || snake->selfCollision() || snake->collidesWith(tiles->getHazards()); if (gameover) sounds->playHitHazard(); window->clear(background); tiles->draw(); snake->draw(); info->draw(); window->display(); } window->close(); }
void playGame() { lives = MAX_LIVES; score = 0; startLevel(); resetLevel(); int resetPressed = FALSE; // game loop while (lives > 0) { //test select button release if (KEY_DOWN_NOW(BUTTON_SELECT)) { resetPressed = TRUE; } if (resetPressed && !KEY_DOWN_NOW(BUTTON_SELECT)) { titleScreen(); } waitForVBlank(); erase(); updateVars(); checkOutsideScreen(); generateObjs(); draw(); } gameOverScreen(); }
/*! \brief Paints the necessary object on the screen. * Precondition: a QPaintEvent is called. * Postcondition: Necessary objects are painted on the screen. * \param *event QT event pointer*/ void Game::paintEvent(QPaintEvent *event) { QPainter painter(this); //always paints iphone on screen painter.drawImage(iphone.getRect(), iphone.getImage()); if (gameOver) // If gameOver is true { gameOverScreen(painter); //paint game over screen } else if (gameWon) // If gameWon is true { victoryScreen(painter); //paint victory screen } else if(bSOD) // If bSOD is true, Paint Blue Screen of Death { //loads Blue Screen of Death image blueScreenImage.load("blueScreenDeath.png"); blueScreenRect = blueScreenImage.rect(); blueScreenRect.moveTo(28,150); //Paints Blue Screen of Death image painter.drawImage(blueScreenRect, blueScreenImage); //Paints Points on status bar of iphone getPoints(painter); //resets last direction to nothing lastDir = ' '; } else if(introPrompt1) // If introPrompt1 is true { introScreen(painter); //paint intro screen 1 screen } else if(introPrompt2) // If introPrompt2 is true { introScreen(painter); //paint intro screen 2 screen } else // if has game Started { snake->drawSnake(painter); // paint Snake on screen painter.drawImage(food->getRect(), food->getImage()); // paint Food on screen if(winSpawn) // If winSpawn is true { painter.drawImage(foodWinner->getRect(), foodWinner->getImage()); // paint foodWinner on screen winCounter++; // increament winCounter if(winCounter%100==0) //if winCounter%100==0, then set up variables to stop painting foodWinner { deathSpawn = FALSE; winSpawn = FALSE; doOneTime = TRUE; spawnWinnerCount = 0; } } else if(deathSpawn) // If deathSpawn is true { painter.drawImage(specialFood->getRect(), specialFood->getImage()); // paint specialFood on screen deathCounter++; // increament deathCounter spawnWinnerCount++; // increament spawnWinnerCount //if deathCounter%100==0, then set up variables to stop painting specialFood. //if spawnWinnerCount%1000==0, then set up variables to start painting foodWinner. if(deathCounter%100==0 || spawnWinnerCount%1000==0) { deathSpawn = FALSE; doOneTime = TRUE; } } //Paints Points on status bar of iphone getPoints(painter); } }
int main() { sf::RenderWindow window(sf::VideoMode(640, 480, 32), "Pickin' Gems"); window.SetFramerateLimit(30); window.SetIcon(gem_icon.width, gem_icon.height, gem_icon.pixel_data); sf::Image grassImage; grassImage.LoadFromFile("grass.png"); grassImage.SetSmooth(false); sf::Sprite grass; grass.SetImage(grassImage); sf::Image gemImage; gemImage.LoadFromFile("gem.png"); gemImage.CreateMaskFromColor(sf::Color(255, 0, 255)); gemImage.SetSmooth(false); sf::Sprite gem; gem.SetImage(gemImage); sf::Image player1Image; player1Image.LoadFromFile("ayne.png"); player1Image.CreateMaskFromColor(sf::Color(255, 0, 255)); player1Image.SetSmooth(false); sf::Sprite player1(player1Image); sf::Image player2Image; player2Image.LoadFromFile("elliot.png"); player2Image.CreateMaskFromColor(sf::Color(255, 0, 255)); player2Image.SetSmooth(false); sf::Sprite player2(player2Image); sf::Image pressEnterToStartImage; pressEnterToStartImage.LoadFromFile("pressEnterToStart.png"); pressEnterToStartImage.SetSmooth(false); sf::Sprite pressEnterToStart(pressEnterToStartImage); sf::Image humanSelectedImage; humanSelectedImage.LoadFromFile("humanSelected.png"); humanSelectedImage.SetSmooth(false); sf::Sprite humanSelectedSprite(humanSelectedImage); sf::Image computerSelectedImage; computerSelectedImage.LoadFromFile("computerSelected.png"); computerSelectedImage.SetSmooth(false); sf::Sprite computerSelectedSprite(computerSelectedImage); sf::Image gameOverScreenImage; gameOverScreenImage.LoadFromFile("gameOverScreen.png"); gameOverScreenImage.SetSmooth(false); sf::Sprite gameOverScreen(gameOverScreenImage); sf::Music backgroundMusic; backgroundMusic.OpenFromFile("background.ogg"); backgroundMusic.SetLoop(true); sf::SoundBuffer gemPickupBuffer; gemPickupBuffer.LoadFromFile("gemCollect.wav"); sf::Sound gemPickup; gemPickup.SetBuffer(gemPickupBuffer); sf::Font font; font.LoadFromFile("Halo11.ttf"); sf::String player1ScoreToPrint; sf::String player2ScoreToPrint; sf::String timerPrint; sf::String gameOverPrint; player1ScoreToPrint.SetFont(font); player1ScoreToPrint.SetSize(24); player2ScoreToPrint.SetFont(font); player2ScoreToPrint.SetSize(24); timerPrint.SetFont(font); timerPrint.SetSize(24); gameOverPrint.SetFont(font); gameOverPrint.SetSize(24); float player1Frame = 1; float player2Frame = 1; int player1Score = 0; int player2Score = 0; char buffer1[256]; char buffer2[256]; char buffer3[256]; char buffer4[256]; sf::Vector2f player1Pos; sf::Vector2f player2Pos; enum Direction {DOWN = 0, UP = 1, LEFT = 2, RIGHT = 3}; enum State {MAIN_MENU = 0, PLAYER_SELECT = 1, GAME = 2, GAME_OVER = 3}; State gameState = MAIN_MENU; bool humanSelected = true; bool computerSelected = false; bool enterPressed = false; bool downPressed = false; bool upPressed = false; bool backgroundMusicPlaying = true; Direction player1Direction = DOWN; Direction player2Direction = DOWN; bool player1Moving = false; bool player2Moving = false; bool player1Animating = false; bool player2Animating = false; sf::Vector2f gemPos; srand(time(NULL)); gemPos.x = (int)rand() % (640 - 32); gemPos.y = (int)rand() % (480 - 32); int time = 1800; bool gameOver = false; bool fullscreen = false; while (window.IsOpened()) { sf::Event event; while (window.GetEvent(event)) { if (event.Type == sf::Event::Closed) { window.Close(); } if ((event.Type == sf::Event::KeyPressed) && (event.Key.Code == sf::Key::Escape)) { window.Close(); } if ((event.Type == sf::Event::KeyPressed) && (event.Key.Code == sf::Key::Return)) { enterPressed = true; } if ((event.Type == sf::Event::KeyPressed) && (event.Key.Code == sf::Key::Up)) { upPressed = true; } if ((event.Type == sf::Event::KeyPressed) && (event.Key.Code == sf::Key::Down)) { downPressed = true; } } switch (gameState) { case MAIN_MENU: window.Draw(pressEnterToStart); if (enterPressed) { enterPressed = false; gameState = PLAYER_SELECT; } break; case PLAYER_SELECT: if (humanSelected) { window.Draw(humanSelectedSprite); } else if (computerSelected) { window.Draw(computerSelectedSprite); } if (upPressed) { if (computerSelected) { computerSelected = false; humanSelected = true; } else if (humanSelected) { humanSelected = false; computerSelected = true; } upPressed = false; } else if (downPressed) { if (humanSelected) { humanSelected = false; computerSelected = true; } else if (computerSelected) { computerSelected = false; humanSelected = true; } downPressed = false; } if (enterPressed) { enterPressed = false; gameState = GAME; } break; case GAME: { --time; if (backgroundMusicPlaying) { backgroundMusicPlaying = false; backgroundMusic.Play(); } for (int i = 0; i < 640 / 32; i++) { for (int j = 0; j < 480 / 32; j++) { grass.SetPosition(i * 32, j * 32); window.Draw(grass); } } gem.SetPosition(gemPos); if (window.GetInput().IsKeyDown(sf::Key::Left)) { player1Direction = LEFT; player1Animating = true; player1.Move(-3, 0); } else if (window.GetInput().IsKeyDown(sf::Key::Right)) { player1Direction = RIGHT; player1Animating = true; player1.Move(3, 0); } else if (window.GetInput().IsKeyDown(sf::Key::Up)) { player1Direction = UP; player1Animating = true; player1.Move(0, -3); } else if (window.GetInput().IsKeyDown(sf::Key::Down)) { player1Direction = DOWN; player1Animating = true; player1.Move(0, 3); } if (humanSelected) { if (window.GetInput().IsKeyDown(sf::Key::A)) { player2Direction = LEFT; player2Animating = true; player2.Move(-3, 0); } else if (window.GetInput().IsKeyDown(sf::Key::D)) { player2Direction = RIGHT; player2Animating = true; player2.Move(3, 0); } else if (window.GetInput().IsKeyDown(sf::Key::W)) { player2Direction = UP; player2Animating = true; player2.Move(0, -3); } else if (window.GetInput().IsKeyDown(sf::Key::S)) { player2Direction = DOWN; player2Animating = true; player2.Move(0, 3); } } else if (computerSelected) { if ((int)player2Pos.x < (int)gemPos.x) { if (gemPos.x - player2Pos.x < 2) { player2.Move(1, 0); } else { player2.Move(2, 0); } player2Direction = RIGHT; player2Animating = true; } else if ((int)player2Pos.y > (int)gemPos.y) { if (player2Pos.y - gemPos.y < 2) { player2.Move(0, -1); } else { player2.Move(0, -2); } player2Direction = UP; player2Animating = true; } else if ((int)player2Pos.x > (int)gemPos.x) { if (player2Pos.x - gemPos.x < 2) { player2.Move(-1, 0); } else { player2.Move(-2, 0); } player2Direction = LEFT; player2Animating = true; } else if ((int)player2Pos.y < (int)gemPos.y) { if (gemPos.y - player2Pos.y < 2) { player2.Move(0, 1); } else { player2.Move(0, 2); } player2Direction = DOWN; player2Animating = true; } else if ((int)player2Pos.x > (int)gemPos.x) { if (player2Pos.x - gemPos.x < 2) { player2.Move(-1, 0); } else { player2.Move(-2, 0); } player2Direction = LEFT; player2Animating = true; } } if (player1Animating) { player1Frame += 0.25; if (player1Frame > 3) { player1Frame = 0; } player1Animating = false; } if (player2Animating) { player2Frame += 0.25; if (player2Frame > 3) { player2Frame = 0; } player2Animating = false; } player1Pos = player1.GetPosition(); player2Pos = player2.GetPosition(); if (player1Pos.x < 0) { player1.SetX(0); } else if (player1Pos.x + 32 > 640) { player1.SetX(640 - 32); } if (player1Pos.y < 0) { player1.SetY(0); } else if (player1Pos.y + 48 > 480) { player1.SetY(480 - 48); } if (player2Pos.x < 0) { player2.SetX(0); } else if (player2Pos.x + 32 > 640) { player2.SetX(640 - 32); } if (player2Pos.y < 0) { player2.SetY(0); } else if (player2Pos.y + 48 > 480) { player2.SetY(480 - 48); } if (isColliding(getRegionCoordinates(gemPos, 32, 32), getRegionCoordinates(player1Pos, 32, 48))) { gemPos.x = (int)rand() % (640 - 32); gemPos.y = (int)rand() % (480 - 32); gemPickup.Play(); player1Score += 10; } if (isColliding(getRegionCoordinates(gemPos, 32 + 3, 32 + 3), getRegionCoordinates(player2Pos, 32, 48))) { gemPos.x = (int)rand() % (640 - 32); gemPos.y = (int)rand() % (480 - 32); gemPickup.Play(); player2Score += 10; } sprintf(buffer1, "Player 1's Score: %d", player1Score); sprintf(buffer2, "Player 2's Score: %d", player2Score); sprintf(buffer3, "Time left: %d", time / 30); player1ScoreToPrint.SetText(buffer1); player2ScoreToPrint.SetText(buffer2); timerPrint.SetText(buffer3); player1ScoreToPrint.SetColor(sf::Color(0, 0, 0)); player2ScoreToPrint.SetColor(sf::Color(0, 0, 0)); timerPrint.SetColor(sf::Color(0, 0, 0)); player1ScoreToPrint.SetX(0); player1ScoreToPrint.SetY(0); player2ScoreToPrint.SetX(0); player2ScoreToPrint.SetY(24); timerPrint.SetX(0); timerPrint.SetY(48); int player1SpritesheetX = (int)player1Frame * 32; int player1SpritesheetY = player1Direction * 48; int player2SpritesheetX = (int)player2Frame * 32; int player2SpritesheetY = player2Direction * 48; player1.SetSubRect(sf::IntRect(player1SpritesheetX, player1SpritesheetY, player1SpritesheetX + 32, player1SpritesheetY + 48)); player2.SetSubRect(sf::IntRect(player2SpritesheetX, player2SpritesheetY, player2SpritesheetX + 32, player2SpritesheetY + 48)); window.Draw(gem); window.Draw(player2); window.Draw(player1); window.Draw(player1ScoreToPrint); window.Draw(player2ScoreToPrint); window.Draw(timerPrint); if (time / 30 == 0) { gameState = GAME_OVER; } break; } case GAME_OVER: { if (player1Score < player2Score) { sprintf(buffer4, "Congratulations, Player 2! You win!"); } else if (player1Score > player2Score) { sprintf(buffer4, "Congratulations, Player 1! You win!"); } else { sprintf(buffer4, "It's a tie!"); } gameOverPrint.SetText(buffer4); gameOverPrint.SetColor(sf::Color(0, 0, 0)); sf::FloatRect rect(gameOverPrint.GetRect()); sf::Vector2f pos(window.GetWidth() / 2 - rect.GetWidth() / 2, window.GetHeight() / 2 - rect.GetHeight() / 2); gameOverPrint.SetPosition(pos); window.Draw(gameOverScreen); window.Draw(gameOverPrint); if (enterPressed) { enterPressed = false; gameState = MAIN_MENU; time = 1800; player1Score = 0; player2Score = 0; player1Frame = 1; player2Frame = 1; player1.SetPosition(0, 0); player2.SetPosition(0, 0); player1Direction = DOWN; player2Direction = DOWN; upPressed = false; downPressed = false; humanSelected = true; } break; } } window.Display(); window.Clear(); } return 0; }
/******************************************************** render() called in main as: glutDisplayFunc(render); The render function is used to draw objects to the screen. ********************************************************/ void render() { switch (Current_Game_Scene_Enum) { case _scene_start_menu: glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); //Clear the screen of previous drawn data //if player hits ENTER_KEY, change CURRENT_GAME_SCENE_ENUM == _scene_new_game_intro //glutTimerFunc(ms, startMenuKeypress, 0); glLoadIdentity(); //camara gluLookAt(0, -1, 5, 0, 0, 0, 0, 1, 0); //draw BKGRND glQuad to the screen background.DrawStartMenuBackground(); loadTitle(); //swap buffers to clear and redraw glutSwapBuffers(); break; case _scene_new_game_intro: glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); //Clear the screen of previous drawn data glutTimerFunc(ms, timeTick, 0); //update at 60 frames per second glLoadIdentity(); gluLookAt(0.0, 30.0, 90.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); renderIntroText(); background.DrawNewGameIntroBackground(); if (fadeStarted && !(gameActive)) { decrementCount = sceneTransition.FadeOut(decrementCount); //check shrinking count for fadeout finished = 0 if (decrementCount <= 0) { //change scene for render scene switch Current_Game_Scene_Enum = _scene_level_one; //reset some variables customScrollingCount = 0; decrementCount = 0; //firstPassTimer = true; fadeStarted = false; gameActive = true; level++; } } glutSwapBuffers(); break; case _scene_level_one: glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); //Clear the screen of previous drawn data glutTimerFunc(ms, update, 0); //update at 60 frames per second glLoadIdentity(); displayLevelTitle(); //Camera gluLookAt(0, -1, 5, 0, 0, 0, 0, 1, 0); displayLevelTitle(); displayLevelText(); loadPlayerTitle(); lifeTitle(); lifeCountNumber(); background.Draw(); //Draw player player[0]->setColor(1.0f, 0.0f, 0.0f); player[0]->Draw(); //Draw the enemies for (unsigned int i = 0; i < enemies.size(); i++) { enemies[i]->Draw(); enemyModel.Position(enemies[i]->getX(), enemies[i]->getY() - 0.5f, enemies[i]->getZ()); enemyModel.drawObject(); } enemySpawn(); //after update checks for correct kill count, being fadeOut if (fadeStarted) { cleanUp(); //init and update the decrement-count if (firstPassTimerL1) { decrementCount = sceneTransition.FadeOut(70.0f); firstPassTimerL1 = false; } else if (!firstPassTimerL1){ decrementCount = sceneTransition.FadeOut(decrementCount); //check shrinking count for fadeout finished = 0 if (decrementCount <= 0) { //change scene for render scene switch if(player[0]->lives < 0) Current_Game_Scene_Enum = _scene_game_over; //-- goes back to start screen else Current_Game_Scene_Enum = _scene_level_two; //reset some variables customScrollingCount = 0; decrementCount = 0; player[0]->playerReset(); level++; //firstPassTimer = true; fadeStarted = false; } } } glutSwapBuffers(); //Swaps the buffers when double buffer is used break; case _scene_level_two: glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); //Clear the screen of previous drawn data glutTimerFunc(ms, update, 0); glLoadIdentity(); //Camera gluLookAt(0, -1, 5, 0, 0, 0, 0, 1, 0); loadPlayerTitle(); displayLevelTitle(); displayLevelText(); lifeTitle(); lifeCountNumber(); background.Draw(); //Draw player player[0]->setColor(1.0f, 0.0f, 0.0f); player[0]->Draw(); //Draw the enemies for (unsigned int i = 0; i < enemies.size(); i++) { enemies[i]->Draw(); enemyModel.Position(enemies[i]->getX(), enemies[i]->getY() - 0.5f, enemies[i]->getZ()); enemyModel.drawObject(); } enemySpawn(); //after update checks for correct kill count, being fadeOut if (fadeStarted) { //init and update the decrement-count cleanUp(); if (firstPassTimerL1) { decrementCount = sceneTransition.FadeOut(70.0f); firstPassTimerL1 = false; } else if (!firstPassTimerL1){ decrementCount = sceneTransition.FadeOut(decrementCount); //check shrinking count for fadeout finished = 0 if (decrementCount <= 0) { //change scene for render scene switch if(player[0]->lives < 0) Current_Game_Scene_Enum = _scene_game_over; //-- goes back to start screen else Current_Game_Scene_Enum = _scene_game_over; //reset some variables customScrollingCount = 0; decrementCount = 0; //firstPassTimer = true; player[0]->playerReset(); level = 0; fadeStarted = false; } } } glutSwapBuffers(); //Swaps the buffers when double buffer is used break; case _scene_game_over: //not implemented, here for later use cleanUp(); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); //Clear the screen of previous drawn data glLoadIdentity(); gameActive = false; killCount = 0; //camara gluLookAt(0, -1, 5, 0, 0, 0, 0, 1, 0); resetIntroScrolling(); //draw BKGRND glQuad to the screen background.DrawStartMenuBackground(); player[0]->lives = 0; gameOverScreen(); level = 0; //swap buffers to clear and redraw glutSwapBuffers(); break; case _scene_high_score: //not implemented, here for later use break; case _scene_exit: exit(0); break; default: printf("FATAL ERROR: 'Current_Game_Scene_Enum' is not set to any of the current enum values"); break; } if(gameActive) { if(player[0]->isAlive == false) { glutTimerFunc(resetTime, resetPlayer, 0); //update at 60 frames per second } } }