2015-04-26 5 views
2

Я пытаюсь создать игру Жизни Конвея для 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.

Любая помощь или руководство очень ценятся.

ответ

1

Просто простая ошибка в порядке параметров - вы отправляете y, x к calcNeighbors методе, который ожидает x, y.

calcNeighbors(h, w); 
... 

private int calcNeighbors(int x, int y) 
... 

Я предлагаю вам изменить метод для:

private int calcNeighbors(int y, int x) 

Поскольку вы используете ч, ш (у, х) порядок в остальной части кода.

+1

О, мой ... ха-ха, спасибо вам большое. Я знал, что это что-то глупо! Итак, если я изменил метод calcNeighbors на (int y, int x), который должен его решить? – jkosk

+0

Код сам по себе отлично выглядит, и, насколько я могу судить, он должен хорошо работать ... – Dusan

+1

Большое вам спасибо! Вот и все! – jkosk