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)
Exemple #2
0
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)