Collision entre deux turtles python

Résolu/Fermé
Herostrophe Messages postés 7 Date d'inscription samedi 29 octobre 2022 Statut Membre Dernière intervention 2 novembre 2022 - Modifié le 29 oct. 2022 à 12:54
yg_be Messages postés 23200 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 20 septembre 2024 - 2 nov. 2022 à 18:02

Bonjour, je suis en 1er et je dois créé un petit jeux que j'appelle "jeu du canon". Ce jeux consiste à tirer un boulet depuis un canon pour toucher une cible.

Mon problème est que je voudrais que dès que le boulet touche la cible cela affiche un message dans l'interface du jeux, mais je bloque complètement, je n'arrive pas à faire réagire mon programme lors d'une collision.Voila mon script, merci d'avance.

import turtle
from math import*
angle = input("Avec quelle angle voulez-vous tirer ? (0-90) ? ")
# je créé mon interface
turtle.title("JEU_DU_CANON")
fond = turtle.Screen()
fond.setup(950,800)
fond.bgcolor("black")

# je colle une image de canon que je place en bat à gauche de l'écran
canon = turtle.Turtle()
canon.fillcolor("yellow")
canon.goto(-480,-400)
canon.begin_fill()
for i in range(4):
    canon.forward(100)
    canon.left(90)
canon.end_fill()

# Je crée une cible
cible = turtle.Turtle()
cible.setx(280)
cible.sety(290)
cible.dot(100, "red")

# Maintenant, je définis un point qui va être la position du boulet de canon
boulet = turtle.Turtle()
boulet.setx(-380)
boulet.sety(-300)
boulet.pencolor("red")

# angle de mon boulet
angle = float(angle)
boulet.setheading(angle)
boulet.forward(900)

if boulet.distance(280,290) == 0:
    turtle.write("vous avez gagné")
turtle.mainloop()







Linux / Firefox 106.0

2 réponses

yg_be Messages postés 23200 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 20 septembre 2024 Ambassadeur 1 535
29 oct. 2022 à 21:25

bonjour,

Je n'ai pas testé ton code.  Si je le comprends, tu vérifies, après avoir déplacé le boulet, qu'il ne touche pas la cible.

Tu souhaites peut-être plutôt vérifier que, pendant son déplacement, le boulet ne touche pas la cible.

0
Herostrophe Messages postés 7 Date d'inscription samedi 29 octobre 2022 Statut Membre Dernière intervention 2 novembre 2022
31 oct. 2022 à 08:54

bonjour,

je pense que tu as raison mais je ne sais pas ce qu'il faut utilisé pour que le boulet "détecte" la cible.

0
yg_be Messages postés 23200 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 20 septembre 2024 1 535
31 oct. 2022 à 10:40

As-tu écrit ce code?

Tu fais la détection en ligne 37, non?

0
Herostrophe Messages postés 7 Date d'inscription samedi 29 octobre 2022 Statut Membre Dernière intervention 2 novembre 2022 > yg_be Messages postés 23200 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 20 septembre 2024
31 oct. 2022 à 21:15

Oui, mais quand je run le code, cela n'est pas pris en compte.

0
yg_be Messages postés 23200 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 20 septembre 2024 1 535 > Herostrophe Messages postés 7 Date d'inscription samedi 29 octobre 2022 Statut Membre Dernière intervention 2 novembre 2022
31 oct. 2022 à 21:25

Tu fais la détection une seule fois, quand le boulet est arrivé à destination.  Ne penses-tu pas qu'il serait préférable de faire cela tout au long de la trajectoire?

0
Amiracle > Herostrophe Messages postés 7 Date d'inscription samedi 29 octobre 2022 Statut Membre Dernière intervention 2 novembre 2022
31 oct. 2022 à 22:08

bonjour, 

je ne suis pas très doué, a vrai dire je débute en python

mais ne serait il pas possible de rajouter une boucle 'while' avec pour condition de répéter un test de collision du boulet contre le point de la cible et a la suite du 'while' mettre le texte :

turtle.write("vous avez gagné")
0
yg_be Messages postés 23200 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 20 septembre 2024 1 535 > Amiracle
1 nov. 2022 à 09:48

Utiliser une boucle me semble une bonne idée.

Si tu débutes, tu progresseras peut-être mieux en faisant d'abord des exercices plus simples, que tu peux faire seul.

0