1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150
|
# -*- coding:Latin-1 -*-
from tkinter import *
from random import randrange
class Meteor(object):
""" Crée un météorite """
def __init__(self, can):
self.can = can
# Récupère la taille du canvas
self.tailleCanX = int(self.can.cget("width"))
self.tailleCanY = int(self.can.cget("height"))
# Génère une position X aléatoire
self.posMX = randrange(5, self.tailleCanX-5)
self.meteor = self.can.create_rectangle(self.posMX,
0,self.posMX+20, 20, fill = "white")
self.deplaceMeteor()
# Génére un nouveau météor
self.can.after(1000, self.repete)
def repete(self):
""" Réappelle un Meteor """
Meteor(self.can)
def deplaceMeteor(self):
""" Déplace le météor vers le bas du canvas """
# Récupère la position du météor
self.posM = self.can.coords(self.meteor)
self.posMY = self.posM[1]
# détruit le météor s'il sort du canvas
if self.posMY < self.tailleCanY:
self.can.move(self.meteor, 0, +
10)
self.can.after(30, self.deplaceMeteor)
else:
self.can.delete(self.meteor)
class Tire(object):
""" Crée un projectile """
def __init__(self, can, posJoueur):
self.can = can
# Récupère la position du joueur en X et Y
self.posJoueur = posJoueur
self.posXJ = self.posJoueur[0]
self.posYJ = self.posJoueur[1]
self.lazer = self.can.create_line(self.posXJ+10, self.posYJ
, self.posXJ+10, self.posYJ+30,
fill = "blue")
self.deplaceTire()
def deplaceTire(self):
" Déplace le projectile jusqu'en haut du canvas "
# Récupère la position du projectile
self.posLazer = self.can.coords(self.lazer)
self.posLazerY = self.posLazer[1]
# Détruit le lazer s'il sort du canvas
if self.posLazerY > 0:
self.can.move(self.lazer, 0, -10)
self.can.after(30, self.deplaceTire)
else:
self.can.delete(self.lazer)
class Joueur(object):
""" Crée un joueur """
def __init__(self, can, posX, posY):
self.can = can
self.posX = posX #Utile pour définir
self.posY = posY #l'emplacement selon le canvas
# Création d'un rectangle de 20 * 20
self.joueur = self.can.create_rectangle(self.posX, self.posY,
self.posX+20, self.posY+20,
fill = "red")
# Gestion des évènements
self.can.bind("<Motion>", self.move)
self.can.bind("<Button-1>", self.tire, add = "+")
def move(self, event):
" Fais bouger le joueur selon la souri "
# Récupère la position de la souri
self.mouseX = event.x-10
self.mouseY = event.y+10
self.can.coords(self.joueur, self.mouseX, self.posY,
self.mouseX+20, self.posY+20)
def tire(self, event):
" Crée un projectile "
# Récupere la position du joueur
self.posJoueur = self.can.coords(self.joueur)
# Appel d'un projectile
Tire(self.can, self.posJoueur)
class App(object):
""" Application principal """
def __init__(self, larg = 200, haut = 200):
self.larg = larg
self.haut = haut
# Fenetre principal
self.root = Tk()
# Canvas de la fenetre principal
self.can = Canvas(self.root, width = self.larg,
height = self.haut, bg = "black")
self.can.pack(side = TOP)
# Bouton pour quitter qui s'ajuste à la largeur
# de la fenêtre d'où le "int(larg/7)"
Button(self.root, text="Quitter", bg="dark grey",
width = int(larg/7), command =
self.root.quit).pack(side = BOTTOM)
# Appel la classe qui créera le joueur et le
# positionne au centre
Joueur(self.can, self.larg/2, self.haut-20)
# Appel la classe qui va créé un météor
Meteor(self.can)
def mainloop(self):
"Methode qui referme la fenetre"
self.root.mainloop()
self.root.destroy()
if __name__ == "__main__":
play = App(600, 600)
play.mainloop() |
Partager