Как заставить объект-черепаху выглядеть дальше Ищите другой объектPython

Программы на Python
Ответить
Anonymous
 Как заставить объект-черепаху выглядеть дальше Ищите другой объект

Сообщение 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

Подробнее здесь: https://stackoverflow.com/questions/405 ... her-object
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»