Introduction
Goal: Realizzazione in Java del
GAME OF LIFE DI CONWAY
limitatamente al
requisito R1.
Requirements
R1 Realizzare una versione in Java del gioco Life di Conway, come gioco zero-player.
Il gioco consiste nell’introdurre una Griglia di Celle il cui stato (cella ‘viva’ o cella ‘morta’)
evolve come stabilito dallle regole di ConwayLife
R2 L’utente umano deve poter:
- specificare la configurazione iniziale della griglia del gioco
- vedere l’evoluzione del gioco in forma opportuna
(si veda Problema della vista del gioco )
- fermare e far ripartire l’evoluzione del gioco
- pulire (a gioco fermo) la configurazione della griglia del gioco
Requirement analysis
per Cell, dopo aver parlato del committente, formalizzo il seguente modello:
public interface ICell {
void setStatus(boolean v); //la cella è un ente che ha la capacità di modificare il proprio stato interno secondo un booleano
boolean isAlive(); //la cella come entità ha la possibilità di rispondere a una query, una proprietà, restituendo un valore booleano
void switchCellState(); //la cella è un ente che ha la capacità di invertire il proprio stato interno, passando da "viva" a "morta" e viceversa
}
per Grid, invece, formalizzo questo modello:
public interface IGrid {
public int getRowsNum(); //operazione primitiva che permette alla griglia, composta di celle, di comunicare il numero di righe che contiene
public int getColsNum(); //la griglia può comunicare il numero di colonne che contiene
public void setCellValue(int x, int y, boolean state); //la griglia, con un'operazione non primitiva, ha la capacità di modificare lo stato di una cella specifica dato dalle coordinate (x, y)
public ICell getCell(int x, int y); //la griglia può restituire un'oggetto dell'interfaccia ICell corrispondente alle coordinate (x, y)
public boolean getCellValue(int x, int y); //la griglia può rispondere a una query sullo stato della cella (x, y) restituendo true se viva e false se morta
public void reset(); //operazione non primitiva che da alla griglia la capacità di riportare tutte le celle al loro stato iniziale
}
Problem analysis
Test plans
public class CellTest {
private ICell c;
@Before
public void setup() {
System.out.println("ConwayLifeTest | setup");
c = new Cell();
}
@After
public void down() {
System.out.println("ConwayLifeTest | down");
}
@Test
public void testCellAlive() {
System.out.println("ConwayLifeTest | doing alive");
c.setStatus(true);
boolean r = c.isAlive();
assertTrue(r);
}
@Test
public void testCellDead() {
System.out.println("ConwayLifeTest | doing dead");
c.setStatus(false);
boolean r = c.isAlive();
assertTrue( !r);
}
}
public class GridTest {
private static final int nRows=5;
private static final int nCols=5;
private Grid grid;
@Before
public void setup() {
System.out.println("GridTest | setup");
grid= new Grid(nRows,nCols);
}
@After
public void down() {
System.out.println("GridTest | down");
}
@Test
public void testDims() {
System.out.println("testDims ---------------------" );
int nr = grid.getRowsNum();
int nc = grid.getColsNum();
assertTrue( nr==nRows && nc==nCols );
}
@Test
public void testCGridCellValue() {
System.out.println("testCGridCellValue ---------------------" );
grid.setCellValue(0,0,true);
assertTrue( grid.getCellValue(0,0) );
assertFalse( grid.getCellValue(0,1) );
}
@Test
public void testGridRep() {
System.out.println("testGridRep ---------------------" );
System.out.println(""+grid);
assertTrue( grid.toString().startsWith(". . . . ."));
}
@Test
public void testPrintGrid() {
System.out.println("testPrintGrid ---------------------" );
grid.setCellValue(0,0,true);
grid.setCellValue(0,1,true);
grid.setCellValue(0,2,true);
grid.setCellValue(0,3,true);
grid.setCellValue(0,4,true);
//grid.printGrid();
}
}
Project
Testing
Deployment
Maintenance