J'ai passé un certain temps à essayer d'écrire un programme pour mettre en œuvre le jeu de la vie de Conway - Link with more info.. Je suis quelques guides en ligne et a donné la majorité des fonctions. J'ai écrit les méthodes "next" et "neighbors" ci-dessous. Quelqu'un pourrait-il me dire si ce sont de bonnes implémentations, et comment elles pourraient être améliorées s'il vous plaît?S'il vous plaît aider avec ma mise en œuvre de base de Java du jeu de la vie de Conway
Le but de l'exercice était de ne pas modifier ou changer les autres méthodes et d'écrire simplement la méthode suivante! :)
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;
}
}
Personnellement, j'aurais 'tempCells' une variable d'instance de sorte que vous n'allouez pas un nouvel ensemble de cellules pour chaque invocation. Vous n'avez pas besoin de copier les valeurs lorsque vous les définissez pour déterminer si la cellule survit. Mais vu que vous n'étiez pas autorisé à modifier quoi que ce soit d'autre, je suppose que vous n'aviez pas le choix. Sinon, ça me va bien. –
@Jeff M: J'aurais probablement fait pareil, mais strictement c'est une optimisation (prématurée). –
@ user476033 - Vous avez supprimé votre code avec un commentaire de version pour "empêcher les gens de le voler". Je l'ai inversé. Veuillez ne pas supprimer le matériel d'information (et référencé par) la question. D'une part, c'est dans l'histoire que les gens peuvent le voir de toute façon. Pour une deuxième chose, la raison d'être de ce site est de diffuser l'information - et les personnes qui vous aident le font dans l'espoir que cela ne va pas seulement «résoudre vos devoirs», mais aussi aider les autres qui viendront plus tard. Si vous supprimez le code, il ruine la lisibilité à cet effet. – HostileFork