Документ взят из кэша поисковой машины. Адрес оригинального документа : http://kodomo.cmm.msu.su/hg/petri_dish/diff/69a4724e7cac/bacteria.py
Дата изменения: Unknown
Дата индексирования: Tue Oct 2 00:51:54 2012
Кодировка:
petri_dish: bacteria.py diff

petri_dish

diff bacteria.py @ 22:69a4724e7cac

added help and statistics
author Yashina Ksenia <ksenia_yashina@kodomo.fbb.msu.ru>
date Thu, 23 Dec 2010 16:58:48 +0300
parents f55481ff4bb5
children
line diff
     1.1 --- a/bacteria.py	Mon Dec 20 02:38:11 2010 +0300
     1.2 +++ b/bacteria.py	Thu Dec 23 16:58:48 2010 +0300
     1.3 @@ -51,7 +51,7 @@
     1.4  
     1.5      def asexual(self, bacteria, delta_t, radius, delta, bact_r, full_lifetime):
     1.6          if self.find_place_a(bacteria, delta, bact_r)\
     1.7 -           and not(self.check_dish_wall(self.position,radius,delta,2*bact_r)):
     1.8 +           and not(self.check_dish_wall(self.position,radius,delta,3*bact_r)):
     1.9              pos1=self.position + vector.Vector(-(bact_r + 0.75*delta),0)
    1.10              vel1=vector.Vector(1,0).angleToCoord(self.velocity.angle())
    1.11              bacteria.append(Bacteria(pos1, self.rnd_velocity(pi),
    1.12 @@ -60,35 +60,38 @@
    1.13              bacteria.append(Bacteria(pos2, self.rnd_velocity(0),
    1.14                                       full_lifetime, self.if_mutated_a()))
    1.15              bacteria.remove(self)
    1.16 -            return
    1.17 -        self.move(bacteria,delta_t,radius,delta,bact_r)
    1.18 +            return 1
    1.19 +        return 0
    1.20  
    1.21  
    1.22      def sexual (self, other, bacteria, delta_t, radius, delta, bact_r,
    1.23                  full_lifetime):
    1.24 +        num_of_mut=1
    1.25          center = (self.position+other.position)*0.5
    1.26          if self.find_place_s(other, bacteria, delta, bact_r) and\
    1.27 -           not(self.check_dish_wall(center,radius,delta,bact_r*(1+sqrt(2)))):
    1.28 +           not(self.check_dish_wall(center,radius,delta,bact_r*3)):
    1.29              bacteria.append(Bacteria(center +
    1.30                                       vector.Vector(-(bact_r*sqrt(2) + 0.75*delta),0),
    1.31                                       self.rnd_velocity(pi), full_lifetime,
    1.32 -                                     self.if_mutated_s(other)))
    1.33 +                                     self.if_mutated_s(other,num_of_mut)))
    1.34              bacteria.append(Bacteria(center +
    1.35                                       vector.Vector((bact_r*sqrt(2) + 0.75*delta),0),
    1.36                                       self.rnd_velocity(0), full_lifetime,
    1.37 -                                     self.if_mutated_s(other)))
    1.38 +                                     self.if_mutated_s(other,num_of_mut)))
    1.39              bacteria.append(Bacteria(center +
    1.40                                       vector.Vector(0, -(bact_r*sqrt(2) + 0.75*delta)),
    1.41                                       self.rnd_velocity(3*pi/2), full_lifetime,
    1.42 -                                     self.if_mutated_s(other)))
    1.43 +                                     self.if_mutated_s(other,num_of_mut)))
    1.44              bacteria.append(Bacteria(center +
    1.45                                       vector.Vector(0, (bact_r*sqrt(2) + 0.75*delta)),
    1.46                                       self.rnd_velocity(pi/2), full_lifetime,
    1.47 -                                     self.if_mutated_s(other)))
    1.48 +                                     self.if_mutated_s(other,num_of_mut)))
    1.49              bacteria.remove(other)
    1.50              bacteria.remove(self)
    1.51 +            return num_of_mut
    1.52          else:
    1.53              self.collision(other,bacteria,delta_t,radius,delta,bact_r)
    1.54 +            return 0
    1.55  
    1.56      def find_place_a(self, bacteria, delta, bact_r): #searches for place for children
    1.57          for bact in bacteria:
    1.58 @@ -113,7 +116,10 @@
    1.59      def if_mutated_a(self):
    1.60          return self.mutated
    1.61  
    1.62 -    def if_mutated_s(self,other):
    1.63 -        if self.mutated + other.mutated == 0:
    1.64 -            return False   
    1.65 -        return random.randrange(0, 3 - (self.mutated+other.mutated)) == 0
    1.66 +    def if_mutated_s(self,other,n):
    1.67 +        if self.mutated==False and other.mutated == False:
    1.68 +            return False
    1.69 +        r = (random.randint(0, 3) == 0)
    1.70 +        if r:
    1.71 +            n+=1
    1.72 +        return r