[PYTHON] Produit final

Contesté avec le produit final

・ Jeu de football PK ・ Amidakuji etc ... Cependant, ...


J'ai abandonné parce que je ne pouvais pas y arriver avec mes propres capacités. J'ai reconsidéré et est venu avec


** Brisez le bloc avec trois balles **



#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):
        #Effacer le cercle actuel
        self.erase(canvas)
        #Déplacer les coordonnées X et y
        self.x = self.x + self.dx
        self.y = self.y + self.dy
        #Tracez un cercle à la position suivante
        self.draw(canvas)
        #S'il est au-dessus du bord, tournez-le dans le sens opposé
        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)

#Préparez trois cercles ensemble
balls = [
    Ball(400, 300, 1, 1, "green"),
    Ball(200, 100, -1, 1, "green"),
    Ball(100, 200, 1, -1, "green")
]
def loop():
  #bouge toi
  for b in balls:
      b.move(canvas)

 #Bloquer pour casser
 class Block:
        w_x = 100 #Largeur de bloc(coordonnée x)
        w_y = 30 #Largeur de bloc(coordonnée y)
        global dy, score #Je veux changer la quantité de mouvement et le score de la classe de balle en cas de collision, donc je fais une déclaration globale.

        #Interrupteur de blocage. 1 est ON,0 est OFF
        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 Ordre des lignes / colonnes
        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):
                    #Balle réfléchie d'en haut
                    if (ball.y-ball.w < (j+1)*self.w_y #La balle est sous le bloc
                        and i*self.w_x < ball.x < (i+1)*self.w_x #La balle est prise en sandwich entre les côtés gauche et droit du bloc
                        and self.block_list[j][i] == 1): #Le commutateur est 1
                            ball.dy *= -1 #Réfléchir
                            cv.delete("block"+str(j)+str(i)) #Effacer le dessin du bloc
                            self.block_list[j][i] = 0 #éteignez l'interrupteur
                            score.score += 1 #Ajouter des points au score
                            score.delete() #Mettre à jour (supprimer) le score-produire)
                            score.draw()

  #encore
  root.after(10,loop)

#Dessinez une fenêtre
root = tk.Tk()
root.geometry("800x600")

```pyhon

# Jeu terminé
    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

 # Jeu clair
    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

# Mettre la toile
canvas =tk.Canvas(root, width =800, height =600, bg="#fff")
canvas.place(x = 0, y = 0)

# Réglez la minuterie
root.after(10, loop)

root.mainloop()

2020-07-09.png


#Résumé En faisant cela, vous pouvez casser les blocs en transformant toutes les boules, triangles et carrés de la leçon en boules, puis en programmant les blocs à casser. Je vais réessayer le match de football et Amidakuji que je ne pouvais pas faire.


#référence https://qiita.com/Yt330110713/items/ed6beb74c02515b35248

Recommended Posts

Produit final
Tache finale