Проблема с моим клоном Space Invaders - PullRequest
0 голосов
/ 03 апреля 2012

Я тренировал свои навыки, делая клона Space Invaders. Я задал вопрос 2 дня назад, это было решено, и я добился большого прогресса. Мне удалось заставить все работать, коллизии, звук, управление игровым состоянием, движение и т. Д.

Все работает отлично, за исключением того, что захватчики стреляют только из индекса 0 в моем массиве (самый левый захватчик) в каждой строке. Код для этого находится в регионах, начиная со строки 344 в game1.cs.

Захватчики тоже двигаются нормально. Они ударяются о края экрана и сдвигаются на пиксели, а затем продолжают движение в противоположном направлении. Однако, если я уничтожу самых внешних захватчиков, игра все равно распознает мертвых захватчиков.

Таким образом, игра внезапно приказывает захватчику в центре экрана опуститься и в противоположном направлении. Это делает игру немного более динамичной, но это не мой желаемый эффект. Код для перемещения находится там же, начиная со строки 344 в game1.cs

Источник можно скачать здесь: http://db.tt/1AodUfdS

1 Ответ

1 голос
/ 03 апреля 2012

Причина, по которой в большинстве случаев первый захватчик стреляет, заключается в том, что вы каждый раз создаете новый объект Random. Это будет инициализировано с системным временем. Таким образом, в цикле большинство случайных чисел будут равны (потому что системное время почти равно). Вместо этого создайте объект Random в начале вашей игры.

Для вашей второй проблемы: вы всегда используете первый (индекс 0) и последний (индекс 10) захватчик, чтобы определить, должна ли строка менять направление. Вместо этого используйте первый / последний видимый захватчик:

var LeftMost  = Type1Invaders.Where(i => i.invaderVis).FirstOrDefault();
var RightMost = Type1Invaders.Where(i => i.invaderVis).LastOrDefault();

С этим вы можете продолжить тест. Если результат нулевой, то строка пуста.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...