请帮助我对Conway的生活游戏的基本java实现 [英] Please help with my basic java implementation of Conway's game of life
问题描述
我花了很长时间试图编写一个程序来实现康威的生活游戏 - 链接更多信息。。我正在关注一些在线指南,并获得了大部分功能。我写了下面显示的下一个和邻居方法。谁能告诉我这些是不是很好的实现,以及它们如何变得更好呢?
I have spent quite a while trying to write a program to implement Conway's game of life - Link with more info. . I am following some online guides and was given the majority of the functions. I wrote the "next" and "neighbours" methods shown below. Could anyone tell me if these are good implementations, and how they could be made better please ?
这个练习的目的是不修改或改变任何其他方法然后写下一个方法! :)
The point of the exercise was to not modify or change any of the other methods and just write the next method ! :)
import java.io.*;
import java.util.Random;
public class Life {
private boolean[][] cells;
public static void main( String[] args ) {
Life generation = new Life( );
for (int i = 0; i != 10; i++) {
System.out.println( generation );
generation.next( );
}
}
// Constructors
public void next (){
int SIZE;
SIZE=cells.length;
boolean[][] tempCells = new boolean [SIZE] [SIZE];
for( int i=0; i<SIZE; i++ ) {
for( int j=0; j<SIZE; j++ ) {
tempCells[i][j] = cells[i][j];
}
}
for (int row = 0; row < cells.length ; row++)
{
for (int col = 0 ; col < cells[row].length ; col++)
{
if ( neighbours(row, col) > 3 || neighbours(row, col) < 2 )
{
tempCells[row][col] = false;
}
else if (neighbours(row, col) == 3 )
{
tempCells[row][col] = true;
}
}
}
cells = tempCells;
}
public int neighbours (int row, int col) {
int acc=0;
for ( int i = row -1; i <= row + 1 ; i++)
{
for (int j = col -1 ; j <= col + 1 ; j++)
{
try {
if (cells[i][j]==true && (i != row || j!=col))
{
acc++;
}
} catch ( ArrayIndexOutOfBoundsException f)
{continue;}
}
}
return acc;
}
// Initialises 6 * 6 grid with Glider pattern.
public Life( ) {
final int SIZE = 8;
// Arguably, this should have been a class (static) array.
final int[][] pairs = {{2,4},{3,3},{1,2},{2,2},{3,2}};
cells = new boolean[ SIZE ][ ];
for (int row = 0; row < SIZE; row ++) {
cells[ row ] = new boolean[ SIZE ];
}
for (int pair = 0; pair < pairs.length; pair ++) {
final int row = pairs[ pair ][ 0 ];
final int col = pairs[ pair ][ 1 ];
cells[ row ][ col ] = true;
}
}
// Initialise size * size grid with random cells.
//public Life( int size ) {
//final Random rand = new Random( );
//cells = new boolean[ size ][ ];
//for (int row = 0; row < size; row ++) {
//cells[ row ] = new boolean[ size ];
//for (int col = 0; col < size; col ++) {
//cells[ row ][ col ] = (rand.nextInt( 2 ) == 0);
//}
//}
//}
// Public methods and helper methods.
@Override
public String toString( ) {
String result = "";
for (int row = 0; row < cells.length; row ++) {
final boolean[] column = cells[ row ];
for (int col = 0; col < column.length; col ++) {
result = result + (column[ col ] ? "x" : ".");
}
result = result + "\n";
}
return result;
}
}
推荐答案
你不需要将 cells
的内容复制到 tempCells
(中的第一个嵌套循环下
)。相反,您可以在下一个循环中向 if
- else
添加一个额外的子句。此外,存储来自邻居
的结果对于速度和清晰度来说都是一个好主意。
You don't need to copy the contents of cells
to tempCells
(the first nested loop in next
). Instead, you can add one extra clause to the if
-else
in the next loop. Also, storing the result from neighbours
may be a good idea for both speed and clarity.
for (int row = 0; row < cells.length ; row++)
for (int col = 0 ; col < cells[row].length ; col++) {
int n = neighbours(row,col);
if (n > 3 || n < 2)
tempCells[row][col] = false;
else if (n == 3)
tempCells[row][col] = true;
else
tempCells[row][col] = cells[row][col];
}
(除此之外,看起来很好,但我还没有运行和测试过你的代码。)
(Apart from that, looks fine, but I haven't run and tested your code.)
这篇关于请帮助我对Conway的生活游戏的基本java实现的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!