warcaby wykrywanie na innych polach

0

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);
					}
				}
				}
		

			}
}
2

Mój kod jest strasznie amatorski, każdy pomysł na ulepszenie z chęcią przyjmę

user image
A potem napisz od nowa, tym razem korzystając z czegoś takiego jak obiektowość.

0

Musisz trzymać wewnętrzną reprezentacje aktualnej planszy.

1 użytkowników online, w tym zalogowanych: 0, gości: 1