[Tutor] Weird Python Error

Zaid Saeed zaidsaeedzaid at gmail.com
Thu Oct 17 22:09:22 CEST 2013


First and foremost, here is the code:

 

"""

Player Car

 

"""

 

import pygame, random

pygame.init()

 

screen = pygame.display.set_mode((640, 480))

 

class RedCar(pygame.sprite.Sprite):

    def __init__(self):

        pygame.sprite.Sprite.__init__(self)

        self.image = pygame.image.load("red.png")

        self.image = pygame.transform.scale(self.image,(50,75))

        self.rect = self.image.get_rect()

 

        if not pygame.mixer:

            print("problem with sound")

        else:

            pygame.mixer.init()

            self.sndYay = pygame.mixer.Sound("yay.ogg")

            self.sndThunder = pygame.mixer.Sound("thunder.ogg")

 

    def update(self):

        mousex, mousey = pygame.mouse.get_pos()

        self.rect.center = (mousex, 430)

 

class GasCan(pygame.sprite.Sprite):

    def __init__(self):

        pygame.sprite.Sprite.__init__(self)

        self.image = pygame.image.load("gas.png")

        self.image = pygame.transform.scale(self.image,(50, 50))

        self.image = self.image.convert_alpha()

        self.rect = self.image.get_rect()

        self.reset()

 

        self.dy = 5

 

    def update(self):

        self.rect.centery += self.dy

        if self.rect.top > screen.get_height():

            self.reset()

 

    def reset(self):

        self.rect.top = 0

        self.rect.centerx = random.randrange(0, screen.get_width())

 

class YellowCar(pygame.sprite.Sprite):

    def __init__(self):

        pygame.sprite.Sprite.__init__(self)

        self.image = pygame.image.load("yellow.png")

        self.image = pygame.transform.scale(self.image,(50, 75))

        self.rect = self.image.get_rect()

 

    def update(self):

        self.rect.centery += self.dy

        #self.rect.centery += random.randrange(5, 20)

        if self.rect.top > screen.get_height():

            self.reset()

 

    def reset(self):

        self.rect.bottom = 0

        self.rect.centerx = random.randrange(190, screen.get_width())

        self.dy = random.randrange(10, 30)

 

class Bush(pygame.sprite.Sprite):

    def __init__(self):

        pygame.sprite.Sprite.__init__(self)

        self.image = pygame.image.load("bush.png")

        self.image = pygame.transform.scale(self.image,(50, 50))

        self.rect = self.image.get_rect()

 

    def update(self):

        self.rect.centery += 10

        if self.rect.top > screen.get_height():

            self.reset()

 

    def reset(self):

        self.rect.bottom = 0

        self.rect.centerx = random.randrange(0, 150)

        

class Road(pygame.sprite.Sprite):

    def __init__(self):

        pygame.sprite.Sprite.__init__(self)

        self.image = pygame.image.load("road.png")

        #self.image = pygame.transform.scale(self.image,(640, 480))

        self.rect = self.image.get_rect()

        self.dy = 10

        self.reset()

 

    def update(self):

        self.rect.bottom += self.dy

        if self.rect.top >= 0:

            self.reset()

 

    def reset(self):

        self.rect.bottom = screen.get_height()

 

class Scoreboard(pygame.sprite.Sprite):

    def __init__(self):

        pygame.sprite.Sprite.__init__(self)

        self.lives = 11

        self.score = 0

        self.level = 0

        self.font = pygame.font.SysFont("None", 50)

 

    def update(self):

        self.text = "Car: %d, score: %d, level: %d" % (self.lives,
self.score, self.level)

        self.image = self.font.render(self.text, 1, (255, 255, 0))

        self.rect = self.image.get_rect()

 

