[PYTHON] Lass uns ein Squashspiel machen

Was ist ein Squashspiel?

Ein Squash-Spiel ist ein Spiel, bei dem ein Ball, der auf den Bildschirmrand trifft und abprallt, mit einer Maus zurückgeschlagen wird.


Wie man ... macht

Schritt 1: Erstellen Sie Fenster und Leinwand

# coding:utf-8
import tkinter as tk

#Ein Fenster erstellen
win = tk.Tk()
#Erstellen einer Leinwand
cv = tk.Canvas(win, width=640, height=480 ,bg="white")
#Anzeige der Leinwand
cv.pack()

#Anzeigefenster
win.mainloop()

Schritt 2: Zeichnen Sie einen Ball und bewegen Sie ihn

Ball bewegen ➝ Ball ein- oder ausblenden

Lösche den Ball

  1. Zeigen Sie eine Kugel mit der gleichen Farbe wie der Hintergrund an
  2. Schalten Sie alle Bildschirme aus, nachdem Sie den Ball angezeigt haben. ☜ Diesmal

Schritt 1: Variablen setzen

#Spielinitialisierung
ball_ichi_x = 300 
ball_ichi_y = 150
ball_idou_x = 30
ball_idou_y = -30
ball_size = 10

Schritt 2: Zeichnen Sie einen Bildschirm

#Bildschirmzeichnung
def draw_screen():
    #Bildschirm löschen
    cv.delete('all')← Befehl zum Ausschalten des Bildschirms
    #Campus(Bildschirm)Schaffung
    cv.create_rectangle(0, 0, 640, 480, fill="white", width=0)

Schritt 3: Zeichnen Sie einen Ball

#Zeichne einen Ball
def draw_ball():
    cv.create_oval(ball_ichi_x - ball_size, ball_ichi_y - ball_size, ball_ichi_x + ball_size, ball_ichi_y + ball_size, fill="red", width=0)

Schritt 4: Bewegen Sie den Ball

#Ballbewegung
def move_ball():
    global ball_ichi_x, ball_ichi_y, ball_idou_x, ball_idou_y

    #Beurteilung des Treffens der linken und rechten Wand
    if ball_ichi_x + ball_idou_x < 0 or ball_ichi_x + ball_idou_x > 640:
        ball_idou_x *= -1
               ↓
     ball_idou_x = ball_idou_x * -1

    #Beurteilung des Aufpralls auf die Decke oder den Boden
    if ball_ichi_y + ball_idou_y < 0 or ball_ichi_y + ball_idou_y > 480:
        ball_idou_y *= -1
    
    #Bewegen Sie die Position des Balls
    if 0 <= ball_ichi_x + ball_idou_x <= 640:
        ball_ichi_x = ball_ichi_x + ball_idou_x
    if 0 <= ball_ichi_y + ball_idou_y <= 480:
        ball_ichi_y = ball_ichi_y + ball_idou_y
    
#Befehl zur iterativen Verarbeitung des Spiels
def game_loop():
    draw_screen()
    draw_ball()
    move_ball()
    win.after(50, game_loop) #Timer-Einstellungen

#Hauptverarbeitung des Spiels
game_loop()← Rufen Sie die Funktion auf

Setzen Sie "global", wenn Sie die Variable verwenden, die innerhalb der Funktion außerhalb der Funktion festgelegt wurde Die Zeiteinheit des Timers ist Millimeter (1/1000) Sekunden


Ausführungsergebnis

tk-2020-07-08-11-44-27.gif


Schritt 3: Lassen Sie uns in ein Squash-Spiel umgestalten

Schritt 1: Variablen setzen

#Spielinitialisierung
def init_game():
    global is_gameover, ball_ichi_x, ball_ichi_y
    global ball_idou_x, ball_idou_y, ball_size
    global racket_ichi_x, racket_size, point, speed
    is_gameover = False #Bestätigung des Spielendes(Falsch, wenn nicht fertig/Richtig, wenn Sie fertig sind)
    ball_ichi_x = 0
    ball_ichi_y = 250
    ball_idou_x = 15 
    ball_idou_y = -15 
    ball_size = 10
    racket_ichi_x = 0
    racket_size = 100
    point = 0 #Punkt(Anfangs 0 Punkte/Erhöhen Sie um 10 Punkte)
    speed = 50 #Timer zum Einstellen der Spielgeschwindigkeit(Das Gerät ist Millisekunden)
    win.title("Squashspiel:Start!") #Wird in der Titelleiste angezeigt

