Mam taki kod:
void Engine::run(RenderWindow &window)
{
...//jakis kod
snake.create();
apple.create(&snake);
...//jakis kod
}
void Apple::create(Snake *s)
{
size = 30;
apple.setSize(Vector2f(size, size));
apple.setFillColor(Color::Red);
snake = s;
setNewPosition();
}
void Apple::setNewPosition()
{
srand(time(NULL));
bool repeat;
do
{
repeat = false;
int x = rand() % 24;
int y = rand() % 21;
position.x = 10 + x*size;
position.y = 90 + y*size;
if (snake->getHeadPosition() == position)
repeat = true;
else
{
for (int i = 0; i < snake->getLength(); i++)
{
if (snake->getBodyPosition(i) == position)
repeat = true;
}
}
} while(repeat);
apple.setPosition(position);
}
Jak widać, żeby w metodzie Apple::setNewPosition() mieć dostęp do metod obiektu snake muszę przekazać wskaźnik do tego obiektu w argumencie. Moje pytanie - czy da się zrobić tak, żeby ten obiekt snake był widoczny w klasie Apple i innych klasach jakie jeszcze utworze? Chodzi mi o to, żeby nie trzeba było podawać go jako argumentu.