-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:
Le_dahut 2014-05-17 11:50:49 +02:00
parent bafb591802
commit 471e78e233
4 changed files with 72 additions and 55 deletions

View File

@ -14,11 +14,11 @@ http://wirechem.dahut.fr
Les coordonnées sont celles du 1024x768 avec interpolation selon la
resolution choisie. Les commandes sont insensibles à la casse.
*Fonctions d'attente*
**Fonctions d'attente**
####WAIT
Attend un click ou un appuie sur une touche.
Attend un clic ou un appui sur une touche.
####WAIT sec
@ -30,33 +30,38 @@ Attend le click sur le menu.
####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]
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
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
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
dessine une flèche rouge pour attirer l'attention de l'utilisateur sur une
zone à l'écran dont les coordonnées sont spécifiées.
dessine une flèche rouge pour attirer l'attention de l'utilisateur sur
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
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
@ -68,13 +73,13 @@ Choisi un élément de menu.
####SET menu,element ou UNSET
Met en surbrillance un élément du menu.
Met en clignotance un élément du menu.
####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
@ -84,7 +89,7 @@ Fait la prochaine génération de la grille de simulation.
Change le niveau technologique.
*fonction souris*
**fonction souris**
####CLICK x,y,button

View File

@ -23,6 +23,7 @@ import time
import operator
import shelve
import os
import sys
from pyglet.gl import *
from pyglet.window import mouse
from pyglet.window import key
@ -126,7 +127,8 @@ def initgrid():
allcout=[0,0,0]
sizex=sizey=1
seestat=thecout=world=over=play=cycle=rayon=temp=cout=decx=decy=nrj=0
debug=rect=0
rect=0
debug=False
msg=tuto=''
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]]
@ -139,6 +141,8 @@ def initgrid():
for l in range(len(worlds[w])):
if "level"+str(w)+"-"+str(l) in finished and w>world:
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
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=''
if user:
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:
load(worlds[w][l])
menus[0][18]['icon']=copy.deepcopy(art['null'])
if debug==1: tech=9
sizex=len(world_new)
sizey=len(world_new[0])
resize();
@ -375,6 +378,7 @@ def drawarrow(x,y,x2,y2,color):
glVertex2i(x2,y2)
glEnd()
angle=math.atan(float(y2-y)/(x2-x))
if y2<y and x2<x: angle=angle+180*3.14/180
glBegin(GL_POLYGON)
glVertex2i(x2,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 '''
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
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}
@ -1598,24 +1602,25 @@ def launch(x,y,dx,dy,i,j,buttons,modifiers,onmenu):
state['event']='click'
else:
state['event']='drag'
'''print state'''
if debug: print state
if onmenu and state['event']=='click' and menus[i][0]['selectable']:
menus[i][0]['mouse'][buttons-1]=j
if tuto!='' and tuto[1]<len(tuto[0]):
cmd,arg=tuto[0][tuto[1]]
if cmd=='wait':
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
clock.schedule_once(execute,dt)
clock.schedule_once(execute,0.1)
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
clock.schedule_once(execute,dt)
clock.schedule_once(execute,0.1)
else:
if state['event']=='click':
if state['event']=='click' and arg[0]=='':
tuto[1]+=1
clock.schedule_once(execute,dt)
clock.schedule_once(execute,0.1)
return
if menus[i][j].has_key(state['event']):
if type(menus[i][j][state['event']]) is list:
if callable(eval(menus[i][j][state['event']][menus[i][j]['choose']])):
@ -1682,15 +1687,19 @@ def compiler():
result.append((cmd,arg))
tuto=[result,0]
def execute(dt):
def execute(dummy):
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]]
print cmd,arg
if debug: print cmd,arg
if cmd=='rect':
rect=[int(arg[0]),int(arg[1]),int(arg[2]),int(arg[3]),0]
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':
nextgrid()
elif cmd=='del':
@ -1699,7 +1708,7 @@ def execute(dt):
elif cmd=='tech':
tech= int(arg[0])
elif cmd=='msg':
msg= str(arg[0])
msg= str(arg[0].replace(';',','))
elif cmd=='select':
if menus[int(arg[0])][0].has_key('mouse'):
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]]
if cmd=='wait' and len(arg)==1 and arg[0]=='':
tuto[1]+=1
clock.schedule_once(execute,dt)
clock.schedule_once(execute,0.1)
if player.source and player.source.video_format:
player.next()
ambiance.play()
@ -1820,7 +1829,7 @@ def on_mouse_press(x, y, button, modifiers):
selected=-1
if type(tuto) is str and tuto!='':
compiler()
execute(0.1)
execute(0)
return
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)

BIN
dbdata

Binary file not shown.

47
dbsrc
View File

@ -42,29 +42,32 @@ worlds=[[{'nom': 'Introduction',
[0, 0, 196637, 0, 0],
[0, 0, 0, 0, 0]],
'tuto':'''
mSG CECI EST LE TUTO ;)
arrow 700,100,420,50
waIT 2
next
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>
wait
msg <appuie sur touche>
rEct 90 ,90 ,200 , 200
next
next
tech 8
menu 0,1
wait 2
menu 0,1
select 0,2,2
set 0, 6
wait 2
MSg cool non ?
tech -1
wait 4
wait menu,1
wait click,2
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.
wait 7
rect 0,768,1024,700
set 1,5
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.
wait 7
unset 1,5
rect 0,700,1024,68
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.
wait 7
rect 0,0,1024,68
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.
wait 7
arrow 635,145,320,26
set 0,7
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
unset 0, 6
''',
@ -1065,7 +1068,7 @@ art={
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_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},