В этой симуляции медведи, рыбы и растения случайным образом перемещаются по сетке, чтобы есть, размножаться и умирать. У меня пока симуляция работает нормально в одном направлении. Сейчас я пытаюсь изменить метод tryToMove класса Bear. Я хочу, чтобы медведи двигались более разумно, например, смотрели дальше со своей позиции, чтобы увидеть, есть ли в одном направлении какая-нибудь рыба. Как лучше всего это сделать?
Вот мой код:
from math import *
from turtle import *
from random import *
import turtle
import random
import math
def mainSimulation():
numberOfBears = 5
numberOfFish = 5
numberOfPlants = 5
worldLifeTime = 2500
worldWidth = 30
worldHeight = 25
myworld = World(worldWidth,worldHeight,numberOfBears,numberOfFish)
myworld.draw()
myworld.getBearStarvePass()
myworld.getBearBreedPass()
myworld.setBearStarvePass(25)
myworld.setBreedPass(3)
myworld.getFishOvercrowdNum()
myworld.getFishBreedPass()
myworld.setFishOvercrowdNum(5)
myworld.setFishBreedPass(2)
for i in range(numberOfFish):
newfish = Fish(myworld)
x = random.randrange(myworld.getMaxX())
y = random.randrange(myworld.getMaxY())
while not myworld.emptyLocation(x,y):
x = random.randrange(myworld.getMaxX())
y = random.randrange(myworld.getMaxY())
myworld.addThing(newfish,x,y)
for i in range(numberOfBears):
newbear = Bear(myworld)
x = random.randrange(myworld.getMaxX())
y = random.randrange(myworld.getMaxY())
while not myworld.emptyLocation(x,y):
x = random.randrange(myworld.getMaxX())
y = random.randrange(myworld.getMaxY())
myworld.addThing(newbear,x,y)
for i in range(numberOfPlants):
newplant = Plant()
x = random.randrange(myworld.getMaxX())
y = random.randrange(myworld.getMaxY())
while not myworld.emptyLocation(x,y):
x = random.randrange(myworld.getMaxX())
y = random.randrange(myworld.getMaxY())
myworld.addThing(newplant,x,y)
for i in range(worldLifeTime):
myworld.liveALittle()
myworld.showCounts()
myworld.freezeWorld()
ЭТО МИРОВОЙ КЛАСС
class World:
def __init__(self,mx,my,bear,fish):
self.maxX = mx
self.maxY = my
self.thingList = []
self.grid = []
self.bearCount = bear
self.fishCount = fish
self.fishOvercrowdNum = 0
self.fishBreedNum =0
self.bearStarvePass = 0
self.bearBreedPass = 0
for arow in range(self.maxY):
row=[]
for acol in range (self.maxX):
row.append(None)
self.grid.append(row)
self.wturtle = turtle.Turtle()
self.wscreen = turtle.Screen()
self.wscreen.setworldcoordinates(0,0,self.maxX-1,self.maxY-1)
self.wscreen.addshape("E:/Python/Lib/idlelib/Bear.gif")
self.wscreen.addshape("E:/Python/Lib/idlelib/Fish.gif")
self.wscreen.addshape("E:/Python/Lib/idlelib/Plant.gif")
self.wturtle.hideturtle()
def getBearStarvePass(self):
return self.bearStarvePass
def getBearBreedPass(self):
return self.bearBreedPass
def setBearStarvePass(self, newNum):
self.bearStarvePass = newNum
def setBreedPass(self, newNum):
self.bearBreedPass = newNum
def getFishOvercrowdNum(self):
return self.fishOvercrowdNum
def getFishBreedPass(self):
return self.fishBreedNum
def setFishOvercrowdNum(self, newNum):
self.fishOvercrowdNum = newNum
def setFishBreedPass(self, newNum):
self.fishBreedNum = newNum
def showCounts(self):
bearCount = self.bearCount
fishCount = self.fishCount
self.wturtle.write("Bear: %d Fish: %d " % (bearCount, fishCount), move = False)
def getNumBears(self):
return self.bearCount
def getNumFish(self):
return self.fishCount
def incBear(self):
self.bearCount = self.bearCount + 1
def incFish(self):
self.fishCount = self.fishCount + 1
def decBear(self):
self.bearCount = self.bearCount - 1
def decFish(self):
self.fishCount = self.fishCount - 1
def draw(self):
self.wscreen.tracer(0)
self.wturtle.forward(self.maxX-1)
self.wturtle.left(90)
self.wturtle.forward(self.maxY-1)
self.wturtle.left(90)
self.wturtle.forward(self.maxX-1)
self.wturtle.left(90)
self.wturtle.forward(self.maxY-1)
self.wturtle.left(90)
for i in range(self.maxY-1):
self.wturtle.forward(self.maxX-1)
self.wturtle.backward(self.maxX-1)
self.wturtle.left(90)
self.wturtle.forward(1)
self.wturtle.right(90)
self.wturtle.forward(1)
self.wturtle.right(90)
for i in range(self.maxX-2):
self.wturtle.forward(self.maxY-1)
self.wturtle.backward(self.maxY-1)
self.wturtle.left(90)
self.wturtle.forward(1)
self.wturtle.right(90)
self.wscreen.tracer(1)
def freezeWorld(self):
self.wscreen.exitonclick()
def addThing(self,athing,x,y):
a = 0
athing.setX(x)
athing.setY(y)
self.grid[y][x] = athing
athing.setWorld(self)
self.thingList.append(athing)
athing.appear()
if isinstance(athing, Bear):
self.bearCount = self.bearCount + 1
elif isinstance(athing, Fish):
self.fishCount = self.fishCount + 1
def delThing (self, athing):
athing.hide()
self.grid[athing.getY()][athing.getX()] = None
self.thingList.remove(athing)
def moveThing(self,oldx,oldy,newx,newy):
self.grid[newy][newx] = self.grid[oldy][oldx]
self.grid[oldy][oldx] = None
def getMaxX(self):
return self.maxX
def getMaxY(self):
return self.maxY
def liveALittle(self):
if self.thingList != [ ]:
athing = random.randrange(len(self.thingList))
randomthing = self.thingList[athing]
randomthing.liveALittle()
def emptyLocation(self,x,y):
if self.grid[y][x] == None:
return True
else:
return False
def lookAtLocation(self,x,y):
return self.grid[y][x]
Это класс медведей
class Bear:
def __init__(self, theWorld):
self.turtle=turtle.Turtle()
self.turtle.up()
self.turtle.hideturtle()
self.turtle.shape("E:/Python/Lib/idlelib/Bear.gif")
self.offsetList = [(-1,1) ,(0,1) ,(1,1),
(-1,0) ,(1,0),
(-1,-1),(0,-1),(1,-1)]
self.theWorld = theWorld
self.bearStarvePass = self.theWorld.bearStarvePass
self.bearBreedPass = self.theWorld.bearBreedPass
self.xpos=0
self.ypos=0
self.world=None
self.starveTick=0
self.breedTick=0
def setX(self, newx):
self.xpos = newx
def setY(self, newy):
self.ypos = newy
def getX(self):
return self.xpos
def getY(self):
return self.ypos
def setWorld(self, aworld):
self.world = aworld
def appear(self):
self.turtle.goto(self.xpos, self.ypos)
self.turtle.showturtle()
def hide(self):
self.turtle.hideturtle()
def move(self, newx, newy):
self.world.moveThing(self.xpos, self.ypos, newx, newy)
self.xpos = newx
self.ypos = newy
self.turtle.goto(self.xpos, self.ypos)
def liveALittle(self):
self.breedTick = self.breedTick + 1
if self.breedTick >= self.bearBreedPass:
self.tryToBreed()
self.tryToEat()
if self.starveTick == self.bearStarvePass:
self.world.delThing(self)
else:
self.tryToMove()
def tryToMove(self):
randomOffsetIndex = random.randrange(len(self.offsetList))
randomOffset = self.offsetList[randomOffsetIndex]
nextx=self.xpos + randomOffset[0]
nexty=self.ypos + randomOffset[1]
while not(0
Подробнее здесь: https://stackoverflow.com/questions/405 ... her-object
Как заставить объект-черепаху выглядеть дальше Ищите другой объект ⇐ Python
Программы на Python
-
Anonymous
1762754605
Anonymous
В этой симуляции медведи, рыбы и растения случайным образом перемещаются по сетке, чтобы есть, размножаться и умирать. У меня пока симуляция работает нормально в одном направлении. Сейчас я пытаюсь изменить метод tryToMove класса Bear. Я хочу, чтобы медведи двигались более разумно, например, смотрели дальше со своей позиции, чтобы увидеть, есть ли в одном направлении какая-нибудь рыба. Как лучше всего это сделать?
Вот мой код:
from math import *
from turtle import *
from random import *
import turtle
import random
import math
def mainSimulation():
numberOfBears = 5
numberOfFish = 5
numberOfPlants = 5
worldLifeTime = 2500
worldWidth = 30
worldHeight = 25
myworld = World(worldWidth,worldHeight,numberOfBears,numberOfFish)
myworld.draw()
myworld.getBearStarvePass()
myworld.getBearBreedPass()
myworld.setBearStarvePass(25)
myworld.setBreedPass(3)
myworld.getFishOvercrowdNum()
myworld.getFishBreedPass()
myworld.setFishOvercrowdNum(5)
myworld.setFishBreedPass(2)
for i in range(numberOfFish):
newfish = Fish(myworld)
x = random.randrange(myworld.getMaxX())
y = random.randrange(myworld.getMaxY())
while not myworld.emptyLocation(x,y):
x = random.randrange(myworld.getMaxX())
y = random.randrange(myworld.getMaxY())
myworld.addThing(newfish,x,y)
for i in range(numberOfBears):
newbear = Bear(myworld)
x = random.randrange(myworld.getMaxX())
y = random.randrange(myworld.getMaxY())
while not myworld.emptyLocation(x,y):
x = random.randrange(myworld.getMaxX())
y = random.randrange(myworld.getMaxY())
myworld.addThing(newbear,x,y)
for i in range(numberOfPlants):
newplant = Plant()
x = random.randrange(myworld.getMaxX())
y = random.randrange(myworld.getMaxY())
while not myworld.emptyLocation(x,y):
x = random.randrange(myworld.getMaxX())
y = random.randrange(myworld.getMaxY())
myworld.addThing(newplant,x,y)
for i in range(worldLifeTime):
myworld.liveALittle()
myworld.showCounts()
myworld.freezeWorld()
ЭТО МИРОВОЙ КЛАСС
class World:
def __init__(self,mx,my,bear,fish):
self.maxX = mx
self.maxY = my
self.thingList = []
self.grid = []
self.bearCount = bear
self.fishCount = fish
self.fishOvercrowdNum = 0
self.fishBreedNum =0
self.bearStarvePass = 0
self.bearBreedPass = 0
for arow in range(self.maxY):
row=[]
for acol in range (self.maxX):
row.append(None)
self.grid.append(row)
self.wturtle = turtle.Turtle()
self.wscreen = turtle.Screen()
self.wscreen.setworldcoordinates(0,0,self.maxX-1,self.maxY-1)
self.wscreen.addshape("E:/Python/Lib/idlelib/Bear.gif")
self.wscreen.addshape("E:/Python/Lib/idlelib/Fish.gif")
self.wscreen.addshape("E:/Python/Lib/idlelib/Plant.gif")
self.wturtle.hideturtle()
def getBearStarvePass(self):
return self.bearStarvePass
def getBearBreedPass(self):
return self.bearBreedPass
def setBearStarvePass(self, newNum):
self.bearStarvePass = newNum
def setBreedPass(self, newNum):
self.bearBreedPass = newNum
def getFishOvercrowdNum(self):
return self.fishOvercrowdNum
def getFishBreedPass(self):
return self.fishBreedNum
def setFishOvercrowdNum(self, newNum):
self.fishOvercrowdNum = newNum
def setFishBreedPass(self, newNum):
self.fishBreedNum = newNum
def showCounts(self):
bearCount = self.bearCount
fishCount = self.fishCount
self.wturtle.write("Bear: %d Fish: %d " % (bearCount, fishCount), move = False)
def getNumBears(self):
return self.bearCount
def getNumFish(self):
return self.fishCount
def incBear(self):
self.bearCount = self.bearCount + 1
def incFish(self):
self.fishCount = self.fishCount + 1
def decBear(self):
self.bearCount = self.bearCount - 1
def decFish(self):
self.fishCount = self.fishCount - 1
def draw(self):
self.wscreen.tracer(0)
self.wturtle.forward(self.maxX-1)
self.wturtle.left(90)
self.wturtle.forward(self.maxY-1)
self.wturtle.left(90)
self.wturtle.forward(self.maxX-1)
self.wturtle.left(90)
self.wturtle.forward(self.maxY-1)
self.wturtle.left(90)
for i in range(self.maxY-1):
self.wturtle.forward(self.maxX-1)
self.wturtle.backward(self.maxX-1)
self.wturtle.left(90)
self.wturtle.forward(1)
self.wturtle.right(90)
self.wturtle.forward(1)
self.wturtle.right(90)
for i in range(self.maxX-2):
self.wturtle.forward(self.maxY-1)
self.wturtle.backward(self.maxY-1)
self.wturtle.left(90)
self.wturtle.forward(1)
self.wturtle.right(90)
self.wscreen.tracer(1)
def freezeWorld(self):
self.wscreen.exitonclick()
def addThing(self,athing,x,y):
a = 0
athing.setX(x)
athing.setY(y)
self.grid[y][x] = athing
athing.setWorld(self)
self.thingList.append(athing)
athing.appear()
if isinstance(athing, Bear):
self.bearCount = self.bearCount + 1
elif isinstance(athing, Fish):
self.fishCount = self.fishCount + 1
def delThing (self, athing):
athing.hide()
self.grid[athing.getY()][athing.getX()] = None
self.thingList.remove(athing)
def moveThing(self,oldx,oldy,newx,newy):
self.grid[newy][newx] = self.grid[oldy][oldx]
self.grid[oldy][oldx] = None
def getMaxX(self):
return self.maxX
def getMaxY(self):
return self.maxY
def liveALittle(self):
if self.thingList != [ ]:
athing = random.randrange(len(self.thingList))
randomthing = self.thingList[athing]
randomthing.liveALittle()
def emptyLocation(self,x,y):
if self.grid[y][x] == None:
return True
else:
return False
def lookAtLocation(self,x,y):
return self.grid[y][x]
Это класс медведей
class Bear:
def __init__(self, theWorld):
self.turtle=turtle.Turtle()
self.turtle.up()
self.turtle.hideturtle()
self.turtle.shape("E:/Python/Lib/idlelib/Bear.gif")
self.offsetList = [(-1,1) ,(0,1) ,(1,1),
(-1,0) ,(1,0),
(-1,-1),(0,-1),(1,-1)]
self.theWorld = theWorld
self.bearStarvePass = self.theWorld.bearStarvePass
self.bearBreedPass = self.theWorld.bearBreedPass
self.xpos=0
self.ypos=0
self.world=None
self.starveTick=0
self.breedTick=0
def setX(self, newx):
self.xpos = newx
def setY(self, newy):
self.ypos = newy
def getX(self):
return self.xpos
def getY(self):
return self.ypos
def setWorld(self, aworld):
self.world = aworld
def appear(self):
self.turtle.goto(self.xpos, self.ypos)
self.turtle.showturtle()
def hide(self):
self.turtle.hideturtle()
def move(self, newx, newy):
self.world.moveThing(self.xpos, self.ypos, newx, newy)
self.xpos = newx
self.ypos = newy
self.turtle.goto(self.xpos, self.ypos)
def liveALittle(self):
self.breedTick = self.breedTick + 1
if self.breedTick >= self.bearBreedPass:
self.tryToBreed()
self.tryToEat()
if self.starveTick == self.bearStarvePass:
self.world.delThing(self)
else:
self.tryToMove()
def tryToMove(self):
randomOffsetIndex = random.randrange(len(self.offsetList))
randomOffset = self.offsetList[randomOffsetIndex]
nextx=self.xpos + randomOffset[0]
nexty=self.ypos + randomOffset[1]
while not(0
Подробнее здесь: [url]https://stackoverflow.com/questions/40580569/making-a-turtle-object-look-look-further-for-another-object[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия