Я вам помогу.
Вот что происходит:
- Вы создаете 5 чисел в массиве
random
. Возможно, вы этого не заметили, но они пронумерованы от 0 до 4 (SFML находится на C ++, а это означает, что массивы начинаются здесь с нуля). - Каждую секунду вы обновляете число, хранящееся в третьемместо вашего массива
random
. - Тогда все пойдет не так: вместо обновления соответствующего числа в массиве
numbers
вы циклически изменяете его с помощью push_back
и erase
.
Поймите меня здесь: push_back
создайте новый элемент в конце вектора, в то время как erase
удаляет элемент из вектора и затем "сортирует вещи", чтобы в индексе вектора не было пробела.
По сути, вы правильно обрабатываете random
, но когда вы пытаетесь обновить number
, вы циклически обходите его. Например:
seconds: 1 2 3 4 5 6
array content: 0 0 0 0 0 0
(vertical) 1 1 1 1 1 1
2 3 4 5 6 7
3 4 5 6 7 8
4 5 6 7 8 9
Я не уверен, насколько ясно я делаю это, но если вы посмотрите на содержимое массива, вы увидите это, стерев и создав новое значение в конце,Вы перебираете позиции [2-4] массива. Вот почему в вашем gif обновляются не все числа, их всего 3.
Очевидным решением было бы прекратить стирание и толкание обратно в массив numbers
. Вы можете обновить его так же, как вы обновили массив random
. Все будет хорошо.
Вот так:
if (second == 1)
{
random.at(2)-=1;
cout << random[2] << endl;
numbers[2].setString(to_string(random[2]));
clock.restart();
}
Веселитесь.