Μάθημα : PyGame

109 - Μανώλης Αργυρός

Ενότητες μαθήματος

ΜΑΘΗΜΑ 4: Λίστα

# Λίστες - Νέοι εχθροί στο παιχνίδι
 
import pygame
from sys import exit
from random import randint

pygame.init()
screen = pygame.display.set_mode((1200, 700))
clock = pygame.time.Clock()
font = pygame.font.Font(None, 40)

player = pygame.Rect(100, 500, 30, 30)
star = pygame.Rect(600, 300, 15, 15)
# 20 μαύρες κουκίδες σε τυχαία σημεία και έλεγχος ώστε να μην πέφτει πάνω στον παίκτη και το star
dots = []
for i in range(20):
    dot = pygame.Rect(randint(0, 1185), randint(0, 685), 15, 15)
    while dot.colliderect(player) or dot.colliderect(star):
        dot.topleft = (randint(0, 1185), randint(0, 685))
    dots.append(dot)

points = 0
star_time = pygame.time.get_ticks()   # πότε εμφανίστηκε το αστέρι
game_active = True

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            exit()

    if game_active:
        # 7 δευτερόλεπτα για κάθε αστέρι
        seconds_left = 7 - (pygame.time.get_ticks() - star_time) // 1000
        if seconds_left <= 0:
            game_active = False

        keys = pygame.key.get_pressed()
        if keys[pygame.K_LEFT]:
            player.x = player.x - 5
        if keys[pygame.K_RIGHT]:
            player.x = player.x + 5
        if keys[pygame.K_UP]:
            player.y = player.y - 5
        if keys[pygame.K_DOWN]:
            player.y = player.y + 5

        if player.left < 0:
            player.left = 0
        if player.right > 1200:
            player.right = 1200
        if player.top < 0:
            player.top = 0
        if player.bottom > 700:
            player.bottom = 700

        if player.colliderect(star):
            points = points + 1
            star.x = randint(0, 1185)
            star.y = randint(0, 685)
            star_time = pygame.time.get_ticks()   # ο χρόνος ξαναρχίζει

            # Οι κουκίδες αλλάζουν θέση, αλλά δεν σχεδιάζονται πάνω στον παίκτη ή στο αστέρι
            for dot in dots:
                dot.topleft = (randint(0, 1185), randint(0, 685))
                while dot.colliderect(player) or dot.colliderect(star):
                    dot.topleft = (randint(0, 1185), randint(0, 685))

        # Αν ακουμπήσεις μια κουκίδα, χάνεις
        for dot in dots:
            if player.colliderect(dot):
                game_active = False

        screen.fill('skyblue')
        for dot in dots:
            pygame.draw.circle(screen, 'black', dot.center, 8)
        pygame.draw.rect(screen, 'red', player)
        pygame.draw.rect(screen, 'gold', star)
        screen.blit(font.render('Χρόνος: ' + str(seconds_left), True, 'black'), (20, 20))
        screen.blit(font.render('Πόντοι: ' + str(points), True, 'black'), (1050, 20))
    else:
        screen.fill('navy')
        screen.blit(font.render('Έχασες! Πόντοι: ' + str(points), True, 'white'), (450, 330))
    pygame.display.update()
    clock.tick(60)