[PYTHON] Erstelle mit pygame2 eine neue Benutzeroberfläche!

Überblick

Dieser Artikel ist der 14. Tagesartikel von Future Advent Calendar 2019. Der gestrige Artikel war von @RuyPKG Auch Neulinge wollen Spaß haben! ~ Vorbereitung der Protokolle ~.

Neulich stellte @shibukawa in einer internen Lernsitzung die Spiel-Engine vor, die der Grund für das Schreiben dieses Artikels war. Ich wollte eine Brettspiel-Benutzeroberfläche, die in Python implementiert ist, und es war schwierig, Bewegungen mit HTML-Ausdrücken auszudrücken. Deshalb habe ich mich für Pygame entschieden, eine Python-Spiel-Engine.

Was ist Pygame?

Eine plattformübergreifende Spiel-Engine, die auf Python ausgeführt werden kann. Wenn Sie den grafischen Teil des Spiels in Python schreiben können, ist dies sehr praktisch, da Sie die in Python geschriebene Spielelogik so wie sie ist einbetten können.

In Bezug auf dieses Pygame haben viele Leute, die Pygame kennen, möglicherweise gewechselt, da die Entwicklung 2009 vorübergehend eingestellt wurde und es eine Weile nicht mehr lief. Die Entwicklung für die Veröffentlichung von pygame2 wird jedoch 2019 aktiv sein, und diese Version von pygame2 wird voraussichtlich im nächsten Jahr veröffentlicht. Ab 2.0.0.dev6 wird auch python3.8 unterstützt und ich freue mich darauf. Ich denke, dass es in Zukunft Aufmerksamkeit erregen wird.

Umgebung

Umgebung

Wir werden mit dem Aufbau der Umgebung fortfahren, indem wir uns auf das offizielle Pygame Erste Schritte beziehen.

Installiere Pygame via Pip. Wenn Sie zu diesem Zeitpunkt die Version nicht angeben, wird die neueste stabile Version 1.9.6 enthalten sein. Seien Sie also vorsichtig. (1.9.6 unterstützt nur bis zu Python3.6)

pip install pygame==2.0.0.dev6

Versuchen Sie, die Probe zu bewegen

Viele Beispielspiele sind in Pygame enthalten. Lass es uns versuchen.

python -m pygame.examples.aliens
Screen Shot 2019-12-14 at 19.40.09.png

So etwas wie ein Invader-Spiel wurde ausgeführt! Eine Liste der Beispiele und welche Art von Spiel es gibt, finden Sie in README des Git-Beispielordners. Es ist also interessant, verschiedene Dinge auszuprobieren.

Machen Sie eine Probe aus 1

Während ich das Beispiel dekodiere, werde ich den Code selbst zeichnen. Dieses Mal werde ich ein Beispiel anstreben, das nur Zeichen in den Hintergrund schreibt.

Prozessablauf

Im Gegensatz zum statischen Bildschirm muss beim Zeichnen mit der Spiel-Engine der Bildschirm mit hoher Geschwindigkeit aktualisiert werden. Daher wird der Prozess wie folgt durchgeführt.

  1. Initialisierung des Ladens von Bildern usw.
  2. Löschen Sie den Bildschirm und zeichnen Sie das Hintergrundbild
  3. Aktualisieren Sie die Position und den Wert des auf dem Bildschirm angezeigten Objekts und zeichnen Sie
  4. Reflexion von Bildschirmaktualisierungen
  5. Kehren Sie zu 2 zurück

In der Spiel-Engine werden die auf dem Bildschirm angezeigten Objekte mithilfe von Sprites gezeichnet, sodass sie zum Zeitpunkt der Implementierung mithilfe einer Klasse gezeichnet werden, die die Sprite-Klasse erbt. Wenn Sie neugierig auf Sprites sind, schauen Sie sich diese an. Es ist interessant, weil es einen historischen Hintergrund wie die Geschichte der Hardware-Implementierung gibt, um das Zeichnen zu beschleunigen, aber ich denke, dass es kein besonderes Problem gibt, auch wenn Sie es nicht kennen.

import os
import pygame as pg

# game constants
SCREENRECT = pg.Rect(0, 0, 640, 480)
SCORE = 0

main_dir = os.path.split(os.path.abspath(__file__))[0]


def load_image(file):
    """ loads an image, prepares it for play
    """
    file = os.path.join(main_dir, "data", file)
    try:
        surface = pg.image.load(file)
    except pg.error:
        raise SystemExit('Could not load image "%s" %s' % (file, pg.get_error()))
    return surface.convert()

