Случайная форма тетриса
Я пытаюсь написать программу на питоне, которая будет рисовать случайную форму тетриса на доске. Вот мой код:
def __init__(self, win):
self.board = Board(win, self.BOARD_WIDTH, self.BOARD_HEIGHT)
self.win = win
self.delay = 1000
self.current_shape = self.create_new_shape()
# Draw the current_shape oan the board
self.current_shape = Board.draw_shape(the_shape)
def create_new_shape(self):
''' Return value: type: Shape
Create a random new shape that is centered
at y = 0 and x = int(self.BOARD_WIDTH/2)
return the shape
'''
y = 0
x = int(self.BOARD_WIDTH/2)
self.shapes = [O_shape,
T_shape,
L_shape,
J_shape,
Z_shape,
S_shape,
I_shape]
the_shape = random.choice(self.shapes)
return the_shape
Моя проблема в "self.current_shape = Board.draw_shape(the_shape). Он говорит, что the_shape не определен, но я думал, что определил его в create_new_shape.
3 ответа
Вы сделали, но переменная the_shape
является локальным для области действия этой функции. когда ты звонишь create_new_shape()
Вы сохраняете результат в поле, вы должны использовать его для ссылки на форму:
self.current_shape = self.create_new_shape()
# Draw the current_shape oan the board
self.current_shape = Board.draw_shape(self.current_shape)
the_shape
является локальным для вашего create_new_shape
функция, имя выходит из области видимости после выхода из функции.
У вас есть две проблемы. Во-первых, это проблема масштаба, на которую указывали другие. Другая проблема заключается в том, что вы никогда не создаете экземпляр формы, а возвращаете ссылку на класс. Сначала давайте создадим экземпляр формы:
y = 0
x = int(self.BOARD_WIDTH/2)
self.shapes = [O_shape,
T_shape,
L_shape,
J_shape,
Z_shape,
S_shape,
I_shape]
the_shape = random.choice(self.shapes)
return the_shape(Point(x, y))
Теперь создается экземпляр формы с правильной отправной точкой. Далее сфера.
self.current_shape = self.create_new_shape()
# Draw the current_shape oan the board
self.board.draw_shape(self.current_shape)
Когда вы ссылаетесь на фрагменты данных в одном и том же объекте (здесь на плате), вам нужно получить к ним доступ через себя.вещь Итак, мы хотим получить доступ к доске и указать форму для рисования. Мы делаем это с помощью self.board, затем добавляем метод draw_shape. Наконец, мы должны сказать ему, что рисовать. the_shape находится вне области видимости, он существует только в методе create_new_shape. Этот метод возвращает форму, которую мы присвоили self.current_shape. Поэтому, если вы хотите снова обратиться к этой фигуре в любом месте внутри класса, используйте self.current_shape.