Un jeu de squash est un jeu dans lequel une balle qui frappe le bord de l'écran et rebondit est frappée avec une souris.
# coding:utf-8
import tkinter as tk
#Créer une fenêtre
win = tk.Tk()
#Créer une toile
cv = tk.Canvas(win, width=640, height=480 ,bg="white")
#Affichage de la toile
cv.pack()
#Fenêtre d'affichage
win.mainloop()
Déplacer la balle ➝ Afficher ou masquer la balle
Efface la balle
#Initialisation du jeu
ball_ichi_x = 300
ball_ichi_y = 150
ball_idou_x = 30
ball_idou_y = -30
ball_size = 10
#Dessin d'écran
def draw_screen():
#Écran propre
cv.delete('all')← Commande pour éteindre l'écran
#Campus(écran)Création
cv.create_rectangle(0, 0, 640, 480, fill="white", width=0)
#Dessine une balle
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)
#Mouvement de balle
def move_ball():
global ball_ichi_x, ball_ichi_y, ball_idou_x, ball_idou_y
#Jugement d'avoir frappé les murs gauche et droit
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
#Jugement d'avoir heurté le plafond ou le sol
if ball_ichi_y + ball_idou_y < 0 or ball_ichi_y + ball_idou_y > 480:
ball_idou_y *= -1
#Déplacer la position de la balle
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
#Commande pour le traitement itératif du jeu
def game_loop():
draw_screen()
draw_ball()
move_ball()
win.after(50, game_loop) #Paramètres de la minuterie
#Traitement principal du jeu
game_loop()← Appeler la fonction
Définir "global" lors de l'utilisation de la variable définie à l'intérieur de la fonction en dehors de la fonction L'unité de temps de la minuterie est le millimètre (1/1000) seconde
#Initialisation du jeu
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 #Confirmation de fin de partie(Faux si ce n'est pas fini/Vrai une fois terminé)
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 #point(Initialement 0 point/Augmenter de 10 points)
speed = 50 #Minuterie pour régler la vitesse du jeu(L'unité est la milliseconde)
win.title("Jeu de squash:début!") #Affiché dans la barre de titre
Vous pouvez initialiser le jeu ensemble en regroupant les valeurs initiales des variables avec une fonction nommée "init_game ()".
#Dessinez une raquette
def draw_racket ():
cv.create_rectangle(racket_ichi_x, 470, racket_ichi_x + racket_size, 480, fill="yellow")
#Mouvement de balle
def move_ball():
global is_gameover, point, ball_ichi_x, ball_ichi_y, ball_idou_x, ball_idou_y
if is_gameover: return
#Jugement d'avoir frappé les murs gauche et droit
if ball_ichi_x + ball_idou_x < 0 or ball_ichi_x + ball_idou_x > 640:
ball_idou_x *= -1
#Jugement d'avoir heurté le plafond ou le sol
if ball_ichi_y + ball_idou_y < 0:
ball_idou_y *= -1
#Jugement de frapper la raquette
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("Score =" + str(point)) #Affichage des scores
#Jugement en cas d'erreur
if ball_ichi_y + ball_idou_y > 480:
is_gameover = True
win.title("Score =" + str(point)) #Affichage des scores
#Déplacer la position de la balle
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
#Gestion des mouvements de la souris
def motion(event): #Vérifiez la position du pointeur de la souris
global racket_ichi_x
racket_ichi_x = event.x
def click(event): #Cliquez pour redémarrer
if event.num == 1:
init_game()
#Confirmation du mouvement de la souris et clic
win.bind('<Motion>', motion)
win.bind('<Button>', click)
La commande dans "<>" est appelée "événement" et vous pouvez vérifier le mouvement de la souris.
#Jugement d'avoir frappé les murs gauche et droit
if ball_ichi_x + ball_idou_x < 0 or ball_ichi_x + ball_idou_x > 640:
ball_idou_x *= -1
winsound.Beep(1300, 50)
#Jugement d'avoir heurté le plafond ou le sol
if ball_ichi_y + ball_idou_y < 0:
ball_idou_y *= -1
winsound.Beep(1300, 50)
#Jugement de frapper la raquette
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 = "bien!"
if mes == 1:
message = "bien!"
if mes == 2:
message = "agréable!"
if mes == 3:
message = "sensationnel!"
point += 10
win.title(message + "Score =" + str(point)) #Afficher le score et le message
#Jugement en cas d'erreur
if ball_ichi_y + ball_idou_y > 480:
mes = random.randint(0, 3)
if mes == 0:
message = "Tu as fait une erreur!"
if mes == 1:
message = "Donmai!"
if mes == 2:
message = "Heta merde!"
if mes == 3:
message = "Ah, je ne peux pas le voir!"
win.title(message + "Score =" + str(point)) #Afficher le score et le message
winsound.Beep(240, 800)
is_gameover = True
Vous pouvez faire un son avec "winsound.Beep (fréquence du son, temps pour faire un son)"
ball_idou_x = 15
ball_idou_y = -15
speed = 50 #Minuterie pour régler la vitesse du jeu(L'unité est la milliseconde)
Vous pouvez changer la vitesse de la balle en changeant ces valeurs
# coding:utf-8
#Jeu de squash(Tennis frappant le mur)
#Importation de module
import tkinter as tk
import random
import winsound
#Créer une fenêtre
win = tk.Tk()
#Créer une toile
cv = tk.Canvas(win, width=640, height=480 ,bg="white")
#Affichage de la toile
cv.pack()
#Initialisation du jeu
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 #Confirmation de fin de partie(Faux si ce n'est pas fini/Vrai une fois terminé)
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 #point(Initialement 0 point/Augmenter de 10 points)
speed = 50 #Minuterie pour régler la vitesse du jeu(L'unité est la milliseconde)
win.title("Jeu de squash:début!") #Affiché dans la barre de titre
#Dessin d'écran
def draw_screen():
#Écran propre
cv.delete('all') #Commande pour éteindre l'écran
#Campus(écran)Création
cv.create_rectangle(0, 0, 640, 480, fill="white", width=0)
#Dessine une balle
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)
#Dessinez une raquette
def draw_racket ():
cv.create_rectangle(racket_ichi_x, 470, racket_ichi_x + racket_size, 480, fill="yellow")
#Mouvement de balle
def move_ball():
global is_gameover, point, ball_ichi_x, ball_ichi_y, ball_idou_x, ball_idou_y
if is_gameover: return
#Jugement d'avoir frappé les murs gauche et droit
if ball_ichi_x + ball_idou_x < 0 or ball_ichi_x + ball_idou_x > 640:
ball_idou_x *= -1
winsound.Beep(1300, 50)
#Jugement d'avoir heurté le plafond ou le sol
if ball_ichi_y + ball_idou_y < 0:
ball_idou_y *= -1
winsound.Beep(1300, 50)
#Jugement de frapper la raquette
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 = "bien!"
if mes == 1:
message = "bien!"
if mes == 2:
message = "agréable!"
if mes == 3:
message = "sensationnel!"
point += 10
win.title(message + "Score =" + str(point)) #Afficher le score et le message
#Jugement en cas d'erreur
if ball_ichi_y + ball_idou_y > 480:
mes = random.randint(0, 3)
if mes == 0:
message = "Tu as fait une erreur!"
if mes == 1:
message = "Donmai!"
if mes == 2:
message = "Heta merde!"
if mes == 3:
message = "Ah, je ne peux pas le voir!"
win.title(message + "Score =" + str(point)) #Afficher le score et le message
winsound.Beep(240, 800)
is_gameover = True
#Déplacer la position de la balle
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
#Gestion des mouvements de la souris
def motion(event): #Vérifiez la position du pointeur de la souris
global racket_ichi_x
racket_ichi_x = event.x
def click(event): #Cliquez pour redémarrer
if event.num == 1:
init_game()
#Confirmation du mouvement de la souris et clic
win.bind('<Motion>', motion)
win.bind('<Button>', click)
#Commande pour le traitement itératif du jeu
def game_loop():
draw_screen()
draw_ball()
draw_racket()
move_ball()
win.after(speed, game_loop) #Paramètres de la minuterie
#Traitement principal du jeu
init_game()
game_loop()
#Fenêtre d'affichage
win.mainloop()
La fenêtre suivante ne peut être affichée que si la fenêtre exécutée est supprimée. ⇒ J'étais assez impatient avec ça. Cela ne fonctionnait pas bien, alors je me suis demandé s'il y avait un problème avec Python et je l'ai désinstallé.
Il existe différentes manières d'écrire même un programme simple comme la création d'une fenêtre ou d'un canevas. ⇒ J'ai été surpris qu'il y ait beaucoup de choses qui pourraient être omises et écrites de différentes manières.
import tkinter as tk
Dans la référence [1],
from tkinter import *
Depuis qu'il a été écrit, il peut être exécuté en l'exécutant avec ceci, mais une ligne ondulée jaune est dessinée en dessous de, et le problème est 100. Pourquoi est-ce?
[1] Mitsuru Sugaya "apprenez la tempête du centre de jeu. Introduction à la programmation de la version de dessin animé de Hello Python" (2020) Nikkei BP [2] Fumitaka Osawa "La classe d'introduction Python la plus simple" (2019) Sotec Co., Ltd.
Recommended Posts