Szyszka947
ASP NET Core / Lua
Wiek: 19 Na forum: 2580 dni Posty: 288
Piwa : 16
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.