#include "Game.hpp"
#include<SFML/Graphics.hpp>
#define side 15
#define size 208.5
using namespace sf;
using namespace std;
ZAPIS Game::wprowadzStatek(ZAPIS statek, ConvexShape* sprite) {
ZAPIS pomoc_temp;
pomoc_temp = (ZAPIS)malloc(sizeof(struct zapis));
switch (statek->kierunek) {
case kierunek(up):
pomoc_temp->glowa_y = statek->glowa_y - side * 2;
pomoc_temp->lewy_y = statek->lewy_y - side * 2;
pomoc_temp->prawy_y = statek->prawy_y - side * 2;
pomoc_temp->dol_y = statek->dol_y - side * 2;
pomoc_temp->glowa_x = statek->glowa_x;
pomoc_temp->prawy_x = statek->prawy_x;
pomoc_temp->lewy_x = statek->lewy_x;
pomoc_temp->dol_x = statek->dol_x;
break;
case kierunek(down):
pomoc_temp->glowa_y = statek->glowa_y + side * 2;
pomoc_temp->lewy_y = statek->lewy_y + side * 2;
pomoc_temp->prawy_y = statek->prawy_y + side * 2;
pomoc_temp->dol_y = statek->dol_y + side * 2;
pomoc_temp->glowa_x = statek->glowa_x;
pomoc_temp->prawy_x = statek->prawy_x;
pomoc_temp->lewy_x = statek->lewy_x;
pomoc_temp->dol_x = statek->dol_x;
break;
case kierunek(lewo):
pomoc_temp->glowa_x = statek->glowa_x - side * 2;
pomoc_temp->lewy_x = statek->lewy_x - side * 2;
pomoc_temp->prawy_x = statek->prawy_x - side * 2;
pomoc_temp->dol_x = statek->dol_x - side * 2;
pomoc_temp->glowa_y = statek->glowa_y;
pomoc_temp->lewy_y = statek->lewy_y;
pomoc_temp->prawy_y = statek->prawy_y;
pomoc_temp->dol_y = statek->dol_y;
break;
case kierunek(prawo):
pomoc_temp->glowa_x = statek->glowa_x + side * 2;
pomoc_temp->lewy_x = statek->lewy_x + side * 2;
pomoc_temp->prawy_x = statek->prawy_x + side * 2;
pomoc_temp->dol_x = statek->dol_x + side * 2;
pomoc_temp->glowa_y = statek->glowa_y;
pomoc_temp->lewy_y = statek->lewy_y;
pomoc_temp->prawy_y = statek->prawy_y;
pomoc_temp->dol_y = statek->dol_y;
break;
}
pomoc_temp->kierunek = statek->kierunek;
pomoc_temp->s = sprite;
pomoc_temp->pocz = NULL;
pomoc_temp->kon = statek;
statek->pocz = pomoc_temp;
return pomoc_temp;
}
void Game::Update() {
if (statek->glowa_x > 810)
statek->glowa_x = 0;
if (statek->glowa_x < 0)
statek->glowa_x = 810;
if (statek->glowa_y > 600)
statek->glowa_y = 0;
if (statek->glowa_y < 0)
statek->glowa_y = 600;
statek = wprowadzStatek(statek, &Statek);
count = 0;
}
void Game::Start() {
TworzenieSprita();
statek = (ZAPIS)malloc(sizeof(struct zapis));
window.create(sf::VideoMode(800, 600), "Train", sf::Style::Titlebar | sf::Style::Close);
}
void Game::Run() {
Start();
while (window.isOpen()) {
Render();
if (count == speed) {
Update();
}
count++;
}
}
void Game::Render() {
window.clear(Color::Blue);
statek_pom = statek;
while (statek_pom != NULL) {
(*statek_pom->s).setPoint(0, Vector2f(statek_pom->glowa_x, statek_pom->glowa_y));
(*statek_pom->s).setPoint(1, Vector2f(statek_pom->lewy_x, statek_pom->lewy_y));
(*statek_pom->s).setPoint(2, Vector2f(statek_pom->prawy_x, statek_pom->prawy_y));
(*statek_pom->s).setPoint(3, Vector2f(statek_pom->dol_x, statek_pom->dol_y));
window.draw(*statek_pom->s);
statek_pom = statek_pom->kon;
}
window.display();
}
void Game::TworzenieSprita() {
// create an empty shape
ConvexShape Statek;
// resize it to 5 points
Statek.setPointCount(4);
// define the points
Statek.setPoint(0, sf::Vector2f(0.f, 0.f));
Statek.setPoint(1, sf::Vector2f(150.f, 10.f));
Statek.setPoint(2, sf::Vector2f(120.f, 90.f));
Statek.setPoint(3, sf::Vector2f(30.f, 100.f));
/* this->textur_statek.loadFromFile("resources/trainsprite.png");
Statek.setTexture(textur_statek);
Statek.setScale(sf::Vector2f(0.25, 0.25));
Statek.setOrigin(104.5, 104.5);*/
}
**Game.hpp**
#pragma once
#include<SFML/Graphics.hpp>
using namespace sf;
struct zapis{
float glowa_x, glowa_y,lewy_x,lewy_y,prawy_x,prawy_y,dol_x,dol_y;
int kierunek;
ConvexShape* s;
struct zapis* pocz;
struct zapis* kon;
};
typedef struct zapis* ZAPIS;
enum kierunek {
up, down, lewo, prawo
};
class Game
{
private:ZAPIS statek, statek_enmy,wyspa,wyspa_enmy, statek_pom,cialo;
int speed = 200;
int count = 0;
private:RenderWindow window;
ConvexShape Statek;
Texture textur_statek;
Event event;
private:void Update();
void Render();
void Start();
void TworzenieSprita();
ZAPIS wprowadzStatek(ZAPIS statek, ConvexShape* sprite);
public: void Run();
};
Mam do stowrzenia bitwe morska(nie standardowe statki).Gra ma byc stworzona strukturalnie wiec musze stwrzyc statek w Canvaxshape i nie wiem jak przekazac vector2f do listy .