[PYTHON] Comment faire un simple jeu Flappy Bird avec Pygame

0. Premier

Si vous souhaitez voir comment les choses que vous faites fonctionner cette fois-ci, veuillez consulter ici (vidéo youtube).

1. Mise en œuvre

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.

finalement

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

Comment faire un simple jeu Flappy Bird avec Pygame
Comment faire un jeu de tir avec toio (partie 1)
Comment créer un dictionnaire avec une structure hiérarchique.
Je veux faire un jeu avec Python
Essayez de créer un jeu simple avec Python 3 et iPhone
Comment créer un BOT Cisco Webex Teams à l'aide de Flask
Comment faire une traduction japonais-anglais
Comment créer un jeu d'action multijoueur en ligne avec Slack
Comment créer un bot slack
Comment créer un robot - Avancé
[Blender] Comment créer un plug-in Blender
Comment créer un robot - Basic
Rubyist a essayé de créer une API simple avec Python + bouteille + MySQL
Comment faire une commande pour lire le fichier de paramètres avec pyramide
Comment créer une caméra de surveillance (caméra de sécurité) avec Opencv et Python
Comment ajouter un package avec PyCharm
[Python] Comment rendre une classe itérable
Faisons un langage simple avec PLY 1
Comment créer un indicateur personnalisé Backtrader
Comment créer un plan de site Pelican
Comment créer un système de dialogue dédié aux débutants
Comment lire un fichier CSV avec Python 2/3
Comment envoyer un message à LINE avec curl
Un mémorandum pour faire WebDAV uniquement avec nginx
Comment dessiner un graphique à 2 axes avec pyplot
Comment développer une application de panier avec Django
Créez un simple générateur d'images par points avec Flask
Créez une interface utilisateur de jeu à partir de zéro avec pygame2!
Essayez de créer un code de "décryptage" en Python
Comment créer un plug-in QGIS (génération de package)
J'ai lu "Comment créer un laboratoire de piratage"
Essayez de créer un groupe de dièdre avec Python
Procédure de création d'application multi-plateforme avec kivy
J'ai créé un jeu ○ ✕ avec TensorFlow
J'ai fait une application d'envoi de courrier simple avec tkinter de Python
J'ai essayé de créer une API de reconnaissance d'image simple avec Fast API et Tensorflow
Une nouvelle forme d'application qui fonctionne avec GitHub: Comment créer des applications GitHub
Faisons un jeu de squash
Créez un jeu à la Tetris!
Comment convertir / restaurer une chaîne avec [] en python
[Python] Comment dessiner un graphique linéaire avec Matplotlib
Expliquez en détail comment créer un son avec python
Comment créer un sous-menu avec le plug-in [Blender]
Comment obtenir un utilisateur connecté avec les forms.py de Django
Comment convertir un objet de classe en dictionnaire avec SQLAlchemy
Créez un Slackbot simple avec un bouton interactif en python
Créer une fonction pour décrire les polices japonaises avec OpenCV
Comment créer un package Python à l'aide de VS Code
Comment créer un serveur HTTPS avec Go / Gin
Bases de PyTorch (2) -Comment créer un réseau de neurones-
Comment créer un simple script serveur / client TCP
[Python] Comment créer un histogramme bidimensionnel avec Matplotlib
Qu'est-ce que Dieu? Créez un chatbot simple avec python
[Python] Comment dessiner un diagramme de dispersion avec Matplotlib
[Mac] Je souhaite créer un serveur HTTP simple qui exécute CGI avec Python