Ajout des zones (aimzone et initzone).
This commit is contained in:
parent
d2de5620d4
commit
c180fe5033
Binary file not shown.
17
rp.py
17
rp.py
|
@ -157,7 +157,6 @@ def terrain_init ():
|
|||
eevee.use_eevee_smaa = True
|
||||
|
||||
# Création des balises
|
||||
scene.objects['Map_aim'].setVisible(False,True)
|
||||
scene.objects['Terrain']['map_tile_beacon']= []
|
||||
# for i in range (500):
|
||||
for i in range (100):
|
||||
|
@ -282,20 +281,24 @@ def terrain_grid ():
|
|||
scene.objects['Grid-u'].setVisible(False,True)
|
||||
scene.objects['Grid-v'].setVisible(False,True)
|
||||
rp_map.aim_hide()
|
||||
scene.objects['Map_aim'].setVisible(False,True)
|
||||
else:
|
||||
scene.objects['Grid-u']['timer'] = 0
|
||||
bpy.data.materials["Grid"].node_tree.nodes["Shader de mélange"].inputs[0].default_value = 0
|
||||
bpy.data.materials["Grid-Yellow"].node_tree.nodes["Shader de mélange"].inputs[0].default_value = 0
|
||||
bpy.data.materials["Grid-Green"].node_tree.nodes["Shader de mélange"].inputs[0].default_value = 0
|
||||
bpy.data.materials["Grid-Holo"].node_tree.nodes["Émission"].inputs[1].default_value = 0
|
||||
# bpy.data.materials["Grid-Holo-Yellow"].node_tree.nodes["Émission"].inputs[1].default_value = 5
|
||||
# bpy.data.materials["Grid"].node_tree.nodes["Emission"].inputs[1].default_value =scene.objects['Grid-u']['timer']
|
||||
scene.objects['Grid-u'].setVisible(True,True)
|
||||
scene.objects['Grid-v'].setVisible(True,True)
|
||||
# scene.objects['Map_aim'].setVisible(True,True)
|
||||
scene.objects['Grid-u']['anim'] = True
|
||||
|
||||
def terrain_grid_anim ():
|
||||
bpy.data.materials["Grid"].node_tree.nodes["Shader de mélange"].inputs[0].default_value=scene.objects['Grid-u']['timer']
|
||||
bpy.data.materials["Grid-Yellow"].node_tree.nodes["Shader de mélange"].inputs[0].default_value=scene.objects['Grid-u']['timer']
|
||||
bpy.data.materials["Grid-Green"].node_tree.nodes["Shader de mélange"].inputs[0].default_value=scene.objects['Grid-u']['timer']
|
||||
bpy.data.materials["Grid-Holo"].node_tree.nodes["Émission"].inputs[1].default_value =scene.objects['Grid-u']['timer']*5
|
||||
# bpy.data.materials["Grid-Holo-Yellow"].node_tree.nodes["Émission"].inputs[1].default_value =scene.objects['Grid-u']['timer']*5
|
||||
# bpy.data.materials["Grid"].node_tree.nodes["Emission"].inputs[1].default_value =scene.objects['Grid-u']['timer']
|
||||
scene.objects['Grid-u']['timer']+=0.01
|
||||
if scene.objects['Grid-u']['timer']>= 0.05 and scene.objects['Grid-u'].visible :
|
||||
|
@ -365,7 +368,7 @@ def cmd_init():
|
|||
scene.objects['Pause'].suspendPhysics()
|
||||
scene.objects['Pause-Hl'].setVisible(False,False)
|
||||
scene.objects['Stop-Hl'].setVisible(False,False)
|
||||
scene.objects['Aim-Hl'].setVisible(False,False)
|
||||
scene.objects['Aim-cmd-Hl'].setVisible(False,False)
|
||||
scene.objects['Doc-cmd-Hl'].setVisible(False,False)
|
||||
scene.objects['ResetView-Hl'].setVisible(False,False)
|
||||
scene.objects['About-cmd-Hl'].setVisible(False,False)
|
||||
|
@ -459,7 +462,7 @@ def cmd_hl(cont):
|
|||
text_hl ={"Run":"Exécuter (F5)",
|
||||
"Stop":"Stop et initialisation (F6)",
|
||||
"Pause":"Pause (F5)",
|
||||
"Aim":"Afficher/cacher l'objectif",
|
||||
"Aim-cmd":"Afficher/cacher l'objectif",
|
||||
"Doc-cmd":"Documentation",
|
||||
"ResetView": "Reset de la vue (Touche Début)",
|
||||
"About-cmd": "A propos",
|
||||
|
@ -527,7 +530,7 @@ def cmd_click (cont):
|
|||
sound_play (snd_click)
|
||||
terrain_stop ()
|
||||
|
||||
if obj.name=="Aim":
|
||||
if obj.name=="Aim-cmd":
|
||||
sound_play (snd_grid)
|
||||
terrain_grid ()
|
||||
|
||||
|
@ -929,7 +932,7 @@ def tablet_close ():
|
|||
# scene.objects['Stop'].setVisible(False,False)
|
||||
# scene.objects['Stop'].suspendPhysics()
|
||||
scene.objects['Stop-Hl'].setVisible(False,False)
|
||||
scene.objects['Aim-Hl'].setVisible(False,False)
|
||||
scene.objects['Aim-cmd-Hl'].setVisible(False,False)
|
||||
scene.objects['Doc-cmd-Hl'].setVisible(False,False)
|
||||
scene.objects['ResetView-Hl'].setVisible(False,False)
|
||||
scene.objects['About-cmd-Hl'].setVisible(False,False)
|
||||
|
|
19
rp_cmd.py
19
rp_cmd.py
|
@ -26,6 +26,14 @@ def mrp_avancer():
|
|||
rp_avancer()
|
||||
rp_marquer()
|
||||
|
||||
def mrp_avancer_nbpas(pas):
|
||||
for i in range (pas):
|
||||
mrp_avancer()
|
||||
|
||||
def mrp_avancer_mur():
|
||||
while rp_detect()==False:
|
||||
mrp_avancer()
|
||||
|
||||
###############################################################################
|
||||
# Commandes
|
||||
###############################################################################
|
||||
|
@ -35,12 +43,13 @@ def commandes():
|
|||
print("Go !!")
|
||||
rp_marquer()
|
||||
rp_gauche()
|
||||
for i in range (19):
|
||||
mrp_avancer()
|
||||
mrp_avancer_mur()
|
||||
rp_droite()
|
||||
mrp_avancer_mur()
|
||||
rp_gauche()
|
||||
for i in range (5):
|
||||
mrp_avancer()
|
||||
|
||||
mrp_avancer_mur()
|
||||
print ("fin")
|
||||
|
||||
rp_fin()
|
||||
|
||||
###############################################################################
|
||||
|
|
|
@ -3,13 +3,13 @@
|
|||
<speed>10.0</speed>
|
||||
<sound>False</sound>
|
||||
<cam>
|
||||
<worldPosition.x>8.954777717590332</worldPosition.x>
|
||||
<worldPosition.y>-41.523250579833984</worldPosition.y>
|
||||
<worldPosition.z>40.40361404418945</worldPosition.z>
|
||||
<worldPosition.x>2.1837825775146484</worldPosition.x>
|
||||
<worldPosition.y>-27.433191299438477</worldPosition.y>
|
||||
<worldPosition.z>21.05629539489746</worldPosition.z>
|
||||
</cam>
|
||||
</config>
|
||||
<mission>
|
||||
<current>4</current>
|
||||
<level>5</level>
|
||||
<current>6</current>
|
||||
<level>6</level>
|
||||
</mission>
|
||||
</data>
|
|
@ -429,7 +429,7 @@ def rp_detect ():
|
|||
|
||||
# Pas de mouvement si colision ou objectif
|
||||
if obj['stop']:
|
||||
return False
|
||||
return True
|
||||
|
||||
# Points et console
|
||||
print ("rp_detect")
|
||||
|
@ -622,8 +622,8 @@ def rover_goal ():
|
|||
rp_tempo (0.1)
|
||||
|
||||
# Level
|
||||
print ("scene.objects['Points']['mission'] :", scene.objects['Points']['mission'])
|
||||
print ("scene.objects['Points']['level'] :", scene.objects['Points']['level'])
|
||||
# print ("scene.objects['Points']['mission'] :", scene.objects['Points']['mission'])
|
||||
# print ("scene.objects['Points']['level'] :", scene.objects['Points']['level'])
|
||||
if scene.objects['Points']['mission']==scene.objects['Points']['level']:
|
||||
scene.objects['Points']['level']+=1
|
||||
|
||||
|
|
106
rp_map1.py
106
rp_map1.py
|
@ -1,5 +1,6 @@
|
|||
import bge # Bibliothèque Blender Game Engine (UPBGE)
|
||||
import bpy # Blender
|
||||
import random
|
||||
from rp_lib import * # Bibliothèque Ropy
|
||||
import os
|
||||
|
||||
|
@ -62,15 +63,15 @@ mission_3_title="Mission 3\n Apprendre le danger"
|
|||
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=[100.0,100.0] # Aim caché
|
||||
mission_3_aim=[100.0,100.0] # Aim caché -> pas de de position objectif
|
||||
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_title="Mission 4\n Partir au bout du monde"
|
||||
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="\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 du type \"for\" s'impose. \n"
|
||||
mission_4_text= mission_4_text +" -> Voir onglet Python, page \"Boucle\" \n \n \n \n \n"
|
||||
mission_4_init=[-7.0,4.0, "s"]
|
||||
mission_4_init=[-7.0,4.0, "e"]
|
||||
mission_4_aim=[12.0,9.0]
|
||||
missions_card_description.update({"mission_4-card" : [mission_4_title, mission_4_text]})
|
||||
missions_conf.update({"4" : [mission_4_init, mission_4_aim]})
|
||||
|
@ -78,10 +79,10 @@ missions_conf.update({"4" : [mission_4_init, mission_4_aim]})
|
|||
# Mission 5
|
||||
mission_5_title="Mission 5\n Faire face à l'inconnu"
|
||||
mission_5_text="\n \n La case à atteindre est toujours la \n même, mais le lieu de départ change \n à 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 +" Pour pallier à l\'aléatoire, vous \n utiliserez les pentes comme obstacle. \n"
|
||||
mission_5_text= mission_5_text +" Il faut alors créer une fonction \n avec une boucle \"while\" (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=[-7.0,4.0, "s"] # FIXME position aléatoire
|
||||
mission_5_init=[0.0,0.0, "e"] # Position aléatoire tourné vers l'est -> défini dans le reset
|
||||
mission_5_aim=[12.0,9.0]
|
||||
missions_card_description.update({"mission_5-card" : [mission_5_title, mission_5_text]})
|
||||
missions_conf.update({"5" : [mission_5_init, mission_5_aim]})
|
||||
|
@ -89,8 +90,8 @@ missions_conf.update({"5" : [mission_5_init, mission_5_aim]})
|
|||
# Mission 6
|
||||
mission_6_title="Mission 6\n Se rendre utile"
|
||||
mission_6_text="\n \n Une zone précise du terrain présente \n des pierres à analyser. \n \n Elles apparaissent de manière \n aléatoire (encore !), pour les \n ramasser, Ropy doit passer sur \n toutes les cases de la zone. \n \n \n \n \n \n \n"
|
||||
mission_6_init=[-7.0,4.0, "s"] # FIXME position aléatoire
|
||||
mission_6_aim=[9.0,11.0] # FIXME plusieurs objectifs avec des positions aléatoires
|
||||
mission_6_init=[0.0,0.0, "e"] # Position aléatoire tourné vers l'est -> défini dans le reset
|
||||
mission_6_aim=[100.0,100.0] # Aim caché -> rammassage de pierre
|
||||
missions_card_description.update({"mission_6-card" : [mission_6_title, mission_6_text]})
|
||||
missions_conf.update({"6" : [mission_6_init, mission_6_aim]})
|
||||
|
||||
|
@ -118,7 +119,10 @@ def get_card_description():
|
|||
# Map
|
||||
###############################################################################
|
||||
|
||||
##
|
||||
# Initialization
|
||||
##
|
||||
|
||||
def map_init():
|
||||
scene.objects['Terrain']['size'] = [-15,-11,15,10] # Map size
|
||||
scene.objects['Terrain']['map_tile_montain']= []
|
||||
|
@ -126,6 +130,12 @@ def map_init():
|
|||
for obj_i in scene.objects:
|
||||
if "terrain_sideCliff" in obj_i.name or "terrain_sideCorner" in obj_i.name or "terrain_sideCornerInner" in obj_i.name:
|
||||
scene.objects['Terrain']['map_tile_montain'].append([round(obj_i.worldPosition.x), round(obj_i.worldPosition.y)])
|
||||
|
||||
# Cacher les zones
|
||||
scene.objects['Aim'].setVisible(False,True)
|
||||
scene.objects['Initzone-mission-5'].setVisible(False,True)
|
||||
scene.objects['Aimzone-mission-6'].setVisible(False,True)
|
||||
|
||||
# print (scene.objects['Terrain']['map_tile_montain'])
|
||||
# i=0
|
||||
# for i_xy in scene.objects['Terrain']['map_tile_montain']:
|
||||
|
@ -143,7 +153,10 @@ def map_init():
|
|||
# directory=os.path.join(file_path, inner_path),
|
||||
# filename=object_name)
|
||||
|
||||
##
|
||||
# Reset de la map
|
||||
##
|
||||
|
||||
def map_reset():
|
||||
scene.objects['Points']['step']=0
|
||||
scene.objects['Points']['nbligne']=0
|
||||
|
@ -171,9 +184,25 @@ def map_reset():
|
|||
if mission_init[2] == "w":
|
||||
obj.applyRotation((0, 0, -math.pi/2), True)
|
||||
|
||||
# Initialisation du rover pour les missions 5 et 6 : position aléatoire entre -3.0 ; 5.0 et 1.0 ; -10.0
|
||||
if scene.objects['Points']['mission']==5 or scene.objects['Points']['mission']==6:
|
||||
position_ok=False
|
||||
while position_ok==False: # Exclusion de certaines cases
|
||||
obj.worldPosition.x = random.randint(-3,1)
|
||||
obj.worldPosition.y = random.randint(-10,5)
|
||||
position_ok=True
|
||||
if obj.worldPosition.x== 0 and obj.worldPosition.y== -10:
|
||||
position_ok=False
|
||||
if obj.worldPosition.x== 1 and obj.worldPosition.y== -8:
|
||||
position_ok=False
|
||||
if obj.worldPosition.x== 1 and obj.worldPosition.y== -9:
|
||||
position_ok=False
|
||||
if obj.worldPosition.x== 1 and obj.worldPosition.y== -10:
|
||||
position_ok=False
|
||||
|
||||
# Initialisation des objectifs
|
||||
scene.objects['Terrain']['map_aim']= [[mission_aim[0],mission_aim[1]]]
|
||||
obj_aim = scene.objects['Map_aim']
|
||||
obj_aim = scene.objects['Aim']
|
||||
obj_aim.worldPosition.x = mission_aim[0]
|
||||
obj_aim.worldPosition.y = mission_aim[1]
|
||||
obj_aim.worldPosition.z = 0.5
|
||||
|
@ -188,18 +217,34 @@ def map_reset():
|
|||
##
|
||||
|
||||
def aim_show():
|
||||
if scene.objects['Points']['mission']==3 :
|
||||
scene.objects['Map_aim'].setVisible(False,True)
|
||||
|
||||
# Zone de départ
|
||||
if scene.objects['Points']['mission']==5 or scene.objects['Points']['mission']==6:
|
||||
scene.objects['Initzone-mission-5'].setVisible(True,True)
|
||||
else:
|
||||
scene.objects['Map_aim'].setVisible(True,True)
|
||||
scene.objects['Initzone-mission-5'].setVisible(False,True)
|
||||
|
||||
# Cible
|
||||
if scene.objects['Points']['mission']==3 or scene.objects['Points']['mission']==6:
|
||||
scene.objects['Aim'].setVisible(False,True)
|
||||
else:
|
||||
scene.objects['Aim'].setVisible(True,True)
|
||||
|
||||
# Zone cible
|
||||
if scene.objects['Points']['mission']==6:
|
||||
scene.objects['Aimzone-mission-6'].setVisible(True,True)
|
||||
else:
|
||||
scene.objects['Aimzone-mission-6'].setVisible(False,True)
|
||||
|
||||
##
|
||||
# Cacher l'objectif
|
||||
##
|
||||
|
||||
def aim_hide():
|
||||
scene.objects['Map_aim'].setVisible(False,True)
|
||||
|
||||
scene.objects['Aim'].setVisible(False,True)
|
||||
scene.objects['Aimzone-mission-6'].setVisible(False,True)
|
||||
scene.objects['Initzone-mission-5'].setVisible(False,True)
|
||||
|
||||
##
|
||||
# Validation de l'objectif atteint
|
||||
##
|
||||
|
@ -218,7 +263,7 @@ def objectif_control(x,y):
|
|||
if len(scene.objects['Terrain']['map_tile_beacon'])>=6: # 6 balises posées mini
|
||||
if scene.objects['Points']['nbligne'] <=40: # 40 lignes de code maxi
|
||||
txt=["def mrp_avancer():", "def mrp_avancer() :", "def mrp_avancer ():", "def mrp_avancer () :"] # Présence de "def mrp_avancer():"
|
||||
if rp_cmd_txtcount(txt):
|
||||
if rp_cmd_txtcount(txt, 1):
|
||||
return True
|
||||
|
||||
# Mission 3 (structure alternative)
|
||||
|
@ -228,14 +273,31 @@ def objectif_control(x,y):
|
|||
if scene.objects['Points']['mission']==4:
|
||||
if [x,y] in scene.objects['Terrain']['map_aim']: # Aim
|
||||
if scene.objects['Points']['nbligne'] <=40: # 40 lignes de code maxi
|
||||
return True
|
||||
txt=["for" ] # Présence de "for i in range" 2x
|
||||
if rp_cmd_txtcount(txt, 2):
|
||||
txt=["in range" ]
|
||||
if rp_cmd_txtcount(txt, 2):
|
||||
return True
|
||||
else:
|
||||
txt=["def mrp_avancer_nbpas"] # Présence de "def mrp_avancer_nbpas"
|
||||
if rp_cmd_txtcount(txt, 1):
|
||||
return True
|
||||
|
||||
# Mission 5 (boucle en while)
|
||||
if scene.objects['Points']['mission']==5:
|
||||
return False
|
||||
if [x,y] in scene.objects['Terrain']['map_aim']: # Aim
|
||||
if scene.objects['Points']['nbligne'] <=40: # 40 lignes de code maxi
|
||||
txt=["while" ] # Présence de "while" 2x
|
||||
if rp_cmd_txtcount(txt, 2):
|
||||
return True
|
||||
else:
|
||||
txt=["def mrp_avancer_mur():", "def mrp_avancer_mur() :", "def mrp_avancer_mur ():", "def mrp_avancer_mur () :"] # Présence de "def mrp_avancer_mur():"
|
||||
if rp_cmd_txtcount(txt, 1):
|
||||
return True
|
||||
|
||||
# Mission 6 (passer sur tout le terrain)
|
||||
if scene.objects['Points']['mission']==6:
|
||||
# FIXME
|
||||
return False
|
||||
|
||||
return False
|
||||
|
@ -249,20 +311,14 @@ def objectif_control(x,y):
|
|||
# Recherche de texte dans le script
|
||||
##
|
||||
|
||||
def rp_cmd_txtcount (text_list):
|
||||
def rp_cmd_txtcount (text_list, n):
|
||||
# print (os.getcwd())
|
||||
file = open('rp_cmd.py', 'r')
|
||||
file_txt = file.read()
|
||||
print (file_txt)
|
||||
for text in text_list:
|
||||
# print ("text :", text)
|
||||
# print ("file_txt.count (text) :", file_txt.count (text))
|
||||
if file_txt.count (text) >0:
|
||||
# print ("Recherche de ",text," dans le script 'rp_cmd.py' -> True")
|
||||
if file_txt.count (text) >= n:
|
||||
file.close()
|
||||
return True
|
||||
# else:
|
||||
# print ("Recherche de ",text," dans le script 'rp_cmd.py' -> False")
|
||||
file.close()
|
||||
return False
|
||||
|
||||
|
|
Loading…
Reference in New Issue