Coder space invaders

Cocobali54

Membre
Inscription
9 Novembre 2021
Messages
1
Réactions
0
Points
42
    Réponse de Cocobali54 Forums généraux Induste Suggestions, bugs et aide du forum Aide : Coder space invaders
  • #1
Bonjour, alors voilà, je dois coder le fameux jeu space invaders avec tkinter et j'ai du mal, j'ai seulement un bout du programme, le voici :

from tkinter import *
from random import randint

class Joueur:
def __init__(self, x, y):
pass

def move(self, event):
""" Gestion des évènements clavier : déplacement gauche/droite et tir d'une rocket"""
c = event.char
pass

def draw(self, can):
""" Dessin du vaisseau du joueur dans le canevas"""
self.forme = can.create_rectangle(self.x - 20, self.y - 10, self.x + 20, self.y + 10,fill='white')

def getPosition(self):
""" Renvoi des coordonnées (x, y) du vaisseau du joueur """
pass

def delRocket(self, rocket):
""" Suppresion d'une rocket dans le tableau des rockets déja tirées par le joueur """
pass


class Rocket:
def __init__(self, x, y):
pass

def move(self):
""" Gestion du mouvement de la rocket """
pass

def draw(self, can):
""" Affichage de la rocket dans le canevas """
self.forme = can.create_rectangle(self.x - 5, self.y - 10, self.x + 5, self.y + 10,fill='red')

def hit(self, ennemi):
""" Méthode permettant de déterminer si la rocket a touché un ennemi """
pass

class Ennemi:
def __init__(self, x, y):
pass

def draw(self, can):
""" Affichage de l'ennemi dans le canevas """
self.forme = can.create_oval(self.x - 20, self.y - 20, self.x + 20, self.y + 20,fill='blue')

def move(self):
""" Gestion du mouvement de l'ennemi """
pass

def getPosition(self):
""" Renvoi des coordonnées (x, y) de l'ennemi """
pass

class Bombe:
def __init__(self, x, y):
pass

def move(self):
""" Gestion du mouvement de la bombe """
pass

def draw(self, can):
""" Affichage de la bombe dans le canevas """
self.forme = can.create_rectangle(self.x - 5, self.y - 10, self.x + 5, self.y + 10,fill='blue')

def hit(self, joueur):
""" Méthode permettant de déterminer si la bombe a touché le joueur """
pass

class Game:
def __init__(self):
self.ennemis = [] # tableau des envahisseurs
self.bombes = [] # tableau des bombes larguées par les ennemis

self.fen = Tk() # fenêtre de jeu
self.fen.title('Envahisseurs') # titre de la fenêtre
self.can = Canvas(self.fen, width = 1024, height = 768, background='black') # canevas de dessin
self.can.pack()

# création du joueur
self.joueur = Joueur(550, 700) # instanciation du joueur

self.fen.bind("<Key>", self.joueur.move) # gestion des déplacements clavier du joueur

# instanciation des ennemis ( 3 rangées de 10 )
for i in range(10):
self.ennemis.append(Ennemi(100*i+50, 50))
self.ennemis.append(Ennemi(100*i+50, 100))
self.ennemis.append(Ennemi(100*i+50, 150))

self.run() # lancement du jeu

self.fen.mainloop() # boucle principale d'évènements Tkinter

def run(self):
self.can.delete('all') # effacement général

# déplacement ennemis et largage éventuel d'une bombe
for ennemi in self.ennemis: # parcours du tableau des ennemis
ennemi.draw(self.can) # affichage
ennemi.move() # déplacement
if randint(1, 500) < 5: # larguage d'une bombe avec une probabilité de 5/500
x = ennemi.getPosition()[0] # coordonnées de
y = ennemi.getPosition()[1] # l'ennemi
self.bombes.append(Bombe(x, y + 20)) # largage d'une bombe à partir de la position de l'ennemi ( un peu en dessous...)

# affichage vaisseau joueur
self.joueur.draw(self.can)

# déplacement des rockets, et test si elles touchent un envahisseur
for rocket in self.joueur.rockets: # parcours du tableau des rockets déja tirées par le joueur
rocket.draw(self.can) # affichage de la rocket
est_tiree = rocket.move() # est-elle toujours en vol ?
if (not est_tiree): # si non,
self.joueur.delRocket(rocket) # on la supprime du tableau

for ennemi in self.ennemis: # parcours du tableau des ennemis encore en jeu
if rocket.hit(ennemi): # la rocket touche-t-elle l'ennemi ?
self.ennemis.remove(ennemi) # si oui, on retire l'ennemi de son tableau
self.joueur.delRocket(rocket) # et de même pour la rocket

# idem pour les bombes des ennemis
for bombe in self.bombes: # pour chaque bombe déja larguée
bombe.draw(self.can) # affichage de la bombe
est_tiree = bombe.move() # est-elle toujours en vol ?
if (not est_tiree): # si non,
self.bombes.remove(bombe) # on la supprime du tableau

if bombe.hit(self.joueur): # la bombe touche-t-elle le joueur ?
self.bombes.remove(bombe) # si oui on la supprime du tableau
self.fen.destroy() # et on ferme la fenêtre !

self.fen.after(30,self.run) # boucle d'animation


Merci d'avance
 
Haut Bas