[Ответить в тред] Ответить в тред

02/12/16 - Конкурс визуальных новелл доски /ruvn/
15/11/16 - **НОВЫЙ ФУНКЦИОНАЛ** - Стикеры
09/10/16 - Открыта доска /int/ - International, давайте расскажем о ней!


Новые доски: /2d/ - Аниме/Беседка • /wwe/ - WorldWide Wrestling Universe • /ch/ - Чатики и конфочки • /int/ - International • /ruvn/ - Российские визуальные новеллы • /math/ - Математика • Создай свою

[Назад][Обновить тред][Вниз][Каталог] [ Автообновление ] 16 | 1 | 7
Назад Вниз Каталог Обновить

Аноним 14/05/17 Вск 00:43:04  153031015  
lab.png (246Кб, 1360x768)
Сап /b/sfw/. Я нихуя не вкуриваю ООП на питоне. Нужно написать программу симулятор Predator/Prey, где волки жрут кроликов и все вместе размножаются. Вот код с готовой частью классов, помоги дописать.
С меня, +10 к твоему опыту в разборке говнокода
/pr/ мертв, так что я не съебу

from Graphics import
import random

class World(object):

def __init__(self, nR, nW):
''' Create a simulated world with nR rabbits and nW wolves '''
self.display = True
self.nR = nR
self.nW = nW
self.animals = []

self.win = Window("simulation", 400, 400)
self.win.setBackground(Color("white"))

self.gwin = Window("population size", 1000, 300)

for i in range(nR):
r = Rabbit(self)

for i in range(nW):
w = Wolf(self)

def run(self):
''' run the simulated world '''
t = 0
while t < self.gwin.getWidth() and self.nR > 0 and self.nW > 0:
self.nR = 0
self.nW = 0
for a in self.animals[:]:
if a.alive:
a.takeAStep()
if isinstance(a, Rabbit):
self.nR += 1
elif isinstance(a, Wolf):
self.nW += 1
else:
self.animals.remove(a)

pr = Circle((t, self.gwin.getHeight() - self.nR), 1)
pr.color = Color("blue")
pr.draw(self.gwin)

pw = Circle((t, self.gwin.getHeight() - self.nW), 1)
pw.color = Color("red")
pw.draw(self.gwin)

t = t + 1

print ("Simulation Done")

def addAnimal(self, w):
self.animals.append(w)



def nearbyAnimals(self, a):
''' find all the nearby animals within sensing range of a'''
nearby = []
for o in self.animals:
if o.alive and a.distance(o) < a.SENSING_RANGE and o != a:
nearby.append(o)

return nearby

def closestNeighbor(self, a, t):
''' find the closest animal to animal a of type t;
return None if no closest exists'''
closestDistance = 100000000
neighbor = None
for o in self.nearbyAnimals(a):
if isinstance(o, t) and a.distance(o) < closestDistance:
neighbor = o
closestDistance = a.distance(o)
return neighbor

class Animal(object):
SIZE = 5
SENSING_RANGE = 30

def __init__(self, world):
''' Create a new Animal'''
self.world = world
self.alive = True
self.vx = 4
self.vy = 4
self.reproduction_prob = 0.02
self.x = random.uniform(0, self.world.win.getWidth())
self.y = random.uniform(0, self.world.win.getHeight())
self.size = self.SIZE
self.world.addAnimal(self)
self.setAppearance()

def setAppearance(self):
self.appearance = Circle(Point(self.x, self.y), self.size)
if self.world.display:
self.appearance.draw(self.world.win)

def eat(self):
pass

def reproduce(self):
pass

def die(self):
'''remove this animal from the population'''
if self.world.display:
self.appearance.undraw()
self.alive = False


def takeAStep(self):
''' move the animal for one timestep'''
dx = random.uniform(-self.vx, self.vx)
dy = random.uniform(-self.vy, self.vy)
if self.insideWindow(dx, dy):
self.x = self.x + dx
self.y = self.y + dy
self.appearance.move(dx,dy)

def distance(self, other):
''' find the distance between myself and the other animal'''
return ((self.x - other.x)2 + (self.y - other.y)2)
*0.5