class Score(pg.sprite.Sprite):
    """ to keep track of the score.
    """

    def __init__(self):
        pg.sprite.Sprite.__init__(self)
        self.font = pg.font.Font(None, 40)
        self.font.set_italic(1)
        self.color = pg.Color("white")
        self.lastscore = -1
        self.update()
        self.rect = self.image.get_rect().move(10, 450)

    def update(self):
        """ We only update the score in update() when it has changed.
        """
        if SCORE != self.lastscore:
            self.lastscore = SCORE
            msg = "Score: %d" % SCORE
            self.image = self.font.render(msg, 0, self.color)

def main(winstyle=0):
    pg.init()
    # Set the display mode
    winstyle = 0  # |FULLSCREEN
    bestdepth = pg.display.mode_ok(SCREENRECT.size, winstyle, 32)
    screen = pg.display.set_mode(SCREENRECT.size, winstyle, bestdepth)

    # create the background, tile the bgd image
    bgdtile = load_image("background.jpg ")
    background = pg.Surface(SCREENRECT.size)
    background.blit(bgdtile, (0, 0))
    screen.blit(bgdtile, (0, 0))
    pg.display.flip()

    # Initialize Game Groups
    all = pg.sprite.RenderUpdates()

    # Create Some Starting Values
    clock = pg.time.Clock()
    global SCORE
    if pg.font:
        all.add(Score())

    # Run our main loop whilst the player is alive.
    while True:
        all.clear(screen, background)
        SCORE += 123456789
        all.update()

        # draw the scene
        dirty = all.draw(screen)
        pg.display.update(dirty)

        # cap the framerate at 40fps. Also called 40HZ or 40 times per second.
        clock.tick(40)


if __name__ == "__main__":
    main()

Unter Daten muss ein Hintergrundbild (background.jpg) erstellt werden. Es ist etwas lang, aber wenn Sie das obige Beispiel ausführen, können Sie den Hintergrund zeichnen und die Zeichen wie unten gezeigt anzeigen.

Screen Shot 2019-12-14 at 21.30.41.png

Die Teile, die für die Spiel-Engine einzigartig sind, werden unten erklärt.

Sprite-Gruppierung

all = pg.sprite.RenderUpdates() #Erstellen einer Sprite-Gruppe
all.add(Score()) #Zur Sprite-Gruppe hinzufügen
all.update() #Massenaktualisierung der Sprite-Gruppe
all.draw(screen) #Sprite-Gruppe zeichnen

Pygame verfügt über eine Funktion, mit der Sie Sprites gruppieren können, sodass Sie alle Elemente des Bildschirms oder die Elemente einer bestimmten Gruppe (z. B. nur feindliche Charaktere) gleichzeitig aktualisieren und zeichnen können. .. Es gibt verschiedene Arten von Sprite-Gruppen, z. B. geordnete Gruppen und Gruppen für einzelne Sprites, und es ist am besten, sie je nach Zweck zu verwenden. Sie können die Liste unter Offizielle Dokumente überprüfen.

Geben Sie die Bildschirmaktualisierungsrate an

clock = pg.time.Clock() #Uhrengenerierung
clock.tick(40) #Verwenden der Uhr 1/Warten Sie auf die Verarbeitung, bis 40 Sekunden vergangen sind

Wenn Sie ein Objekt verschieben, müssen Sie warten, wenn der Vorgang zu früh abgeschlossen ist, um es unabhängig vom Gewicht des Prozesses mit derselben Geschwindigkeit zu verschieben. Um dies zu erreichen, verwendet Pygame ein Clock-Objekt. Erstellen Sie einfach ein Clock-Objekt und rufen Sie clock.tick () auf, und es wird für die Zeit entsprechend der Framerate aus dem vorherigen Aufruf in den Ruhezustand versetzt, was sehr praktisch ist.

Schließlich

Zusätzlich zu der diesmal eingeführten Zeichenfunktion Pygame

Es gibt verschiedene Funktionen wie. Es ist so praktisch, eine Benutzeroberfläche schreiben zu können, die in Python in Echtzeit aktualisiert wird, sodass ich nicht auf die offizielle Veröffentlichung von pygame2 warten kann!

Recommended Posts

