In questi giorni sto imparando le basi per programmare videogiochi in python, usando la libreria pygame!
Ho fatto questo mio videogioco tutto da me : si tratta di un razzo disperso nello spazio, tra giove e saturno si direbbe, e si ritrova a schivare una pioggia di asteroidi! Il gioco ha un sistema di punteggio, e maggiore diventa, più la difficoltà si fa sentire! Voglio far vincere il player a punteggio 500, ma attualmente ho programmato fino a 300. Le difficoltà aggiuntive sono: maggiore velocità degli asteroidi e più asteroidi. Esistono 3 tipi di asteroidi: i piccoli (1) medi (2) grandi (3).
Perora do la versione incompleta del gioco, per avere un feedback. ma ho intenzione di aggiungere cose come:
- Possibilità di arrivare a 500 punti e vincere il gioco
- Animazione del razzo
- La possibilità di poter tenere premuto il tasto (per favore ditemi come)
- Animazione degli asteroidi (facendoli girare su se stessi)
- Maggiore randomicità degli asteroidi
Ecco il codice:
import pygame
from sys import exit
from random import randint
def display_score():
current_time = (int(pygame.time.get_ticks()/1000) - tempo_iniziale)
punti_surf =font.render("Punti: "+str(current_time),False,(51,255,209))
punti_surf = pygame.transform.scale(punti_surf,(150,50))
punti_rect = punti_surf.get_rect(center = (400,50))
screen.blit(punti_surf,punti_rect)
return current_time
pygame.init()
screen = pygame.display.set_mode((800,400))
pygame.display.set_caption("Spaceship Command Simulator")
clock = pygame.time.Clock()
tempo_iniziale = 0
sfondo = pygame.image.load("grafiche/sfondo.png")
game_active = True
#testo
font = pygame.font.Font("font/Pixeltype.ttf")
#razzo
razzo1 = pygame.image.load("grafiche/navicella/navicella1.png")
razzo_rect = razzo1.get_rect(center = (50,200))
#razzo game over
razzo1_go = pygame.transform.scale2x(razzo1)
razzo1_rect_go = razzo1.get_rect(center = (400,200))
#asteroide 1/piccolo
asteroide1 = pygame.image.load("grafiche/asteroide1/asteroide1_1.png")
asteroide1_rect = asteroide1.get_rect(center = (800,200))
asteroide1_1_rect = asteroide1.get_rect(center = (700,250))
asteroide1_2_rect = asteroide1.get_rect(center = (800,256))
#asteroide 2/medio
asteroide2 = pygame.image.load("grafiche/asteroide2/asteroide2_1.png")
asteroide2_rect = asteroide2.get_rect(center = (800,100))
asteroide2_1_rect = asteroide2.get_rect(center = (800,350))
#asteroide 3/grande
asteroide3 = pygame.image.load("grafiche/asteroide3/asteroide3_1.png")
asteroide3_rect = asteroide3.get_rect(center = (810,340))
asteroide3_1_rect = asteroide3.get_rect(center = (825,393))
#timer
tempo_iniziale = 0
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
exit()
if event.type == pygame.KEYDOWN and event.key == pygame.K_w:
if razzo_rect.y <= 0:
razzo_rect.y = 1
else:
razzo_rect.y -= 20
if event.type == pygame.KEYDOWN and event.key == pygame.K_s:
if razzo_rect.bottom >= 400:
razzo_rect.bottom = 399
else:
razzo_rect.y += 20
if event.type == pygame.KEYDOWN and event.key == pygame.K_a:
if razzo_rect.left <= 0 :
razzo_rect.left = 1
else:
razzo_rect.x -= 20
if event.type == pygame.KEYDOWN and event.key == pygame.K_d:
if razzo_rect.right >= 800:
razzo_rect.right = 799
else:
razzo_rect.x += 20
if event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE:
game_active = True
asteroide1_rect.x = 800
if game_active == razzo_rect.colliderect(asteroide1_rect) or razzo_rect.colliderect(
asteroide1_1_rect) or razzo_rect.colliderect(asteroide2_rect) or razzo_rect.colliderect(asteroide2_1_rect)\
or razzo_rect.colliderect(asteroide3_rect) or razzo_rect.colliderect(asteroide3_1_rect):
game_active = False
asteroide1_rect.x = 800
asteroide1_1_rect.x = 800
asteroide1_2_rect.x = 800
asteroide2_rect.x = 800
asteroide2_1_rect.x = 800
asteroide3_rect.x = 800
asteroide3_1_rect.x = 800
asteroide1_rect.y = randint(0, 400)
asteroide1_1_rect.y = randint(0, 400)
asteroide2_rect.y = randint(0, 400)
if game_active == True:
screen.blit(sfondo,(0,0))
screen.blit(razzo1,razzo_rect)
punti = display_score()
if punti <=20:
#asteroide 1_0
asteroide1_rect.x -= 5
if asteroide1_rect.x <= -50:
asteroide1_rect.x = 800
asteroide1_rect.y = randint (0,400)
screen.blit(asteroide1,asteroide1_rect)
#asteroide 1_1
asteroide1_1_rect.x -= 5
if asteroide1_1_rect.x <= -50:
asteroide1_1_rect.x = 800
asteroide1_1_rect.y = randint (56,372)
screen.blit(asteroide1,asteroide1_1_rect)
#asteroide 2_1
asteroide2_rect.x -= 2
if asteroide2_rect.x <= -50:
asteroide2_rect.x = 800
asteroide2_rect.y = randint (0,400)
screen.blit(asteroide2,asteroide2_rect)
elif punti >=20 and punti <=50:
# asteroide 1_0
asteroide1_rect.x -= 6
if asteroide1_rect.x <= -50:
asteroide1_rect.x = 800
asteroide1_rect.y = randint(0, 400)
screen.blit(asteroide1, asteroide1_rect)
# asteroide 1_1
asteroide1_1_rect.x -= 6
if asteroide1_1_rect.x <= -50:
asteroide1_1_rect.x = 800
asteroide1_1_rect.y = randint(56, 372)
screen.blit(asteroide1, asteroide1_1_rect)
# asteroide 2_1
asteroide2_rect.x -= 3
if asteroide2_rect.x <= -50:
asteroide2_rect.x = 800
asteroide2_rect.y = randint(0, 400)
screen.blit(asteroide2, asteroide2_rect)
elif punti >=50 and punti <=100: #aggiungere gli asteroidi grandi
# asteroide 1_0
asteroide1_rect.x -= 6
if asteroide1_rect.x <= -50:
asteroide1_rect.x = 800
asteroide1_rect.y = randint(0, 400)
screen.blit(asteroide1, asteroide1_rect)
# asteroide 1_1
asteroide1_1_rect.x -= 6
if asteroide1_1_rect.x <= -50:
asteroide1_1_rect.x = 800
asteroide1_1_rect.y = randint(56, 372)
screen.blit(asteroide1, asteroide1_1_rect)
# asteroide 2_1
asteroide2_rect.x -= 3.5
if asteroide2_rect.x <= -50:
asteroide2_rect.x = 800
asteroide2_rect.y = randint(0, 400)
screen.blit(asteroide2, asteroide2_rect)
#astreroide 3
asteroide3_rect.x -= 2
if asteroide3_rect.x <= -25:
asteroide3_rect.x = 825
asteroide3_rect.y = randint(0,400)
screen.blit(asteroide3,asteroide3_rect)
elif punti >=100 and punti <=150: #aggiungere maggiore velocità
# asteroide 1_0
asteroide1_rect.x -= 7
if asteroide1_rect.x <= -50:
asteroide1_rect.x = 800
asteroide1_rect.y = randint(0, 400)
screen.blit(asteroide1, asteroide1_rect)
# asteroide 1_1
asteroide1_1_rect.x -= 7
if asteroide1_1_rect.x <= -50:
asteroide1_1_rect.x = 800
asteroide1_1_rect.y = randint(56, 372)
screen.blit(asteroide1, asteroide1_1_rect)
# asteroide 2_1
asteroide2_rect.x -= 5
if asteroide2_rect.x <= -50:
asteroide2_rect.x = 800
asteroide2_rect.y = randint(0, 400)
screen.blit(asteroide2, asteroide2_rect)
# astreroide 3
asteroide3_rect.x -= 3
if asteroide3_rect.x <= -25:
asteroide3_rect.x = 825
asteroide3_rect.y = randint(0, 400)
screen.blit(asteroide3, asteroide3_rect)
elif punti >=150 and punti <=250: #maggiore frequenza di asteroidi medi e grandi
# asteroide 1_0
asteroide1_rect.x -= 7
if asteroide1_rect.x <= -50:
asteroide1_rect.x = 800
asteroide1_rect.y = randint(0, 400)
screen.blit(asteroide1, asteroide1_rect)
# asteroide 2
asteroide2_rect.x -= 5
if asteroide2_rect.x <= -50:
asteroide2_rect.x = 800
asteroide2_rect.y = randint(0, 400)
screen.blit(asteroide2, asteroide2_rect)
#asteroide 2_1
asteroide2_1_rect.x -= 5
if asteroide2_1_rect.x <= -75:
asteroide2_1_rect.x = 834
asteroide2_1_rect.y = randint(0,357)
screen.blit(asteroide2,asteroide2_1_rect)
# astreroide 3
asteroide3_rect.x -= 3
if asteroide3_rect.x <= -25:
asteroide3_rect.x = 825
asteroide3_rect.y = randint(0, 400)
screen.blit(asteroide3, asteroide3_rect)
#asteroide 3_1
asteroide3_1_rect.x -= 1
if asteroide3_1_rect.x <= -75:
asteroide3_1_rect.x = 900
asteroide3_1_rect.y = randint(0,400)
screen.blit(asteroide3,asteroide3_1_rect)
elif punti >=250 and punti <= 300: #aumento degli asteroidi
# asteroide 1_0
asteroide1_rect.x -= 7
if asteroide1_rect.x <= -50:
asteroide1_rect.x = 800
asteroide1_rect.y = randint(0, 400)
screen.blit(asteroide1, asteroide1_rect)
#asteroide 1_1
asteroide1_1_rect.x -= 8
if asteroide1_1_rect.x <= -50:
asteroide1_1_rect.x = 801
asteroide1_1_rect.y = randint(150,250)
screen.blit(asteroide1,asteroide1_1_rect)
#asteroide 1_2
asteroide1_2_rect.x -= 7.5
if asteroide1_2_rect.x <= -85:
asteroide1_2_rect.x = 810
asteroide1_2_rect.y = randint(0,200)
screen.blit(asteroide1,asteroide1_1_rect)
# asteroide 2
asteroide2_rect.x -= 5
if asteroide2_rect.x <= -50:
asteroide2_rect.x = 800
asteroide2_rect.y = randint(0, 400)
screen.blit(asteroide2, asteroide2_rect)
# asteroide 2_1
asteroide2_1_rect.x -= 5
if asteroide2_1_rect.x <= -75:
asteroide2_1_rect.x = 834
asteroide2_1_rect.y = randint(0, 357)
screen.blit(asteroide2, asteroide2_1_rect)
# astreroide 3
asteroide3_rect.x -= 3
if asteroide3_rect.x <= -25:
asteroide3_rect.x = 825
asteroide3_rect.y = randint(0, 400)
screen.blit(asteroide3, asteroide3_rect)
# asteroide 3_1
asteroide3_1_rect.x -= 1
if asteroide3_1_rect.x <= -75:
asteroide3_1_rect.x = 900
asteroide3_1_rect.y = randint(0, 400)
screen.blit(asteroide3, asteroide3_1_rect)
#elif punti >=300 and punti <=400:
#solo asteroidi medi e grandi
#elif punti >=400 and punti <=450:
#maggiore velocità asteroidi
#elif punti >=450 and punti <500:
#più asteroidi
#elif punti>=500:
#VITTORIA
else:
screen.blit(sfondo,(0,0))
screen.blit(razzo1,razzo1_rect_go)
game_over = font.render("GAME OVER",False,(111,196,169))
game_over = pygame.transform.scale(game_over,(400,100))
game_over_rect = game_over.get_rect(center = (400,100))
punti_mess = font.render("i tuoi punti sono: "+str(punti),False,(111,196,169))
punti_mess = pygame.transform.scale(punti_mess,(400,100))
punti_rect = punti_mess.get_rect(center = (400,200))
screen.blit(game_over,game_over_rect)
screen.blit(punti_mess,punti_rect)
tempo_iniziale = int(pygame.time.get_ticks()/1000)
razzo_rect.x = 50
razzo_rect.y = 200
pygame.display.update()
clock.tick(60)