Sie können das Spiel zusammen initialisieren, indem Sie die Anfangswerte der Variablen mit einer Funktion namens "init_game ()" gruppieren.


Schritt 2: Zeichnen Sie einen Schläger

#Zeichne einen Schläger
def draw_racket ():
    cv.create_rectangle(racket_ichi_x, 470, racket_ichi_x + racket_size, 480, fill="yellow")

Schritt 3: Bewegen Sie den Ball

#Ballbewegung
def move_ball():
    global is_gameover, point, ball_ichi_x, ball_ichi_y, ball_idou_x, ball_idou_y
    if is_gameover: return
    
    #Beurteilung des Treffens der linken und rechten Wand
    if ball_ichi_x + ball_idou_x < 0 or ball_ichi_x + ball_idou_x > 640:
        ball_idou_x *= -1

    #Beurteilung des Aufpralls auf die Decke oder den Boden
    if ball_ichi_y + ball_idou_y < 0:
        ball_idou_y *= -1
    
    #Urteil über den Schläger
    if ball_ichi_y + ball_idou_y > 470 and (racket_ichi_x <= (ball_ichi_x + ball_idou_x) <= (racket_ichi_x + racket_size)):
        ball_idou_y *= -1
        if random.randint(0, 1) == 0:
            ball_idou_x *= -1
        point += 10
        win.title("Punktzahl =" + str(point)) #Anzeige der Ergebnisse
    
    #Urteil bei einem Fehler
    if ball_ichi_y + ball_idou_y > 480:
        is_gameover = True
        win.title("Punktzahl =" + str(point)) #Anzeige der Ergebnisse
    
    #Bewegen Sie die Position des Balls
    if 0 <= ball_ichi_x + ball_idou_x <= 640:
        ball_ichi_x = ball_ichi_x + ball_idou_x
    if 0 <= ball_ichi_y + ball_idou_y <= 480:
        ball_ichi_y = ball_ichi_y + ball_idou_y

Schritt 4: Mausverarbeitung

#Umgang mit Mausbewegungen
def motion(event): #Überprüfen Sie die Position des Mauszeigers
    global racket_ichi_x 
    racket_ichi_x = event.x
    
def click(event): #Klicken Sie hier, um neu zu starten
    if event.num == 1:
        init_game()

#Bestätigung der Mausbewegung und Klicken
win.bind('<Motion>', motion)
win.bind('<Button>', click)

Der Befehl in "<>" heißt "Ereignis" und Sie können die Bewegung der Maus überprüfen. ← Ereignisname (beginnend mit Großbuchstaben) "Bewegung" ← Funktionsname


Schritt 4: Optional

Lassen Sie uns einen Ton und eine Nachricht machen

    #Beurteilung des Treffens der linken und rechten Wand
    if ball_ichi_x + ball_idou_x < 0 or ball_ichi_x + ball_idou_x > 640:
        ball_idou_x *= -1
        winsound.Beep(1300, 50)
    
    #Beurteilung des Aufpralls auf die Decke oder den Boden
    if ball_ichi_y + ball_idou_y < 0:
        ball_idou_y *= -1
        winsound.Beep(1300, 50)

    #Urteil über den Schläger
    if ball_ichi_y + ball_idou_y > 470 and (racket_ichi_x <= (ball_ichi_x + ball_idou_x) <= (racket_ichi_x + racket_size)):
        ball_idou_y *= -1
        if random.randint(0, 1) == 0:
            ball_idou_x *= -1
        winsound.Beep(2000, 50)
        mes = random.randint(0, 3)
        if mes == 0:
            message = "gut!"
        if mes == 1:
            message = "gut!"
        if mes == 2:
            message = "nett!"
        if mes == 3:
            message = "Beeindruckend!"
        point += 10
        win.title(message + "Punktzahl =" + str(point)) #Punktzahl und Nachricht anzeigen
        
    #Urteil bei einem Fehler
    if ball_ichi_y + ball_idou_y > 480:
        mes = random.randint(0, 3)
        if mes == 0:
            message = "Du hast einen Fehler gemacht!"
        if mes == 1:
            message = "Donmai!"
        if mes == 2:
            message = "Heta Scheiße!"
        if mes == 3:
            message = "Ah, ich kann es nicht sehen!"
        win.title(message + "Punktzahl =" + str(point)) #Punktzahl und Nachricht anzeigen
        winsound.Beep(240, 800)
        is_gameover = True

Sie können einen Sound mit "winsound.Beep (Tonfrequenz, Zeit, um einen Sound zu erzeugen)" erzeugen.


Lassen Sie uns die Geschwindigkeit des Balls ändern

