Я пишу игру, в которой используется похожая на змею механика, но разница в том, что игрок должен расти по мере движения, а не когда он достигает яблока. Моя проблема в том, что когда игра начинается, из-за змеиного кода, который я использовал в качестве ориентира, игрок растет сзади к краю экрана, когда я хочу, чтобы он рос только с начальной точки. Я думаю, что он должен проверить, есть ли блок в начальном пространстве и должен ли он пройти, а если нет, добавить куб.
это код для добавления куба:
def addCube(self):
tail = self.body[-1]
dx, dy = tail.dirnx, tail.dirny
# check what direction we are currently moving in to determine if we need to add the cube to the left, right, above or below.
if dx == 1 and dy == 0:
self.body.append(cube((tail.pos[0] - 1, tail.pos[1])))
elif dx == -1 and dy == 0:
self.body.append(cube((tail.pos[0] + 1, tail.pos[1])))
elif dx == 0 and dy == 1:
self.body.append(cube((tail.pos[0], tail.pos[1] - 1)))
elif dx == 0 and dy == -1:
self.body.append(cube((tail.pos[0], tail.pos[1] + 1)))
self.body[-1].dirnx = dx
self.body[-1].dirny = dy
Это все oop внутри основной функции, которая вызывает функцию добавления куба
flag = True
# STARTING MAIN LOOP
loop = 0
while flag:
#pygame.time.delay(10) # This will delay the game so it doesn't run too quickly
clock.tick(60) # Will ensure our game runs at 10 FPS
s.move()
if loop >= 1:
s.addCube()
loop += 1
for x in range(len(s.body)):
if s.body[x].pos in list(map(lambda z: z.pos, s.body[
x + 1:])): # This will check if any of the positions in our body list overlap
print('Score: ', len(s.body))
s.reset((10, 10))
break