Я пытаюсь создать игру Жизни Конвея для Android для класса программирования, который я беру. Я не могу получить начальный шаблон, нарисованный на доске, без проблем. У меня возникают проблемы, когда я хочу создать следующее поколение.Игра Жизни Жизни Конвея Применение правил жизненных проблем Android
Вот мой метод создания следующего поколения.
public void createNextGen(){
int neighbors;
int[][] nextGen = new int[HEIGHT][WIDTH];
for(int h = 0; h < HEIGHT; h++){
for(int w = 0; w < WIDTH; w++){
neighbors = calcNeighbors(h, w);
if(currentLife[h][w] == 1){
if(neighbors < 2){
nextGen[h][w] = 0;
} else if (neighbors > 3){
nextGen[h][w] = 0;
} else {
nextGen[h][w] = 1;
}
} else if (currentLife[h][w] == 0){
if(neighbors == 3){
nextGen[h][w] = 1;
} else {
nextGen[h][w] = 0;
}
}
}
}
copyGrid(nextGen, currentLife);
}
Вот мой метод расчета соседей.
private int calcNeighbors(int x, int y){
int total = 0;
for (int h = -1; h <= +1; h++) {
for (int w = -1; w <= +1; w++) {
if (currentLife[(HEIGHT + (y + h)) % HEIGHT][(WIDTH + (x + w)) % WIDTH] != 0) {
total++;
}
}
}
return total;
}
Это начальный шаблон, который начинается с сетки.
public void initGrid() {
resetGrid(currentLife);
currentLife[8][(WIDTH/2) - 1] = 1;
currentLife[8][(WIDTH/2) + 1] = 1;
currentLife[9][(WIDTH/2) - 1] = 1;
currentLife[9][(WIDTH/2) + 1] = 1;
currentLife[10][(WIDTH/2) - 1] = 1;
currentLife[10][(WIDTH/2)] = 1;
currentLife[10][(WIDTH/2) + 1] = 1;
}
Я не думаю, что проблема заключается в моем методе onDraw, поскольку этот первоначальный шаблон отображается так, как ожидалось. Его следующие поколения, которые прыгают повсюду, и я полагаю, что я, должно быть, сделал что-то неправильно в методе createNextGeneration.
Я использую целое число 1 для представления ячейки ALIVE и целое число 0 для представления ячейки DEAD.
Любая помощь или руководство очень ценятся.
О, мой ... ха-ха, спасибо вам большое. Я знал, что это что-то глупо! Итак, если я изменил метод calcNeighbors на (int y, int x), который должен его решить? – jkosk
Код сам по себе отлично выглядит, и, насколько я могу судить, он должен хорошо работать ... – Dusan
Большое вам спасибо! Вот и все! – jkosk