У вас может быть простой класс Building:
class Building:
def __init__(self, x, y, w, h, color):
self.x = x
self.y = y
self.w = w
self.h = h
self.color = color
def draw(self):
// code for drawing the rect at self.x,self.y
// which is self.w wide and self.h high with self.color here
Что касается окон, вы можете указать каждое из них в списке, например [(x, y, w, h)] для каждого здания, или просто создать класс здания, который выглядит следующим образом:
class Building:
def __init__(self, x, y, w, h, color, wx, wy):
self.x = x
self.y = y
self.w = w
self.h = h
self.color = color
self.wx = wx
self.wy = wy
def draw(self):
// code for drawing the rect at self.x,self.y
// which is w wide and h high with self.color here
// Draw wx windows horizontally and wy windows vertically
for y in range(0, self.wy):
for x in range(0, self.wx):
// draw Window code here
Другой подход заключается в том, что вы «преобразовываете» свои здания в изображение, а затем просто отображаете его (это также может быть быстрее, если у вас много зданий).
И тогда ваш игровой цикл мог бы выглядеть примерно так
buildingList = [Building(0, 0, 15, 50, RED), Building(0, 0, 40, 30, BLUE)]
while gameIsRunning:
// Clear screen code here
// Show Building
for b in buildingList:
b.draw()
// More stuff
Это в значительной степени самый простой подход к рисованию чего-либо, вы можете рисовать таким образом символы, клавиши или даже плитки, которые должны быть над вашим персонажем, например. водные плитки в таких платформерах, как Tuff. Деревья здесь также находятся в одном большом списке (хорошо, на самом деле я веду меньший список с деревьями, которые находятся на 1 1/2 окружающих экранах из соображений производительности. Там более 1500 «деревьев»).
РЕДАКТИРОВАТЬ: В случае разных цветов окна есть два возможных решения.
Использование разных цветов окон в каждом здании:
class Building:
def __init__(self, x, y, w, h, color, wx, wy, windowColor):
self.x = x
self.y = y
self.w = w
self.h = h
self.color = color
self.wx = wx
self.wy = wy
self.windowColor = windowColor
def draw(self):
// code for drawing the rect at self.x,self.y
// which is self.w wide and self.h high with self.color here
// Draw wx windows horizontally and wy windows vertically
for y in range(0, self.wy):
for x in range(0, self.wx):
// draw Window code here using self.windowColor
Вариант 2, с разными цветами для каждого окна:
class Building:
def __init__(self, x, y, w, h, color, windows):
self.x = x
self.y = y
self.w = w
self.h = h
self.color = color
self.wx = wx
self.wy = wy
self.windows = windows
def draw(self):
// code for drawing the rect at self.x,self.y
// which is self.w wide and self.h high with self.color here
// Draw all windows
for w in windows:
// draw Window at w[0] as x, w[1] as y with w[2] as color
// Create a building at 0,0 that is 20 wide and 80 high with GRAY color and two windows, one at 2,2 which is yellow and one at 4, 4 that's DARKBLUE.
b = Building(0, 0, 20, 80, GRAY, [(2, 2, YELLOW), (4, 4, DARKBLUE)])
person
Ivo Wetzel
schedule
12.10.2009