witam, kilka dni temu zacząłem zabawe z SFML 2.1 i postanowiłem spróbować napisać proste warcaby.
Mój program aktualnie działa tak, naciska się na jedno z kółek i wyświetlają się dwa prostokąty (pola na które "można" się poruszyć)
No właśnie, można w cudzysłów bo nie wiem jak sprawdzić czy na danym polu znajduje się inne kółko, macie jakieś pomysły jak to zrobić?
Mój kod jest strasznie amatorski, każdy pomysł na ulepszenie z chęcią przyjmę
#include <SFML/Graphics.hpp>
#include <iostream>
void setPosition(sf::Sprite czerwP[8], sf::Sprite czarP[8]);
void drawPawns(sf::Sprite czerwP[8], sf::Sprite czarP[8], sf::RenderWindow * okno);
void ruch(sf::Sprite czerwP[8], sf::Sprite czarP[8], bool setC);
sf::RenderWindow okno(sf::VideoMode(800,600,32), "Warcaby");
int main()
{
sf::Texture tTlo;
sf::Texture tCzer, tCz;
if(!tTlo.loadFromFile("warcabyPlansza.png"))
std::cout << "Blad w ladowaniu planszy" << std::endl;
if(!tCzer.loadFromFile("pCzer.png"))
std::cout << "blad w ladowaniu czerwonego" << std::endl;
if(!tCz.loadFromFile("pCz.png"))
std::cout << "blad w ladowaniu bialego " << std::endl;
sf::Sprite tlo;
sf::Sprite czerwP[8]; //czerwone pionki
sf::Sprite czarP[8]; //biale pionki
tlo.setTexture(tTlo);
for( int i =0;i<8;i++)
{
czerwP[i].setTexture(tCzer);
czarP[i].setTexture(tCz);
std::cout << "Zaladowano tekstury"<<std::endl;
}
//zmniejszyc wielkosc obrazka
//setTexture(czerwP, czarP, tCzer, tCz);
setPosition(czerwP, czarP);
while(okno.isOpen() )
{
sf::Event zdarzenie;
while(okno.pollEvent(zdarzenie) )
{
switch(zdarzenie.type)
{
case sf::Event::Closed:
okno.close();
break;
}
}
std::cout << "X: " << sf::Mouse::getPosition(okno).x << " Y: " <<sf::Mouse::getPosition(okno).y << std::endl;
okno.clear();
okno.draw(tlo);
drawPawns(czerwP, czarP, &okno);
ruch(czerwP, czarP, false);
okno.display();
}
return 0;
}
void setPosition(sf::Sprite czerwP[8], sf::Sprite czarP[8])
{
//CZERWONE:
float pX=5;
float pY = 110;
for(int i=0;i<8;i++)
{
if(i%2==0)
{
czerwP[i].setPosition(pX, 526);
pX+=200;
}
else if(i%2!=0)
{
czerwP[i].setPosition(pY, 451);
pY+=200;
}
}//KONIEC CZERWONE
pX = 5;
pY = 110;
for(int i=0;i<8;i++)
{
//10 3
if(i%2==0){
czarP[i].setPosition(pX, 0);
pX+=200;
}
else if(i%2!=0)
{
czarP[i].setPosition(pY, 75);
pY += 200;
}
}
}
void drawPawns(sf::Sprite czerwP[8], sf::Sprite czarP[8], sf::RenderWindow *okno)
{
for(int i =0;i<8;i++)
{
okno->draw(czerwP[i]);
okno->draw(czarP[i]);
}
}
void ruch(sf::Sprite czerwP[8], sf::Sprite czarP[8], bool setC)
{
int mX = sf::Mouse::getPosition(okno).x;
int mY = sf::Mouse::getPosition(okno).y;
sf::RectangleShape rectL;
sf::RectangleShape rectR;
rectL.setSize(sf::Vector2f(88,65));
rectR.setSize(sf::Vector2f(88,65));
rectL.setOutlineThickness(4);
rectR.setOutlineThickness(4);
rectL.setOutlineColor(sf::Color::Red);
rectR.setOutlineColor(sf::Color::Red);
rectL.setFillColor(sf::Color::Transparent);
rectR.setFillColor(sf::Color::Transparent);
if(sf::Mouse::isButtonPressed(sf::Mouse::Left))
{
for(int i =0; i<8;i++)
{
if((mX > czerwP[i].getPosition().x && mX < czerwP[i].getPosition().x+80) &&
(mY > czerwP[i].getPosition().y && mY < czerwP[i].getPosition().y+70))
{
rectL.setPosition(czerwP[i].getPosition().x-100, czerwP[i].getPosition().y-70);
rectR.setPosition(czerwP[i].getPosition().x+100, czerwP[i].getPosition().y-70);
okno.draw(rectL);
okno.draw(rectR);
if(sf::Keyboard::isKeyPressed(sf::Keyboard::Left))
{
czerwP[i].move(-99,-75);
}else if(sf::Keyboard::isKeyPressed(sf::Keyboard::Right))
{
czerwP[i].move(99, -75);
}
}else if((mX >czarP[i].getPosition().x && mX <czarP[i].getPosition().x+80) &&
(mY > czarP[i].getPosition().y && mY < czarP[i].getPosition().y+70))
{
rectL.setPosition(czarP[i].getPosition().x-100, czarP[i].getPosition().y+78);
rectR.setPosition(czarP[i].getPosition().x+100, czarP[i].getPosition().y+75);
okno.draw(rectL);
okno.draw(rectR);
if(sf::Keyboard::isKeyPressed(sf::Keyboard::Left))
{
czarP[i].move(-99, 75);
}
if(sf::Keyboard::isKeyPressed(sf::Keyboard::Right))
{
czarP[i].move(99,75);
}
}
}
}
}