Я наполовину новичок в программировании и работаю над игрой, использующей python и pygame.Основная идея заключается в том, что игрок ходит по большой карте тайлов и делает вещи.Таким образом, будут все виды объектов, делающих вещи.Движущиеся NPC, растущая трава, растущие кусты, животные, которые едят траву и т. Д.
В качестве примера я написал макетную версию игры.
import pygame
class Plant():
def __init__(self,name,location,size,edible):
self.name = name
self.location = location
self.size = size
self.edible = edible
class Person():
def __init__(self,location,name):
self.location = location
self.name = name
class Game():
def __init__(self):
pygame.init()
self.mainScreen = pygame.display.set_mode(200,200)
self.objects = []
self.running = False # start stopped
def launch(self):
self.running=True
self.running_loop()
def running_loop(self):
while self.running:
self.mainScreen.fill((255,255,255))
# main game loop
for object in self.objects:
if type(object) == Person:
#do code related to persons
pass
elif type(object) == Plant:
# do code related to persons
pass
for object in self.objects:
pygame.draw(self.mainScreen,object)
# event handling
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
#create game instance
game = Game()
#create things in the game
person1 = Person((0,0),"Player")
plant1 = Plant("Bush",(1,1),2,False)
plant2 = Plant("Strawberries",(2,3),1,True)
game.objects.append(person1)
game.objects.append(plant1)
game.objects.append(plant2)
game.launch()
Так что мой вопрос об этой части:
def running_loop(self):
while self.running:
# main game loop
for object in self.objects:
if type(object) == Person:
#do code related to persons
pass
elif type(object) == Plant:
# do code related to persons
pass
for object in self.objects:
pygame.draw(self.mainScreen,object)
В списке будет много разных объектов, которые содержат все объекты в игре.Но не все имеют одинаковые методы, следовательно, тип if (объект).Я продолжаю думать, что есть более элегантный способ сделать это.Могу ли я сделать полиморфизм и просто написать метод обновления, который вызывает другие методы в каждом случае?Проблема с этим решением заключается в том, что мне также может понадобиться импортировать классы, такие как Pygame Rect
.Поскольку это один из тех проектов, который может стать очень хаотичным, я пытаюсь сделать это с самого начала.