diff --git a/sem2/MakarovMV/DinoShuffle/Engage.cpp b/sem2/MakarovMV/DinoShuffle/Engage.cpp new file mode 100644 index 00000000..a4bb9e16 --- /dev/null +++ b/sem2/MakarovMV/DinoShuffle/Engage.cpp @@ -0,0 +1,423 @@ +#include "Engage.h" +#include "Structure.h" + + +std::vector getAllDinos() { + return { new Tyranosaurus(), new Brahiosaurus(), new Diplodoc(), new Tryceraptops(), new Stegosaurus(), new Pterodactyl() }; +} +std::vector getnums() { + std::vector Dinomass; + std::ifstream Dinostream("./Dinodata.data"); + std::string dino1; + + if (Dinostream.is_open()) { + while (std::getline(Dinostream, dino1)) { + Dinomass.push_back(dino1); + } + Dinostream.close(); + } + + return Dinomass; +} + +std::vector Nummass = getnums(); + +static std::vector owned = {}; +std::vector getDinos() { + std::vector Nummass = getnums(); + std::vector owned; + std::vector alldin = getAllDinos(); + + for (const auto& num : Nummass) { + int index = std::stoi(num); + if (index >= 0 && index < alldin.size()) { + owned.push_back(alldin[index]); + } + } + return owned; +} +std::vector getoppDinos() { + return { new Tyranosaurus(), new Brahiosaurus(), new Diplodoc(), new Tryceraptops(), new Stegosaurus(), new Pterodactyl() }; +} + + +void handleDinoSelection(sf::RenderWindow& win, const sf::Vector2i& mousePoz, std::vector& selectedDinos) { + + std::vector dinosaurus = getDinos(); + + + float x = 350.0f, y = 150.0f; + for (auto& dino : dinosaurus) { + dino->setPosition(x, y); + win.draw(dino->getSprite()); + x += 500.0f; + if (x > win.getSize().x - 200) { + x = 100.0f; + y += 400.0f; + } + } + + + if (sf::Mouse::isButtonPressed(sf::Mouse::Left)) { + for (int i = 0; i < dinosaurus.size(); ++i) { + if (dinosaurus[i]->getSprite().getGlobalBounds().contains(mousePoz.x, mousePoz.y)) { + if ((selectedDinos.size() < 3) && (std::find(selectedDinos.begin(), selectedDinos.end(), i) == selectedDinos.end())) { + selectedDinos.push_back(i); + if (selectedDinos.size() == 3) { + break; + } + } + } + } + } +} + + + + +void Engage(sf::RenderWindow& win, const std::vector& selectedDinos) { + sf::Texture Texforback; + sf::Texture TexEND; + + std::vector dinosaurus = getDinos(); + std::vector oppdinosaurus = getoppDinos(); + std::vector Terra{ Plain, River, Mountain }; + std::vector Tr{ "Plain", "River", "Mountain" }; + float playerX=0; + float playerY = 0; + float opponentX = 0; + float opponentY = 0; + int rnd = 0 + (std::rand() % (4)); + if (rnd == 0){ + if (!Texforback.loadFromFile("img/Field.jpg")) { + std::cerr << "Error loading background texture" << std::endl; + + } + playerX = 400.0f; + playerY = 620.0f; + opponentX = 1200.0f; + opponentY = 620.0f; + } + if (rnd == 1) { + if (!Texforback.loadFromFile("img/River.jpg")) { + std::cerr << "Error loading background texture" << std::endl; + + } + playerX = 400.0f; + playerY = 500.0f; + opponentX = 1200.0f; + opponentY = 500.0f; + } + if (rnd == 2) { + if (!Texforback.loadFromFile("img/Mountains.jpg")) { + std::cerr << "Error loading background texture" << std::endl; + } + playerX = 400.0f; + playerY = 700.0f; + opponentX = 1200.0f; + opponentY = 700.0f; + } + sf::RectangleShape background(sf::Vector2f(1920, 1080)); + background.setTexture(&Texforback); + + + + std::vector dinopool = selectedDinos; + std::vector oppdinopool; + + for (int i = 0; i < 3; ++i) { + int opponentIndex; + do { + opponentIndex = rand() % oppdinosaurus.size(); + } while ((std::find(oppdinopool.begin(), oppdinopool.end(), opponentIndex) != oppdinopool.end()) or (std::find(dinopool.begin(), dinopool.end(), opponentIndex) != dinopool.end())); + oppdinopool.push_back(opponentIndex); + } + + sf::Font juraFont; + if (!juraFont.loadFromFile("Jura-Regular.ttf")) { + std::cerr << "Error loading font\n"; + } + + sf::Font pressStart2PFont; + if (!pressStart2PFont.loadFromFile("PressStart2P-Regular.ttf")) { + std::cerr << "Error loading font\n"; + } + + sf::Text resultText; + resultText.setFont(pressStart2PFont); + resultText.setCharacterSize(50); + resultText.setFillColor(sf::Color::White); + resultText.setPosition(960.0f, 540.0f); + resultText.setStyle(sf::Text::Bold | sf::Text::Underlined); + + sf::Text playerDinoText; + playerDinoText.setFont(juraFont); + playerDinoText.setCharacterSize(30); + playerDinoText.setFillColor(sf::Color::Green); + playerDinoText.setPosition(playerX, playerY - 50.0f); + + sf::Text opponentDinoText; + opponentDinoText.setFont(juraFont); + opponentDinoText.setCharacterSize(30); + opponentDinoText.setFillColor(sf::Color::Red); + opponentDinoText.setPosition(opponentX, opponentY - 50.0f); + + sf::Text TerraText; + TerraText.setFont(juraFont); + TerraText.setCharacterSize(35); + TerraText.setFillColor(sf::Color::Green); + TerraText.setPosition(100, 50); + + bool battleOver = false; + std::string result; + bool playerTurn = true; + + while (win.isOpen() && !battleOver) { + sf::Event event; + while (win.pollEvent(event)) { + if (event.type == sf::Event::Closed) { + win.close(); + } + } + + win.clear(); + TerraText.setString("Terra type: " + Tr[rnd]); + + win.draw(TerraText); + win.draw(background); + + if (!dinopool.empty()) { + Dino* playerDino = dinosaurus[dinopool[0]]; + + playerDino->setPosition(playerX, playerY); + int playerHP = playerDino->getHP() < 0 ? 0 : playerDino->getHP(); + playerDinoText.setString(playerDino->getinfo()[0] + " HP: " + std::to_string(playerHP)); + win.draw(playerDino->getSprite()); + win.draw(playerDinoText); + } + if (!oppdinopool.empty()) { + Dino* oppDino = oppdinosaurus[oppdinopool[0]]; + oppDino->setPosition(opponentX, opponentY); + + + oppDino->getSprite().setScale(-1.0f, 1.0f); + + int opponentHP = oppDino->getHP() < 0 ? 0 : oppDino->getHP(); + opponentDinoText.setString(oppDino->getinfo()[0] + " HP: " + std::to_string(opponentHP)); + + win.draw(oppDino->getSprite()); + win.draw(opponentDinoText); + } + + + win.display(); + + if (!dinopool.empty() && !oppdinopool.empty()) { + Dino* playerDino = dinosaurus[dinopool[0]]; + Dino* oppDino = oppdinosaurus[oppdinopool[0]]; + + if (playerTurn) { + for (float dx = 0; dx <= 150; dx += 5) { + playerDino->setPosition(playerDino->getSprite().getPosition().x + 10, playerDino->getSprite().getPosition().y); + win.clear(); + win.draw(background); + win.draw(TerraText); + win.draw(playerDinoText); + win.draw(opponentDinoText); + win.draw(playerDino->getSprite()); + win.draw(oppDino->getSprite()); + win.display(); + sf::sleep(sf::milliseconds(10)); + } + for (float dx = 0; dx <= 150; dx += 10) { + oppDino->setPosition(oppDino->getSprite().getPosition().x + 3, oppDino->getSprite().getPosition().y); + win.clear(); + win.draw(background); + win.draw(TerraText); + win.draw(playerDinoText); + win.draw(opponentDinoText); + win.draw(playerDino->getSprite()); + win.draw(oppDino->getSprite()); + win.display(); + sf::sleep(sf::milliseconds(10)); + } + for (float dx = 0; dx <= 150; dx += 10) { + oppDino->setPosition(oppDino->getSprite().getPosition().x - 3, oppDino->getSprite().getPosition().y); + win.clear(); + win.draw(background); + win.draw(TerraText); + win.draw(playerDinoText); + win.draw(opponentDinoText); + win.draw(playerDino->getSprite()); + win.draw(oppDino->getSprite()); + win.display(); + sf::sleep(sf::milliseconds(10)); + } + + + oppDino->reduceHP(playerDino->damage(Terra[rnd])); + playerTurn = false; + + int opponentHP = oppDino->getHP() < 0 ? 0 : oppDino->getHP(); + opponentDinoText.setString(oppDino->getinfo()[0] + " HP: " + std::to_string(opponentHP)); + win.draw(opponentDinoText); + + for (float dx = 0; dx <= 150; dx += 5) { + playerDino->setPosition(playerDino->getSprite().getPosition().x - 10, playerDino->getSprite().getPosition().y); + win.clear(); + win.draw(background); + win.draw(TerraText); + win.draw(playerDinoText); + win.draw(opponentDinoText); + win.draw(playerDino->getSprite()); + win.draw(oppDino->getSprite()); + win.display(); + sf::sleep(sf::milliseconds(10)); + } + + if (oppDino->getHP() <= 0) { + oppDino->resetHP(); + oppdinopool.erase(oppdinopool.begin()); + } + } + else { + for (float dx = 0; dx <= 150; dx += 5) { + oppDino->setPosition(oppDino->getSprite().getPosition().x - 10, oppDino->getSprite().getPosition().y); + win.clear(); + win.draw(background); + win.draw(TerraText); + win.draw(playerDinoText); + win.draw(opponentDinoText); + win.draw(playerDino->getSprite()); + win.draw(oppDino->getSprite()); + win.display(); + sf::sleep(sf::milliseconds(10)); + } + for (float dx = 0; dx <= 150; dx += 10) { + playerDino->setPosition(playerDino->getSprite().getPosition().x - 3, playerDino->getSprite().getPosition().y); + win.clear(); + win.draw(background); + win.draw(TerraText); + win.draw(playerDinoText); + win.draw(opponentDinoText); + win.draw(playerDino->getSprite()); + win.draw(oppDino->getSprite()); + win.display(); + sf::sleep(sf::milliseconds(10)); + } + for (float dx = 0; dx <= 150; dx += 10) { + playerDino->setPosition(playerDino->getSprite().getPosition().x + 3, playerDino->getSprite().getPosition().y); + win.clear(); + win.draw(background); + win.draw(TerraText); + win.draw(playerDinoText); + win.draw(opponentDinoText); + win.draw(playerDino->getSprite()); + win.draw(oppDino->getSprite()); + win.display(); + sf::sleep(sf::milliseconds(10)); + } + + playerDino->reduceHP(oppDino->damage(Terra[rnd])); + playerTurn = true; + + int playerHP = playerDino->getHP() < 0 ? 0 : playerDino->getHP(); + playerDinoText.setString(playerDino->getinfo()[0] + " HP: " + std::to_string(playerHP)); + win.draw(playerDinoText); + + for (float dx = 0; dx <= 150; dx += 5) { + oppDino->setPosition(oppDino->getSprite().getPosition().x + 10, oppDino->getSprite().getPosition().y); + win.clear(); + win.draw(background); + win.draw(TerraText); + win.draw(playerDinoText); + win.draw(opponentDinoText); + win.draw(playerDino->getSprite()); + win.draw(oppDino->getSprite()); + win.display(); + sf::sleep(sf::milliseconds(10)); + } + if (playerDino->getHP() <= 0) { + playerDino->resetHP(); + dinopool.erase(dinopool.begin()); + } + } + } + + sf::sleep(sf::seconds(1)); + + if (!dinopool.empty() && oppdinopool.empty()) { + result = "YOU WIN.\n\nYOU'VE GAINED\n\n 500 DINOBUCKS!!!"; + if (!TexEND.loadFromFile("img/Field.jpg")) { + std::cerr << "Error loading background texture" << std::endl; + + } + + int Moneyint = 0; + std::ifstream money("./moneydata.data"); + std::string balance; + + if (money.is_open()) { + while (std::getline(money, balance)) { + Moneyint = std::stoi(balance); + } + money.close(); + } + std::ofstream filemon("moneydata.data", std::ios::trunc); + if (filemon.is_open()) { + + Moneyint = Moneyint+500; + filemon << Moneyint; + + filemon.close(); + } + battleOver = true; + } + else if (dinopool.empty() && !oppdinopool.empty()) { + result = "YOU LOSE.\n\nGOT NOTHING."; + if (!TexEND.loadFromFile("img/Mountains.jpg")) { + std::cerr << "Error loading background texture" << std::endl; + + } + + battleOver = true; + } + } + + if (battleOver) { + resultText.setString(result); + while (win.isOpen()) { + sf::Event event; + while (win.pollEvent(event)) { + if (event.type == sf::Event::Closed) { + win.close(); + } + } + + win.clear(); + sf::RectangleShape endbackground(sf::Vector2f(1920, 1080)); + endbackground.setTexture(&TexEND); + win.draw(endbackground); + win.draw(resultText); + + + win.display(); + sf::sleep(sf::seconds(2)); + break; + } + } + + for (auto& dino : dinosaurus) { + delete dino; + } + for (auto& oppDino : oppdinosaurus) { + delete oppDino; + } +} + + + + + + + diff --git a/sem2/MakarovMV/DinoShuffle/Engage.h b/sem2/MakarovMV/DinoShuffle/Engage.h new file mode 100644 index 00000000..6b825c1f --- /dev/null +++ b/sem2/MakarovMV/DinoShuffle/Engage.h @@ -0,0 +1,25 @@ +#pragma once +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "Structure.h" +#include +#include + +using std::cin; +using std::cout; +using std::string; +using std::vector; +using std::fstream; +using std::ifstream; + +void Engage(sf::RenderWindow& win, const std::vector& selectedDinos); +void handleDinoSelection(sf::RenderWindow& win, const sf::Vector2i& mousePoz, std::vector& selectedDinos); + diff --git a/sem2/MakarovMV/DinoShuffle/Shopp.cpp b/sem2/MakarovMV/DinoShuffle/Shopp.cpp new file mode 100644 index 00000000..503a5a7f --- /dev/null +++ b/sem2/MakarovMV/DinoShuffle/Shopp.cpp @@ -0,0 +1,87 @@ +#include "Structure.h" +#include "Shopph.h" +#include +#include +#include +#include +#include +#include + +std::vector ShopDinos() { + return { new Tyranosaurus(), new Brahiosaurus(), new Diplodoc(), new Tryceraptops(), new Stegosaurus(), new Pterodactyl() }; +} + +void handleShop(sf::RenderWindow& win, const sf::Vector2i mousePoz, std::vector& selectedDinos) { + sf::Font juraFont; + if (!juraFont.loadFromFile("Jura-Regular.ttf")) { + std::cerr << "Error loading font\n"; + } + + int Moneyint = 0; + std::ifstream money("./moneydata.data"); + std::string balance; + + if (money.is_open()) { + while (std::getline(money, balance)) { + Moneyint = std::stoi(balance); + } + money.close(); + } + + std::vector NmDinos; + std::ifstream Dinostream("./Dinodata.data"); + std::string dino1; + + if (Dinostream.is_open()) { + while (std::getline(Dinostream, dino1)) { + NmDinos.push_back(dino1); + } + Dinostream.close(); + } + + sf::Text MoneyText; + MoneyText.setFont(juraFont); + MoneyText.setCharacterSize(30); + MoneyText.setFillColor(sf::Color::White); + MoneyText.setPosition(1600, 80); + MoneyText.setString("Money: " + std::to_string(Moneyint)); + win.draw(MoneyText); + + static std::vector dinosaurus = ShopDinos(); + + float x = 350.0f, y = 150.0f; + for (auto& dino : dinosaurus) { + dino->setPosition(x, y); + win.draw(dino->getSprite()); + + sf::Text dinoText; + dinoText.setFont(juraFont); + dinoText.setCharacterSize(20); + dinoText.setFillColor(sf::Color::White); + dinoText.setString(dino->getinfo()[0] + " HP: " + std::to_string(dino->getHP())); + dinoText.setPosition(x, y + dino->getSprite().getGlobalBounds().height + 10); + win.draw(dinoText); + + x += 500.0f; + if (x > win.getSize().x - 200) { + x = 400.0f; + y += 400.0f; + } + } + + if (sf::Mouse::isButtonPressed(sf::Mouse::Left)) { + for (int i = 0; i < dinosaurus.size(); ++i) { + if (dinosaurus[i]->getSprite().getGlobalBounds().contains(mousePoz.x, mousePoz.y)) { + int cost = dinosaurus[i]->getCost(); + std::string nm = std::to_string(dinosaurus[i]->getNum()); + if ((selectedDinos.size() < 1) && (Moneyint >= cost) && (std::find(NmDinos.begin(), NmDinos.end(), nm) == NmDinos.end())) { + selectedDinos.push_back(i); + if (selectedDinos.size() == 1) { + break; + } + } + } + } + } +} + diff --git a/sem2/MakarovMV/DinoShuffle/Shopph.h b/sem2/MakarovMV/DinoShuffle/Shopph.h new file mode 100644 index 00000000..638114d8 --- /dev/null +++ b/sem2/MakarovMV/DinoShuffle/Shopph.h @@ -0,0 +1,21 @@ +#pragma once +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using std::cin; +using std::cout; +using std::string; +using std::vector; +using std::fstream; +using std::ifstream; + + +void handleShop(sf::RenderWindow& win, const sf::Vector2i mousePoz, std::vector& selectedDinos); \ No newline at end of file diff --git a/sem2/MakarovMV/DinoShuffle/Structure.h b/sem2/MakarovMV/DinoShuffle/Structure.h new file mode 100644 index 00000000..ae3facc6 --- /dev/null +++ b/sem2/MakarovMV/DinoShuffle/Structure.h @@ -0,0 +1,233 @@ +#pragma once +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using std::cin; +using std::cout; +using std::string; +using std::vector; +using std::fstream; +using std::ifstream; + +enum Terrain { Plain, River, Mountain }; + +class Dino { +protected: + int STR; + int DEX; + int INT; + int HP = 100; + std::string name; + int cost; + int num; + sf::Texture texture; + sf::Sprite sprite; +public: + Dino(const std::string& imagePath) { + if (!texture.loadFromFile(imagePath)) { + std::cerr << "Error loading image\n"; + } + sprite.setTexture(texture); + } + + virtual std::vector getinfo() const { + std::vector vec{ name, std::to_string(cost), std::to_string(num), std::to_string(HP), std::to_string(INT), std::to_string(STR), std::to_string(DEX) }; + return vec; + } + + sf::Sprite getSprite() const { + return sprite; + } + + int getCost() const { + return cost; + } + + int getNum() const { + return num; + } + + std::string getName() const { + return name; + } + + virtual int damage(Terrain terrain) = 0; + + int getHP() const { + return HP; + } + + void setHP(int hp) { + HP = hp; + } + + void reduceHP(int amount) { + HP -= amount; + } + + void setPosition(float x, float y) { + sprite.setPosition(x, y); + } + + void resetHP() { + HP = 100; + } +}; + +class Tyranosaurus : public Dino { +public: + Tyranosaurus() : Dino("tyranosaurus.png") { + STR = 20; + DEX = 10; + INT = 15; + num = 0; + cost = 500; + name = "Tyranosaurus"; + } + + int damage(Terrain terrain) override { + if (terrain == Plain) { + return 2 * STR; + } + else if (terrain == River) { + return DEX; + } + else if (terrain == Mountain) { + return INT; + } + return 0; + } +}; + +class Brahiosaurus : public Dino { +public: + Brahiosaurus() : Dino("brahiosaurus.png") { + STR = 15; + DEX = 20; + INT = 10; + num = 1; + cost = 500; + name = "Brahiosaurus"; + } + + int damage(Terrain terrain) override { + if (terrain == River) { + return 2 * DEX; + } + else if (terrain == Plain) { + return STR; + } + else if (terrain == Mountain) { + return INT; + } + return 0; + } +}; + +class Diplodoc : public Dino { +public: + Diplodoc() : Dino("diplodoc.png") { + STR = 10; + DEX = 15; + INT = 20; + num = 2; + cost = 500; + name = "Diplodoc"; + } + + int damage(Terrain terrain) override { + if (terrain == River) { + return 2 * DEX; + } + else if (terrain == Plain) { + return STR; + } + else if (terrain == Mountain) { + return INT; + } + return 0; + } +}; + +class Tryceraptops : public Dino { +public: + Tryceraptops() : Dino("tryceraptops.png") { + STR = 20; + DEX = 10; + INT = 15; + num = 3; + cost = 500; + name = "Tryceraptops"; + } + + int damage(Terrain terrain) override { + if (terrain == Mountain) { + return 2 * INT; + } + else if (terrain == River) { + return DEX; + } + else if (terrain == Plain) { + return STR; + } + return 0; + } +}; + +class Stegosaurus : public Dino { +public: + Stegosaurus() : Dino("stegosaurus.png") { + STR = 20; + DEX = 15; + INT = 10; + num = 4; + cost = 500; + name = "Stegosaurus"; + } + + int damage(Terrain terrain) override { + if (terrain == Plain) { + return 2 * STR; + } + else if (terrain == River) { + return DEX; + } + else if (terrain == Mountain) { + return INT; + } + return 0; + } +}; + +class Pterodactyl : public Dino { +public: + Pterodactyl() : Dino("pterodactyl.png") { + STR = 10; + DEX = 15; + INT = 20; + num = 5; + cost = 500; + name = "Pterodactyl"; + } + + int damage(Terrain terrain) override { + if (terrain == Mountain) { + return 2 * INT; + } + else if (terrain == River) { + return DEX; + } + else if (terrain == Plain) { + return STR; + } + return 0; + } +}; \ No newline at end of file diff --git a/sem2/MakarovMV/DinoShuffle/filedata.h b/sem2/MakarovMV/DinoShuffle/filedata.h new file mode 100644 index 00000000..11805d53 --- /dev/null +++ b/sem2/MakarovMV/DinoShuffle/filedata.h @@ -0,0 +1,52 @@ +#pragma once +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using std::cin; +using std::cout; +using std::string; +using std::vector; +using std::fstream; +using std::ifstream; +std::vector getdinos() { + std::vector Dinomass; + std::ifstream Dinostream("./Dinodata.data"); + std::string dino1; + + if (Dinostream.is_open()) { + while (std::getline(Dinostream, dino1)) { + Dinomass.push_back(dino1); + } + Dinostream.close(); + } + + return Dinomass; +} + +std::vector NmDinos = getdinos(); + +int getmoney() { + int Moneyint; + std::vector inf; + std::ifstream money; + money.open("./moneydata.data"); + std::string balance; + + if (money.is_open()) { + while (std::getline(money, balance)) { + Moneyint = stoi(balance); + } + } + + return Moneyint; +} + +int Mnny = getmoney(); \ No newline at end of file diff --git a/sem2/MakarovMV/DinoShuffle/main.cpp b/sem2/MakarovMV/DinoShuffle/main.cpp new file mode 100644 index 00000000..ebb9117d --- /dev/null +++ b/sem2/MakarovMV/DinoShuffle/main.cpp @@ -0,0 +1,245 @@ +#include +#include +#include +#include +#include +#include "Engage.h" +#include "Shopph.h" +#include "filedata.h" + +using std::cin; +using std::cout; +using std::string; +using std::vector; +using std::fstream; + +enum GameState { MainMenu, DinoSelection, Battle, Shop}; + +std::vector MainDinos() { + return { new Tyranosaurus(), new Brahiosaurus(), new Diplodoc(), new Tryceraptops() , new Stegosaurus(), new Pterodactyl() }; +} + +sf::Text createText(const std::string& content, const sf::Font& font, int size, sf::Color color, sf::Vector2f position) { + sf::Text text; + text.setFont(font); + text.setString(content); + text.setCharacterSize(size); + text.setFillColor(color); + text.setPosition(position); + return text; +} + +sf::RectangleShape createButton(sf::Vector2f size, sf::Color fillColor, sf::Color outlineColor, float outlineThickness, sf::Vector2f position) { + sf::RectangleShape button(size); + button.setFillColor(fillColor); + button.setOutlineColor(outlineColor); + button.setOutlineThickness(outlineThickness); + button.setPosition(position); + return button; +} + +int main() { + + sf::RenderWindow win(sf::VideoMode(1920, 1080), "DinoGame"); + sf::Texture Texforback; + + if (!Texforback.loadFromFile("img/dinowrld.jpg")) { + std::cerr << "Error loading background texture" << std::endl; + return -1; + } + + sf::Font dinosaurFont; + if (!dinosaurFont.loadFromFile("DinosaurJNL.ttf")) { + std::cerr << "Error loading font\n"; + } + + sf::Font rockSaltFont; + if (!rockSaltFont.loadFromFile("RockSalt-Regular.ttf")) { + std::cerr << "Error loading font\n"; + } + + sf::Font russoOneFont; + if (!russoOneFont.loadFromFile("RussoOne-Regular.ttf")) { + std::cerr << "Error loading font\n"; + } + + sf::Font pressStart2PFont; + if (!pressStart2PFont.loadFromFile("PressStart2P-Regular.ttf")) { + std::cerr << "Error loading font\n"; + } + + sf::Font juraFont; + if (!juraFont.loadFromFile("Jura-Regular.ttf")) { + std::cerr << "Error loading font\n"; + } + + sf::Font Prehis; + if (!Prehis.loadFromFile("Prehistoric Caveman.ttf")) { + std::cerr << "Error loading font\n"; + } + + sf::RectangleShape background(sf::Vector2f(1920, 1080)); + background.setTexture(&Texforback); + + sf::RectangleShape buttonStart = createButton(sf::Vector2f(400, 100), sf::Color(34, 139, 34), sf::Color::Black, 4, sf::Vector2f(100, 350)); + sf::RectangleShape buttonShop = createButton(sf::Vector2f(400, 100), sf::Color(255, 215, 0), sf::Color::Black, 4, sf::Vector2f(100, 500)); + sf::RectangleShape buttonExit = createButton(sf::Vector2f(120, 120), sf::Color(139, 0, 0), sf::Color::Black, 4, sf::Vector2f(1700, 850)); + sf::RectangleShape buttonRestart = createButton(sf::Vector2f(400, 100), sf::Color(0, 0, 139), sf::Color::Black, 4, sf::Vector2f(100, 650)); + sf::Text startBattleText = createText("Start Battle", rockSaltFont, 40, sf::Color::White, sf::Vector2f(130, 375)); + sf::Text openShopText = createText("Open Shop", rockSaltFont, 40, sf::Color::Black, sf::Vector2f(163, 525)); + sf::Text exitText = createText("Exit", rockSaltFont, 40, sf::Color::White, sf::Vector2f(1710, 880)); + sf::Text restartText = createText("Restart", rockSaltFont, 40, sf::Color::White, sf::Vector2f(190, 675)); + sf::Text titleText = createText("DinoShuffle", Prehis, 60, sf::Color::Green, sf::Vector2f(130, 120)); + sf::RectangleShape buttonBattle = createButton(sf::Vector2f(200, 50), sf::Color(34, 139, 34), sf::Color::Black, 4, sf::Vector2f(850, 900)); + sf::Text START = createText("ENGAGE", pressStart2PFont, 20, sf::Color::White, sf::Vector2f(888, 916)); + sf::RectangleShape buybutton = createButton(sf::Vector2f(200, 50), sf::Color(255, 215, 0), sf::Color::Black, 4, sf::Vector2f(850, 900)); + sf::Text BUY = createText("BUY", pressStart2PFont, 20, sf::Color::White, sf::Vector2f(916, 916)); + sf::RectangleShape buttonBack = createButton(sf::Vector2f(200, 50), sf::Color(0, 0, 139), sf::Color::Black, 4, sf::Vector2f(1200, 900)); + sf::Text BACK = createText("BACK", pressStart2PFont, 20, sf::Color::White, sf::Vector2f(1258, 916)); + sf::Text selectedDinosText = createText("Selected Dinos: 0/3", juraFont, 50, sf::Color::White, sf::Vector2f(100, 50)); + sf::Text MoneyText = createText("Money: " + std::to_string(Mnny), juraFont, 50, sf::Color::Yellow, sf::Vector2f(1500, 130)); + + GameState state = MainMenu; + + vector selectedDinos; + std::vector OwnedDinos; + + static std::vector MainD = MainDinos(); + + while (win.isOpen()) { + int Mnny = getmoney(); + sf::Vector2i mousePoz = sf::Mouse::getPosition(win); + sf::Event event; + while (win.pollEvent(event)) { + if (event.type == sf::Event::Closed) + win.close(); + + if (event.type == sf::Event::MouseButtonPressed && event.mouseButton.button == sf::Mouse::Left) { + if (state == MainMenu) { + if (buttonStart.getGlobalBounds().contains(mousePoz.x, mousePoz.y)) { + cout << "Start Battle" << std::endl; + state = DinoSelection; + } + if (buttonShop.getGlobalBounds().contains(mousePoz.x, mousePoz.y)) { + cout << "Open Shop" << std::endl; + state = Shop; + } + if (buttonExit.getGlobalBounds().contains(mousePoz.x, mousePoz.y)) { + win.close(); + } + if (buttonRestart.getGlobalBounds().contains(mousePoz.x, mousePoz.y)) { + std::ofstream file("Dinodata.data", std::ios::trunc); + if (file.is_open()) { + + file << "0" << "\n" << "1" << "\n" << "2" << "\n"; + + file.close(); + } + std::ofstream filemon("moneydata.data", std::ios::trunc); + if (filemon.is_open()) { + + filemon << "500"; + + filemon.close(); + } + state = MainMenu; + } + } + else if (state == DinoSelection) { + if (buttonBattle.getGlobalBounds().contains(mousePoz.x, mousePoz.y)) { + state = Battle; + } + if (buttonBack.getGlobalBounds().contains(mousePoz.x, mousePoz.y)) { + selectedDinos.clear(); + state = MainMenu; + } + } + else if (state == Shop) { + if (buttonBack.getGlobalBounds().contains(mousePoz.x, mousePoz.y)) { + selectedDinos.clear(); + state = MainMenu; + } + if (buybutton.getGlobalBounds().contains(mousePoz.x, mousePoz.y)) { + if (!selectedDinos.empty()) { + std::ofstream file("Dinodata.data", std::ios::app); + if (file.is_open()) { + for (int index : selectedDinos) { + file << MainD[index]->getNum()<<"\n"; + } + file.close(); + } + + std::ofstream filemon("moneydata.data", std::ios::trunc); + if (filemon.is_open()) { + for (int index : selectedDinos) { + Mnny = (Mnny - (MainD[index]->getCost())); + filemon << Mnny; + } + filemon.close(); + } + + + selectedDinos.clear(); + } + + state = MainMenu; + } + } + + } + } + + win.clear(); + win.draw(background); + + if (state == MainMenu) { + MoneyText.setString("Money: " + std::to_string(Mnny)); + + win.draw(titleText); + win.draw(MoneyText); + win.draw(buttonStart); + win.draw(buttonShop); + win.draw(buttonExit); + win.draw(buttonRestart); + win.draw(startBattleText); + win.draw(openShopText); + win.draw(exitText); + win.draw(restartText); + } + else if (state == DinoSelection) { + handleDinoSelection(win, mousePoz, selectedDinos); + selectedDinosText.setString("Selected Dinos: " + std::to_string(selectedDinos.size()) + "/3"); + win.draw(selectedDinosText); + win.draw(buttonBack); + win.draw(BACK); + if (selectedDinos.size() == 3) { + win.draw(buttonBattle); + win.draw(START); + + } + } + else if (state == Battle) { + Engage(win, selectedDinos); + + state = MainMenu; + selectedDinos.clear(); + } + else if (state == Shop) { + selectedDinosText.setString("Selected Dinos: " + std::to_string(selectedDinos.size()) + "/1"); + win.draw(selectedDinosText); + handleShop(win, mousePoz, selectedDinos); + win.draw(buttonBack); + win.draw(BACK); + if (selectedDinos.size() == 1) { + win.draw(buybutton); + win.draw(BUY); + } + + + } + win.display(); + } + return 0; +} + + diff --git a/sem2/MakarovMV/HW3.cpp b/sem2/MakarovMV/HW3.cpp deleted file mode 100644 index cd35e698..00000000 --- a/sem2/MakarovMV/HW3.cpp +++ /dev/null @@ -1,58 +0,0 @@ -#include -#include -#include -#include -#include - -int main() { - - sf::RenderWindow window(sf::VideoMode(800, 600), "DeathButton"); - - sf::Font font; - if (!font.loadFromFile("arial.ttf")) { - std::cerr << "Font error\n"; - return 1; - } - int c = 0; - sf::Text message("ShutDown", font, 30); - message.setFillColor(sf::Color::White); - message.setPosition(330, 280); - - sf::CircleShape button(100); - button.setFillColor(sf::Color(255, 0, 0)); - button.setPosition(297, 200); - button.setOutlineThickness(10); - button.setOutlineColor(sf::Color(200, 200, 200)); - - while (window.isOpen()) { - sf::Event event; - while (window.pollEvent(event)) { - if (event.type == sf::Event::Closed) - window.close(); - if (event.type == sf::Event::MouseButtonPressed && event.mouseButton.button == sf::Mouse::Left) { - int delay = (std::rand() % 51 + 10) * 1000; - - sf::Clock timer; - while (timer.getElapsedTime().asMilliseconds() < delay) { - - if (c/1000 < timer.getElapsedTime().asMilliseconds()/1000) { - std::system("cls"); - std::cout << "Timer has been set. Shutdown in " << (delay - timer.getElapsedTime().asMilliseconds()) / 1000 << " seconds.\n"; - sf::Event event; - while (window.pollEvent(event)) { - if (event.type == sf::Event::Closed) - window.close(); - } - c = timer.getElapsedTime().asMilliseconds(); - } - } - std::system("shutdown /s"); - } - } - window.clear(); - window.draw(button); - window.draw(message); - window.display(); - } - return 0; -} diff --git a/sem2/MakarovMV/MiniHomeWork1.cpp b/sem2/MakarovMV/MiniHomeWork1.cpp deleted file mode 100644 index 5c87ddc1..00000000 --- a/sem2/MakarovMV/MiniHomeWork1.cpp +++ /dev/null @@ -1,18 +0,0 @@ - -#include -#include -#include -#include - -int main() -{ - std::vector words = { "apple", "banana", "orange", "afghanistan" }; - std::string a; - std::cout << "Enter a character: "; - std::cin >> a; - int c = std::count_if(words.begin(), words.end(), [&](std::string x) {return x[0] == a[0];}); - std::cout << c << std::endl; - - return 0; -} -