こんにちは皆、これらはゲームのルールです:未満2ライブ近隣諸国との- 人生のゲーム私は人生のシンプルなコンウェイのゲームをシミュレートしようとしています
任意の生細胞が死にます、過少人口によって引き起こされるように。 2つまたは3つのライブネイバーを持つすべてのライブセルは、次世代に存在します。 混雑しているかのように、4つ以上のライブネイバーが存在するすべてのライブセルが消滅します。 正確に3つのライブネイバーを持つ死んだセルは、まるで再生によって生きているセルになります。
問題は、印刷するために実際のグリッドを変更してからルールを適用する前に以前の値に変更する必要がありますが、このタスクを達成するためのシステムを見つけることができないことです誰かが私を助けることができます。ここ 私のコード:
import java.util.Scanner;
import java.io.*;
class LifeGrid
{
private int[][] grid, newGrid;
private int generation = 0;
public LifeGrid(int x, int y, String filename) throws FileNotFoundException
{
grid = new int[x][y];
newGrid = new int[x][y];
int j = 0;
Scanner scanner = new Scanner(new File(filename));
while(scanner.hasNextLine() && j < x)
{
String line = scanner.nextLine();
for(int i=0; i<line.length() && i<y; i++)
{
if(line.charAt(i) == '*')
grid[j][i] = 1;
else
grid[j][i] = 0;
}
j++;
}
scanner.close();
}
public void show()
{
for(int i=0; i<grid.length; i++)
{
for(int j=0; j<grid[i].length; j++)
{
if(grid[i][j] == 1)
System.out.print("*");
else
System.out.print(" ");
}
System.out.println();
}
System.out.println("Generation:" + generation);
}
//Getter methods
public int getWidth() { return grid[0].length; }
public int getHeight() { return grid.length; }
public int getGeneration() { return this.generation; }
public int getCell(int x, int y) { return grid[x][y]; }
public static void main(String[] args)throws FileNotFoundException
{
LifeGrid life = new LifeGrid(6, 10, args[0]);
life.run();
}
//Check neighbours
public int neighbours(int x, int y)
{
int neighbours = 0;
if(x == 0 && y == 0)
{
if(grid[x][y+1] == 1) {neighbours++;}
if(grid[x+1][y] == 1) {neighbours++;}
if(grid[x+1][y+1] == 1) {neighbours++;}
}
else if(x == 0 && y >= 1 && y < getWidth() -1)
{
if(grid[x][y+1] == 1) {neighbours++;}
if(grid[x][y-1] == 1) {neighbours++;}
if(grid[x+1][y] == 1) {neighbours++;}
if(grid[x+1][y+1] == 1) {neighbours++;}
if(grid[x+1][y-1] == 1) {neighbours++;}
}
else if(x >= 1 && x < getHeight() -1 && y == 0)
{
if(grid[x][y+1] == 1) {neighbours++;}
if(grid[x+1][y] == 1) {neighbours++;}
if(grid[x+1][y+1] == 1) {neighbours++;}
if(grid[x-1][y+1] == 1) {neighbours++;}
}
else if(x == getHeight()-1 && y >= 1 && y < getWidth() - 1)
{
if(grid[x][y+1] == 1) {neighbours++;}
if(grid[x][y-1] == 1) {neighbours++;}
if(grid[x-1][y-1] == 1) {neighbours++;}
if(grid[x-1][y+1] == 1) {neighbours++;}
}
else if(x >=1 && x < getHeight() - 1 && y == getWidth()-1)
{
if(grid[x][y-1] == 1) {neighbours++;}
if(grid[x+1][y] == 1) {neighbours++;}
if(grid[x+1][y-1] == 1) {neighbours++;}
if(grid[x-1][y-1] == 1) {neighbours++;}
}
else if(x == 0 && y == getWidth()-1)
{
if(grid[x][y-1] == 1) {neighbours++;}
if(grid[x+1][y] == 1) {neighbours++;}
if(grid[x+1][y-1] == 1) {neighbours++;}
}
else if(x == getHeight()-1 && y == 0)
{
if(grid[x-1][y] == 1) {neighbours++;}
if(grid[x][y+1] == 1) {neighbours++;}
if(grid[x-1][y+1] == 1) {neighbours++;}
}
else if(x == getHeight()-1 && y == getWidth()-1)
{
if(grid[x][y-1] == 1) {neighbours++;}
if(grid[x-1][y] == 1) {neighbours++;}
if(grid[x-1][y-1] == 1) {neighbours++;}
}
else
{
if(grid[x][y+1] == 1) {neighbours++;}
if(grid[x][y-1] == 1) {neighbours++;}
if(grid[x+1][y] == 1) {neighbours++;}
if(grid[x+1][y+1] == 1) {neighbours++;}
if(grid[x+1][y-1] == 1) {neighbours++;}
if(grid[x-1][y-1] == 1) {neighbours++;}
if(grid[x-1][y+1] == 1) {neighbours++;}
}
return neighbours;
}
public void run()
{
int n;
int[][] old;
for(int i=0; i<grid.length; i++)
{
for(int j=0; j<grid[i].length; j++)
{
n = neighbours(i,j);
if(grid[i][j] == 1)
{
if(n < 2 || n > 3) {generation = 0;}
if(n == 2 || n == 3) {generation = 1;}
}
else
{
if(n == 3) {generation = 1;}
else {generation = 0;}
}
if(generation == 1)
{
old = grid;
newGrid[i][j] = 1;
grid = newGrid;
show();
grid = old;
}
else
{
old = grid;
newGrid[i][j] = 0;
grid = newGrid;
show();
grid = old;
}
}
}
}
}
ファイル:
* * *
予想される出力:
*
*
*
新しいrun()メソッドは次のとおりです。
public void run()
{
int n;
for(int i=0; i<grid.length; i++)
{
for(int j=0; j<grid[i].length; j++)
{
n = neighbours(i,j);
if(grid[i][j] == 1)
{
if(n < 2 || n > 3) {generation = 0;}
if(n == 2 || n == 3) {generation = 1;}
}
else
{
if(n == 3) {generation = 1;}
else {generation = 0;}
}
newGrid[i][j] = generation;
}
}
grid = newGrid.clone();
show();
}
今の代わりになって出力として:
*
*
*
私が手:
*
*
誰かが私はなぜ把握するのに役立つことはできますか?
これは何らかの宿題ですか? – xmoex
少しきれいにする必要があります。 1つの反復に対する期待される出力の例と実際の出力の例が与えられます。 – AHungerArtist
グリッドを印刷する方法を解説します。キーボード入力を使用して次のライフサイクルを生成するだけです。 –