def Game():

    pygame.display.set_caption("Car")

 

    background = pygame.Surface(screen.get_size())

    background.fill((0, 0, 0))

    screen.blit(background, (0, 0))

    redCar = RedCar()

    gas = GasCan()

    yellowCar1 = YellowCar()

    yellowCar2 = YellowCar()

    yellowCar3 = YellowCar()

    yellowCar4 = YellowCar()

    yellowCar5 = YellowCar()

    bush1 = Bush()

    bush2 = Bush()

    bush3 = Bush()

    road = Road()

    scoreboard = Scoreboard()

 

    goodSprites = pygame.sprite.Group(gas, road, redCar)

    scoreSprite = pygame.sprite.Group(scoreboard)

    

    clock = pygame.time.Clock()

    keepGoing = True

    while keepGoing:

        clock.tick(30)

        pygame.mouse.set_visible(False)

        for event in pygame.event.get():

            if event.type == pygame.QUIT:

                keepGoing = False

        if scoreboard.score < 500:

            badSprites = pygame.sprite.Group(yellowCar1, yellowCar2,
yellowCar3, bush1)

            scoreboard.level = 1

        elif scoreboard.score < 1000:

            badSprites = pygame.sprite.Group(yellowCar1, yellowCar2,
yellowCar3, yellowCar4, bush1, bush2)

            scoreboard.level = 2

        elif scoreboard.score < 1500:

            badSprites = pygame.sprite.Group(yellowCar1, yellowCar2,
yellowCar3, yellowCar4, yellowCar5, bush1, bush2, bush3)

            scoreboard.level = 3

 

        if redCar.rect.colliderect(gas.rect):

            redCar.sndYay.play()

            gas.reset()

            scoreboard.score += 100

 

        if scoreboard.score % 5 == 0:

            scoreboard.lives + 1

 

        hitCar = pygame.sprite.spritecollide(redCar, badSprites, False)

        

        if hitCar:

            redCar.sndThunder.play()

            scoreboard.lives -= 1

            if scoreboard.lives <= 0:

                keepGoing = False

            for theCar in hitCar:

                theCar.reset()

       

       # allSprites.clear(screen, background)

        goodSprites.update()

        badSprites.update()

        scoreSprite.update()

        goodSprites.draw(screen)

        badSprites.draw(screen)

        scoreSprite.draw(screen)

 

        pygame.display.flip()

 

    pygame.mouse.set_visible(True)

    return scoreboard.score

 

def instructions(score):

    redCar = RedCar()

    road = Road()

 

    allSprites = pygame.sprite.Group(road, redCar)

    insFont = pygame.font.SysFont(None, 50)

 

    instructions = (

    "Car Survival.     Last score: %d" % score ,

    "Instructions:  Drive your car,",

    "and avoid cars and bushes.",

    "",

    "Gain points by driving over the gas cans.",

    "",

    "good luck!",

    "",

    "click to start, escape to quit..."

    )

    

    insLabels = []

    # Create a rendered list of instructions, ready for display

    for line in instructions:

        tempLabel = insFont.render(line, 1, (255, 255, 0))

        insLabels.append(tempLabel)

    keepGoing = True

    clock = pygame.time.Clock()

    pygame.mouse.set_visible(False)

    while keepGoing:

        clock.tick(30)

        for event in pygame.event.get():

            if event.type == pygame.QUIT:

                keepGoing = False

                donePlaying = True

            # Check for a mouse click

            if event.type == pygame.MOUSEBUTTONDOWN:

                keepGoing = False

                donePlaying = False

            # .... or a quit

            elif event.type == pygame.KEYDOWN:

                if event.key == pygame.K_ESCAPE:

                    keepGoing = False

                    donePlaying = True

    

        allSprites.update()

        allSprites.draw(screen)

 

        # Display the instructions

        for i in range(len(insLabels)):

            screen.blit(insLabels[i], (50, 30*i))

 

        pygame.display.flip()

        

    pygame.mouse.set_visible(True)

    

    return donePlaying

        

def main():

    donePlaying = False

    score = 0

    while not donePlaying:

        donePlaying = instructions(score)

        if not donePlaying:

            score = Game()

    pygame.quit()

 

if __name__ == "__main__":

    main()

 

Now for some reason, it is saying that YellowCar doesn't have a dy variable,
when it clearly does. This only happens when it is going from level 1 to
level 2, I don't know what happens after level 2 because the program keeps
giving me the error. Any help would be appreciated.

 

P.S. I am new to the python language and this is my first game.

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20131017/21f174ef/attachment-0001.html>


More information about the Tutor mailing list