Все, что указывает @jasonharper, действительно (+1). С объектно-ориентированной точки зрения в вашем коде есть серьезные структурные проблемы. Почему препятствия должны отслеживать счет игрока? Этот logi c принадлежит классам Player
или App
, а не Circle
. И похожие проблемы.
Я переработал ваш код ниже, чтобы сделать его в основном воспроизводимым. Вы увидите, что он завершается после дюжины промахов, поскольку код подсчета очков работает. Вам нужно добавить обнаружение столкновений:
from turtle import Screen, Turtle
from random import randint
class App:
def __init__(self):
self.circle = Circle()
self.player = Player()
self.player.display_player()
screen.onkey(self.player.go_left, 'Left')
screen.onkey(self.player.go_right, 'Right')
def game_loop(self):
self.circle.posit()
game = True
count = 0
while game:
touched_bottom = self.circle.drop()
if touched_bottom:
self.player.score -= 50
if self.player.score <= 0:
count += 1
if count == 3:
print('Game Over')
game = False
else:
self.player.score = 200
class Circle:
def __init__(self, size=2):
self.size = size
self.circle = Turtle()
self.ypos = 300
def size_color(self):
self.circle.color('red')
self.circle.shape('circle')
self.circle.shapesize(self.size, self.size, 1)
def posit(self):
''' positions circle random x top y '''
self.circle.hideturtle()
self.circle.penup()
self.size_color()
self.circle.setposition(randint(-340, 340), self.ypos)
self.circle.showturtle()
def drop(self):
''' Returns True if circle drops below 300 else False '''
self.ypos -= 4
self.circle.sety(self.ypos)
if self.ypos <= -300:
self.ypos = 300
self.posit()
return True
return False
class Player():
def __init__(self, score=200):
self.score = score
self.xpos = 0
self.player = Turtle()
def display_player(self):
self.player.penup()
self.player.sety(-200)
self.player.color('green')
self.player.shape('square')
def go_left(self):
self.xpos -= 15
self.player.setposition(self.xpos, -200)
def go_right(self):
self.xpos += 15
self.player.setposition(self.xpos, -200)
screen = Screen()
screen.bgcolor('black')
screen.listen()
App().game_loop()