-Ajout de description dans la documentation du langage tuto
-Correction de bogue dans l'execution du langage tuto -Debut d'un tutoriel pour la paillasse 1 -Ajout de la lecture des paramètres pour avoir le mode debug
This commit is contained in:
parent
bafb591802
commit
471e78e233
35
BULLES.md
35
BULLES.md
|
@ -14,11 +14,11 @@ http://wirechem.dahut.fr
|
||||||
Les coordonnées sont celles du 1024x768 avec interpolation selon la
|
Les coordonnées sont celles du 1024x768 avec interpolation selon la
|
||||||
resolution choisie. Les commandes sont insensibles à la casse.
|
resolution choisie. Les commandes sont insensibles à la casse.
|
||||||
|
|
||||||
*Fonctions d'attente*
|
**Fonctions d'attente**
|
||||||
|
|
||||||
####WAIT
|
####WAIT
|
||||||
|
|
||||||
Attend un click ou un appuie sur une touche.
|
Attend un clic ou un appui sur une touche.
|
||||||
|
|
||||||
####WAIT sec
|
####WAIT sec
|
||||||
|
|
||||||
|
@ -30,33 +30,38 @@ Attend le click sur le menu.
|
||||||
|
|
||||||
####WAIT DRAG,[bouton]
|
####WAIT DRAG,[bouton]
|
||||||
|
|
||||||
Attend un deplacement de curseur.
|
Attend un déplacement de curseur avec le bouton appuyé, il est possible
|
||||||
|
de préciser lequel.
|
||||||
|
|
||||||
####WAIT CLICK,[bouton]
|
####WAIT CLICK,[bouton]
|
||||||
|
|
||||||
Attend un click du bouton.
|
Attend un clic du bouton précisé ou n'importe quel bouton si non précisé
|
||||||
|
|
||||||
*Fonctions d'affichage*
|
**Fonctions d'affichage**
|
||||||
|
|
||||||
####MSG message
|
####MSG message
|
||||||
|
|
||||||
envoie un message à l'écran avec mise en forme.
|
envoie un message à l'écran avec mise en forme. Les virgules doivent être
|
||||||
|
remplacées par des points virgules.
|
||||||
|
|
||||||
####RECT x1,y1,x2,y2
|
####RECT x1,y1,x2,y2
|
||||||
|
|
||||||
dessine un carré rouge pour attirer l'attention de l'utilisateur sur une
|
dessine un carré rouge pour attirer l'attention de l'utilisateur sur une
|
||||||
zone à l'écran dont les coordonnées sont spécifiées.
|
zone à l'écran dont les coordonnées sont spécifiées. Il ne peut y avoir
|
||||||
|
qu'un rectangle ou fléche à l'écran : choisissez !
|
||||||
|
|
||||||
####ARROW x1,y1,x2,y2
|
####ARROW x1,y1,x2,y2
|
||||||
|
|
||||||
dessine une flèche rouge pour attirer l'attention de l'utilisateur sur une
|
dessine une flèche rouge pour attirer l'attention de l'utilisateur sur
|
||||||
zone à l'écran dont les coordonnées sont spécifiées.
|
une zone à l'écran dont les coordonnées sont spécifiées. Il ne peut y
|
||||||
|
avoir qu'un rectangle ou fléche à l'écran : choisissez !
|
||||||
|
|
||||||
####DEL
|
####DEL
|
||||||
|
|
||||||
efface tout ce qui a été dessiné à l'écran.
|
efface tout ce qui a été dessiné à l'écran. Flèche, rectangle et message
|
||||||
|
texte.
|
||||||
|
|
||||||
*Fonctions menu*
|
**Fonctions menu**
|
||||||
|
|
||||||
####MENU menu,element,button
|
####MENU menu,element,button
|
||||||
|
|
||||||
|
@ -68,13 +73,13 @@ Choisi un élément de menu.
|
||||||
|
|
||||||
####SET menu,element ou UNSET
|
####SET menu,element ou UNSET
|
||||||
|
|
||||||
Met en surbrillance un élément du menu.
|
Met en clignotance un élément du menu.
|
||||||
|
|
||||||
####UNSET menu,element
|
####UNSET menu,element
|
||||||
|
|
||||||
Retire la surbrillance d'un élément du menu.
|
Retire la clignotance d'un élément du menu.
|
||||||
|
|
||||||
*fonctions gameplay*
|
**fonctions gameplay**
|
||||||
|
|
||||||
####NEXT
|
####NEXT
|
||||||
|
|
||||||
|
@ -84,7 +89,7 @@ Fait la prochaine génération de la grille de simulation.
|
||||||
|
|
||||||
Change le niveau technologique.
|
Change le niveau technologique.
|
||||||
|
|
||||||
*fonction souris*
|
**fonction souris**
|
||||||
|
|
||||||
####CLICK x,y,button
|
####CLICK x,y,button
|
||||||
|
|
||||||
|
|
45
WireChem.py
45
WireChem.py
|
@ -23,6 +23,7 @@ import time
|
||||||
import operator
|
import operator
|
||||||
import shelve
|
import shelve
|
||||||
import os
|
import os
|
||||||
|
import sys
|
||||||
from pyglet.gl import *
|
from pyglet.gl import *
|
||||||
from pyglet.window import mouse
|
from pyglet.window import mouse
|
||||||
from pyglet.window import key
|
from pyglet.window import key
|
||||||
|
@ -126,7 +127,8 @@ def initgrid():
|
||||||
allcout=[0,0,0]
|
allcout=[0,0,0]
|
||||||
sizex=sizey=1
|
sizex=sizey=1
|
||||||
seestat=thecout=world=over=play=cycle=rayon=temp=cout=decx=decy=nrj=0
|
seestat=thecout=world=over=play=cycle=rayon=temp=cout=decx=decy=nrj=0
|
||||||
debug=rect=0
|
rect=0
|
||||||
|
debug=False
|
||||||
msg=tuto=''
|
msg=tuto=''
|
||||||
tech=selected=level=-1
|
tech=selected=level=-1
|
||||||
statedvar=[stat[0],stat[1],stat[2],stat[3],stat[4],stat[5],stat[6],stat[7],stat[8],nrj,temp,rayon,current[7],current[8],current[9],current[10],current[11],current[12]]
|
statedvar=[stat[0],stat[1],stat[2],stat[3],stat[4],stat[5],stat[6],stat[7],stat[8],nrj,temp,rayon,current[7],current[8],current[9],current[10],current[11],current[12]]
|
||||||
|
@ -139,6 +141,8 @@ def initgrid():
|
||||||
for l in range(len(worlds[w])):
|
for l in range(len(worlds[w])):
|
||||||
if "level"+str(w)+"-"+str(l) in finished and w>world:
|
if "level"+str(w)+"-"+str(l) in finished and w>world:
|
||||||
world=w
|
world=w
|
||||||
|
|
||||||
|
if len(sys.argv)>1 and sys.argv[1]=='debug': debug=True
|
||||||
|
|
||||||
|
|
||||||
''' *********************************************************************************************** '''
|
''' *********************************************************************************************** '''
|
||||||
|
@ -158,7 +162,7 @@ def resize():
|
||||||
decy=-zoom+(win.height-zoom*(sizey-2))/2
|
decy=-zoom+(win.height-zoom*(sizey-2))/2
|
||||||
|
|
||||||
def readlevel(w,l,user):
|
def readlevel(w,l,user):
|
||||||
global tuto,worlds,cout,selected,sizex,sizey,stat,debug,tech
|
global tuto,worlds,cout,selected,sizex,sizey,stat,tech
|
||||||
tuto=''
|
tuto=''
|
||||||
if user:
|
if user:
|
||||||
if w<len(Uworlds) and l<len(Uworlds[w]) and Uworlds[w][l].has_key("element"):
|
if w<len(Uworlds) and l<len(Uworlds[w]) and Uworlds[w][l].has_key("element"):
|
||||||
|
@ -168,7 +172,6 @@ def readlevel(w,l,user):
|
||||||
else:
|
else:
|
||||||
load(worlds[w][l])
|
load(worlds[w][l])
|
||||||
menus[0][18]['icon']=copy.deepcopy(art['null'])
|
menus[0][18]['icon']=copy.deepcopy(art['null'])
|
||||||
if debug==1: tech=9
|
|
||||||
sizex=len(world_new)
|
sizex=len(world_new)
|
||||||
sizey=len(world_new[0])
|
sizey=len(world_new[0])
|
||||||
resize();
|
resize();
|
||||||
|
@ -375,6 +378,7 @@ def drawarrow(x,y,x2,y2,color):
|
||||||
glVertex2i(x2,y2)
|
glVertex2i(x2,y2)
|
||||||
glEnd()
|
glEnd()
|
||||||
angle=math.atan(float(y2-y)/(x2-x))
|
angle=math.atan(float(y2-y)/(x2-x))
|
||||||
|
if y2<y and x2<x: angle=angle+180*3.14/180
|
||||||
glBegin(GL_POLYGON)
|
glBegin(GL_POLYGON)
|
||||||
glVertex2i(x2,y2)
|
glVertex2i(x2,y2)
|
||||||
glVertex2i(int(20*math.cos(angle+160*3.14/180))+x2,int(20*math.sin(angle+160*3.14/180))+y2)
|
glVertex2i(int(20*math.cos(angle+160*3.14/180))+x2,int(20*math.sin(angle+160*3.14/180))+y2)
|
||||||
|
@ -1587,7 +1591,7 @@ def motion_popup(state):
|
||||||
''' Fonctions liée à la gestion des menus '''
|
''' Fonctions liée à la gestion des menus '''
|
||||||
|
|
||||||
def launch(x,y,dx,dy,i,j,buttons,modifiers,onmenu):
|
def launch(x,y,dx,dy,i,j,buttons,modifiers,onmenu):
|
||||||
global menus,decx,decy,zoom,tuto
|
global menus,decx,decy,zoom,tuto,debug
|
||||||
realx=(x-decx)/zoom
|
realx=(x-decx)/zoom
|
||||||
realy=(y-decy)/zoom
|
realy=(y-decy)/zoom
|
||||||
state={'x':x,'y':y,'realx':realx, 'realy':realy, 'dx':dx, 'dy':dy, 'i':i, 'j':j, 'buttons':buttons, 'modifiers':modifiers, 'onmenu': onmenu}
|
state={'x':x,'y':y,'realx':realx, 'realy':realy, 'dx':dx, 'dy':dy, 'i':i, 'j':j, 'buttons':buttons, 'modifiers':modifiers, 'onmenu': onmenu}
|
||||||
|
@ -1598,24 +1602,25 @@ def launch(x,y,dx,dy,i,j,buttons,modifiers,onmenu):
|
||||||
state['event']='click'
|
state['event']='click'
|
||||||
else:
|
else:
|
||||||
state['event']='drag'
|
state['event']='drag'
|
||||||
'''print state'''
|
if debug: print state
|
||||||
if onmenu and state['event']=='click' and menus[i][0]['selectable']:
|
if onmenu and state['event']=='click' and menus[i][0]['selectable']:
|
||||||
menus[i][0]['mouse'][buttons-1]=j
|
menus[i][0]['mouse'][buttons-1]=j
|
||||||
if tuto!='' and tuto[1]<len(tuto[0]):
|
if tuto!='' and tuto[1]<len(tuto[0]):
|
||||||
cmd,arg=tuto[0][tuto[1]]
|
cmd,arg=tuto[0][tuto[1]]
|
||||||
if cmd=='wait':
|
if cmd=='wait':
|
||||||
if arg[0].lower()==state['event']:
|
if arg[0].lower()==state['event']:
|
||||||
if buttons==int(arg[1]) or len(arg)==1 or arg[1]=='' or int(arg[1])==0:
|
if buttons==int(arg[1]) or (len(arg)==1 and arg[1]=='' and int(arg[1])==0):
|
||||||
tuto[1]+=1
|
tuto[1]+=1
|
||||||
clock.schedule_once(execute,dt)
|
clock.schedule_once(execute,0.1)
|
||||||
elif arg[0].lower()=='menu':
|
elif arg[0].lower()=='menu':
|
||||||
if buttons==int(arg[1]) or len(arg)==1 or arg[1]=='' or int(arg[1])==0:
|
if buttons==int(arg[1]) or (len(arg)==1 and arg[1]=='' and int(arg[1])==0):
|
||||||
tuto[1]+=1
|
tuto[1]+=1
|
||||||
clock.schedule_once(execute,dt)
|
clock.schedule_once(execute,0.1)
|
||||||
else:
|
else:
|
||||||
if state['event']=='click':
|
if state['event']=='click' and arg[0]=='':
|
||||||
tuto[1]+=1
|
tuto[1]+=1
|
||||||
clock.schedule_once(execute,dt)
|
clock.schedule_once(execute,0.1)
|
||||||
|
return
|
||||||
if menus[i][j].has_key(state['event']):
|
if menus[i][j].has_key(state['event']):
|
||||||
if type(menus[i][j][state['event']]) is list:
|
if type(menus[i][j][state['event']]) is list:
|
||||||
if callable(eval(menus[i][j][state['event']][menus[i][j]['choose']])):
|
if callable(eval(menus[i][j][state['event']][menus[i][j]['choose']])):
|
||||||
|
@ -1682,15 +1687,19 @@ def compiler():
|
||||||
result.append((cmd,arg))
|
result.append((cmd,arg))
|
||||||
tuto=[result,0]
|
tuto=[result,0]
|
||||||
|
|
||||||
def execute(dt):
|
def execute(dummy):
|
||||||
global tuto,rect,tech,msg,menus
|
global tuto,rect,tech,msg,menus
|
||||||
if tuto[1]>=len(tuto[0]): return
|
dt=0.001
|
||||||
|
if tuto=='' or tuto[1]>=len(tuto[0]): return
|
||||||
cmd,arg=tuto[0][tuto[1]]
|
cmd,arg=tuto[0][tuto[1]]
|
||||||
print cmd,arg
|
if debug: print cmd,arg
|
||||||
if cmd=='rect':
|
if cmd=='rect':
|
||||||
rect=[int(arg[0]),int(arg[1]),int(arg[2]),int(arg[3]),0]
|
rect=[int(arg[0]),int(arg[1]),int(arg[2]),int(arg[3]),0]
|
||||||
elif cmd=='wait':
|
elif cmd=='wait':
|
||||||
if int(arg[0])>0 and len(arg)==1 and arg[0]!='': dt=int(arg[0])
|
if len(arg)==1 and arg[0]!='' and int(arg[0])>0:
|
||||||
|
dt=int(arg[0])
|
||||||
|
else:
|
||||||
|
dt=0
|
||||||
elif cmd=='next':
|
elif cmd=='next':
|
||||||
nextgrid()
|
nextgrid()
|
||||||
elif cmd=='del':
|
elif cmd=='del':
|
||||||
|
@ -1699,7 +1708,7 @@ def execute(dt):
|
||||||
elif cmd=='tech':
|
elif cmd=='tech':
|
||||||
tech= int(arg[0])
|
tech= int(arg[0])
|
||||||
elif cmd=='msg':
|
elif cmd=='msg':
|
||||||
msg= str(arg[0])
|
msg= str(arg[0].replace(';',','))
|
||||||
elif cmd=='select':
|
elif cmd=='select':
|
||||||
if menus[int(arg[0])][0].has_key('mouse'):
|
if menus[int(arg[0])][0].has_key('mouse'):
|
||||||
menus[int(arg[0])][0]['mouse'][int(arg[2])]=int(arg[1])
|
menus[int(arg[0])][0]['mouse'][int(arg[2])]=int(arg[1])
|
||||||
|
@ -1729,7 +1738,7 @@ def on_key_press(symbol, modifiers):
|
||||||
cmd,arg=tuto[0][tuto[1]]
|
cmd,arg=tuto[0][tuto[1]]
|
||||||
if cmd=='wait' and len(arg)==1 and arg[0]=='':
|
if cmd=='wait' and len(arg)==1 and arg[0]=='':
|
||||||
tuto[1]+=1
|
tuto[1]+=1
|
||||||
clock.schedule_once(execute,dt)
|
clock.schedule_once(execute,0.1)
|
||||||
if player.source and player.source.video_format:
|
if player.source and player.source.video_format:
|
||||||
player.next()
|
player.next()
|
||||||
ambiance.play()
|
ambiance.play()
|
||||||
|
@ -1820,7 +1829,7 @@ def on_mouse_press(x, y, button, modifiers):
|
||||||
selected=-1
|
selected=-1
|
||||||
if type(tuto) is str and tuto!='':
|
if type(tuto) is str and tuto!='':
|
||||||
compiler()
|
compiler()
|
||||||
execute(0.1)
|
execute(0)
|
||||||
return
|
return
|
||||||
if not testmenu(menus,x,y,0,0,[mouse.LEFT,mouse.MIDDLE,mouse.RIGHT].index(button)+1,modifiers):
|
if not testmenu(menus,x,y,0,0,[mouse.LEFT,mouse.MIDDLE,mouse.RIGHT].index(button)+1,modifiers):
|
||||||
testgrid(menus,x,y,0,0,[mouse.LEFT,mouse.MIDDLE,mouse.RIGHT].index(button)+1, modifiers)
|
testgrid(menus,x,y,0,0,[mouse.LEFT,mouse.MIDDLE,mouse.RIGHT].index(button)+1, modifiers)
|
||||||
|
|
47
dbsrc
47
dbsrc
|
@ -42,29 +42,32 @@ worlds=[[{'nom': 'Introduction',
|
||||||
[0, 0, 196637, 0, 0],
|
[0, 0, 196637, 0, 0],
|
||||||
[0, 0, 0, 0, 0]],
|
[0, 0, 0, 0, 0]],
|
||||||
'tuto':'''
|
'tuto':'''
|
||||||
mSG CECI EST LE TUTO ;)
|
msg Bienvenu dans le tutoriel de la première paillasse de WireChem; nous allons vous expliquer pas à pas le fonctionnement du jeu. <appuyez sur une touche ou cliquez pour la suite>
|
||||||
arrow 700,100,420,50
|
|
||||||
waIT 2
|
|
||||||
next
|
|
||||||
wait
|
wait
|
||||||
msg <appuie sur touche>
|
msg L'interface du jeu est séparé en 3 grandes zones disctinctes; Chaque zone à ses particularités et elles évoluent au fur et à mesure que le jeu avance.
|
||||||
rEct 90 ,90 ,200 , 200
|
wait 7
|
||||||
next
|
rect 0,768,1024,700
|
||||||
next
|
set 1,5
|
||||||
tech 8
|
msg La barre du haut est une barre d'information; elle nous informe de l'état du jeu. Actuellement elle n'est remplie que de l'objectif du jeu que vous pouvez voir clignoter.
|
||||||
menu 0,1
|
wait 7
|
||||||
wait 2
|
unset 1,5
|
||||||
menu 0,1
|
rect 0,700,1024,68
|
||||||
select 0,2,2
|
msg La partie centrale est la zone de jeu a proprement parler; la ou vous allez creer votre modèle et ainsi vérifier par simulation que votre modèle rempli les objectifs de la paillasse.
|
||||||
set 0, 6
|
wait 7
|
||||||
wait 2
|
rect 0,0,1024,68
|
||||||
MSg cool non ?
|
msg La barre du bas comporte plusieurs icônes que l'on peut selectionner afin de réaliser différentes actions. Les 3 rectangles de couleurs représentent les 3 actions déclencheable par l'appuie d'un des boutons de la souris.
|
||||||
tech -1
|
wait 7
|
||||||
wait 4
|
arrow 635,145,320,26
|
||||||
wait menu,1
|
set 0,7
|
||||||
wait click,2
|
msg Ainsi lors vous appuierez sur le bouton gauche n'importe ou sur l'écran vous aller déclencher l'action dézoomer. Essayer appuyer sur le bouton gauche pour tester l'action.
|
||||||
|
wait click,1
|
||||||
|
unset 0,7
|
||||||
|
arrow 635,145,230,26
|
||||||
|
set 0,5
|
||||||
|
msg Bravo !! L'action réalisée par le bouton droit est de couleur bleu et celle de la molette est en vert. L'action sélectionnée pour le bouton de la molette necessite un glisser déposer; il fait bouger le plateau de jeu, essayez !
|
||||||
|
wait drag,2
|
||||||
|
unset 0,5
|
||||||
del
|
del
|
||||||
unset 0, 6
|
|
||||||
''',
|
''',
|
||||||
|
|
||||||
|
|
||||||
|
@ -1065,7 +1068,7 @@ art={
|
||||||
|
|
||||||
menus=[
|
menus=[
|
||||||
[
|
[
|
||||||
{'motion':'motion_motion_popup','place':'bottom','visible':True,'size':50,'variable':False,'selectable':True,'mouse':[1,5,6]},
|
{'motion':'motion_motion_popup','place':'bottom','visible':True,'size':50,'variable':False,'selectable':True,'mouse':[7,5,6]},
|
||||||
{'motion':'motion_popup','click': ['click_run','click_stop'], 'tech':-1, 'value':['Simuler','Fin simulation'], 'size':45, 'icon': ['picture/run.png','picture/stop.png'], 'choose': 0,'variable':False,'visible':True,'separe':False,'squarred':False,'active': True},
|
{'motion':'motion_popup','click': ['click_run','click_stop'], 'tech':-1, 'value':['Simuler','Fin simulation'], 'size':45, 'icon': ['picture/run.png','picture/stop.png'], 'choose': 0,'variable':False,'visible':True,'separe':False,'squarred':False,'active': True},
|
||||||
{'motion':'motion_popup','click': 'click_speed', 'tech':0, 'value':'Vitesse', 'size':45,'icon': 'picture/speed.png','variable':False,'visible':True,'separe':True,'squarred':False,'active': True},
|
{'motion':'motion_popup','click': 'click_speed', 'tech':0, 'value':'Vitesse', 'size':45,'icon': 'picture/speed.png','variable':False,'visible':True,'separe':True,'squarred':False,'active': True},
|
||||||
{'motion':'motion_popup','click': 'click_load', 'tech':1, 'value':'Charger', 'size':45,'icon': 'picture/raz.png','variable':False,'visible':True,'separe':False,'squarred':False,'active': True},
|
{'motion':'motion_popup','click': 'click_load', 'tech':1, 'value':'Charger', 'size':45,'icon': 'picture/raz.png','variable':False,'visible':True,'separe':False,'squarred':False,'active': True},
|
||||||
|
|
Loading…
Reference in New Issue