Большое вам спасибо за всю помощь. Очень ценю всех вас. Это удивительное сообществоЗавершено finito
ответ
Две проблемы, которые я заметил:
- Вы должны обновлять сетку только после завершения обновления всех ячеек.
Ваш отступ был выключен, и был
}
неуместен. После повторного форматирования ясно видно, что вы не охватываете все случаи, поэтому есть ячейки, которые не получают новое значение. Например, если ячейка жива, вы обрабатываете только случай, когда у нее есть 2 или 3 соседи, но нетelse
до этогоif
, и поэтому живая ячейка с 1 или 4 или более соседей никогда не обновляется.Вы можете подумать, что каким-то образом в этом случае код попадает в общее «другое», но на самом деле он никогда туда не попадает. Все значения ячейки «живые» или «мертвые». Таким образом, конструкция такой как:
if (cell == aliveColor) { // Handle alive cell } else if (cell == deadColor) { // Handle dead cell } else { // Handle all other cases - but there are none! }
эквивалентен:
if (cell == aliveColor) { // Handle alive cell } else { // Handle dead cell }
оригинальные «еще» никогда не достигаются, потому что нет никакого другого случая, чем «aliveColor» и «deadColor».
Ответ на ваши изменения:
if (cell == aliveColor)
{
if (aliveNeighbors == 2 || aliveNeighbors == 3){
val =1;
grid.setPos(row, column,val);
}
if (aliveNeighbors ==1 || aliveNeighbors == 4){
val = 0;
grid.setPos(row,column,val);
}
}
По какой-то причине, вы, кажется, думаете, что может быть не более 4 соседи каждой ячейки. Посмотрите на пример ячейки в вашей лаборатории документ снова:
⬜︎⬜︎⬛︎ ⬛︎⬜︎⬛︎ ⬛︎⬛︎⬜︎
Эта клетка имеет мертвых соседей и 3 живых из них. Фактически, каждая ячейка может иметь до 8 соседей - диагональные соседи также подсчитываются!
Но ваши правила были:
- Если х жив и имеет ровно 2 или 3 живых соседей, то х доживает до следующего поколения. В противном случае он умирает.
- Если x мертв и имеет ровно 3 живых соседних, то x жив в следующем поколении. В противном случае он остается мертвым
Это иначе переводится непосредственно else
в программировании. Таким образом, вместо того, чтобы иметь второй if
с дополнительным условием (если есть 1, 4,5,6,7 или 8 живых соседей ...), просто дать первый, если else
:
if (aliveNeighbors == 2 || aliveNeighbors == 3) {
grid.setPos(row, column, aliveColor);
} else {
grid.setPos(row, column, deadColor);
}
То же Конечно, дело касается правил для мертвой клетки.
(Обратите внимание, что я также удалил val=1
и просто использовал значение напрямую, val
является излишним. Также я использовал имена, которые объясняют, что такое значение, а не 1 и 0 (что, если вы хотите изменить игру на работу с зеленым и красным)?).
Одна важная вещь, которую я не заметил раньше:
do
{
row = 0;
column = 0;
generation = 0;
while (row <= gridSize-1){
while (column <= gridSize-1){
Вы инициализировать как строку и столбец в ноль перед строки цикла.
Это означает, что в конце первого ряда column
остается gridSize-1
и не имеет нуля. Поэтому на самом деле вы обновляете только одну строку, а затем только последний столбец каждой из других строк.
Оно должно быть:
do
{
row = 0;
generation = 0;
while (row <= gridSize-1){
column = 0;
while (column <= gridSize-1){
Или вы могли бы использовать для цикла:
for (row = 0; row < gridSize; row++) {
for (column = 0; column < gridSize; column++) {
...
Если вы решили сделать это, не забудьте удалить row++
и column++
из внутри чтобы они не увеличивались в два раза.
Мне жаль, что я не понимаю, почему все остальные утверждения не обрабатываются заключительным заявлением else. потому что, если ячейка не соответствует указанным выше критериям, она перескакивает в нижнюю часть инструкции if-else и либо изменяет значение ячейки, либо сохраняет ее мертвой. – jay
@jay Почему вы думаете, что она волшебным образом скачет в нижней части if -это заявление? Оператор 'if-else' проверяет состояние. Если условие истинно, оно выполняет первый блок, если нет, он выполняет блок 'else'.Что бы заставить их перейти на 'else', который не входит в их сферу? – RealSkeptic
Хорошо, я сделал то, что вы сказали, и теперь на моей сетке мигают 2 точки. Я предполагаю, что я все еще что-то испортил, но вы - спасатель, потому что я даже не получил его двигаться. Я собираюсь изменить код выше, чтобы вы могли видеть, что сделал Ive. – jay
Похоже, что вы используете только одна сетку, вам нужна вторая сетка, где поставить ячейки следующего состояние ...
Не будет ли обновление сетки позаботиться об этом? – jay
вы должны использовать первый сетка как есть, применяют правила игры для каждой ячейки (i, j), а затем сохраняют результат в ячейке (i, j) второй сетки. –
в порядке, но как бы я это сделал? мне нужно создать новую в и если да, какой бы он был? Мне жаль, новичок, поэтому я новичок во всем этом – jay
- 1. Как узнать, когда оконное управление завершено завершено
- 2. Когда завершено? На самом деле завершено?
- 3. System.out.println завершено
- 4. UIGestureRecognizer завершено
- 5. Как выполнить задачу/Завершено?
- 6. Состояние UISwipeGestureRecognizer всегда завершено
- 7. Раскадровка - не завершено событие
- 8. jQuery: когда .animate.slideUp завершено
- 9. Обновление строки не завершено
- 10. Найдите, завершено ли CountDownTimer?
- 11. проверка рейк задача завершено?
- 12. Rails - Завершено заполнение задания
- 13. Выполнение WCHAR null завершено
- 14. Проверьте, завершено ли видео
- 15. Изменить определение «Завершено»
- 16. Событие, когда завершено FragmentTransaction
- 17. Предупреждение: ftp_get(): Удаление завершено
- 18. MongoDB erlang соединение завершено
- 19. Отслеживание файла завершено скачать
- 20. Backgroundrb запланированное задание завершено
- 21. Eclipse: JAVAW завершено
- 22. Приложение Chrome не завершено
- 23. Android RotateAnimation Завершено
- 24. Будущее не завершено?
- 25. Объявление завершено неверно
- 26. Видео YTPlayerView завершено iOS
- 27. Как проверить location.href завершено?
- 28. Восстановление завершено EC2 Экземпляр
- 29. QML OnHighligt движение завершено
- 30. Основание 5 не завершено
Трудно сказать без класса «Grid». – RealSkeptic
Я думаю, что мы должны использовать только одну сетку. И мы добавили файл jar в eclipse, чтобы получить доступ к сетке. Вот ссылка на направления. Http: //cobweb.cs.uga.edu/~cs1301/files/Lab07.pdf – jay
Ах. Посмотрите на правила 14 и 15, затем оглянитесь на цикл вашего кода. – RealSkeptic