检查我的突破(Python)

时间:2015-03-27 03:51:03

标签: python tkinter tkinter-canvas

当我开始它时,没有问题!这是完美的

但是我想改进两件事:我想在画布上找到一个窗口,在背景上有一张图片而不是悲伤的颜色。其次,我应该如何缩短代码?如果该计划在评委会面前很短暂,那就更好了。

from tkinter import *
from random import randrange
from math import cos,pi,sin

class Principale(Tk):
def __init__(self,parent,vie=5):

    Tk.__init__(self,parent)

    #Initialisation des paramètres

    self.parent = parent
    self.flag = 0 #Variable permettant d'empêcher/autoriser, la lancement de la balle
    self.vie = []
    self.score = 0

    #On crée une liste contenant autant d'élement que de vie

    for i in range(0,vie):
        self.vie.append('')

    #On crée un canevas

    can = self.can = Canvas(width=490, height = 500,bg='dark grey')
    can.focus()

    #Initialisation des commandes
    can.bind_all('<Key>', self.move)
    can.bind_all('<Return>',self.starter)
    can.bind('<Motion>',self.souris)
    can.bind('<Button-1>', self.starter)
    can.bind_all('p',self.pause)


    can.create_rectangle(0,470,492,502,fill='light grey') #Pour les vies et le score

    can.create_text(415,480,text='Score: ')
    self.tscore =  can.create_text(460,480,text='0')

    #On crée les balles représentatives des vies
    for i in range(0,vie):
        self.vie[i] = can.create_oval((25*vie)-(25*i),493,(25*vie)-10-(25*i),483,fill='red')

    #On initialise d'autres paramètres
    self.pose = 0 #Pause On/Off
    self.angle = pi/3 #Angle de rebond de la balle
    self.sens = -1 #Sens Haut/Bas de la balle
    self.horizon = 1 #Sens Gauche/Droite de la balle

    a = self.lbrique=[] #Liste comportant les briques (pour les supprimer)
    self.l = [] #Coordonnées (tuple) des briques

    coul=['green','yellow','light blue','red','orange'] #Différentes couleurs des briques
    i = 1 #Permet de définir: Résistance des briques/Couleur des briques
    x = 12 #Coordonnées en Abscisses
    y = 40 #Coordonnées en Ordonnées

    #On crée les 110 briques du jeu

    while x<470:
        a.append([can.create_rectangle(x,y,x+40,y+10,fill=coul[i]),(i%4)+1])
        self.l.append((x,y))
        y+=12
        i+=1
        i = i%5
        # i est la résistance de la brique. Si ((i%4)+1) = 3, il faudra taper 3fois la brique
        if y==160:
            x+=43
            y = 40

    #Creation de la balle
    self.boule = self.can.create_oval(250,450,260,460,fill='red')
    self.coord = [250,450]

    #Creation de la barre(pour les rebonds)
    self.barre = can.create_rectangle(235,460,275,465,fill='light green')
    self.bar = 235

    can.pack()

def starter(self,event): #Fonction qui démarre les balles
    if self.flag == 0 and len(self.vie)!=0:
        self.go()
        self.flag = 1

def pause(self,event): #Fonction qui met en pause le jeu
    self.pose+=1
    self.pose = self.pose%2
    if self.pose==0:
        self.go()
        self.can.delete(self.text)
    else:
        self.text = self.can.create_text(250,250,text='PAUSE',fill='white')

def souris(self,event): #Permet de déplacer la barre avec la Souris
    self.bar = a = event.x
    if 5 < a < 455 and self.pose==0:
        self.can.coords(self.barre,a,460,a+40,465)

def move(self,event): #Permet de déplacer la barre avec le Clavier
    a = event.keysym
    if a == 'Left':
        self.direction = -7
    if a == 'Right':
        self.direction = 7

    if a!='Return' and a!='':
        a = self.bar = self.bar+self.direction
        if 5 < a < 455 and self.pose == 0:
            self.can.coords(self.barre,a,460,a+40,465)
        else:
            self.bar-=self.direction

def go(self): #Fonction principale, déplace la balle

    stop = 0

    #On modifie les coordonnées de la balle en fonction des précedentes
    x = self.coord[0]
    y = self.coord[1]
    y += sin(self.angle)*self.sens*5
    x += (cos(self.angle))*self.horizon

    self.coord[1]=y
    self.coord[0]=x
    self.can.coords(self.boule,x,y,x+10,y+10)
    #

    i = 0
    while i<len(self.l):  #Pour chaque brique
        #On vérifie si elles sont en contact avec la balle
        if self.l[i][1]-2 <= y <= self.l[i][1]+12 and self.l[i][0]-2 <= x <= self.l[i][0]+42:
            #Si oui on change de direction
            self.sens = (-1)*self.sens
            self.lbrique[i][1] += -1
            if self.lbrique[i][1] == 0: #Si la brique ne peut plus tenir
                #On la détruit et on augmente le score
                self.can.delete(self.lbrique[i][0])
                self.score+= 20*(len(self.vie))

                texte = str(self.score)
                self.can.delete(self.tscore)
                self.tscore = self.can.create_text(460,480,text=texte)

                del self.lbrique[i]
                del self.l[i]
                if len(self.l)==0:
                #Si il n'y a plus de brique on arrête la balle
                    stop = 1
            break
        i+=1

    #Si la balle tape la barre
    if 450 <= y <= 455 and self.bar-10 < x < self.bar+47:
        #Si c'est sur le coin gauche, un angle plus grand
        if self.bar-10 <= x <= self.bar+5:
            self.angle = 2*pi/3
            self.horizon = 5

        #Si c'est sur le coin droit, un angle plus petit
        if self.bar+37 <= x <= self.bar+47:
            self.angle = pi/5
            self.horizon = 5

        #Sinon l'angle sera dans l'autre sens
        if self.bar+5 < x < self.bar+40:
            self.angle = pi/3

        self.sens = (-1)*self.sens


    if x<10 or x>478:  #Si on tape sur le bord gauche/droit
        self.horizon = (-1)*self.horizon

    if y<10: #Si on tape le plafond
        self.sens = (-1)*self.sens

    if y>466 and x>self.bar+47 or y>466 and x<self.bar-10:
        #Si on tombe à coté de la barre, on perd une vie
        self.can.delete(self.vie[0])
        del self.vie[0]
        stop = 1

    if stop == 1: #Si on a perdu une balle,ou gagné, on remet la balle à sa place
        self.flag=0
        self.sens = (-1)*self.sens
        self.can.coords(self.boule,250,440,260,430)
        self.can.coords(self.barre,235,460,275,465)
        self.bar = 235
        self.coord=[250,440]

    if len(self.vie)==0: #Si on a plus de vie, on écrit 'perdu'#
        self.can.create_text(250,250,text='PERDU',fill='white')

    if stop ==0 and self.pose==0: #Si on a pas perdu la balle, on recommence
        self.can.after(2,self.go)



app = Principale(None) ###On lance l'application
app.mainloop()

1 个答案:

答案 0 :(得分:0)

要将背景图像添加到Tkinter画布,据我所知,语法为:

backgroundImage = PhotoImage("InsertPathHere")#对于GIF

backgroundImage = BitmapImage("InsertPathHere")对于位图

我希望这可以帮到你!