Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
423 changes: 423 additions & 0 deletions sem2/MakarovMV/DinoShuffle/Engage.cpp

Large diffs are not rendered by default.

25 changes: 25 additions & 0 deletions sem2/MakarovMV/DinoShuffle/Engage.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
#pragma once
#include <SFML/Graphics.hpp>
#include <iostream>
#include <vector>
#include <string>
#include <fstream>
#include <ctime>
#include <cmath>
#include <sstream>
#include <algorithm>
#include <cstdlib>
#include "Structure.h"
#include <chrono>
#include <thread>

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<int>& selectedDinos);
void handleDinoSelection(sf::RenderWindow& win, const sf::Vector2i& mousePoz, std::vector<int>& selectedDinos);

87 changes: 87 additions & 0 deletions sem2/MakarovMV/DinoShuffle/Shopp.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
#include "Structure.h"
#include "Shopph.h"
#include <SFML/Graphics.hpp>
#include <fstream>
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>

std::vector<Dino*> 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<int>& 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<std::string> 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<Dino*> 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;
}
}
}
}
}
}

21 changes: 21 additions & 0 deletions sem2/MakarovMV/DinoShuffle/Shopph.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
#pragma once
#include <SFML/Graphics.hpp>
#include <iostream>
#include <vector>
#include <string>
#include <fstream>
#include <ctime>
#include <cmath>
#include <sstream>
#include <algorithm>
#include <cstdlib>

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<int>& selectedDinos);
233 changes: 233 additions & 0 deletions sem2/MakarovMV/DinoShuffle/Structure.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,233 @@
#pragma once
#include <SFML/Graphics.hpp>
#include <iostream>
#include <vector>
#include <string>
#include <fstream>
#include <ctime>
#include <cmath>
#include <sstream>
#include <algorithm>
#include <cstdlib>

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<std::string> getinfo() const {
std::vector<std::string> 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;
}
};
Loading