Почему в Block.parts иногда возвращает None?
Недавно начал заниматься программированием и решил самостоятельно написать игру Тетрис на Python. Написав этот небольшой код, я столкнулся с небольшой проблемой: по задумке в Block.parts всегда должен возвращаться список с начальными координатами фигуры, но иногда туда возвращается None, я долго думал над тем, почему так происходит, но ничего не получилось. Можете, пожалуйста, помочь с решением данной проблемы?
Мой код:
from tkinter import *
import random
import time
WIDTH = 480
HEIGHT = 720
PART_SIZE = 40
FIGURES = []
field = []
for i in range(int(HEIGHT/PART_SIZE)):
field.append(['-'] * int(WIDTH/PART_SIZE))
field.append(['='] * int(WIDTH/PART_SIZE))
FIGURES.append([(0,0), (0,1), (0,2)])
FIGURES.append([(0,0), (0,1), (0,2), (0,2)])
class Block():
def __init__(self):
self.posX = None
self.posY = 0
self.parts = self.GenerateFigure()
def GenerateFigure(self):
TestFigure = FIGURES[0] #FIGURES[random.randint(0, (len(FIGURES)-1))]
self.posX = random.randint(9, ((WIDTH/40)-1)) #random.randint(0, ((WIDTH/40)-1))
TempBool = True
for i in TestFigure:
if (i[1] + self.posX) >= (WIDTH/40):
print(False, self.posX)
self.GenerateFigure()
TempBool = False
if TempBool:
print(True, self.posX, TestFigure)
return TestFigure
def Update(self):
for i in self.parts:
print(i)
Block = Block()
print('(1) ', Block.parts)
print('(2) ', Block.posX)
Ответы (1 шт):
Автор решения: CrazyElf
→ Ссылка
for i in TestFigure:
if (i[1] + self.posX) >= (WIDTH/40):
print(False, self.posX)
self.GenerateFigure() # <-- ничего не возвращает!
TempBool = False
if TempBool:
print(True, self.posX, TestFigure)
return TestFigure
Я так понимаю если не выполняется какое-то условие, вы рекурсивно вызываете ту же функцию. Но вы не возвращаете то, что она вернула. Нужно возвращать:
for i in TestFigure:
if (i[1] + self.posX) >= (WIDTH/40):
print(False, self.posX)
return self.GenerateFigure() # <-- теперь возвращает
TempBool = False