def insideWindow(self, dx, dy):
''' check to see if moving animal by (dx, dy) keeps it in the window'''
tx = self.x + dx
ty = self.y + dy
if self.size/2 < tx < self.world.win.getWidth() - self.size/2 and\
self.size/2 < ty < self.world.win.getHeight() - self.size/2:
return True
else:
return False

def __str__(self):
return "Animal at (%d, %d)" % (self.x, self.y)

class Wolf(Animal):
ENERGY = 10
def __init__(self,World):
self.energy = ENERGY
pass

def eat(self,prey):
Animal.eat(self)
die(prey)

def reproduce(self):
pass

def takeAStep(self):
Animal.takeAStep(self)
self.energy -=1
if self.ENERGY >=5:
prey = closestNeighbor(self,Rabbit)
if(prey != self and prey != None):
eat(prey)
self.ENERGY = 10

def setAppearance(self):
pass

class Rabbit(Animal):
def __init__(self,World):
pass

def go():
random.seed(5)
w = World(60, 60)
w.run()

Аноним 14/05/17 Вск 00:55:00  153032129
sagesagesagesagesagesagesagesagesagesagesagesagesagesagesagesagesagesagesagesagesagesagesagesagesagesagesagesagesagesagesagesagesagesagesagesagesagesagesagesagesagesagesagesagesagesagesagesagesagesagesagesagesagesagesagesagesagesagesagesagesagesagesagesagesagesagesagesagesagesagesagesagesagesagesagesagesagesagesagesagesagesagesagesagesagesagesagesagesagesagesagesagesagesagesagesagesagesagesagesagesagesagesagesagesagesagesagesagesagesagesagesagesagesagesagesagesagesagesage
Аноним 14/05/17 Вск 01:01:55  153032737
bump
Аноним 14/05/17 Вск 02:45:28  153039328
>>153031015 (OP)
даун, норм скинь на пастбине или pdf задачки
Аноним 14/05/17 Вск 02:47:16  153039411
А где так изучаешь, не поделишься?
Аноним 14/05/17 Вск 02:47:23  153039417
Все вместе размножаются.... ЕБУЦА ШТОЛИ?!?!???!?
Аноним 14/05/17 Вск 03:35:04  153041358
>>153039328
https://pastebin.com/5zNX3BeX
Аноним 14/05/17 Вск 03:36:49  153041421
bump
Аноним 14/05/17 Вск 04:24:22  153042721
>>153039417
Даже они ебутся, а ты нет!
Аноним 14/05/17 Вск 07:12:22  153045654
ок, я вроде более-менее разобрался. Как можно описать размножение волков и кроликов? то есть допустим, внутри класса Rabbit, есть метод reproduce(self) который создает еще один объект класса Rabbit? как это сделать? я помню, там еще был параметр с какой вероятностью размножается каждое животное
Аноним 14/05/17 Вск 07:12:50  153045661
b-mo
Аноним 14/05/17 Вск 07:22:56  153045833
>>153031015 (OP)
ОП откуда скачал?
Аноним 14/05/17 Вск 07:23:43  153045842
>>153045833
Я имею ввиду лабы откуда взял. какого универа?
Аноним 14/05/17 Вск 07:24:16  153045851
>>153045833
Bard College
Аноним 14/05/17 Вск 07:29:13  153045942
>>153045851
>Bard College
ссылку конкретно можешь закинуть на лабы?
Аноним 14/05/17 Вск 07:29:56  153045960
>>153045942
я учусь тут, ресурсы закрытые.
Аноним 14/05/17 Вск 07:36:24  153046120
>>153045960
ну я ресурсы не прошу, просто интересны такие задачи(лабы).
Если даже обычные лабы "закрытые" и ты не можешь дать анону, тогда я даже почему ты расчитываешь на помощь.

[Назад][Обновить тред][Вверх][Каталог] [Реквест разбана] [Подписаться на тред] [ ] 16 | 1 | 7
Назад Вверх Каталог Обновить

Топ тредов
Избранное