・ Fußball-PK-Spiel ・ Amidakuji etc ... jedoch ...
Ich gab auf, weil ich es nicht mit meinen eigenen Fähigkeiten schaffen konnte. Ich überlegte und kam auf
#coding:utf-8
import tkinter as tk
class Ball:
def __init__(self, x, y, dx, dy, color):
self.x = x
self.y = y
self.dx = dx
self.dy = dy
self.color = color
def move(self, canvas):
#Löschen Sie den aktuellen Kreis
self.erase(canvas)
#Verschieben Sie die X- und Y-Koordinaten
self.x = self.x + self.dx
self.y = self.y + self.dy
#Zeichnen Sie an der nächsten Position einen Kreis
self.draw(canvas)
#Wenn es über der Kante liegt, drehen Sie es in die entgegengesetzte Richtung
if (self.x >= canvas.winfo_width()):
self.dx = -1
if (self.x <= 0):
self.dx = 1
if (self.y >= canvas.winfo_height()):
self.dy = -1
if (self.y <= 0):
self.dy = 1
def erase(self, canvas):
canvas.create_oval(self.x - 20, self.y - 20, self.x + 20,self.y + 20, fill="white", width=0)
def draw(self, canvas):
canvas.create_oval(self.x - 20, self.y - 20, self.x + 20,self.y + 20, fill=self.color, width=0)
class Rectangle(Ball):
def erase(self, canvas):
canvas.create_rectangle(self.x - 20, self.y - 20, self.x + 20,self.y + 20, fill="white", width=0)
def draw(self, canvas):
canvas.create_rectangle(self.x - 20, self.y - 20, self.x + 20,self.y + 20, fill=self.color, width=0)
class Triangle(Ball):
def erase(self, canvas):
canvas.create_rectangle(self.x - 20, self.y - 20, self.x + 20,self.y + 20, fill="white", width=0)
def draw(self, canvas):
canvas.create_polygon (self.x, self.y - 20, self.x + 20,self.y + 20, self.x -20, self.y + 20, fill=self.color, width=0)
#Bereiten Sie drei Kreise zusammen vor
balls = [
Ball(400, 300, 1, 1, "green"),
Ball(200, 100, -1, 1, "green"),
Ball(100, 200, 1, -1, "green")
]
def loop():
#Bewegung
for b in balls:
b.move(canvas)
#Block um zu brechen
class Block:
w_x = 100 #Blockbreite(x-Koordinate)
w_y = 30 #Blockbreite(y-Koordinate)
global dy, score #Ich möchte den Bewegungsbetrag und die Punktzahl der Ballklasse im Falle einer Kollision ändern, also gebe ich eine globale Erklärung ab.
#Blockschalter. 1 ist eingeschaltet,0 ist AUS
block_list =[[1,1,1,1,1,1,1,1,1,1,1,1], # j = 0 , i = 0 ~ 11
[1,1,1,1,1,1,1,1,1,1,1,1], # j = 1 , i = 0 ~ 11
[1,1,1,1,1,1,1,1,1,1,1,1]] # j = 2 , i = 0 ~11 Zeilen- / Spaltenreihenfolge
def draw(self):
for i in range(6):
for j in range(3):
cv.create_rectangle(i*self.w_x, j*self.w_y, (i+1)*self.w_x, (j+1)*self.w_y, fill = "orange", tag = "block"+str(j)+str(i))
def reflect(self):
for i in range(12):
for j in range(3):
#Ball von oben reflektiert
if (ball.y-ball.w < (j+1)*self.w_y #Der Ball befindet sich unter dem Block
and i*self.w_x < ball.x < (i+1)*self.w_x #Der Ball befindet sich zwischen der linken und rechten Seite des Blocks
and self.block_list[j][i] == 1): #Schalter ist 1
ball.dy *= -1 #Reflektieren
cv.delete("block"+str(j)+str(i)) #Löschen Sie die Zeichnung des Blocks
self.block_list[j][i] = 0 #Schalten Sie den Schalter aus
score.score += 1 #Fügen Sie der Punktzahl Punkte hinzu
score.delete() #Punktzahl aktualisieren (löschen)-Generieren)
score.draw()
#nochmal
root.after(10,loop)
#Zeichne ein Fenster
root = tk.Tk()
root.geometry("800x600")
```pyhon
# Spiel ist aus
def gameover():
global w, dx, dy
if ball.y + ball.w > win_height :
cv.delete("paddle")
cv.delete("ball")
cv.create_text(win_center_x, win_center_y, text = "GAME OVER(T_T)", font = ('FixedSys', 40))
ball.w = 0
ball.dx = 0
ball.dy = 0
# Löschspiel
def gameclear():
global w, dx, dy
if score.score == 18 :
cv.delete("paddle")
cv.delete("ball")
cv.create_text(win_center_x, win_center_y, text = "GAME CLEAR(^0^)", font = ('FixedSys', 40))
ball.w = 0
ball.dx = 0
ball.dy = 0
# Leinwand legen
canvas =tk.Canvas(root, width =800, height =600, bg="#fff")
canvas.place(x = 0, y = 0)
# Stellen Sie den Timer ein
root.after(10, loop)
root.mainloop()
#Zusammenfassung Auf diese Weise können Sie die Blöcke brechen, indem Sie alle Kugeln, Dreiecke und Quadrate in der Lektion in Kugeln verwandeln und dann die Blöcke so programmieren, dass sie brechen. Ich werde das Fußball-Pk-Spiel und Amidakuji noch einmal versuchen, was ich nicht konnte.
#Referenz https://qiita.com/Yt330110713/items/ed6beb74c02515b35248