void Draw(Core::Graphics& graphics){ if (isEditingSpaceship){ editor.Draw(graphics); } else{ graphics.SetColor(defaultColor); if(!isMainMenu && !isControls){ { PROFILE("LevelDraw"); lvl.Draw(graphics); } { PROFILE("ParticlesDraw"); manager->Draw(graphics); } } else if (isControls){ Controls::Draw(graphics); } else{ menu.Draw(graphics); } } Debug::DrawMemoryState(graphics, SCREEN_HEIGHT); }
void draw_game(RenderWindow &window, Level &lvl, std::list<Entity*>::iterator &it, std::list<Entity*> &entities, PLAYER &Player, PlayerScores &plScores, int levelNumber) { init_font font; window.clear(Color(107, 140, 255)); lvl.Draw(window); for (it = entities.begin();it != entities.end();it++) (*it)->draw(window); Player.draw(window); plScores.draw(window, levelNumber); if (Player.isWin) { font.textFinish.setPosition(view.getCenter().x - 120, view.getCenter().y); window.draw(font.textFinish); font.textWin.setPosition(view.getCenter().x - 200, view.getCenter().y- 20); window.draw(font.textWin); } else if (!Player.life) { font.textFinish.setPosition(view.getCenter().x - 120, view.getCenter().y); window.draw(font.textFinish); font.textDead.setPosition(view.getCenter().x - 40, view.getCenter().y - 20); window.draw(font.textDead); } window.display(); }
int main() { RenderWindow window(VideoMode(1200, 800), "sds"); Level lv; lv.LoadFromFile("Test map.tmx"); std::vector<Object> mapObj; mapObj = lv.GetObjects("solid"); //Event event; Texture hero; ///Текстура нашего игрока hero.loadFromFile("ScarletRun2Right.png"); Texture heroLeft; heroLeft.loadFromFile("ScarletRun2Left.png"); Animation PlayerAnim[4]; PlayerAnim[0].setSpriteSheet(hero); PlayerAnim[0].loadFromXml("SkarletMoveRight.xml"); PlayerAnim[1].setSpriteSheet(hero); PlayerAnim[1].loadFromXml("SkarletMoveRight.xml"); PlayerAnim[2].setSpriteSheet(hero); PlayerAnim[2].loadFromXml("SkarletMoveRight.xml"); PlayerAnim[3].setSpriteSheet(heroLeft); PlayerAnim[3].loadFromXml("SkarletMoveLeft.xml"); Hero her; her.setHeroAnimation(PlayerAnim); her.setHeroPossition(0, 20); her.setHeroAnimationSpeed(1.0f); her.setHeroSpeed(20); sf::Clock frameClock;// Наши часики float speed = 80.f; while (window.isOpen()) { sf::Time frameTime = frameClock.restart(); window.clear(); lv.Draw(window); her.updateAndDrawHero(frameTime, mapObj, window); window.display(); } return 0; }
int wmain() { #pragma region Other Stuff // Hide cursor SDL_ShowCursor(0); gameState = PLAY; //The window we'll be rendering to SDL_Window* window = NULL; //The surface contained by the window SDL_Surface* screenSurface = NULL; //SDL Renderer r = Renderer(SCREEN_WIDTH, SCREEN_HEIGHT); AudioManager::GetInstance()->Init(); AudioManager::GetInstance()->LoadMedia(); AudioManager::GetInstance()->PlaySoundEffect(1); SDL_Point ePos; ePos.x = 100; ePos.y = 100; Enemy en = Enemy(200, 200, 62 / 3, 77 / 3, r, 0); Enemy en1 = Enemy(400, 100, 62 / 3, 77 / 3, r, 0); Level lvl = Level(r); // MENU SDL_Point bPos; bPos.x = 0; bPos.y = 0; Menu background = Menu(bPos, SCREEN_WIDTH, SCREEN_HEIGHT, r, 0, "background"); SDL_Point pPos; pPos.x = SCREEN_WIDTH / 3; pPos.y = SCREEN_HEIGHT / 4; Menu playBtn = Menu(pPos, 263, 44, r, 0, "playBtn"); SDL_Point e2Pos; e2Pos.x = (SCREEN_WIDTH / 2) - 50; e2Pos.y = (SCREEN_HEIGHT / 2) - 20; Menu exitBtn = Menu(e2Pos, 111, 45, r, 0, "exitBtn"); // Player SDL_Point playerPos; playerPos.x = SCREEN_WIDTH / 2 - 25; playerPos.y = SCREEN_HEIGHT / 2 - 10; Player player = Player(playerPos, 44, 32, r, 0); // THREADS \\ // Run the thread //Player * p = (); // pointer to object void * pv = &player; // pointer to void Player * p2 = static_cast<Player *>(pv); // pointer to the same object int data; SDL_Thread* threadID = SDL_CreateThread(renderThreadFunction, "RenderThread", (void*)p2); // THREADS \\ #pragma endregion #pragma region SDL STUFF bool quit = false; float oldTime = SDL_GetTicks(); float delta = 0.f; float newTime = 0.f; SDL_Event e; fpsTimer.start(); while (!quit) { while (SDL_PollEvent(&e) != 0) { InputManager::GetInstance()->UpdatePolledEvents(e); } if (e.button.button == SDL_SCANCODE_ESCAPE) quit = true; // THREADS \\ // THREADS \\ //controls gameState added in game menu feature r.Begin(); switch (gameState) { case MENU: //detect button click if (e.type == SDL_MOUSEBUTTONDOWN) { //If the left mouse button was pressed if (e.button.button == SDL_BUTTON_LEFT) { //Get the mouse offsets int mouse_x = e.button.x; int mouse_y = e.button.y; if (playBtn.IsClicked(mouse_x, mouse_y)) { gameState = PLAY; } else if (exitBtn.IsClicked(mouse_x, mouse_y)) { quit = true; } } }// End detect button click background.Draw(r); playBtn.Draw(r); exitBtn.Draw(r); break; case PLAY: newTime = SDL_GetTicks(); delta = newTime - oldTime; oldTime = newTime; en.Update(delta); lvl.Draw(r); en.Draw(r); en1.Update(delta); en1.Draw(r); en.Draw(r); player.Update(r, delta); player.Draw(r); //calculateFPS(); break; } InputManager::GetInstance()->UpdateState(); r.End(); } //Remove timer in case the call back was not called SDL_WaitThread(threadID, NULL); return EXIT_SUCCESS; }
bool StartGame(RenderWindow & window, Game & game) { Level lvl; lvl.LoadFromFile(GetLevelNumb(game)); Image image; Texture texture; if (!image.loadFromFile("images/lvl1.png")) cout << "Error loading image from file " << endl; image.createMaskFromColor(Color(0, 128, 0)); if (!texture.loadFromImage(image)) cout << "Error loading texture from image " << endl; Sprite heartSprite; heartSprite.setTexture(texture); heartSprite.setTextureRect(IntRect(395, 151, 54, 46)); heartSprite.setScale(0.3f, 0.3f); Sprite lifeSprite; lifeSprite.setTexture(texture); lifeSprite.setTextureRect(IntRect(457, 149, 29, 29)); lifeSprite.setScale(0.8f, 0.8f); Font font; font.loadFromFile("fonts/pixel.ttf"); Text text("", font, 25); game.graphic.statistic.heart = heartSprite; game.graphic.statistic.life = lifeSprite; game.graphic.text = text; game.isPause = true; game.restart = false; vector <Enemy*> enemies; std::vector<Object> e = lvl.GetObjects("easyEnemy"); for (Object i : e) enemies.push_back(new Enemy(texture, "easyEnemy", i.rect.left, i.rect.top, 53, 28)); e = lvl.GetObjects("flyEnemy"); for (Object i : e) enemies.push_back(new Enemy(texture, "flyEnemy", i.rect.left, i.rect.top, 38, 36)); if (lvl.IsExist("trap")) { e = lvl.GetObjects("trap"); for (Object i : e) enemies.push_back(new Enemy(texture, "trap", i.rect.left, i.rect.top, 32, 18)); } vector <Portal*> portals; vector <Bullet*> bullets; vector <Object> objects = lvl.GetAllObjects(); Clock clock; SoundBuffer shootBuffer; shootBuffer.loadFromFile("sound/shoot.wav"); Sound shoot(shootBuffer); SoundBuffer portalBuffer; portalBuffer.loadFromFile("sound/portal.wav"); Sound portal(portalBuffer); SoundBuffer teleportBuffer; teleportBuffer.loadFromFile("sound/teleport.wav"); Sound teleport(teleportBuffer); SoundBuffer damageBuffer; damageBuffer.loadFromFile("sound/damage.wav"); Sound damage(damageBuffer); SoundBuffer deathBuffer; deathBuffer.loadFromFile("sound/damage.wav"); Sound gameOver(deathBuffer); Music music; music.openFromFile("sound/musicGame.ogg"); music.play(); Object playerObject = lvl.GetObject("player"); Player player(texture, "Player1", playerObject.rect.left, playerObject.rect.top, 32, 32); player.health = game.health; player.heart = game.hearts; while (window.isOpen() && (!game.restart)) { float time = float(clock.getElapsedTime().asMicroseconds()); clock.restart(); time = time / 800; Event event; Vector2i pixelPos = Mouse::getPosition(window); Vector2f pos = window.mapPixelToCoords(pixelPos); while (window.pollEvent(event)) { if (event.type == sf::Event::Closed || (Keyboard::isKeyPressed(Keyboard::Escape) && game.isPause)) { window.close(); game.restart = false; } if (event.type == Event::MouseButtonPressed) { pos.y = float(player.teleportY); if ((event.key.code == Mouse::Left) && (player.doesOpenPortal)) { CreatePortal(portals, game, "blue", pos, texture); portal.play(); } else if (event.key.code == Mouse::Right && (player.doesOpenPortal)) { CreatePortal(portals, game, "yellow", pos, texture); portal.play(); } } if (player.isTeleporting) { TeleportPlayer(player, portals); teleport.play(); } if (Keyboard::isKeyPressed(Keyboard::Return)) { game.isPause = false; } if (Keyboard::isKeyPressed(Keyboard::P)) { game.isPause = true; } if (Keyboard::isKeyPressed(Keyboard::Tab) && game.isPause) { game.restart = true; } } if (player.isExit) { if (game.isEndLevel) { game.isPause = true; } else { game.level++; game.restart = true; game.health = player.health; game.hearts = player.heart; } } for (auto *e : enemies) { if ((*e).name == "flyEnemy" && (*e).isShoot) { CreateBullet(bullets, (*e).GetRect(), player, texture); shoot.play(); } } EntitiesIntersection(player, enemies, portals, bullets, damage); if (player.alive) { setPlayerCoordinateForView(game.camera, player.GetPos().x, player.GetPos().y); } if (!game.isPause) { UpdateEnemies(objects, enemies, time, player); UpdatePortals(portals, time); UpdateBullets(objects, bullets, time); player.Update(objects, time, pos, game.portalH); } window.setView(game.camera); window.clear(); lvl.Draw(window); DrawEnemies(window, enemies); DrawPortals(window, portals); DrawBullets(window, bullets); DrawStatistic(window, &game, player, game.camera); window.draw(player.sprite); DrawAllMessages(player, game, window); music.setLoop(true); window.display(); } return game.restart; }
bool startGame (int & startLevel, RenderWindow & window, int & lives) { view.reset(FloatRect(0, 0, 700, 600)); Level lvl; switch (startLevel) { case 1: lvl.LoadFromFile("level1.tmx"); break; case 2: lvl.LoadFromFile("level2.tmx"); break; case 3: lvl.LoadFromFile("level3.tmx"); break; } //lvl.LoadFromFile("level1.tmx"); SoundBuffer coinBuffer; coinBuffer.loadFromFile("sounds/coin.wav"); Sound coinSound; coinSound.setBuffer(coinBuffer); SoundBuffer deathBuffer; deathBuffer.loadFromFile("sounds/mariodie.wav"); Sound deathSound; deathSound.setBuffer(deathBuffer); SoundBuffer stageBuffer; stageBuffer.loadFromFile("sounds/stage.wav"); Sound stageSound; stageSound.setBuffer(stageBuffer); Image heroImage; heroImage.loadFromFile("images/mario.png"); heroImage.createMaskFromColor(Color(255, 255, 255)); Image easyEnemyImage; easyEnemyImage.loadFromFile("images/EasyEnemy.png"); easyEnemyImage.createMaskFromColor(Color(255, 255, 255)); Image coinImage; coinImage.loadFromFile("images/coin.png"); coinImage.createMaskFromColor(Color(255, 255, 255)); Image mediumEnemyImage; mediumEnemyImage.loadFromFile("images/MediumEnemy.png"); mediumEnemyImage.createMaskFromColor(Color(255, 255, 255)); Image movePlatformImage; movePlatformImage.loadFromFile("images/MovingPlatform.png"); std::list<Entity*> entities; std::list<Entity*>::iterator it; std::list<Entity*>::iterator it2; std::vector<Object> e = lvl.GetObjects("EasyEnemy"); for (int i = 0; i < e.size(); i++) { entities.push_back(new Enemy(easyEnemyImage, "EasyEnemy", lvl, e[i].rect.left, e[i].rect.top, 15, 25)); } e = lvl.GetObjects("coin"); for (int i = 0; i < e.size(); i++) { entities.push_back(new Coin(coinImage, "coin", lvl, e[i].rect.left, e[i].rect.top, 15, 15)); } e = lvl.GetObjects("MediumEnemy"); for (int i = 0; i < e.size(); i++) { entities.push_back(new Enemy(mediumEnemyImage, "MediumEnemy", lvl, e[i].rect.left, e[i].rect.top, 16, 24)); } e = lvl.GetObjects("exit"); for (int i = 0; i < e.size(); i++) { entities.push_back(new Exit(mediumEnemyImage, "exit", lvl, e[i].rect.left, e[i].rect.top, 16, 24)); } e = lvl.GetObjects("fire"); for (int i = 0; i < e.size(); i++) { entities.push_back(new Fire(mediumEnemyImage, "fire", lvl, e[i].rect.left, e[i].rect.top, 16, 24)); } e = lvl.GetObjects("MovingPlatform"); for (int i = 0; i < e.size(); i++) entities.push_back(new MovingPlatform(movePlatformImage, "MovingPlatform", lvl, e[i].rect.left, e[i].rect.top, 95, 22)); Object player = lvl.GetObject("player"); Player p(heroImage, "Player", lvl, player.rect.left, player.rect.top, 22, 38); Clock clock; while (window.isOpen()) { float time = clock.getElapsedTime().asMicroseconds(); clock.restart(); time = time / 800; Event event; while (window.pollEvent(event)) { if (event.type == sf::Event::Closed) window.close(); } for (it = entities.begin(); it != entities.end();) { Entity *b = *it; b->update(time); if (b->life == false) { it = entities.erase(it); delete b; } else it++; } for (it = entities.begin(); it != entities.end(); it++) { if (((*it)->name == "MovingPlatform") && ((*it)->getRect().intersects(p.getRect()))) { Entity *movPlat = *it; if (p.dy>0) if (p.y + p.height < movPlat->y + movPlat->height) { p.y = movPlat->y - p.height + 3; p.x += movPlat->dx*time; p.dy = 0; p.onGround = true; } } if ((*it)->getRect().intersects(p.getRect())) { if ((*it)->name == "EasyEnemy" || (*it)->name == "MediumEnemy") { if ((p.dy>0) && (p.onGround == false) && (p.y + p.height < (*it)->y + (*it)->height)) { p.dy = -0.3; (*it)->lives--; if ((*it)->name == "EasyEnemy") (*it)->sprite.setTextureRect(IntRect(60, 8, 16, 8)); p.Score++; } else { if (((*it)->lives != 0)) { deathSound.play(); p.lives--; lives--; return false; } } } if ((*it)->name == "fire") { deathSound.play(); p.lives--; lives--; return false; } if ((*it)->name == "coin") { p.Score++; coinSound.play(); (*it)->life = false; } if ((*it)->name == "exit") { stageSound.play(); startLevel++; return false; } } for (it2 = entities.begin(); it2 != entities.end(); it2++) { if ((*it)->getRect() != (*it2)->getRect()) if (((*it)->getRect().intersects((*it2)->getRect())) && ((*it)->name == "EasyEnemy")) { (*it)->dx *= -1; (*it)->sprite.scale(-1.5, 1.5); } } } p.update(time); if (Keyboard::isKeyPressed(Keyboard::Escape)) { lives = 0; return false; } window.setView(view); window.clear(Color(167, 207, 218)); lvl.Draw(window); for (it = entities.begin(); it != entities.end(); it++) { window.draw((*it)->sprite); } window.draw(p.sprite); window.display(); } return 0; }
void RunGame() { RenderWindow window(VideoMode(640, 480), "The Game!"); menu(window); View view( FloatRect(0, 0, 450, 280) ); Level lvl; int loadlevel = menu(window); //std::cout << "Which lvl would u prefer to load 1 or 2?\n"; //std::cin >> loadlevel; switch(loadlevel){ case 1: lvl.LoadFromFile("files/Level1.tmx"); std::cout <<"\nLoaded lvl1"; break; case 2: lvl.LoadFromFile("files/Level2.tmx"); std::cout << "\nLoaded lvl2"; default: system("exit"); break; } Texture enemy_t, moveplatform_t, megaman_t, bullet_t, bg; bg.loadFromFile("files/images/bg.png"); enemy_t.loadFromFile("files/images/enemy.png"); moveplatform_t.loadFromFile("files/images/movingPlatform.png"); megaman_t.loadFromFile("files/images/megaman.png"); bullet_t.loadFromFile("files/images/bullet.png"); AnimationManager anim; anim.loadFromXML("files/anim_megaman.xml",megaman_t); anim.animList["jump"].loop = 0; AnimationManager anim2; anim2.create("move",bullet_t,7,10,8,8,1,0); anim2.create("explode",bullet_t,27,7,18,18,4,0.01,29,false); AnimationManager anim3; anim3.create("move",enemy_t,0,0,16,16,2,0.002,18); anim3.create("dead",enemy_t,58,0,16,16,1,0); AnimationManager anim4; anim4.create("move",moveplatform_t,0,0,95,22,1,0); Sprite background(bg); background.setOrigin(bg.getSize().x/2,bg.getSize().y/2); std::list<Entity*> entities; std::list<Entity*>::iterator it; std::vector<Object> e = lvl.GetObjects("enemy"); for (int i=0;i < e.size();i++) entities.push_back(new ENEMY(anim3, lvl, e[i].rect.left, e[i].rect.top) ); e = lvl.GetObjects("MovingPlatform"); for (int i=0;i < e.size();i++) entities.push_back(new MovingPlatform(anim4, lvl, e[i].rect.left, e[i].rect.top) ); Object pl = lvl.GetObject("player"); PLAYER MegaMan(anim, lvl, pl.rect.left, pl.rect.top); HealthBar healthBar; Clock clock; int enemyCount = 0; /////////////////// основной цикл ///////////////////// while (window.isOpen()) { float time = clock.getElapsedTime().asMicroseconds(); clock.restart(); time = time/500; // здесь регулируем скорость игры if (time > 40) time = 40; Event event; while (window.pollEvent(event)) { if (event.type == Event::Closed || Keyboard::isKeyPressed(Keyboard::Escape)) window.close(); if (event.type == Event::KeyPressed) if (event.key.code==Keyboard::Space) entities.push_back(new Bullet(anim2,lvl,MegaMan.x+18,MegaMan.y+18,MegaMan.dir) ); } if (Keyboard::isKeyPressed(Keyboard::Left)) MegaMan.key["L"]=true; if (Keyboard::isKeyPressed(Keyboard::Right)) MegaMan.key["R"]=true; if (Keyboard::isKeyPressed(Keyboard::Up)) MegaMan.key["Up"]=true; if (Keyboard::isKeyPressed(Keyboard::Down)) MegaMan.key["Down"]=true; if (Keyboard::isKeyPressed(Keyboard::Space)) MegaMan.key["Space"]=true; for(it=entities.begin();it!=entities.end();) { Entity *b = *it; b->update(time); if (b->life==false) { it = entities.erase(it); delete b; enemyCount++; printf("\n%i", enemyCount);} else it++; } MegaMan.update(time); healthBar.update(MegaMan.Health); if(loadlevel == 2){ if(MegaMan.x > 355.0 && MegaMan.x < 450){ if(MegaMan.y < 345.0 && MegaMan.y > 320){ MegaMan.Health = 0; MegaMan.hit=true; } } if(MegaMan.x > 127 && MegaMan.x <548){ if(MegaMan.y <907 && MegaMan.y>875){ MegaMan.Health = 0; MegaMan.hit=true; } } if(MegaMan.x > 670 && MegaMan.x <1440){ if(MegaMan.y <907 && MegaMan.y>875){ MegaMan.Health = 0; MegaMan.hit=true; } } if(MegaMan.Health == 0){ MegaMan.isDead(); death(); window.close(); } } for(it=entities.begin();it!=entities.end();it++) { //1. враги if ((*it)->Name=="Enemy") { Entity *enemy = *it; if (MegaMan.getRect().intersects( enemy->getRect() )) if (MegaMan.dy>0) { enemy->dx=0; MegaMan.dy=-0.2; enemy->Health=0;} else if (!MegaMan.hit) { MegaMan.Health-=10; MegaMan.hit=true; if(MegaMan.Health == 0){ MegaMan.isDead(); death(); window.close(); } if (MegaMan.dir){ MegaMan.x+=10; } else{ MegaMan.x-=10;} } for (std::list<Entity*>::iterator it2=entities.begin(); it2!=entities.end(); it2++) { Entity *bullet = *it2; if (bullet->Name=="Bullet") if ( bullet->Health>0) if (bullet->getRect().intersects( enemy->getRect() ) ) { bullet->Health=0; enemy->Health-=5;} } } //2. движущиеся платформы if ((*it)->Name=="MovingPlatform") { Entity *movPlat = *it; if (MegaMan.getRect().intersects( movPlat->getRect() ) ) if (MegaMan.dy>0) if (MegaMan.y+MegaMan.h<movPlat->y+movPlat->h) {MegaMan.y=movPlat->y - MegaMan.h + 3; MegaMan.x+=movPlat->dx*time; MegaMan.dy=0; MegaMan.STATE=PLAYER::stay;} } //3.. и т.д. } /////////////////////отображаем на экран///////////////////// view.setCenter( MegaMan.x,MegaMan.y); window.setView(view); background.setPosition(view.getCenter()); window.draw(background); lvl.Draw(window); for(it=entities.begin();it!=entities.end();it++) (*it)->draw(window); if(loadlevel == 1){ if(enemyCount >= 7 && MegaMan.x == 28 && MegaMan.y ==534){ window.close(); victory(); } } if(loadlevel == 2){ if(enemyCount == 5){ window.close(); victory(); } } MegaMan.draw(window); healthBar.draw(window); window.display(); //printf("%f %f\n",MegaMan.x, MegaMan.y); } }
void mainLevel(RenderWindow &window) { //>>>>>>>>>>>>>>>---Level---<<<<<<<<<<<<<<<<<<<<<<<<<<< Level lvl; lvl.LoadFromFile("map.tmx"); //>>>>>>>>>>>>>>>>---Load basic image for level1----<<<<<<<<<<<<<<<<< Texture texture; texture.loadFromFile("images/level1empty.jpg"); Sprite level(texture); Texture texture2; texture2.loadFromFile("images/levelShad.png"); Sprite level2(texture2); Texture texture3; texture3.loadFromFile("images/level12.png"); Sprite level3(texture3); //>>>>>>>>>>>>>>>>---Music---<<<<<<<<<<<<<<<<<<<<<<<<<< Music mainSong; Music skyrim, muse, bathMus; bathMus.openFromFile("music/bath.ogg"); Object mus = lvl.GetObject("muse"); muse.openFromFile("music/synd.ogg"); muse.setVolume(100); skyrim.openFromFile("music/skyrim.ogg"); skyrim.setVolume(100); mainSong.openFromFile("music/level1.ogg"); mainSong.play(); mainSong.setLoop(true); mainSong.setVolume(75); //>>>>>>>>>>>>>>>>---Create a cat---<<<<<<<<<<<<<<<<<<< Object player = lvl.GetObject("cat"); Object fish = lvl.GetObject("fish"); Object mo = lvl.GetObject("mouse"); Object ob = lvl.GetObject("catPlace"); Player cat("cat.png", lvl, 68, 429, 60, 120, player.rect.left, player.rect.top, ELSE); Clock clock; Clock gameTimeClock; int sinkCnt = 0; //>>>>>>>>>>>>>>>>---Sounds----<<<<<<<<<<<<<<<<<<< SoundBuffer buf1, buf2; buf1.loadFromFile("music/meow1.ogg"); buf2.loadFromFile("music/meow2.ogg"); Sound meow1, meow2; meow1.setBuffer(buf1); meow2.setBuffer(buf2); SoundBuffer buf, buf3; buf.loadFromFile("music/steklo.ogg"); buf3.loadFromFile("music/mouse.ogg"); Sound glass; Sound mouseS; glass.setBuffer(buf); glass.setVolume(100); mouseS.setBuffer(buf3); //Objects Furniture posters("tayles1.png", 160, 660, 210, 250, 280, 215, POSTERS); Furniture bed("tayles1.png", 420, 80, 280, 310, 250, 440, ELSE); Furniture toys("tayles1.png", 120, 470, 180, 150, 220, 545, TOYS); Furniture upShelf("tayles1.png", 700, 652.5, 120, 97.5, 350, 83, SHELF); Furniture cabinet("tayles1.png", 75, 40, 250, 350, 605, 305, CABINET); Furniture mop("tayles1.png", 515, 785, 165, 241, 587, 385, MOP); Furniture flower("tayles1.png",780, 65, 170, 330, 147, 285, ELSE); Furniture ball("tayles1.png", 905, 615, 40, 55, 357, 190, BALL); Furniture books("tayles1.png", 860, 735, 125, 80, 290, 187, BOOKS); Furniture brokenBall("tayles1.png",920, 540, 90, 42, 430, 430, ELSE); Furniture key("tayles1.png", 1, 1, 25, 25, 430, 425, KEY); Furniture cabinetEnd("cabinet.png", 20, 50, 270, 350, 590, 290, ELSE); Furniture girl("girlHair.png", 1,1, 96, 45, 1075, 350, ELSE); Furniture door("tayles2.png", 0, 560, 80, 340, 870, 350, ELSE); Furniture puddle("tayles1.png",789, 1000, 204, 75, 1057, 559, ELSE); Furniture brokenLight("tayles2.png", 10, 110, 50, 70, 795, 430, ELSE); Furniture light("tayles2.png", 20, 20, 35, 70, 220, 565, ELSE); Furniture bath("tayles2.png", 80, 50, 320, 380, 1010, 330, BATH); Furniture openBath("bathr.png", 264, 79, 339, 369, 1015, 315, ELSE); Furniture carpet("tayles2.png", 100, 500, 100, 140, 870, 530, ELSE); Furniture mirror("tayles2.png", 90, 700, 110, 290, 1200, 300, ELSE); Furniture sink("tayles2.png", 290, 440, 150, 240, 1190, 450, SINK); Furniture sinkWater("bathr.png", 22, 180, 197, 427, 1200, 540, ELSE); Furniture mou("mouse.png", 2, 21, 32, 25, mo.rect.left, mo.rect.top, ELSE); std::list<Furniture> fList; std::list<Furniture>::iterator it; fList.push_back(posters); fList.push_back(toys); fList.push_back(upShelf); fList.push_back(cabinet); fList.push_back(mop); fList.push_back(ball); fList.push_back(books); fList.push_back(key); fList.push_back(puddle); fList.push_back(brokenLight); fList.push_back(bath); fList.push_back(sink); for(it = fList.begin(); it != fList.end(); it++){ it->setSub((void *)&it, writeMess); } int cntMeow = 1, cntGame = 0, click = 0, clickBath = 1, clickSink = 1; bath.isPlayed = true; sink.isPlayed = true; while (window.isOpen()) { float time = clock.getElapsedTime().asMicroseconds(); float sinkTime = gameTimeClock.getElapsedTime().asSeconds(); if(clickSink < 2) gameTimeClock.restart(); clock.restart(); time = time/500; Vector2i pos = Mouse::getPosition(window); Event event; while (window.pollEvent(event)) { if (event.type == sf::Event::Closed) window.close(); if (event.type == Event::MouseButtonPressed) if (event.key.code == Mouse::Left){ if (fish.rect.contains(pos.x, pos.y) && key.isPlayed == true){ mainSong.stop(); finish(); window.close(); } if (cat.sprite.getGlobalBounds().contains(pos.x, pos.y)) { cntMeow++; if(cntMeow == 5) { meow2.play(); cntMeow = 0; } else meow1.play(); } toys.trueMove(pos); if(light.isPlayed == false) light.trueMove(pos); if(ball.isPlayed == true && books.isPlayed == true) key.trueMove(pos); if(puddle.isPlayed == true) mop.trueMove(pos); click = light.clickedThings(pos); clickBath = bath.clickedThings(pos); clickSink = sink.clickedThings(pos); if (upShelf.sprite.getGlobalBounds().contains(pos.x, pos.y)){ skyrim.play(); } if (mus.rect.contains(pos.x, pos.y)){ muse.play(); } if (girl.sprite.getGlobalBounds().contains(pos.x, pos.y) && cat.room == 2){ mainSong.pause(); gameOver(); mainSong.play(); } if(mou.isPlayed == false) { if (mou.sprite.getGlobalBounds().contains(pos.x, pos.y)) { mainSong.pause(); mouseS.play(); //gameRunning(); mou.isPlayed = true; mainSong.play(); } } if(books.isPlayed == false) { if (books.sprite.getGlobalBounds().contains(pos.x, pos.y)) { mainSong.pause(); MiniGame_Books(); books.isPlayed = true; mainSong.play(); } } } if (event.type == Event::MouseButtonReleased) if (event.key.code == Mouse::Left){ toys.isMove = false; key.isMove = false; if(light.isPlayed == false) light.isMove = false; mop.isMove = false; } } if(sinkTime > 5 && clickSink == 2) puddle.isPlayed = true; if(clickBath == 2 && cat.room == 2) bathMus.play(); if(click == -1){} else if(click == 1 || click == 2) cat.room = click; toys.intersect("toys",lvl); toys.move(pos); if(mop.isPlayed == false) { mop.intersect("mop", lvl); mop.move(pos); } if(light.isPlayed == false) { light.intersect("light", lvl); light.move(pos); } if(ball.isPlayed == true && books.isPlayed == true){ if(mop.isPlayed == true) key.intersect("key", lvl); if(key.isPlayed == false) key.move(pos); } if(ball.isPlayed == false && books.isPlayed == true){ if(cat.sprite.getGlobalBounds().intersects(ob.rect)) { if(cntMeow == 0) { ball.falling(event, window, pos, lvl, time); glass.play(); ball.isPlayed = true; ball.intersect("ball", lvl); } } } cat.Update(time); window.clear(Color::Black); lvl.Draw(window); if(cat.room == 0) window.draw(level); if(cat.room == 1) window.draw(level2); if(cat.room == 2) window.draw(level3); window.draw(posters.sprite); window.draw(bed.sprite); if(key.isPlayed == true) window.draw(cabinetEnd.sprite); else window.draw(cabinet.sprite); window.draw(upShelf.sprite); window.draw(flower.sprite); if(ball.isPlayed == false) window.draw(ball.sprite); else { window.draw(brokenBall.sprite); window.draw(key.sprite); } window.draw(books.sprite); if(mou.isPlayed == false){ window.draw(mou.sprite); } else window.draw(light.sprite); window.draw(toys.sprite); if(cat.room == 2){ if(clickBath == 2){ window.draw(girl.sprite); window.draw(openBath.sprite); } else window.draw(bath.sprite); window.draw(mirror.sprite); if(clickSink == 2) window.draw(sinkWater.sprite); else window.draw(sink.sprite); if(puddle.isPlayed == true && mop.isPlayed == false) window.draw(puddle.sprite); } if(cat.room == 1 || cat.room == 2){ if(light.isPlayed == false) window.draw(brokenLight.sprite); window.draw(carpet.sprite); window.draw(door.sprite); } if(mop.isPlayed == false) window.draw(mop.sprite); window.draw(cat.sprite); for(it = fList.begin(); it != fList.end(); it++) { if(it->sprite.getGlobalBounds().contains(pos.x, pos.y)) { if(it->f.cb_fn != NULL) { cb_fn fn; fn = (cb_fn)it->f.cb_fn; fn(&window, it->type, &pos); } } } window.display(); } }
void mainLevel(RenderWindow &window) { //>>>>>>>>>>>>>>>---Level---<<<<<<<<<<<<<<<<<<<<<<<<<<< Level lvl; lvl.LoadFromFile("map.tmx"); //>>>>>>>>>>>>>>>>---Load basic image for level1----<<<<<<<<<<<<<<<<< Texture texture; texture.loadFromFile("images/level1empty.jpg"); Sprite level(texture); Texture texture2; texture2.loadFromFile("images/levelShad.png"); Sprite level2(texture2); Texture texture3; texture3.loadFromFile("images/level12.png"); Sprite level3(texture3); //>>>>>>>>>>>>>>>>---Music---<<<<<<<<<<<<<<<<<<<<<<<<<< Music mainSong; mainSong.openFromFile("music/level1.ogg"); mainSong.play(); mainSong.setLoop(true); mainSong.setVolume(75); //>>>>>>>>>>>>>>>>---Create a cat---<<<<<<<<<<<<<<<<<<< Object player = lvl.GetObject("cat"); Player cat("cat.png", lvl, player.rect.left, player.rect.top, 60, 120, 55, 25); Clock clock; //>>>>>>>>>>>>>>>>---Sounds----<<<<<<<<<<<<<<<<<<< SoundBuffer buf1, buf2; buf1.loadFromFile("music/meow1.ogg"); buf2.loadFromFile("music/meow2.ogg"); Sound meow1, meow2; meow1.setBuffer(buf1); meow2.setBuffer(buf2); SoundBuffer buf; buf.loadFromFile("music/steklo.ogg"); Sound glass; glass.setBuffer(buf); glass.setVolume(100); //Objects Furniture posters("tayles1.png", 160, 660, 210, 250, 280, 215); Furniture bed("tayles1.png", 420, 80, 280, 310, 250, 440); Furniture toys("tayles1.png", 120, 470, 180, 150, 220, 545); Furniture upShelf("tayles1.png", 700, 652.5, 120, 97.5, 350, 83); Furniture cabinet("tayles1.png", 75, 40, 250, 350, 605, 305); Furniture mop("tayles1.png", 515, 785, 165, 241, 587, 385); Furniture flower("tayles1.png",780, 65, 170, 330, 147, 285); Furniture ball("tayles1.png", 905, 615, 40, 55, 357, 190); Furniture books("tayles1.png", 860, 735, 125, 80, 290, 187); Furniture brokenBall("tayles1.png",920, 540, 90, 42, 430, 430); Furniture door("tayles2.png", 0, 560, 80, 340, 870, 350); Furniture brokenLight("tayles2.png", 10, 110, 50, 70, 795, 430); Furniture light("tayles2.png", 20, 20, 35, 70, 220, 565); Furniture bath("tayles2.png", 80, 50, 320, 380, 1010, 330); Furniture carpet("tayles2.png", 100, 500, 100, 140, 870, 530); Furniture mirror("tayles2.png", 90, 700, 110, 290, 1200, 300); Furniture sink("tayles2.png", 290, 440, 150, 240, 1190, 450); int cntMeow = 0; Object ob = lvl.GetObject("catPlace"); while (window.isOpen()) { float time = clock.getElapsedTime().asMicroseconds(); clock.restart(); time = time/500; Vector2i pos = Mouse::getPosition(window); Event event; while (window.pollEvent(event)) { if (event.type == sf::Event::Closed) window.close(); if (event.type == Event::MouseButtonPressed){ if (event.key.code == Mouse::Left) { int cntMeow = meow(meow1, meow2, cat, pos); //>>>>>>BALL<<<<<<<<<<<<<< if(cat.sprite.getGlobalBounds().intersects(ob.rect)) { if(cntMeow == -1) { ball.falling(event, window, pos, lvl, time); glass.play(); ball.moving(event, window, pos, "ball", lvl); } } cat.clickedThings(window, light); //BOOKS>>>>----<<<<<< if(books.isPlayed == false) { if (books.sprite.getGlobalBounds().contains(pos.x, pos.y)) { mainSong.pause(); MiniGame_Books(); books.isPlayed = true; mainSong.play(); } } } } toys.moving(event, window, pos, "toys", lvl); if(light.isPlayed == false) light.moving(event, window, pos, "light", lvl); } cat.Update(time); window.clear(Color::Black); lvl.Draw(window); if(cat.room == 0) window.draw(level); if(cat.room == 1) window.draw(level2); if(cat.room == 2) window.draw(level3); window.draw(posters.sprite); window.draw(bed.sprite); window.draw(light.sprite); window.draw(toys.sprite); window.draw(upShelf.sprite); window.draw(cabinet.sprite); window.draw(mop.sprite); window.draw(flower.sprite); if(ball.isPlayed == false) window.draw(ball.sprite); else window.draw(brokenBall.sprite); window.draw(books.sprite); if(cat.room == 2){ window.draw(bath.sprite); window.draw(mirror.sprite); window.draw(sink.sprite); } if(cat.room == 1 || cat.room == 2){ if(light.isPlayed == false) window.draw(brokenLight.sprite); window.draw(carpet.sprite); window.draw(door.sprite); } window.draw(cat.sprite); window.display(); } }
void RunGame() { ///////////// инициализация /////////////////////////// RenderWindow window(VideoMode(1366, 768), "The Game!", Style::Fullscreen); View view( FloatRect(0, 0, 450, 280) ); Level lvl; lvl.LoadFromFile("files/Level2.tmx"); Texture enemy_t, moveplatform_t, megaman_t, bullet_t, bg; bg.loadFromFile("files/images/bg.png"); enemy_t.loadFromFile("files/images/enemy.png"); moveplatform_t.loadFromFile("files/images/movingPlatform.png"); megaman_t.loadFromFile("files/images/megaman.png"); bullet_t.loadFromFile("files/images/bullet.png"); AnimationManager anim; anim.loadFromXML("files/anim_megaman.xml",megaman_t); anim.animList["jump"].loop = 0; AnimationManager anim2; anim2.create("move",bullet_t,7,10,8,8,1,0); anim2.create("explode",bullet_t,27,7,18,18,4,0.01,29,false); AnimationManager anim3; anim3.create("move",enemy_t,0,0,16,16,2,0.002,18); anim3.create("dead",enemy_t,58,0,16,16,1,0); AnimationManager anim4; anim4.create("move",moveplatform_t,0,0,95,22,1,0); Sprite background(bg); background.setOrigin(bg.getSize().x/2,bg.getSize().y/2); std::list<Entity*> entities; std::list<Entity*>::iterator it; std::vector<Object> e = lvl.GetObjects("enemy"); for (int i=0;i < e.size();i++) entities.push_back(new ENEMY(anim3, lvl, e[i].rect.left, e[i].rect.top) ); e = lvl.GetObjects("MovingPlatform"); for (int i=0;i < e.size();i++) entities.push_back(new MovingPlatform(anim4, lvl, e[i].rect.left, e[i].rect.top) ); Object pl = lvl.GetObject("player"); PLAYER Mario(anim, lvl, pl.rect.left, pl.rect.top); HealthBar healthBar; Clock clock; /////////////////// основной цикл ///////////////////// while (window.isOpen()) { float time = clock.getElapsedTime().asMicroseconds(); clock.restart(); time = time/500; // здесь регулируем скорость игры if (time > 40) time = 40; Event event; while (window.pollEvent(event)) { if (event.type == Event::Closed || Keyboard::isKeyPressed(Keyboard::Escape)) window.close(); if (event.type == Event::KeyPressed) if (event.key.code==Keyboard::Space) entities.push_back(new Bullet(anim2,lvl,Mario.x+18,Mario.y+18,Mario.dir) ); } if (Keyboard::isKeyPressed(Keyboard::Left)) Mario.key["L"]=true; if (Keyboard::isKeyPressed(Keyboard::Right)) Mario.key["R"]=true; if (Keyboard::isKeyPressed(Keyboard::Up)) Mario.key["Up"]=true; if (Keyboard::isKeyPressed(Keyboard::Down)) Mario.key["Down"]=true; if (Keyboard::isKeyPressed(Keyboard::Space)) Mario.key["Space"]=true; for(it=entities.begin();it!=entities.end();) { Entity *b = *it; b->update(time); if (b->life==false) { it = entities.erase(it); delete b;} else it++; } Mario.update(time); healthBar.update(Mario.Health); for(it=entities.begin();it!=entities.end();it++) { //1. враги if ((*it)->Name=="Enemy") { Entity *enemy = *it; if (enemy->Health<=0) continue; if (Mario.getRect().intersects( enemy->getRect() )) if (Mario.dy>0) { enemy->dx=0; Mario.dy=-0.2; enemy->Health=0;} else if (!Mario.hit) { Mario.Health-=5; Mario.hit=true; if (Mario.dir) Mario.x+=10; else Mario.x-=10;} for (std::list<Entity*>::iterator it2=entities.begin(); it2!=entities.end(); it2++) { Entity *bullet = *it2; if (bullet->Name=="Bullet") if ( bullet->Health>0) if (bullet->getRect().intersects( enemy->getRect() ) ) { bullet->Health=0; enemy->Health-=5;} } } //2. движущиеся платформы if ((*it)->Name=="MovingPlatform") { Entity *movPlat = *it; if (Mario.getRect().intersects( movPlat->getRect() ) ) if (Mario.dy>0) if (Mario.y+Mario.h<movPlat->y+movPlat->h) {Mario.y=movPlat->y - Mario.h + 3; Mario.x+=movPlat->dx*time; Mario.dy=0; Mario.STATE=PLAYER::stay;} } //3.. и т.д. } /////////////////////отображаем на экран///////////////////// view.setCenter( Mario.x,Mario.y); window.setView(view); background.setPosition(view.getCenter()); window.draw(background); lvl.Draw(window); for(it=entities.begin();it!=entities.end();it++) (*it)->draw(window); Mario.draw(window); healthBar.draw(window); window.display(); } }
void MyGame::Render(SDL_Surface* pDestSurface) { debugLevel.Draw( pDestSurface ); player.Draw( pDestSurface ); }
int main() { srand(time(NULL)); Level lvl; lvl.LoadFromFile("/home/oawad/Downloads/sfml/platformer/platformer.tmx"); b2Vec2 gravity(0.0f, 1.0f); b2World world(gravity); sf::Vector2i tileSize = lvl.GetTileSize(); std::vector<Object> block = lvl.GetObjects("block"); for(int i = 0; i < block.size(); i++) { b2BodyDef bodyDef; bodyDef.type = b2_staticBody; bodyDef.position.Set(block[i].rect.left + tileSize.x / 2 * (block[i].rect.width / tileSize.x - 1), block[i].rect.top + tileSize.y / 2 * (block[i].rect.height / tileSize.y - 1)); b2Body* body = world.CreateBody(&bodyDef); b2PolygonShape shape; shape.SetAsBox(block[i].rect.width / 2, block[i].rect.height / 2); body->CreateFixture(&shape,1.0f); } coin = lvl.GetObjects("coin"); for(int i = 0; i < coin.size(); i++) { b2BodyDef bodyDef; bodyDef.type = b2_dynamicBody; bodyDef.position.Set(coin[i].rect.left + tileSize.x / 2 * (coin[i].rect.width / tileSize.x - 1), coin[i].rect.top + tileSize.y / 2 * (coin[i].rect.height / tileSize.y - 1)); bodyDef.fixedRotation = true; b2Body* body = world.CreateBody(&bodyDef); b2PolygonShape shape; shape.SetAsBox(coin[i].rect.width / 2, coin[i].rect.height / 2); body->CreateFixture(&shape,1.0f); coinBody.push_back(body); } enemy = lvl.GetObjects("enemy"); for(int i = 0; i < enemy.size(); i++) { b2BodyDef bodyDef; bodyDef.type = b2_dynamicBody; bodyDef.position.Set(enemy[i].rect.left + tileSize.x / 2 * (enemy[i].rect.width / tileSize.x - 1), enemy[i].rect.top + tileSize.y / 2 * (enemy[i].rect.height / tileSize.y - 1)); bodyDef.fixedRotation = true; b2Body* body = world.CreateBody(&bodyDef); b2PolygonShape shape; shape.SetAsBox(enemy[i].rect.width / 2, enemy[i].rect.height / 2); body->CreateFixture(&shape,1.0f); enemyBody.push_back(body); } player = lvl.GetObject("player"); b2BodyDef bodyDef; bodyDef.type = b2_dynamicBody; bodyDef.position.Set(player.rect.left, player.rect.top); bodyDef.fixedRotation = true; playerBody = world.CreateBody(&bodyDef); b2PolygonShape shape; shape.SetAsBox(player.rect.width / 2, player.rect.height / 2); b2FixtureDef fixtureDef; fixtureDef.shape = &shape; fixtureDef.density = 1.0f; fixtureDef.friction = 0.3f; playerBody->CreateFixture(&fixtureDef); sf::Vector2i screenSize(800, 600); sf::RenderWindow window; window.create(sf::VideoMode(screenSize.x, screenSize.y), "Game"); sf::View view; view.reset(sf::FloatRect(0.0f, 0.0f, screenSize.x, screenSize.y)); view.setViewport(sf::FloatRect(0.0f, 0.0f, 2.0f, 2.0f)); while(window.isOpen()) { sf::Event evt; while(window.pollEvent(evt)) { switch(evt.type) { case sf::Event::Closed: window.close(); break; case sf::Event::KeyPressed: if(evt.key.code == sf::Keyboard::W && playerBody->GetLinearVelocity().y == 0) playerBody->SetLinearVelocity(b2Vec2(0.0f, -15.0f)); if(evt.key.code == sf::Keyboard::D) playerBody->SetLinearVelocity(b2Vec2(5.0f, 0.0f)); if(evt.key.code == sf::Keyboard::A) playerBody->SetLinearVelocity(b2Vec2(-5.0f, 0.0f)); break; } } world.Step(1.0f / 60.0f, 1, 1); for(b2ContactEdge* ce = playerBody->GetContactList(); ce; ce = ce->next) { b2Contact* c = ce->contact; for(int i = 0; i < coinBody.size(); i++) if(c->GetFixtureA() == coinBody[i]->GetFixtureList()) { coinBody[i]->DestroyFixture(coinBody[i]->GetFixtureList()); coin.erase(coin.begin() + i); coinBody.erase(coinBody.begin() + i); } for(int i = 0; i < enemyBody.size(); i++) if(c->GetFixtureA() == enemyBody[i]->GetFixtureList()) { if(playerBody->GetPosition().y < enemyBody[i]->GetPosition().y) { playerBody->SetLinearVelocity(b2Vec2(0.0f, -10.0f)); enemyBody[i]->DestroyFixture(enemyBody[i]->GetFixtureList()); enemy.erase(enemy.begin() + i); enemyBody.erase(enemyBody.begin() + i); } else { int tmp = (playerBody->GetPosition().x < enemyBody[i]->GetPosition().x) ? -1 : 1; playerBody->SetLinearVelocity(b2Vec2(10.0f * tmp, 0.0f)); } } } for(int i = 0; i < enemyBody.size(); i++) { if(enemyBody[i]->GetLinearVelocity() == b2Vec2_zero) { int tmp = (rand() % 2 == 1) ? 1 : -1; enemyBody[i]->SetLinearVelocity(b2Vec2(5.0f * tmp, 0.0f)); } } b2Vec2 pos = playerBody->GetPosition(); view.setCenter(pos.x + screenSize.x / 4, pos.y + screenSize.y / 4); window.setView(view); player.sprite.setPosition(pos.x, pos.y); for(int i = 0; i < coin.size(); i++) coin[i].sprite.setPosition(coinBody[i]->GetPosition().x, coinBody[i]->GetPosition().y); for(int i = 0; i < enemy.size(); i++) enemy[i].sprite.setPosition(enemyBody[i]->GetPosition().x, enemyBody[i]->GetPosition().y); window.clear(); lvl.Draw(window); window.draw(player.sprite); for(int i = 0; i < coin.size(); i++) window.draw(coin[i].sprite); for(int i = 0; i < enemy.size(); i++) window.draw(enemy[i].sprite); window.display(); } return 0; }