Problème de jeux
AlpacinoNogeek
Messages postés
16
Statut
Membre
-
critou -
critou -
Bonjour,
Pour mon projet d'ISN je fait un jeux qui est le space invaders (modifié); le problème c'est qu'il me crée seulement un petit truc qui ressemble à un tir mais qu'il ne l'est pas, c'est définitivement mon seul problème (du moin que j'ai pas réglé) SVP HELP ! :'(
Pour mon projet d'ISN je fait un jeux qui est le space invaders (modifié); le problème c'est qu'il me crée seulement un petit truc qui ressemble à un tir mais qu'il ne l'est pas, c'est définitivement mon seul problème (du moin que j'ai pas réglé) SVP HELP ! :'(
from tkinter import *
from random import *
from tkinter.messagebox import*
import time
import sys
from random import shuffle
ytir=450
dyobus=10
tir=0
fenetre=Tk()
fenetre.title('Licorne Invaders')
fenetre.geometry("640x480")
Fond=Canvas(fenetre,width=800,height=600,bg='black')
Fond.place(x=0,y=0)
fichier=PhotoImage(file="images/SPACE.gif")
Fond.create_image(307,155,image=fichier)
#Creation de la plateforme
def creation_plateforme():
global plateforme,xplateforme1,yplateforme1
plateforme=[]
xplateforme1=307
yplateforme1=450
plateforme.append(Fond.create_rectangle(xplateforme1,yplateforme1,xplateforme1+59,yplateforme1+17,fill='green'))
# Fonction de deplacement de la plateforme
def move_plateforme(dx):
global xplateforme1,yplateforme1,drapeau,plateforme
xplateforme1=xplateforme1+dx
#Bordure gauche
if xplateforme1<=35:
xplateforme1=35
Fond.coords(plateforme[0],xplateforme1,yplateforme1,xplateforme1+60,yplateforme1+20)
#Bordure droite
elif xplateforme1>=550:
xplateforme1=550
Fond.coords(plateforme[0],xplateforme1,yplateforme1,xplateforme1+60,yplateforme1+20)
else:
Fond.coords(plateforme[0],xplateforme1,yplateforme1,xplateforme1+60,yplateforme1+20)
# Fonction de tir de laser
def creation_tir(self):
global xplateforme1,yplateforme1,tir,ytir,Tir,xtir
if tir!=1 :
tir=1
xtir=xplateforme1+30
ytir=yplateforme1
Tir=[(Fond.create_oval(xtir,ytir,xtir,ytir-35,fill='yellow',outline ='yellow'))]
time.sleep(0.09)
mouvement_tir()
def mouvement_tir():
global Tir,tir,dyobus,ytir
if len(Tir)==1:
if tir==1:
ytir=ytir-dyobus
if ytir<=20:
tir=0
Tir.destroy()
#Assignement des touches pour le déplacement et le tir
def right(event):
move_plateforme(10)
def left(event):
move_plateforme(-10)
fenetre.bind("<Key-Left>",left)
fenetre.bind("<Key-Right>",right)
fenetre.bind("<Key-space>",creation_tir)
creation_plateforme()
fenetre.mainloop()
try:
fenetre.destroy()
except TclError:
pass
A voir également:
- Problème de jeux
- Jeux java itel - Télécharger - Jeux vidéo
- Waptrick jeux - Télécharger - Jeux vidéo
- Jeux java football - Télécharger - Jeux vidéo
- Jeux zuma - Télécharger - Jeux vidéo
- Jeux google caché - Guide
1 réponse
Bonsoir.
Pour déplacer un item sur un canvas tkinter, tu as besoin d'utiliser la méthode move de canvas ainsi que de la méthode after de tkinter, il ne faut jamais utiliser de time.sleep dans les interfaces graphiques.
Un rapide exemple.
Il te faudra sans doute ajouter une temporisation, car si on reste appuyé sur la touche espace, l'écran sera rempli de tir.
Il faudrait aussi revoir ton code, éviter les import *, mais laisser les modules importés dans leurs espaces de noms, revoir ta compréhension du global, car tu l'utilises dans tes fonctions, alors que ce n'est pas nécessaire.
Pour déplacer un item sur un canvas tkinter, tu as besoin d'utiliser la méthode move de canvas ainsi que de la méthode after de tkinter, il ne faut jamais utiliser de time.sleep dans les interfaces graphiques.
Un rapide exemple.
import tkinter as tk
import random
fenetre = tk.Tk()
fenetre.title('Licorne Invaders')
space = tk.Canvas(fenetre, width=800, height=600, bg='black')
space.pack()
tirs = []
def creer_tir(event):
x = random.randint(10, 790)
tir = space.create_oval(x-5, 590, x+5, 600, fill='yellow', outline ='yellow')
tirs.append(tir)
def deplacer_tirs():
for tir in tirs:
x, y, x2, y2 = space.coords(tir)
if y2 > 0:
space.move(tir, 0, -1)
else:
space.delete(tir)
tirs.remove(tir)
space.after(3, deplacer_tirs)
space.after(3, deplacer_tirs)
fenetre.bind('<Key-space>', creer_tir)
fenetre.mainloop()
Il te faudra sans doute ajouter une temporisation, car si on reste appuyé sur la touche espace, l'écran sera rempli de tir.
Il faudrait aussi revoir ton code, éviter les import *, mais laisser les modules importés dans leurs espaces de noms, revoir ta compréhension du global, car tu l'utilises dans tes fonctions, alors que ce n'est pas nécessaire.
Ensuite j'ai essayé de le faire apparaître sur le x (en coordonné du joueur) mais il ne comprend pas
Merci encore
Lorsque je t'ai indiqué d'éviter d'utiliser les import * sur les modules importés, les raisons sont multiples, les principales étant qu'en faisant des import * :
- Tu pollues l'espace global de ton script.
- Si plusieurs modules ont une fonction, classe ou variable portant un même nom ou que tu déclares ta propre fonction avec un nom d'une fonction de modules importés, il y aura écrasement et forcément les problèmes qui en découleront.
- Garder les modules dans leurs propres espaces permet d'améliorer la lisibilité, cela est plus lisible et compréhensible d'écrire moduleTruc.fonctionTartuffe() que d'écrire fonctionTartuffe(), dans le 1er cas, on sait directement d'où vient cette fonction, alors que dans le 2nd cas, on ne sait pas d'où elle provient, fonction d'un module ? Lequel ? fonction personnelle ?
Mais tout ça, beaucoup de sites et didacticiels concernant python le relate bien mieux que moi.
En ce qui concerne ton utilisation de "global" dans tes fonctions, ce que je voulais dire c'est que la nécessité de mettre global sur toutes les variables externes à ta fonction n'est pas nécessaire et rend également difficilement lisible ton code.
Tu devrais relire un tutoriel sur la portée des variables en python, et en programmation.