[PYTHON] Endprodukt

Mit dem Endprodukt herausgefordert

・ 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


** Brechen Sie den Block mit drei Kugeln **



#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()

2020-07-09.png


#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

Recommended Posts

Endprodukt
Letzte Aufgabe