ball_idou_x = 15
    ball_idou_y = -15
 speed = 50 #Timer zum Einstellen der Spielgeschwindigkeit(Das Gerät ist Millisekunden)

Sie können die Geschwindigkeit des Balls ändern, indem Sie diese Werte ändern


Quellcode

# coding:utf-8

#Squashspiel(Wand schlagen Tennis)
#Modulimport
import tkinter as tk
import random
import winsound

#Ein Fenster erstellen
win = tk.Tk()
#Erstellen einer Leinwand
cv = tk.Canvas(win, width=640, height=480 ,bg="white")
#Anzeige der Leinwand
cv.pack()

#Spielinitialisierung
def init_game():
    global is_gameover, ball_ichi_x, ball_ichi_y
    global ball_idou_x, ball_idou_y, ball_size
    global racket_ichi_x, racket_size, point, speed
    is_gameover = False #Bestätigung des Spielendes(Falsch, wenn nicht fertig/Richtig, wenn Sie fertig sind)
    ball_ichi_x = 0
    ball_ichi_y = 250
    ball_idou_x = 15
    ball_idou_y = -15
    ball_size = 10
    racket_ichi_x = 0
    racket_size = 100
    point = 0 #Punkt(Anfangs 0 Punkte/Erhöhen Sie um 10 Punkte)
    speed = 50 #Timer zum Einstellen der Spielgeschwindigkeit(Das Gerät ist Millisekunden)
    win.title("Squashspiel:Start!") #Wird in der Titelleiste angezeigt

#Bildschirmzeichnung
def draw_screen():
    #Bildschirm löschen
    cv.delete('all') #Befehl zum Ausschalten des Bildschirms
    #Campus(Bildschirm)Schaffung
    cv.create_rectangle(0, 0, 640, 480, fill="white", width=0)

#Zeichne einen Ball
def draw_ball():
    cv.create_oval(ball_ichi_x - ball_size, ball_ichi_y - ball_size, ball_ichi_x + ball_size, ball_ichi_y + ball_size, fill="red", width=0)

#Zeichne einen Schläger
def draw_racket ():
    cv.create_rectangle(racket_ichi_x, 470, racket_ichi_x + racket_size, 480, fill="yellow")

#Ballbewegung
def move_ball():
    global is_gameover, point, ball_ichi_x, ball_ichi_y, ball_idou_x, ball_idou_y
    if is_gameover: return
    
    #Beurteilung des Treffens der linken und rechten Wand
    if ball_ichi_x + ball_idou_x < 0 or ball_ichi_x + ball_idou_x > 640:
        ball_idou_x *= -1
        winsound.Beep(1300, 50)
    
    #Beurteilung des Aufpralls auf die Decke oder den Boden
    if ball_ichi_y + ball_idou_y < 0:
        ball_idou_y *= -1
        winsound.Beep(1300, 50)

    #Urteil über den Schläger
    if ball_ichi_y + ball_idou_y > 470 and (racket_ichi_x <= (ball_ichi_x + ball_idou_x) <= (racket_ichi_x + racket_size)):
        ball_idou_y *= -1
        if random.randint(0, 1) == 0:
            ball_idou_x *= -1
        winsound.Beep(2000, 50)
        mes = random.randint(0, 3)
        if mes == 0:
            message = "gut!"
        if mes == 1:
            message = "gut!"
        if mes == 2:
            message = "nett!"
        if mes == 3:
            message = "Beeindruckend!"
        point += 10
        win.title(message + "Punktzahl =" + str(point)) #Punktzahl und Nachricht anzeigen
        
    #Urteil bei einem Fehler
    if ball_ichi_y + ball_idou_y > 480:
        mes = random.randint(0, 3)
        if mes == 0:
            message = "Du hast einen Fehler gemacht!"
        if mes == 1:
            message = "Donmai!"
        if mes == 2:
            message = "Heta Scheiße!"
        if mes == 3:
            message = "Ah, ich kann es nicht sehen!"
        win.title(message + "Punktzahl =" + str(point)) #Punktzahl und Nachricht anzeigen
        winsound.Beep(240, 800)
        is_gameover = True

    #Bewegen Sie die Position des Balls
    if 0 <= ball_ichi_x + ball_idou_x <= 640:
        ball_ichi_x = ball_ichi_x + ball_idou_x
    if 0 <= ball_ichi_y + ball_idou_y <= 480:
        ball_ichi_y = ball_ichi_y + ball_idou_y

#Umgang mit Mausbewegungen
def motion(event): #Überprüfen Sie die Position des Mauszeigers
    global racket_ichi_x 
    racket_ichi_x = event.x
    