Erstelle mit pygame2 eine neue Benutzeroberfläche!
Erstellen Sie mit Winsows 10 eine maschinelle Lernumgebung von Grund auf neu
Erstelle Spiele mit Pygame
Erstellen Sie mit Python einen Entscheidungsbaum von 0 (1. Übersicht)
Erstellen Sie eine Homepage mit Django
Ballonaufteilungsspiel mit Pygame
Erstellen Sie ein Verzeichnis mit Python
Ich werde ein Spiel machen, um das Ablegen von Rätseln und Drachen mithilfe von Pygame zu kontrollieren
Erstellen Sie mit Docker eine Umgebung für "Deep Learning von Grund auf neu"
Erstellen Sie ein Lebensspiel, das manuell mit tkinter aktualisiert wird
[Lernrekord] Erstelle mit Pyhtons Tkinter ein mysteriöses Dungeon-Spiel
Wie man ein einfaches Flappy Bird-Spiel mit Pygame macht
Erstellen Sie mit Django eine Bulletin-Board-App von Grund auf neu. (Teil 2)
Erstellen Sie mit Django eine Bulletin-Board-App von Grund auf neu. (Teil 3)
Erstellen Sie einen Pandas-Datenrahmen aus einer Zeichenfolge.
Erstellen Sie eine virtuelle Umgebung mit Python!
Erstellen Sie einen Poisson-Stepper mit numpy.random
Realisieren Sie eine Netflix-ähnliche Benutzeroberfläche mit FlexSlider2
Erstellen Sie mit Django einen Datei-Uploader
Stellen Sie Django + React von Grund auf auf GKE bereit. (3) Erstellen Sie ein GCP-Projekt
Erstellen Sie eine Anwendung, indem Sie mit Pygame klassifizieren
So erstellen Sie einen Klon aus Github
Erstellen Sie mit Class einen Python-Funktionsdekorator
Lassen Sie uns mit Python ein Shiritori-Spiel machen
Erstellen Sie mit python3 eine Wortwolke aus Ihrem Tweet
Erstellen Sie mit Python + PIL ein Dummy-Image.
[Python] Erstellen Sie mit Anaconda eine virtuelle Umgebung
Erstellen wir mit Python eine kostenlose Gruppe
Erstellen Sie mit Mecab aus Python3 ein Tool, das Furigana automatisch mit HTML schüttelt
Erstellen Sie eine GUI-App mit Tkinter of Python
Geschäftseffizienz von Grund auf mit Python
Erstellen Sie eine große Textdatei mit Shellscript
Erstellen Sie ein Sternensystem mit Blender 2.80-Skript
Erstellen Sie eine Rangliste aus den Ergebnissen der JFL-Spiele
VM mit YAML-Datei (KVM) erstellen
Erstellen Sie eine einfache Web-App mit Flasche
Erstellen Sie mit Python 3.4 einen Worthäufigkeitszähler
Erstellen Sie einen Stapel mit einer Warteschlange und eine Warteschlange mit einem Stapel (von LetCode / Implement Stack using Queues, Implement Queue using Stacks)
Erstellen Sie eine Deb-Datei aus einem Python-Paket
So erstellen Sie ein Repository aus Medien
Ich habe ein Lebensspiel mit Numpy gemacht
Erstellen Sie mit NetworkX einen verbindenden nächsten Nachbarn
Erstellen Sie einen Webdienst mit Docker + Flask
Erstellen Sie mit Pandas einen Datenrahmen aus Excel
Erstellen Sie ein privates Repository mit AWS CodeArtifact
Erstellen Sie eine Auto-Anzeige mit Himbeer-Pi
Erstellen Sie ein teuflisches Bild mit Blenders Skript
Ich habe mit Python ein schurkenhaftes Spiel gemacht
Erstellen Sie eine Matrix mit PythonGUI (Textfeld)
Erstellen Sie mit Python einen Entscheidungsbaum von 0 und verstehen Sie ihn (5. Information Entropy)
Erstellen Sie ein Diagramm mit Rändern, die mit matplotlib entfernt wurden
Lassen Sie uns mit Flask eine Webanwendung zur Konvertierung von A nach B erstellen! Von Grund auf neu ...
Erstellen Sie eine Benutzeroberfläche, die VBA durch PySimpleGUI ersetzt (Ausgabe des Dateidialogs, der Liste, des Protokolls).
Erstellen Sie mit tkinter [Python] einen Rahmen mit transparentem Hintergrund.
Bearbeiten Sie Excel in Python, um eine Pivot-Tabelle zu erstellen
Micro Service mit GCP auf RoR von Grund auf neu
Verbinden Sie Scratch X und Digispark mit der Flasche