class Simulaatio(object): def __init__(self): self.input = Input() self.kaytosmalli = Kaytosmalli() self.kartta = Kartta() def aloita_simulointi(self): """ Kysyy kayttajalta yksilo- ja seinamaarat. Alustaa kartan ja simuloi kunnes Kartta.paivita_kartta() palauttaa arvon False """ yksilomaara = self.kysy_yksilomaara() estemaara = self.kysy_estemaara() self.luo_yksilot(yksilomaara) self.kartta.alusta_kartta(estemaara) self.kaytosmalli.alusta_seinien_paikkavektorit(self.kartta) clock = pygame.time.Clock() while (self.kartta.paivita_kartta(self.kaytosmalli.yksilo_lista)): self.kaytosmalli.laske_voimat() self.kaytosmalli.paivita_paikat() if (len(self.kaytosmalli.yksilo_lista)==0): self.luo_yksilot(yksilomaara) clock.tick(Input.FPS) def kysy_yksilomaara(self): """ Kysyy ja palauttaa kayttajalta yksilomaaran ja virheellisen syotteen jalkeen kysyy uudestaan virheilmoituksen kanssa """ virheilmoitus = False while (True): try: yksilomaara = self.input.pyyda_maara("Anna yksilomaara (1 - 100)",virheilmoitus) if (yksilomaara<1 or yksilomaara>100): raise ValueError else: break except ValueError: virheilmoitus = True return yksilomaara def kysy_estemaara(self): """ Kysyy ja palauttaa kayttajalta valiseinamaaran ja virheellisen syotteen jalkeen kysyy uudestaan virheilmoituksen kanssa """ virheilmoitus = False while (True): try: estemaara = self.input.pyyda_maara("Anna esteiden maara (0 - 3)",virheilmoitus) if (estemaara<0 or estemaara>3): raise ValueError else: break except ValueError: virheilmoitus = True return estemaara def luo_yksilot(self,yksilomaara): """ Luo parametrin yksilomaaran verran Yksiloita ja arpoo niille aloituspaikat ulkoseinien sisapuolelta """ for i in range(0,yksilomaara): paikka_x = random.randint(10,Input.RUUDUN_LEVEYS-10) paikka_y = random.randint(45,Input.RUUDUN_KORKEUS-10) yksilo = Yksilo(paikka_x,paikka_y) self.kaytosmalli.lisaa_yksilo(yksilo)
class Test(unittest.TestCase): def setUp(self): self.kartta = Kartta() def test_alusta_kartta(self): """ Testaa Kartta-luokan metodia alusta_kartta() """ seinien_maara = 0 self.kartta.alusta_kartta(seinien_maara) seinien_maara2 = len(self.kartta.seinat) self.assertNotEqual(seinien_maara,seinien_maara2,"Seina-objekteja ei ole lisatty kartalle") def test_luo_valiseinat(self): """ Testaa Kartta-luokan metodia luo_valiseinat() """ self.kartta.luo_valiseinat(0) temp = len(self.kartta.seinat) self.assertEqual(0,temp,"Virhe valiseinien luonnissa kun 0 valiseinaa") self.kartta.luo_valiseinat(1) temp2 = len(self.kartta.seinat) self.assertTrue(temp < temp2,"Virhe valiseinien luonnissa kun 1 valiseinaa") self.kartta.luo_valiseinat(2) temp3= len(self.kartta.seinat) self.assertTrue(temp2 < temp3,"Virhe valiseinien luonnissa kun 2 valiseinaa") self.kartta.luo_valiseinat(3) temp4= len(self.kartta.seinat) self.assertTrue(temp3 < temp4,"Virhe valiseinien luonnissa kun 3 valiseinaa") def test_piirra_yksilot(self): """ Testaa Kartta-luokan metodia piirra_yksilot() Testit ovat huonoja ja aukaisevat ruudun kayttajan naytolle """ yksilo_lista = [] for i in range(0,3): paikka_x = random.randint(10,390) paikka_y = random.randint(10,390) yksilo = Yksilo(paikka_x,paikka_y,5) yksilo_lista.append(yksilo) white = 255,255,255 self.kartta.ruutu.fill(white) self.kartta.piirra_yksilot(self.kartta.ruutu,yksilo_lista) pygame.display.flip() def test_paivita_kartta(self): """ Testaa Kartta-luokan metodia paivita_kartta() paivittymista visuaalisesti. Arpoo yksiloille uusia paikkoja. Jalleen huono testi """ yksilo_lista = [] for i in range(0,3): paikka_x = random.randint(10,390) paikka_y = random.randint(10,390) yksilo = Yksilo(paikka_x,paikka_y,5) yksilo_lista.append(yksilo) while (self.kartta.paivita_kartta(yksilo_lista)): for yksilo in yksilo_lista: yksilo.paikka[0] = random.randint(380,390) yksilo.paikka[0] = random.randint(380,390)