I'm trying to add collisions to my first game, and it has a bug.
My code is:
import pygame
from pygame.locals import *
import sys
import os
import time
width = 950
height = 500
screen = pygame.display.set_mode((width, height))
Game = False
pygame.init()
icon = pygame.image.load(os.path.join("Images", "icon.png")).convert_alpha()
pygame.display.set_icon(icon)
pygame.display.set_caption('Flappy Dog')
def game():
Game = True
background = pygame.image.load(os.path.join("Images", "Background_00.png")).convert()
Dog1 = pygame.image.load(os.path.join("Images", "Dog1.png")).convert_alpha()
SpikeUp0 = pygame.image.load(os.path.join("Images", "SpikeUp0.png")).convert_alpha()
SpikeDown0 = pygame.image.load(os.path.join("Images", "SpikeDown0.png")).convert_alpha()
Bone = pygame.image.load(os.path.join("Images", "Bone.png")).convert_alpha()
boneSprite = pygame.sprite.Sprite()
boneSprite.image = Bone
boneSprite.rect = boneSprite.image.get_rect()
spikeUpSprite = pygame.sprite.Sprite()
spikeUpSprite.image = SpikeUp0
spikeUpSprite.rect = spikeUpSprite.image.get_rect()
spikeDownSprite = pygame.sprite.Sprite()
spikeDownSprite.image = SpikeDown0
spikeDownSprite.rect = spikeDownSprite.image.get_rect()
dogSprite = pygame.sprite.Sprite()
dogSprite.image = Dog1
dogSprite.rect = dogSprite.image.get_rect()
bones = pygame.sprite.Group()
bones.add(boneSprite)
dog = pygame.sprite.Group()
dog.add(dogSprite)
spikes = pygame.sprite.Group()
spikes.add(spikeUpSprite)
spikes.add(spikeDownSprite)
pygame.display.update()
Dog1_pos_y = 100
Dog1_pos_x = 30
while Game == True:
pygame.event.pump()
if pygame.key.get_pressed()[K_UP]: # Up
Dog1_pos_y -= 1
screen.blit(background, (0, 0))
screen.blit(Dog1, (Dog1_pos_x, Dog1_pos_y))
screen.blit(SpikeDown0, (0, 436))
screen.blit(SpikeUp0, (0, 0))
pygame.display.update()
pygame.time.delay(1)
else: # Down
Dog1_pos_y = Dog1_pos_y +0.875
screen.blit(background, (0, 0))
screen.blit(Dog1, (Dog1_pos_x, Dog1_pos_y))
screen.blit(SpikeDown0, (0, 436))
screen.blit(SpikeUp0, (0, 0))
pygame.display.update()
pygame.time.delay(1)
if pygame.key.get_pressed() [K_LEFT]:
Dog1_pos_x -= 1.5
screen.blit(background, (0, 0))
screen.blit(Dog1, (Dog1_pos_x, Dog1_pos_y))
screen.blit(SpikeDown0, (0, 436))
screen.blit(SpikeUp0, (0, 0))
pygame.display.update()
pygame.time.delay(1)
if pygame.key.get_pressed() [K_RIGHT]:
Dog1_pos_x += 1.5
screen.blit(background, (0, 0))
screen.blit(Dog1, (Dog1_pos_x, Dog1_pos_y))
screen.blit(SpikeDown0, (0, 436))
screen.blit(SpikeUp0, (0, 0))
pygame.display.update()
pygame.time.delay(1)
if pygame.sprite.spritecollideany(dogSprite, spikes):
print ("GAME OVER")
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
pygame.display.update()
def gameOver():
background = pygame.image.load(os.path.join("Images", "Background_00.png")).convert()
GameOver = pygame.image.load(os.path.join("Images", "Game-Over.png")).convert_alpha()
replay = pygame.image.load(os.path.join("Images", "Replay.png")).convert_alpha()
Dog0 = pygame.image.load(os.path.join("Images", "Dog0.png")).convert_alpha()
Bone = pygame.image.load(os.path.join("Images", "Bone.png")).convert_alpha()
screen.blit(background, (0, 0))
screen.blit(GameOver, (0, 0))
screen.blit(replay, (600, 375))
screen.blit(Dog0, (10, 250))
pygame.display.flip()
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
pygame.display.update()
if event.type == pygame.MOUSEBUTTONDOWN:
x_mouse, y_mouse = pygame.mouse.get_pos()
if x_mouse >= 600 and y_mouse >= 375:
game()
def mainScreen():
background = pygame.image.load(os.path.join("Images", "Background_00.png")).convert()
FlappyDog = pygame.image.load(os.path.join("Images", "Flappy.png")).convert_alpha()
Play = pygame.image.load(os.path.join("Images", "Play.png")).convert_alpha()
Dog = pygame.image.load(os.path.join("Images", "Dog0.png")).convert_alpha()
SpikeUp0 = pygame.image.load(os.path.join("Images", "SpikeUp0.png")).convert_alpha()
SpikeUp1 = pygame.image.load(os.path.join("Images", "SpikeUp1.png")).convert_alpha()
SpikeDown0 = pygame.image.load(os.path.join("Images", "SpikeDown0.png")).convert_alpha()
SpikeDown1 = pygame.image.load(os.path.join("Images", "SpikeDown1.png")).convert_alpha()
Bone = pygame.image.load(os.path.join("Images", "Bone.png")).convert_alpha()
screen.blit(background, (0, 0))
screen.blit(SpikeUp0, (0, 0))
screen.blit(SpikeDown0, (0, 450))
screen.blit(FlappyDog, (0, 0))
screen.blit(Dog, (10, 250))
screen.blit(Bone, (150, -300))
screen.blit(Bone, (150, 400))
screen.blit(Play, (650, 370))
pygame.display.flip()
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
pygame.display.update()
if event.type == MOUSEBUTTONDOWN:
x_mouse, y_mouse = pygame.mouse.get_pos()
if x_mouse >= 650 and y_mouse >= 370:
game()
mainScreen()
I don't know why, when I press the play button I go to the game screen for a second (I'm not touching the spikes) and I go to the game over screen.
There is no error message
Thanks in advantage.