Zaloguj się by uzyskać pełen dostęp. Nie masz jeszcze konta? Założ je już teraz w kilka sekund.

Wysłany: 2020-05-16, 08:12


Szyszka947

ASP NET Core / Lua






Wiek: 19
Na forum: 2579 dni
Posty: 288

Piwa: 16

Respekt: 90

Witam. Gierka pisana wczoraj 2h, poniewa? chcia?em si? sprawdzi? w sfmlu. Zastanawia mnie fakt, czy da rade napisa? ten projekt optymalniej. Je?li tak, to prosi? bym tu o podpowiedzi, w jaki spos?b. Tak, wiem, ?e to ma?y projekcik, i mog?em wszystko napisa? w jednym pliku cpp, przez co i mo?e bym troch? skr?ci? kod, ale by? by mniej przejrzysty. Oto ca?y kod:
main.cpp
Kod:


#include <iostream>
#include <SFML/Graphics.hpp>
#include <SFML/Window.hpp>
#include <SFML/Audio.hpp>
#include <windows.h>
#include "Paletki.h"
#include "Pilka.h"

using namespace std;
using namespace sf;

int main()
{
srand(time(NULL));
RenderWindow window(VideoMode(1024, 768), "Tomatoes");
window.setFramerateLimit(60);
Event e;
Texture background;
if (!background.loadFromFile("background.jpg"))
{
cout << "Nie odnaleziono background.jpg"<<endl;
}
background.setSmooth(true);
Sprite bg;
bg.setTexture(background);
Music music;
if (!music.openFromFile("nyan.ogg"))
{
cout << "Nie odnaleziono nyan.ogg"<<endl;
}
music.setVolume(100);
music.setLoop(true);
music.play();
Paletka p1(1014, 368);
Paletka p2(10, 368);
Pilka pi(512, 368);
while (window.isOpen())
{
window.pollEvent(e);
if (e.type == Event::Closed)
{
window.close();
}
p1.update2();
p2.update1();
if (p2.kolizja().intersects(pi.kolizja()))
{
pi.zmien_kierunek_dotyka_lewej();
}
else if (p1.kolizja().intersects(pi.kolizja()))
{
pi.zmien_kierunek_dotyka_prawej();
}
pi.update();
window.draw(bg);
window.draw(p1);
window.draw(p2);
window.draw(pi);
window.display();
}
return 0;
}

Paletki.h
Kod:


#include <SFML/Graphics.hpp>
#include <SFML/Window.hpp>
#include <iostream>

using namespace std;
using namespace sf;

class Paletka :public Drawable
{
RectangleShape paletka;
virtual void draw(RenderTarget& target, RenderStates state) const override;
const float paletkaSzerokosc = 80;
const float paletkaWysokosc = 20;
float paletkaPredkosc = 8;
Vector2f predkosc = { paletkaPredkosc, 0.f};
public:
Paletka(float x, float y);
void update1();
void update2();
FloatRect kolizja();
};

Paletki.cpp
Kod:


#include "Paletki.h"
#include <SFML/Graphics.hpp>
#include <SFML/Window.hpp>
#include <iostream>

using namespace std;
using namespace sf;

Paletka::Paletka(float x, float y)
{
paletka.setPosition(x, y);
paletka.setSize({ paletkaSzerokosc, paletkaWysokosc });
paletka.setFillColor(Color::Green);
paletka.setOrigin(paletkaSzerokosc / 2, paletkaWysokosc / 2);
paletka.setRotation(90);
}

void Paletka::draw(RenderTarget& target, RenderStates state) const
{
target.draw(paletka, state);
}

FloatRect Paletka::kolizja()
{
return paletka.getGlobalBounds();
}

void Paletka::update1()
{
predkosc.x = 0;
if (Keyboard::isKeyPressed(Keyboard::S))
{
predkosc.y = paletkaPredkosc;
}
else if (Keyboard::isKeyPressed(Keyboard::W))
{
predkosc.y = -paletkaPredkosc;
}
else
{
predkosc.y = 0;
}
paletka.move(predkosc);
}

void Paletka::update2()
{
predkosc.x = 0;
if (Keyboard::isKeyPressed(Keyboard::Up))
{
predkosc.y = -paletkaPredkosc;
}
else if (Keyboard::isKeyPressed(Keyboard::Down))
{
predkosc.y = paletkaPredkosc;
}
else
{
predkosc.y = 0;
}
paletka.move(predkosc);
}

Pilka.h
Kod:


#include <SFML/Graphics.hpp>
#include <SFML/Window.hpp>
#include <iostream>

using namespace std;
using namespace sf;

class Pilka :public Drawable
{
CircleShape pilka;
const float pilkaPromien = 11;
float pilkaPredkosc = 8;
Vector2f predkosc{ pilkaPredkosc, 0 };
public:
Pilka(float x, float y);
float zmien_kierunek_dotyka_lewej();
float zmien_kierunek_dotyka_prawej();
virtual void draw(RenderTarget& target, RenderStates state) const override;
void update();
FloatRect kolizja();
};

Pilka.cpp
Kod:


#include "Pilka.h"
#include "Paletki.h"
#include <SFML/Graphics.hpp>
#include <SFML/Window.hpp>
#include <iostream>

using namespace std;
using namespace sf;

void Pilka::draw(RenderTarget& target, RenderStates state) const
{
target.draw(pilka, state);
}

Pilka::Pilka(float x, float y)
{
pilka.setPosition(x, y);
pilka.setFillColor(Color::Yellow);
pilka.setRadius(pilkaPromien);
pilka.setOrigin(pilkaPromien, pilkaPromien);
pilka.setOutlineThickness(1.5);
pilka.setOutlineColor(Color::Black);
}

void Pilka::update()
{
if (pilka.getPosition().x >= 1024)
{
cout << "WYGRYWA GRACZ Z PALETKA PO LEWEJ STRONIE!!"<<endl;
system("PAUSE");
}
else if (pilka.getPosition().x <= 0)
{
cout << "WYGRYWA GRACZ Z PALETKA PO PRAWEJ STRONIE!!"<<endl;
system("PAUSE");
}
else if (pilka.getPosition().y >= 768)
{
predkosc.y = -pilkaPredkosc;
}
else if (pilka.getPosition().y <= 0)
{
predkosc.y = pilkaPredkosc;
}
pilka.move(predkosc);
}

FloatRect Pilka::kolizja()
{
return pilka.getGlobalBounds();
}

float Pilka::zmien_kierunek_dotyka_lewej()
{
int kat = (rand() % 16) - 8;
return predkosc.x = pilkaPredkosc, predkosc.y = kat;
}

float Pilka::zmien_kierunek_dotyka_prawej()
{
int kat = (rand() % 16) - 8;
return predkosc.x = -pilkaPredkosc, predkosc.y = kat;
}

Z g?ry dzi?ki za wszelkie propozycje odno?nie optymalizacji, lub innych, czytelniejszych sposob?w do wykonywania tego owego i tamtego.

Postaw piwo autorowi tego posta
 

 
Tagi: dwuosobowa :: gierka
Anonymous





Na forum: 245 dni
Posty: 1



Anonymous Koniecznie zajrzyj na:






Skocz do:  
Wyświetl posty z ostatnich:   
GTAONLINE.PL » JĘZYKI PROGRAMOWANIA » INNE JĘZYKI Odpowiedz do tematu

Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Dodaj temat do Ulubionych
Wersja do druku