Hej,
z powodu tematu na forum, który dotyczył umiejętności zrobienia Snake'a, zaklepałem sobie na szybko prostą, konsolową implementacje. Zachciało mi się jednak trochę rozbudować projekt i dodałem parę rzeczy.
Potrzebowałem między innymi metody, która mi losowo ustawi miejsce owocu, więc napisałem coś takiego.
void setFruit()
{
using randoms = std::uniform_int_distribution<std::mt19937::result_type>;
std::random_device rd;
std::mt19937 rng(rd());
randoms dist(1, width - 1);
randoms dist2(1, height - 1);
auto x1 = dist(rng);
auto x2 = dist2(rng);
fruitX = static_cast<int>(x1);
fruitY = static_cast<int>(x2);
}
Niestety nie rozwiązało to problemu do końca, ponieważ czasem owoc pojawiał się w miejscu, gdzie aktualnie znajdował się wąż(dajmy na to wąż to - - - - -, a owoc &, czasem po losowaniu pojawiało się coś takiego --&----.
Skorzystałem z biblioteki standardowej i pojawiło się coś takiego:
void setFruit()
{
using randoms = std::uniform_int_distribution<std::mt19937::result_type>;
std::random_device rd;
std::mt19937 rng(rd());
randoms dist(1, width - 1);
randoms dist2(1, height - 1);
auto x1 = dist(rng);
auto x2 = dist2(rng);
while (std::find(tailsX.begin(), tailsX.end(), x1) != tailsX.end())
x1 = dist(rng);
while (std::find(tailsY.begin(), tailsY.end(), x2) != tailsY.end())
x2 = dist2(rng);
fruitX = static_cast<int>(x1);
fruitY = static_cast<int>(x2);
}
powyższego bugu już nie ma i losowanie odbywa się prawidłowo - natomiast teraz w pewnym momencie program się wysypuje i gra stoi w miejscu, wciskanie dowolnego klawisza sprawia, że jest on wypisany na konsoli, a wąż pozostaje bez ruchu. Zastanawiam się gdzie może tkwić problem?
Oczywiśćie tailsX i tailsY to std::vector.