def click(event): #Klicken Sie hier, um neu zu starten
    if event.num == 1:
        init_game()

#Bestätigung der Mausbewegung und Klicken
win.bind('<Motion>', motion)
win.bind('<Button>', click)

#Befehl zur iterativen Verarbeitung des Spiels
def game_loop():
    draw_screen()
    draw_ball()
    draw_racket()
    move_ball()
    win.after(speed, game_loop) #Timer-Einstellungen

#Hauptverarbeitung des Spiels
init_game()
game_loop() 
#Anzeigefenster
win.mainloop()


Ausführungsergebnis

ミスしたね_得点=10-2020-07-08-17-30-12.gif


スカッシュゲーム (3).PNG


Was mir aufgefallen ist


Frage

import tkinter as tk 

In Referenz [1],

from tkinter import *

Da es geschrieben wurde, kann es ausgeführt werden, indem es damit ausgeführt wird, aber eine gelbe Wellenlinie wird unter von gezeichnet, und das Problem ist 100. Warum ist das?

Verweise

[1] Mitsuru Sugaya "Lernen Sie den Game Center Storm Einführung in die Programmierung der Cartoon-Version von Hello Python" (2020) Nikkei BP [2] Fumitaka Osawa "Die einfachste Python-Einführungsklasse" (2019) Sotec Co., Ltd.

Recommended Posts

Lass uns ein Squashspiel machen
Mach ein Spiel im Tetris-Stil!
Lassen Sie uns mit Python ein Shiritori-Spiel machen
〇✕ Ich habe ein Spiel gemacht
Ich möchte ein Spiel mit Python machen
Machen Sie einen Funktionsdekorateur
Erstellen Sie ein cocos2d-Spiel mit einem Pixel-Doppelwinkelfenster
Erstellen Sie eine Distanzmatrix
Mach ein Janken-Spiel in einer Zeile (Python)
Ich mache ein Passwort!
Machen Sie einen Nyan-Knopf
Ich habe ein ○ ✕ Spiel mit TensorFlow gemacht
Erstellen Sie einen Base64-Decoder
Wie man ein Schießspiel mit toio macht (Teil 1)
Versuchen Sie, ein einfaches Spiel mit Python 3 und iPhone zu erstellen
Machen wir einen Discord Bot.
Erstellen Sie ein Blueqat-Backend ~ Teil 1
Erstellen Sie ein Blueqat-Backend ~ Teil 2
[Django] Erstellen Sie ein Pulldown-Menü
Machen Sie einen LINE BOT (Chat)
Erstellen Sie ein Lesezeichen in Python
Machen Sie eine Lotterie mit Python
Machen Sie Responder zu einem Daemon (Dienst)
Machen Sie ein Feuer mit kdeplot
Erstellen Sie einen Berechnungsbohrdruck
Wie erstelle ich ein Multiplayer-Online-Actionspiel mit Slack?
Wie man ein einfaches Flappy Bird-Spiel mit Pygame macht
Machen wir eine Remote-Rumba [Hardware]
Wie erstelle ich eine japanisch-englische Übersetzung?
Machen Sie eine Santa-Kennung aus einem Santa-Bild
Lassen Sie uns eine Remote-Rumba erstellen [Software]
Machen Sie eine Tweet-Box für Pepper
Lassen Sie uns eine GUI mit Python erstellen.
Machen Sie einen Sound mit Jupyter Notebook
Machen wir einen Spot Sale Service 2
Erstellen Sie mit TensorFlow eine Gesichtserkennung
Wie man einen lockeren Bot macht
Machen wir einen Blockbruch mit wxPython
Machen wir einen Spot Sale Service 1
Wie erstelle ich einen Crawler?
So erstellen Sie eine rekursive Funktion
Machen Sie die C-Kompilierung etwas einfacher
Python / Machen Sie ein Diktat aus einer Liste.
[Python] Machen Sie die Funktion zu einer Lambda-Funktion
Erstellen Sie ein Empfehlungssystem mit Python
[Blender] So erstellen Sie ein Blender-Plug-In
Machen Sie einen Filter mit einer Django-Vorlage
Zura machte wie ein Lebensspiel
Lassen Sie uns ein Diagramm mit Python erstellen! !!
Machen wir mit xCAT einen Spacon
Wie erstelle ich einen Crawler?
Erstellen Sie mit PySide einen Modelliterator
Machen Sie eine schöne Grafik mit Plotly
Machen Sie einen Vorhanggenerator mit Blender