Ein Squash-Spiel ist ein Spiel, bei dem ein Ball, der auf den Bildschirmrand trifft und abprallt, mit einer Maus zurückgeschlagen wird.
# 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()
Ball bewegen ➝ Ball ein- oder ausblenden
Lösche den Ball
#Spielinitialisierung
ball_ichi_x = 300
ball_ichi_y = 150
ball_idou_x = 30
ball_idou_y = -30
ball_size = 10
#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)
#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
#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.
#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
#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
#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.
#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.
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
# 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()
Das nächste Fenster kann nur angezeigt werden, wenn das ausgeführte Fenster gelöscht wurde. ⇒ Ich war ziemlich ungeduldig damit. Es lief nicht gut, also fragte ich mich, ob es ein Problem mit Python gab und deinstallierte es.
Es gibt verschiedene Möglichkeiten, um auch ein einfaches Programm zu schreiben, z. B. ein Fenster oder eine Leinwand zu erstellen. ⇒ Ich war überrascht, dass es viele Dinge gab, die weggelassen und auf unterschiedliche Weise geschrieben werden konnten.
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?
[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