ConwayLife Sprint1

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

ICell

Dopo aver parlato col committente, formalizzo il seguente modello:

Cosa intende il committente con la parola "Cell"?

public interface ICell {
	void setStatus(boolean v);	//ha la capacità di modificare il proprio stato interno con un valore booleano che può essere true o false 
	boolean isAlive();		//ha la capacità di rispondere alla "query" isAlive con un valore booleano (se è viva o morta)
	void switchCellState();		//ha la capacità di cambiare lo stato
}

Test Plan:

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);
	}	
}

IGrid

Cosa intende il committente con la parola "Grid"?
E' un'entità composta da più ICell, ha due dimensioni
Quali sono queste dimensioni? Righe e colonne

public interface IGrid {
	  public int getRowsNum();					//[primitiva] ha la capacità di restituire il numero di righe
	  public int getColsNum();					//[primitiva] ha la capacità di restituire il numero di colonne
	  public void setCellValue(int x, int y, boolean state);	//[non primitiva] ha la capacità di cambiare il valore di una determinata cella
	  public ICell getCell(int x, int y);				//[primitiva] ha la capacità di restituire la ICell sapendo le sue coordinate
	  public boolean getCellValue(int x, int y);			//[non primitiva] ha la capacità di restituire il valore della cella sapendo le sue coordinate
	  public void reset();						//[non primitiva] ha la capacità di cambiare lo stato di tutte le ICell in "dead"
}

Test Plan:

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();
	}

}

LifeInterface

E' un'entità composta da una IGrid

public interface LifeInterface {
	
    void nextGeneration();	//Calcola l'evoluzione dello stato alla generazione successiva 
    boolean isAlive(int row, int col);	//Restituisce lo stato di una cella specifica    
    void setCell(int row, int col, boolean alive);	//Imposta lo stato di una cella
	ICell getCell(int x, int y);	//Restituisce la cell
	Grid getGrid();	//Restituisce la grid
	void resetGrids();	//pulisce


    /** Restituisce il numero di righe e colonne */
//    int getRows();
//    int getCols();
    
    /** Restituisce una rappresentazione grafica testuale della grglia*/
    //public String gridRep( );
}

public class LifeTest {
private LifeInterface lifeModel;

	@Before
	public void setup() {
		System.out.println("LifeTest | setup");	
		lifeModel = new Life(5, 5);
	}
	@After
	public void down() {
		System.out.println("LifeTest | down");
	}
	
	@Test
	public void testSetCellAlive() {
		System.out.println("LifeTest | setting cell alive");	
	    lifeModel.setCell(3, 3, true);
	    assertTrue(lifeModel.isAlive(3, 3));
	}
	
	@Test
	public void testSetCellDead() {
		System.out.println("LifeTest | setting cell dead");
	    lifeModel.setCell(1, 2, false);
	    assertFalse(lifeModel.isAlive(1, 2));
	}
	
	@Test
	public void testLonelyCellDies() {
		System.out.println("LifeTest | test lonely cell");
	    lifeModel.setCell(4, 1, true);
	    lifeModel.nextGeneration();
	    assertFalse(lifeModel.isAlive(4, 1));
	}
	
	@Test
	public void testBlockStillLife() {
		System.out.println("LifeTest | test block 2x2");
		lifeModel.setCell(1,1,true);
		lifeModel.setCell(1,2,true);
		lifeModel.setCell(2,1,true);
		lifeModel.setCell(2,2,true);

		lifeModel.nextGeneration();

	    assertTrue(lifeModel.isAlive(1,1));
	    assertTrue(lifeModel.isAlive(1,2));
	    assertTrue(lifeModel.isAlive(2,1));
	    assertTrue(lifeModel.isAlive(2,2));
	}
	
	@Test
	public void testReset() {
		
		System.out.println("LifeTest | reset");
		
		for(int i = 0; i < 5; i++) {
			for(int j = 0; j < 5; j++) {
				lifeModel.setCell(i, j, true);
			}
		}

		lifeModel.resetGrids();
		
		for(int i = 0; i < 5; i++) {
			for(int j = 0; j < 5; j++) {
				assertFalse(lifeModel.isAlive(i,j));
			}
		}
	}
	
	@Test
	public void testGetGrid() {
		System.out.println("LifeTest | get grid");
	    Grid grid = lifeModel.getGrid();
	    assertNotNull(grid);
	}

}

Problem analysis

Test plans

Project

Testing

Deployment

Maintenance



By Valeria Capacci email: valeria.capacci@studio.unibo.it, VC GIT repo: https://github.com/valecapa/iss2026