Si vous souhaitez voir comment les choses que vous faites fonctionner cette fois-ci, veuillez consulter ici (vidéo youtube).
flappy_bird.py
import pygame
import random
win = pygame.display.set_mode((400,600))
clock = pygame.time.Clock()
class Bird:
def __init__(self,win):
self.win = win
self.y = 300
self.x = 25
self.gravity = 1
self.velocity = 0
self.lift = -2
self.air = 0
def show(self):
pygame.draw.circle(self.win,(255,255,255),(self.x,self.y),16)
def update(self):
if self.air == 0:
self.velocity += self.gravity
self.y += self.velocity
self.air = 1
elif self.air > 2:
self.air = 0
elif self.air > 0:
self.air += 1
if self.y > 600:
self.y = 600
self.velocity = 0
if self.y < 0:
self.y = 0
self.velocity = 0
def up(self):
self.velocity += self.lift
class Pipe:
def __init__(self,win):
self.win = win
self.top = random.randint(0,300)
self.bottom = random.randint(0,300)
self.w = 20
self.x = 400
self.speed = 2
self.passed = False
self.color = (255,255,255)
def show(self):
pygame.draw.rect(self.win,self.color,(self.x,0,self.w,self.top))
pygame.draw.rect(self.win,self.color,(self.x,600-self.bottom,self.w,self.bottom))
def update(self):
self.x -= self.speed
def hits(self,bird):
if bird.y < self.top or bird.y > 600 - self.bottom:
if bird.x >= self.x and bird.x <= self.x + self.w:
return True
return False
def drawWindow(bird,pipes):
bird.show()
bird.update()
for pipe in pipes:
pipe.show()
pygame.display.update()
bird = Bird(win)
pipes = [Pipe(win)]
run = True
while run:
clock.tick(100)
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
keys = pygame.key.get_pressed()
if keys[pygame.K_SPACE]:
bird.up()
add_pipe = False
rem = []
for pipe in pipes:
if pipe.x + pipe.w < 0:
rem.append(pipe)
if not pipe.passed and pipe.x < bird.x:
pipe.passed = True
add_pipe = True
if pipe.hits(bird):
pipe.color = (255,0,0)
pipe.update()
if add_pipe:
pipes.append(Pipe(win))
for r in rem:
pipes.remove(r)
win.fill((0,0,0))
drawWindow(bird,pipes)
Ici, nous avons créé des classes pour Pipe et Bird, respectivement, et dans la classe oiseau, nous faisons un cercle au lieu d'un oiseau afin que l'oiseau tombe à cause de la gravité. Dans la classe Dokan, la position du Dokan supérieur et la position du Dokan inférieur sont déterminées aléatoirement, et un rectangle est dessiné sur cette base pour former le Dokan. De plus, puisque Dokan découle de la droite, une certaine valeur est soustraite de la coordonnée x pour la déplacer. Nous avons également une fonction qui renvoie True lorsqu'un oiseau frappe un dokan. Et dans la boucle finale, nous ralentissons un peu le jeu, retirons le docan lorsque l'oiseau le passe, en ajoutons un nouveau et le virons au rouge lorsque l'oiseau le frappe.
Comment faire ce jeu Flappy Bird est également expliqué dans Youtube, alors jetez un œil si vous l'aimez. Si vous avez des questions ou des conseils, veuillez commenter. De plus, si vous l'aimez, veuillez vous abonner à la chaîne.
Recommended Posts