ConwayLife Sprint1

Introduction

Realizzazione in Java del GAME OF LIFE DI CONWAY

Requirements

    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

    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

//La cella ha uno stato (viva o morta) ottenibile e impostabile con gli opportuni accessori
public interface ICell {
	public void setStatus(boolean status); //primitiva
	public boolean isAlive(); //primitiva
	public void switchCellState(); //composta
}

//La griglia è un insieme di celle, con dimensioni specificabili, e con accessori per ottenere e impostare lo stato di ogni cella
public interface IGrid {
	public int getWidth(); //primitiva
	public int getHeight(); //primitiva
	
	public ICell getCell(int x, int y); //primitiva
	public boolean getCellValue(int x, int y); //composta
	public void setCell(int x, int y, ICell cell); //primitiva
	public void setCellValue(int x, int y, boolean value); //composta
	
    //Imposta tutte le celle della griglia a morte
	public void reset(); //composta
}

//Life è un sistema che si occupa di far evolvere la griglia secondo le regole del gioco
public interface LifeInterface {
    void nextGeneration(); //primitiva

    //Si riferisce alla cella della griglia
    boolean isAlive(int row, int col); //composta

    ICell getCell(int x, int y); //composta
    void setCell(int row, int col, boolean alive); //composta
    
    Grid getGrid(); //primitiva
    //Imposta tutte le celle della griglia a morte
    void resetGrids(); //composta
}

Problem analysis

    Diagramma uml del progetto

Test plans

public class CellTest {
	@Test
    //Per comodita una cella viva restituisce un boolean true, una cella morta restituisce un boolean false
	public void testCell() {
		var cell = null;
		
		cell.setStatus(true);
		assertTrue(cell.isAlive());
		
		cell.setStatus(false);
		assertFalse(cell.isAlive());
	}
}

public class GridTest {
	@Test(expected = IllegalArgumentException.class)
    //Le coordinate della cella devono essere comprese in [0, dim)
	public void testGrid() throws Exception {
		var grid = null;
		
		for (int i = 0; i < grid.getWidth(); i++) {
			for (int j = 0; j < grid.getHeight(); j++) {
				assertFalse(grid.getCell(i, j).isAlive());
			}
		}
		
		grid.setCell(0, 0, new Cell(true));
		assertTrue(grid.getCell(0, 0).isAlive());
		
		grid.getCell(-1, grid.getHeight() + 1);
	}
}

public class LifeTest {
    private LifeInterface lifeModel;

	@Test
	public void testSetCellAlive() {
	    lifeModel.setCell(2, 3, true);

	    assertTrue(lifeModel.isAlive(2, 3));
	}
	
	@Test
	public void testSetCellDead() {
	    lifeModel.setCell(1, 1, false);

	    assertFalse(lifeModel.isAlive(1, 1));
	}
	
	@Test
	public void testLonelyCellDies() {
	    lifeModel.setCell(1, 1, true);
	    lifeModel.nextGeneration();

	    assertFalse(lifeModel.isAlive(1, 1));
	}
	
	@Test
	public void testBlockStillLife() {
		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() {
		lifeModel.setCell(2,2,true);
		lifeModel.resetGrids();

	    assertFalse(lifeModel.isAlive(2,2));
	}
	
	@Test
	public void testGetGrid() {
	    Grid grid = lifeModel.getGrid();

	    assertNotNull(grid);
	}

}

Project



Testing



Deployment

 

Maintenance




	      	


By Leonardo Ciacco email: leonardo.ciacco@studio.unibo.it, io https://github.com/Festus55/iss_leonardo_ciacco