mirror of
https://forge.apps.education.fr/blender-edutech/ropy.git
synced 2024-01-27 08:23:20 +01:00
Ajout de la documentation des missions, des fonctions Rover et des fonctions Python
This commit is contained in:
parent
fe2629e7ab
commit
105d8130b3
BIN
ropy-13.blend
Normal file
BIN
ropy-13.blend
Normal file
Binary file not shown.
36
rp_doc.py
36
rp_doc.py
@ -52,21 +52,23 @@ missions_card=rp_map1.get_missions_card()
|
|||||||
# Rover
|
# Rover
|
||||||
###############################################################################
|
###############################################################################
|
||||||
|
|
||||||
rover_card=["avancer-card", "tourner-card", "baliser-card", "prendre-card", "detecter-card", "radar-card"]
|
rover_card=["avancer-card", "tourner-card", "baliser-card", "detecter-card"]
|
||||||
|
# rover_card=["avancer-card", "tourner-card", "baliser-card", "prendre-card", "detecter-card", "radar-card"]
|
||||||
|
|
||||||
# Avancer
|
# Avancer
|
||||||
rp_avancer_title="Avancer"
|
rp_avancer_title="Avancer"
|
||||||
rp_avancer_text="FIXME"
|
rp_avancer_text=" rp_avancer() \n -> Avance d'un pas en avant."
|
||||||
card_description.update({"avancer-card" : [rp_avancer_title, rp_avancer_text]})
|
card_description.update({"avancer-card" : [rp_avancer_title, rp_avancer_text]})
|
||||||
|
|
||||||
# Tourner
|
# Tourner
|
||||||
rp_tourner_title="Tourner"
|
rp_tourner_title="Tourner"
|
||||||
rp_tourner_text="FIXME"
|
rp_tourner_text=" rp_gauche() \n -> Tourne à gauche (90°).\n \n"
|
||||||
|
rp_tourner_text=rp_tourner_text + " rp_droite() \n -> Tourne à droite (90°)."
|
||||||
card_description.update({"tourner-card" : [rp_tourner_title, rp_tourner_text]})
|
card_description.update({"tourner-card" : [rp_tourner_title, rp_tourner_text]})
|
||||||
|
|
||||||
# Baliser
|
# Baliser
|
||||||
rp_baliser_title="Baliser"
|
rp_baliser_title="Baliser"
|
||||||
rp_baliser_text="FIXME"
|
rp_baliser_text=" rp_marquer() \n -> Place une balise sur la case."
|
||||||
card_description.update({"baliser-card" : [rp_baliser_title, rp_baliser_text]})
|
card_description.update({"baliser-card" : [rp_baliser_title, rp_baliser_text]})
|
||||||
|
|
||||||
# Prendre
|
# Prendre
|
||||||
@ -76,7 +78,7 @@ card_description.update({"prendre-card" : [rp_prendre_title, rp_prendre_text]})
|
|||||||
|
|
||||||
# Détecter
|
# Détecter
|
||||||
rp_detecter_title="Détecter"
|
rp_detecter_title="Détecter"
|
||||||
rp_detecter_text="FIXME"
|
rp_detecter_text=" rp_detect() \n -> Détecte un obstacle.\n \n La fonction retourne : \n - \"True\" si il a un obstacle, \n - \"False\" si il n'y a pas d'obstacle."
|
||||||
card_description.update({"detecter-card" : [rp_detecter_title, rp_detecter_text]})
|
card_description.update({"detecter-card" : [rp_detecter_title, rp_detecter_text]})
|
||||||
|
|
||||||
# Radar
|
# Radar
|
||||||
@ -88,21 +90,33 @@ card_description.update({"radar-card" : [rp_radar_title, rp_radar_text]})
|
|||||||
# Python
|
# Python
|
||||||
###############################################################################
|
###############################################################################
|
||||||
|
|
||||||
python_card=["fonction-card", "alternative-card", "boucle-card", "liste-card", "dict-card", "poo-card"]
|
python_card=["fonction-card", "alternative-card", "boucle-card"]
|
||||||
|
# python_card=["fonction-card", "alternative-card", "boucle-card", "liste-card", "dict-card", "poo-card"]
|
||||||
|
|
||||||
# Fonction
|
# Fonction
|
||||||
rp_fonction_title="Fonction"
|
rp_fonction_title="Fonction"
|
||||||
rp_fonction_text="FIXME"
|
rp_fonction_text=" La définition d'une fonction se fait \n avec \"def\". La fonction peut \n renvoyer une valeur avec \"return\". \n \n"
|
||||||
|
rp_fonction_text=rp_fonction_text + " def fonction_1 (arguments) : \n instruction_1 \n instruction_2 \n ....\n return valeurs_renvoyées \n\n"
|
||||||
|
rp_fonction_text=rp_fonction_text + " Les arguments sont des données \n transmisent à la fonction."
|
||||||
card_description.update({"fonction-card" : [rp_fonction_title, rp_fonction_text]})
|
card_description.update({"fonction-card" : [rp_fonction_title, rp_fonction_text]})
|
||||||
|
|
||||||
# Alternative
|
# Alternative
|
||||||
rp_alternative_title="Alternative"
|
rp_alternative_title="Alternative"
|
||||||
rp_alternative_text="FIXME"
|
rp_alternative_text=" L'alternative permet d'éxécuter des \n instructions en fonction d'un test. \n"
|
||||||
|
rp_alternative_text=rp_alternative_text + " Elle se programme en suivant la \n suite : si ... alors ... sinon ... où \n"
|
||||||
|
rp_alternative_text=rp_alternative_text + " \"si\" est \"if \" et \"sinon\" est \"else\". \n \n"
|
||||||
|
rp_alternative_text=rp_alternative_text + " if condition :\n"
|
||||||
|
rp_alternative_text=rp_alternative_text + " instruction_1\n"
|
||||||
|
rp_alternative_text=rp_alternative_text + " else : \n"
|
||||||
|
rp_alternative_text=rp_alternative_text + " instruction_2\n \n"
|
||||||
|
rp_alternative_text=rp_alternative_text + "Le sinon (\"else\") est facultatif. \n\n"
|
||||||
card_description.update({"alternative-card" : [rp_alternative_title, rp_alternative_text]})
|
card_description.update({"alternative-card" : [rp_alternative_title, rp_alternative_text]})
|
||||||
|
|
||||||
# Boucle
|
# Boucle
|
||||||
rp_boucle_title="Boucle"
|
rp_boucle_title="Boucles"
|
||||||
rp_boucle_text="FIXME"
|
rp_boucle_text=" Il y a deux types de boucle : \n - avec \"for\" pour définir un nombre \n de répétition (ici N), \n - avec \"while\" (tant que) pour \n prendre en compte une condition. \n \n"
|
||||||
|
rp_boucle_text=rp_boucle_text + " for i in range (n) : \n instruction \n \n"
|
||||||
|
rp_boucle_text=rp_boucle_text + " while condition : \n instruction \n \n"
|
||||||
card_description.update({"boucle-card" : [rp_boucle_title, rp_boucle_text]})
|
card_description.update({"boucle-card" : [rp_boucle_title, rp_boucle_text]})
|
||||||
|
|
||||||
# Liste
|
# Liste
|
||||||
@ -340,6 +354,8 @@ def card (cont):
|
|||||||
obj = cont.owner
|
obj = cont.owner
|
||||||
name_chap = scene.objects['Doc']['page_chap']
|
name_chap = scene.objects['Doc']['page_chap']
|
||||||
name_fct= obj.name[:-7]
|
name_fct= obj.name[:-7]
|
||||||
|
scene.objects['Doc_title']['Text'] = " "
|
||||||
|
scene.objects['Doc_text']['Text'] = " "
|
||||||
|
|
||||||
# Enlever l'ancienne carte
|
# Enlever l'ancienne carte
|
||||||
if scene.objects['Doc_chap-'+name_chap]['page_fct'] !="":
|
if scene.objects['Doc_chap-'+name_chap]['page_fct'] !="":
|
||||||
|
69
rp_map1.py
69
rp_map1.py
@ -36,57 +36,73 @@ missions_conf ={}
|
|||||||
# rp_niveau (1) # Saisir le niveau (de 0 à 5)
|
# rp_niveau (1) # Saisir le niveau (de 0 à 5)
|
||||||
# ropy_init.main() # Initialisation de la scène 3D
|
# ropy_init.main() # Initialisation de la scène 3D
|
||||||
|
|
||||||
missions_card=["mission_1-card", "mission_2-card", "mission_3-card", "mission_4-card", "mission_5-card", "mission_6-card", "mission_7-card", "mission_8-card"]
|
missions_card=["mission_1-card", "mission_2-card", "mission_3-card", "mission_4-card", "mission_5-card", "mission_6-card"]
|
||||||
|
# missions_card=["mission_1-card", "mission_2-card", "mission_3-card", "mission_4-card", "mission_5-card", "mission_6-card", "mission_7-card", "mission_8-card"]
|
||||||
|
|
||||||
# Mission 1
|
# Mission 1
|
||||||
mission_1_title="Mission 1\n Premiers pas"
|
mission_1_title="Mission 1\n Premiers pas"
|
||||||
mission_1_text="\n \n aa"
|
mission_1_text="\n \n Il faut aider Ropy à atteindre la \n case de l'objectif (à l'est de la \n station). \n \n Afin de visualiser le trajet, il \n audra marquer les cases."
|
||||||
missions_card_description.update({"mission_1-card" : [mission_1_title, mission_1_text]})
|
|
||||||
mission_1_init=[-11.0,3.0, "e"] # Rover init position (x,y), orientation ("n|s|e|w")
|
mission_1_init=[-11.0,3.0, "e"] # Rover init position (x,y), orientation ("n|s|e|w")
|
||||||
mission_1_aim=[-7.0,2.0] # Aim position (x,y)
|
mission_1_aim=[-7.0,2.0] # Aim position (x,y)
|
||||||
|
missions_card_description.update({"mission_1-card" : [mission_1_title, mission_1_text]})
|
||||||
missions_conf.update({"1" : [mission_1_init, mission_1_aim]})
|
missions_conf.update({"1" : [mission_1_init, mission_1_aim]})
|
||||||
|
|
||||||
# ct_build_text = ct_build_text +" \v- category (string) : \n \v \v- \"Archer tower\" (default value)\n \v \v- \"Mage tower\"\n"
|
|
||||||
# ct_build_text = ct_build_text +" \v- name (string)\n \v- color (RGB tuple, default=purple)\n"
|
|
||||||
# ct_build_text = ct_build_text +" \v- style (string) : \n \v \v- \"square\" (default value) or \"round\"\n \v \v- version : A (default value), B or C\n \v \v- exemple : 'round-B' \n"
|
|
||||||
# ct_build_text = ct_build_text +" \v- Return boolean flag (builded -> True)\n\n"
|
|
||||||
# ct_build_text = ct_build_text +"Predefined colors : blue, green, magenta,\n orange, purple, red, turquoise, yellow.\n\n"
|
|
||||||
# ct_build_text = ct_build_text +"Exemple : ct_build (1, 1, \"Archer tower\", \n \"Tower #1\", yellow, \"round-A\")\n"
|
|
||||||
|
|
||||||
# Mission 2
|
# Mission 2
|
||||||
mission_2_title="Mission 2\n FIXME"
|
mission_2_title="Mission 2\n Ma première fonction"
|
||||||
mission_2_text="\n \n FIXME"
|
mission_2_text= "\n \n Pour faciliter le codage, vous allez \n créer la fonction \"mrp_avancer()\" \n regroupant avancer et marquer. \n -> Voir onglet Python, page \"Fonction\"."
|
||||||
|
mission_2_init=[-11.0,3.0, "e"] # Rover init position (x,y), orientation ("n|s|e|w")
|
||||||
|
mission_2_aim=[-7.0,2.0] # Aim position (x,y)
|
||||||
missions_card_description.update({"mission_2-card" : [mission_2_title, mission_2_text]})
|
missions_card_description.update({"mission_2-card" : [mission_2_title, mission_2_text]})
|
||||||
|
missions_conf.update({"2" : [mission_2_init, mission_2_aim]})
|
||||||
|
|
||||||
# Mission 3
|
# Mission 3
|
||||||
mission_3_title="Mission 3\n FIXME"
|
mission_3_title="Mission 3\n Apprendre le danger"
|
||||||
mission_3_text="\n \n FIXME"
|
mission_3_text="\n \n Tout d'abords, il faut provoquer une \n collision avec un obstacle (pente \n ou station) et observer ce qui se \n passe.\n \n"
|
||||||
|
mission_3_text= mission_3_text + " Il faut donc sécuriser Ropy en \n utilisant une structure alternative. \n -> Voir onglet Python, page \"Si alors\" \n -> Voir onglet Rover, page \"Détecter\" \n \n"
|
||||||
|
mission_3_init=[-11.0,3.0, "e"] # Rover init position (x,y), orientation ("n|s|e|w")
|
||||||
|
mission_3_aim=[] # Aim position (x,y)
|
||||||
missions_card_description.update({"mission_3-card" : [mission_3_title, mission_3_text]})
|
missions_card_description.update({"mission_3-card" : [mission_3_title, mission_3_text]})
|
||||||
|
missions_conf.update({"3" : [mission_3_init, mission_3_aim]})
|
||||||
|
|
||||||
# Mission 4
|
# Mission 4
|
||||||
mission_4_title="Mission 4\n FIXME"
|
mission_4_title="Mission 4\n Partir au bout du monde"
|
||||||
mission_4_text="\n \n FIXME"
|
mission_4_text="\n \n Ropy est maintenant prêt pour \n l'aventure soit atteindre la case \n du nouvel objectif (loin, très loin ...). \n \n Pour un tel voyage, l'utilisation \n d'une boucle s'impose. \n"
|
||||||
|
mission_4_text= mission_4_text +" -> Voir onglet Python, page \"Boucle\""
|
||||||
|
mission_4_init=[-11.0,3.0, "e"] # Rover init position (x,y), orientation ("n|s|e|w")
|
||||||
|
mission_4_aim=[9.0,11.0] # Aim position (x,y)
|
||||||
missions_card_description.update({"mission_4-card" : [mission_4_title, mission_4_text]})
|
missions_card_description.update({"mission_4-card" : [mission_4_title, mission_4_text]})
|
||||||
|
missions_conf.update({"4" : [mission_4_init, mission_4_aim]})
|
||||||
|
|
||||||
# Mission 5
|
# Mission 5
|
||||||
mission_5_title="Mission 5\n FIXME"
|
mission_5_title="Mission 5\n Faire face à l'inconnu"
|
||||||
mission_5_text="\n \n FIXME"
|
mission_5_text="\n \n La case à atteindre est toujours \n la même, mais le lieu de départ \n change à chaque fois. \n \n"
|
||||||
|
mission_5_text= mission_5_text +" Pour pallier à l\'aléatoire, vous \n utiliserez les pentes (obstacle) du \n terrain."
|
||||||
|
mission_5_text= mission_5_text +" Il faudra alors créer une \n fonction avec une boucle \"tant que\" \n qui permet d'avancer jusqu'à un \n obstacle :"
|
||||||
|
mission_5_text= mission_5_text +" \"mrp_avancer_mur()\". \n \n \n"
|
||||||
|
mission_5_init=[-11.0,3.0, "e"] # Rover init position (x,y), orientation ("n|s|e|w")
|
||||||
|
mission_5_aim=[9.0,11.0] # Aim position (x,y)
|
||||||
missions_card_description.update({"mission_5-card" : [mission_5_title, mission_5_text]})
|
missions_card_description.update({"mission_5-card" : [mission_5_title, mission_5_text]})
|
||||||
|
missions_conf.update({"5" : [mission_5_init, mission_5_aim]})
|
||||||
|
|
||||||
# Mission 6
|
# Mission 6
|
||||||
mission_6_title="Mission 6\n FIXME"
|
mission_6_title="Mission 6\n Se rendre utile"
|
||||||
mission_6_text="\n \n FIXME"
|
mission_6_text="\n \n Le terrain sur une zone précise \n présente des pierres à analyser. \n \n Pour les ramasser, Ropy doit passer \n sur toutes les cases de la zone. \n \n \n \n \n \n \n"
|
||||||
|
mission_6_init=[-11.0,3.0, "e"] # Rover init position (x,y), orientation ("n|s|e|w")
|
||||||
|
mission_6_aim=[9.0,11.0] # Aim position (x,y)
|
||||||
missions_card_description.update({"mission_6-card" : [mission_6_title, mission_6_text]})
|
missions_card_description.update({"mission_6-card" : [mission_6_title, mission_6_text]})
|
||||||
|
missions_conf.update({"6" : [mission_6_init, mission_6_aim]})
|
||||||
|
|
||||||
# Mission 7
|
# Mission 7
|
||||||
mission_7_title="Mission 7\n FIXME"
|
# mission_7_title="Mission 7\n FIXME"
|
||||||
mission_7_text="\n \n FIXME"
|
# mission_7_text="\n \n FIXME"
|
||||||
missions_card_description.update({"mission_7-card" : [mission_7_title, mission_7_text]})
|
# missions_card_description.update({"mission_7-card" : [mission_7_title, mission_7_text]})
|
||||||
|
# missions_conf.update({"7" : [mission_7_init, mission_7_aim]})
|
||||||
|
|
||||||
# Mission 8
|
# Mission 8
|
||||||
mission_8_title="Mission 8\n FIXME"
|
# mission_8_title="Mission 8\n FIXME"
|
||||||
mission_8_text="\n \n FIXME"
|
# mission_8_text="\n \n FIXME"
|
||||||
missions_card_description.update({"mission_8-card" : [mission_8_title, mission_8_text]})
|
# missions_card_description.update({"mission_8-card" : [mission_8_title, mission_8_text]})
|
||||||
|
# missions_conf.update({"8" : [mission_8_init, mission_8_aim]})
|
||||||
|
|
||||||
# Description des cartes missions
|
# Description des cartes missions
|
||||||
|
|
||||||
@ -118,6 +134,7 @@ def map_init():
|
|||||||
def map_reset():
|
def map_reset():
|
||||||
scene.objects['Points']['step']=0
|
scene.objects['Points']['step']=0
|
||||||
scene.objects['Points']['nbligne']=0
|
scene.objects['Points']['nbligne']=0
|
||||||
|
scene.objects['Points']['level'] = 1
|
||||||
|
|
||||||
# Mission
|
# Mission
|
||||||
if scene.objects['Terrain']['mission_current']==1:
|
if scene.objects['Terrain']['mission_current']==1:
|
||||||
|
Loading…
Reference in New Issue
Block a user