Apprendre Maple Jeu de lettres "Motus"
 
  Page d'accueilPage d'accueil   RechercherRechercher   Forum de discussionForum de discussion   ContactContact   SommaireSommaire 
  Cours MapleCours Maple   Travaux dirigésTravaux dirigés   Thèmes d'activitésThèmes d'activités   MapletsMaplets 
Ecran MapleEcran Maple  TéléchargementTéléchargement  BibliographieBibliographie  LiensLiens  

 

Page d'accueil   Maplets   << Page précédente   Page suivante >>


 

Motus
© Alain Le Stang - "Apprendre Maple" - 2005

Sélectionner Edit/Execute/Worksheet ou cliquer le bouton !!! pour exécuter ce Maplet.

 

> restart;
> with(Maplets[Elements]): with(Maplets[Examples]): with(Maplets[Tools]): with(plots):
with(plottools): with(StringTools):
 

 

Chemin à modifier
Les 12 fichiers suivants en liaison avec ce maplet doivent  etre contenus dans un seul repertoire (de nom par exemple ici
"C:\\Maple\\maplets\\motus\\" ) :


motus.mw motus.maplet motus.gif comptepts.gif grille.gif pref.txt
motsenclair5.txt motsenclair6.txt motsenclair7.txt top5.txt top6.txt top7.txt        
 

> chemin:="C:\\Maple\\maplets\\motus\\":
 

Procédures:

> RAZ_Grilles:=proc()
global grid,gridcolor;
grid:=[["","","","","","",""],["","","","","","",""],["","","","","","",""],
      ["","","","","","",""],["","","","","","",""],["","","","","","",""],
["","","","","","",""]]:
gridcolor:=[["b","b","b","b","b","b","b"],["b","b","b","b","b","b","b"],["b","b","b","b","b","b","b"],
      ["b","b","b","b","b","b","b"],["b","b","b","b","b","b","b"],["b","b","b","b","b","b","b"],
["b","b","b","b","b","b","b"]]:
end proc:

 
> Valider_Options :=proc()
global taille,niveau;
if Maplets:-Tools:-Get('RB1'('value')) then taille:=5 end if:
if Maplets:-Tools:-Get('RB2'('value')) then taille:=6 end if:
if Maplets:-Tools:-Get('RB3'('value')) then taille:=7 end if:
if Maplets:-Tools:-Get('RB4'('value')) then niveau:=1 end if:
if Maplets:-Tools:-Get('RB5'('value')) then niveau:=2 end if:
if Maplets:-Tools:-Get('RB6'('value')) then niveau:=3 end if:
Sauve_Options (): RAZ_Grilles():
Maplets:-Tools:-Set('Valider'('enabled')=false):
Maplets:-Tools:-Set('Defaut'('enabled')=false):
Maplets:-Tools:-Set('RB1'('enabled')=false):
Maplets:-Tools:-Set('RB2'('enabled')=false):
Maplets:-Tools:-Set('RB3'('enabled')=false):
Maplets:-Tools:-Set('RB4'('enabled')=false):
Maplets:-Tools:-Set('RB5'('enabled')=false):
Maplets:-Tools:-Set('RB6'('enabled')=false):
Maplets:-Tools:-Set('Commencer'('enabled')=true):
end proc:
 

 

> Sauve_Options :=proc()
global pref,taille,niveau,m1,m2,m3;
local f;
f := fopen(pref,WRITE,TEXT);
fprintf(f, "%d\n%d\n",taille,niveau);
fprintf(f, "%d\n%d\n%d\n",m1[5],m2[5],m3[5]);
fprintf(f, "%d\n%d\n%d\n",m1[6],m2[6],m3[6]);
fprintf(f, "%d\n%d\n%d\n",m1[7],m2[7],m3[7]);
fclose(f)
end proc:
 

 

> Lire_Options:=proc()
global taille,niveau,m1,m2,m3;
local f;
f := fopen(pref,READ):
taille := FileTools[Text][ReadInteger](f):
niveau := FileTools[Text][ReadInteger](f):
m1[5]:= FileTools[Text][ReadInteger](f):
m2[5]:= FileTools[Text][ReadInteger](f):
m3[5]:= FileTools[Text][ReadInteger](f):
m1[6]:= FileTools[Text][ReadInteger](f):
m2[6]:= FileTools[Text][ReadInteger](f):
m3[6]:= FileTools[Text][ReadInteger](f):
m1[7]:= FileTools[Text][ReadInteger](f):
m2[7]:= FileTools[Text][ReadInteger](f):
m3[7]:= FileTools[Text][ReadInteger](f):
fclose(f):
Maplets:-Tools:-Set('RB1'('value')=evalb(taille=5)):
Maplets:-Tools:-Set('RB2'('value')=evalb(taille=6)):
Maplets:-Tools:-Set('RB3'('value')=evalb(taille=7)):
Maplets:-Tools:-Set('RB4'('value')=evalb(niveau=1)):
Maplets:-Tools:-Set('RB5'('value')=evalb(niveau=2)):
Maplets:-Tools:-Set('RB6'('value')=evalb(niveau=3)):
majRB(taille);
meilleur_score(taille);
majscore();
end proc:
 

 

> majRB:=proc(n::posint)
global m1,m2,m3;
Maplets:-Tools:-Set('RB4'('caption')=cat("Facile (",m1[n]," mots)")):
Maplets:-Tools:-Set('RB5'('caption')=cat("Moyen (",m2[n]," mots)")):
Maplets:-Tools:-Set('RB6'('caption')=cat("Difficile (",m3[n]," mots)")):
meilleur_score(n);
majscore();
end proc:
 

 

> meilleur_score:=proc(n::posint)   
global  meilleur_joueur, meilleur;
local f;
f := fopen(fichscore[n],READ):
meilleur_joueur := FileTools[Text][ReadString](f):
meilleur := FileTools[Text][ReadInteger](f):
Maplets:-Tools:-Set('meilleurscore'('caption')= meilleur):
Maplets:-Tools:-Set('meilleurjoueur'('caption')= meilleur_joueur):
fclose(f)
end proc:
 

 

> majscore:=proc()
global meilleur, total, nbmotstrouves, nbmots, meilleur_joueur;
 Maplets:-Tools:-Set('score'('caption')=total):
 Maplets:-Tools:-Set('trouves'('caption')=nbmotstrouves):
 Maplets:-Tools:-Set('proposes'('caption')=nbmots):
 if total > meilleur then meilleur := total: meilleur_joueur := "JOUEUR ACTUEL": end if;
 Maplets:-Tools:-Set('meilleurscore'('caption')=meilleur):
 Maplets:-Tools:-Set('meilleurjoueur'('caption')=meilleur_joueur):
end proc:
 

 

> OptionsParDefaut:=proc()
global taille,niveau;
Maplets:-Tools:-Set('RB1'('value')=true):
Maplets:-Tools:-Set('RB2'('value')=false):
Maplets:-Tools:-Set('RB3'('value')=false):
Maplets:-Tools:-Set('RB4'('value')=true):
Maplets:-Tools:-Set('RB5'('value')=false):
Maplets:-Tools:-Set('RB6'('value')=false):
taille:=5 : niveau:=1:
majRB(5);
end proc:
 


Dessin de la cellule de la position (ligne,colonne) dans la grille n x n , avec une couleur RGB(a,b,c)   a,b,c entre 0 et 1:

> dessin:=proc(ligne::posint,colonne::posint,n::posint,a,b,c)
local x,y;
x:=colonne-1;y:=n-ligne;
polygon([[x,y],[colonne,y],[colonne,y+1],[x,y+1]],color=COLOR(RGB,a,b,c)):
end proc:
 

Dessin de la grille de jeu:

> trace_grille:=proc()
global taille,grid,gridcolor;
local l,c,d,p,t,r,g,b;
d:=NULL:
for l to taille do
 for c to taille do
   if gridcolor[c][l]="b" then r:=1:g:=1:b:=1
     elif gridcolor[c][l]="o" then r:=1:g:=0.6:b:=0
     elif gridcolor[c][l]="g" then r:=0.77:g:=0.77:b:=0.77
     else r:=1:g:=1:b:=0
   end if:
   d:=d,dessin(c,l,taille,r,g,b)
 end do
end do;
p:=polygon([[0.2,taille],[0.2,taille+0.2],[taille+0.2,taille+0.2],[taille+0.2,0.2],[taille,0.2],
[taille,taille],[0.2,taille]],color=COLOR(RGB,.5,.5,.5)):
t:=NULL:
for l to taille do
 for c to taille do
    t:=t,textplot([c-0.5,l-0.5,grid[taille-l+1][c]],font=[COURIER, BOLD,24+5*(7-taille)])
 end do
end do:
display([d,p,t],axes=NONE);
end proc:
 

 

> init_motus:=proc()
global nbmots,ligne,motsaisi,mot,gagne,taille,bonne,fichalpha,m3,level,niveau,grid,gridcolor;
local i,f,hasard,line,T;
T["1"]:=1:T["2"]:=2:T["3"]:=3:
nbmots := nbmots + 1: majscore():
ligne := 1: motsaisi:= "": gagne := false:
for i to taille do bonne[i]:= " " end do;
f:=fichalpha[taille]:hasard:=rand(m3[taille]):level:=4:
randomize():
while level>niveau do
 i:=hasard()*13 :filepos(f,i):line:=readline(f):
 mot:=substring(line,2..2+taille-1):  # print(mot):
 level:=T[substring(line,11)]
end do:
fclose(f):
RAZ_Grilles():
grid[1][1]:=substring(mot,1):
gridcolor[1][1]:="o":
Maplets:-Tools:-Set('Grille'=trace_grille()):
end proc:
 

 

> ProposeMot:=proc()
global grid,gridcolor,bonne,ligne,taille,fin,mot,motsaisi,nbmots,nbmotstrouves;
local k,t;
t:=Maplets:-Tools:-Get('Saisie'('value')):
Maplets:-Tools:-Set('Saisie'('value')=UpperCase(t)):
motsaisi:=UpperCase(t);
if not fin then
 analyse(motsaisi,mot);
 if gagne then
    nbmotstrouves := 1 + nbmotstrouves: majscore():
    Maplets:-Tools:-Set('Saisie'('value')=""): motsaisi:="":  
    if nbmots=10 then
       Alert(cat("Vous avez trouvé le mot """,mot,""".\n          Fin de partie."),title="Bravo!"):
       FinPartie();
    else
       Alert(cat("Vous avez trouvé le mot """,mot,""".\n          Jouez un autre mot."),title="Bravo!"):
       init_motus();
    end if;
     
 else # mot non trouvé
   if ligne < taille then
     ligne := ligne + 1:
     for k from 0 to taille - 1 do
       if bonne[k + 1] <> " " then
         grid[ligne][k+1]:=bonne[k + 1]
       end if
     end do:
     Maplets:-Tools:-Set('Saisie'('value')=""): motsaisi:=""
   else # ligne=taille
      if nbmots = 10 then
        Alert(cat("Vous n'avez pas trouvé le mot """,mot,""".\n             Fin de partie."),title="Désolé!"):
        FinPartie();
      else
        Alert(cat("Vous n'avez pas trouvé le mot """,mot,""".\n          Jouez un autre mot."),title="Désolé!"):
        init_motus()
      end if;
      Maplets:-Tools:-Set('Saisie'('value')=""): motsaisi:="":
   end if;
 end if;
end if
end proc:

 
> analyse:=proc(x::string, m::string)
global gagne,ligne,level,total,bonne,taille,motsaisi,fin,grid,gridcolor;
local drapeaux,Flag,k,c;

drapeaux:=proc(x::string, m::string)
local k,l,X,M,R:
X:=convert(x,list); M:=convert(m,list);
R:=[-1$nops(M)];
for k to nops(X) do
if X[k]=M[k] then R[k]:=2: M[k]:=" ": X[k]:=" " fi
od;
for k to nops(X) do
if not member(X[k],M) then R[k]:=0: X[k]:=" " fi
od;
for k to nops(X) do
for l to nops(M) do
if X[k]<>" " and X[k]=M[l] then R[k]:=1: X[k]:=" ": M[l]:=" " fi
od;
od;
for k to nops(R) do
if R[k]=-1 then R[k]:=0 fi
od;
R
end proc:

if length(x)<>taille then
Alert(cat("Le mot proposé, """,motsaisi,""", n'a pas ",taille," lettres."),title="Mot erroné"):
return(NULL) end if;
for k to taille do
if not member(substring(x,k),["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T",
"U","V","W","X","Y","Z"]) then
Alert(cat("Le mot proposé, """,motsaisi,""", comprend un caractère non autorisé."),title="Mot erroné"):return(NULL) end if;
end do;
if trouve(x,taille) < 0 then
Alert(cat("Le mot proposé, """,motsaisi,""", n'est pas dans le dictionnaire.\n Vous devez jouer un autre mot."),title="Mot erroné"):return(NULL)
end if;

Flag:=drapeaux(x,m);
for k to length(x) do
c := substring(x,k):
if fin then
x:="": return(x)
end if;
if Flag[k]=2 then
if bonne[k] = " " then
bonne[k] := c: total := total + 2: majscore()
end if;
grid[ligne][k]:=c: gridcolor[ligne][k]:="o"
elif Flag[k]=1 then
grid[ligne][k]:=c: gridcolor[ligne][k]:="j":
total := total + 1: majscore()
else # Flag[k]=0
grid[ligne][k]:=c:
end if;
end do;
if x = m then
gagne := true:
total := total + (taille + 1 - ligne) * 5 + (level - 1) * 3: majscore()
end if;
Maplets:-Tools:-Set('Grille'=trace_grille()):
Maplets:-Tools:-Set('Saisie'('enabled')=true):
end proc:
 
> trouve:=proc(x::string, n::posint)
global m3,fichalpha;
local r,xi,xj,f,i,j,k,line;  
f:=fichalpha[n]:
i:=0: j:=m3[n]:
while j - i > 1 do
    k:= floor((i+j)/2):filepos(f,k*13):line:=readline(f):
    if LexOrder(substring(line,2..2+taille-1),x)=-1 then i:=k else j:=k end if
end do;
filepos(f,i*13): line:=readline(f): xi:=substring(line,2..2+taille-1):
filepos(f,j*13): line:=readline(f): xj:=substring(line,2..2+taille-1):
if x=xi then r:= i:
elif x=xj then r:=j:
else r:= -i end if;
fclose(f);
r
end proc:
 

 

> FinPartie:=proc()
global fin;
fin:=true : Top10(); majscore();
Maplets:-Tools:-Set('Valider'('enabled')=true):
Maplets:-Tools:-Set('Defaut'('enabled')=true):
Maplets:-Tools:-Set('Dictionnaire'('enabled')=true):
Maplets:-Tools:-Set('Scores'('enabled')=true):
Maplets:-Tools:-Set('RB1'('enabled')=true):
Maplets:-Tools:-Set('RB2'('enabled')=true):
Maplets:-Tools:-Set('RB3'('enabled')=true):
Maplets:-Tools:-Set('RB4'('enabled')=true):
Maplets:-Tools:-Set('RB5'('enabled')=true):
Maplets:-Tools:-Set('RB6'('enabled')=true):
Maplets:-Tools:-Set('Proposer'('enabled')=false):
Maplets:-Tools:-Set('Saisie'('enabled')=false):
end proc:
 

 

> commencer_jeu:=proc()
global fin, nbmots, nbmotstrouves, total;
fin:=false: nbmots := 0: nbmotstrouves := 0: total := 0:
Maplets:-Tools:-Set('Dictionnaire'('enabled')=false):
Maplets:-Tools:-Set('Scores'('enabled')=false):
Maplets:-Tools:-Set('Proposer'('enabled')=true):
Maplets:-Tools:-Set('Saisie'('enabled')=true):
Maplets:-Tools:-Set('Commencer'('enabled') = false):
init_motus()
end proc:
 


-----------------------------  DicoMaplet  ( Fenetre "Dictionnaire" ) --------------------------------
-

 

> Dict:=proc()
  Maplets[Display] (DicoMaplet);
  Sauve_Options() : Lire_Options()
end proc:

 
> majElements:=proc(n::posint)
global m3,opt;
Maplets:-Tools:-Set('nblettres'('caption')=cat("des mots de ",n," lettres")):
Maplets:-Tools:-Set('Mess1'('caption')=cat(convert(m3[n],string)," mots")):
Maplets:-Tools:-Set('Mess3'('caption')=" "):
Efface1() : Efface2(): Efface3()
end proc:
 

 

> majAffich:=proc(n::posint)
global m3,lev1,lev2,opt;
lev1:=4 : lev2:=1 : opt:=n:  
if n=5 then Maplets:-Tools:-Set('RBD1'('value')=true)
elif n=6 then Maplets:-Tools:-Set('RBD2'('value')=true)
else Maplets:-Tools:-Set('RBD3'('value')=true)  end if;
Maplets:-Tools:-Set('RBD7'('value')=true);  Maplets:-Tools:-Set('RBD8'('value')=true);
Maplets:-Tools:-Set('SL1'('upper')=m3[n]):  Maplets:-Tools:-Set('SL2'('upper')=m3[n]):
Maplets:-Tools:-Set('SL1'('value')=m3[n]):  Maplets:-Tools:-Set('SL2'('value')=m3[n]):
majElements(n):
end proc:
 

 

> afficheMots:=proc(dep)
global m3,opt,qual;
local d,k,m,L;
d := abs(dep):
if d>=m3[opt]-20 then d:=m3[opt] - 22 end if;
L:=NULL:
for k from 0 to 21 do
  m:= trouveMot(opt, d + k): L:=L,cat(m[1],qual[m[2]])
end do:
Maplets:-Tools:-Set('LB1'('itemlist')=[L]):
if d < m3[opt] - 21 then Maplets:-Tools:-Set('SL1'('value') = min(m3[opt],m3[opt]-d+1))
else Maplets:-Tools:-Set('SL1'('value') = 1) end if;
end proc:
 

 

> afficheMotsFiltres:=proc(dep)
global listefiltree;
local d,k,n,L;
d:=dep: n:=nops(listefiltree):
if d=0 then d:=1 end if;
if d>n-21 then d:=n-21 end if;
L:=listefiltree[d..d+21]:
Maplets:-Tools:-Set('LB2'('itemlist')=L):
if d<n-21 then Maplets:-Tools:-Set('SL2'('value') = min(n,n-d+1))
else Maplets:-Tools:-Set('SL2'('value') = 1) end if;
end proc:
 

 

> RechercheMot:=proc()
global opt;
local a,s,t;
t := UpperCase(Maplets:-Tools:-Get('TFConsult'('value'))):
a := trouve(convertir(t),opt):
s := Maplets:-Tools:-Get('SL1'('upper')):
if abs(a) > s then a := s end if;
afficheMots(a)
end proc:
 

 

> FiltreMot:=proc()
global opt,m3,qual,listefiltree;
local a,c,i,j,m,y,k,mot,T,nbmots,dep,arret,lettre,nb;
T["1"]:=1:T["2"]:=2:T["3"]:=3: listefiltree:=NULL :
y:=convertir(Maplets:-Tools:-Get('TFFiltre'('value'))): nb := 0 :
for k to opt do
  if substring(y,k) <> " " then
     nb := nb + 1 : lettre[nb] := k
  end if
end do:
a := substring(y, 1):
if Ord(a)>=65 and Ord(a)<=89 then   #  lettre de "A" à "Y"
     dep:= abs(trouve(cat(a,"      "),opt)):
     arret:= abs(trouve(cat(Char(Ord(a) + 1),"      "),opt))
elif Ord(a)=90 then                 # lettre "Z"
     dep:= abs(trouve("Z      ",opt)):
     arret:= m3[opt]-1
else
     dep:= 0: arret:= m3[opt]-1
end if;  
nbmots := 0:   
for j from dep to arret do
  m:=trouveMot(opt, j):
  if (lev1 < 4 and T[m[2]] = lev1) or (lev1 = 4) then
    mot := m[1]: c := 0:
    for i to nb do
      if substring(mot, lettre[i]) = substring(y, lettre[i]) then c := c + 1 end if
    end do:
    if c = nb then
      listefiltree:=listefiltree,cat(mot, qual[m[2]]):
      nbmots := nbmots + 1:
      Maplets:-Tools:-Set('Mess2'('caption') = cat(convert(nbmots,string), " mots"))
    end if
  end if
end do:
if nops([listefiltree])<22 then  
    for i from nops([listefiltree])+1 to 22 do  
        listefiltree:=listefiltree,"                                   " end do
    end if;        
listefiltree:=[listefiltree]:
Maplets:-Tools:-Set('SL2'('upper') = nops(listefiltree)):
afficheMotsFiltres(1):
end proc:
 

 

> convertir:=proc(x)
local s,y,k;
y:= "":
for k to length(cat(x,"       ")) do
 s:=substring(x,k):
 if s="*" then y := cat(y, " ")
 elif (Ord(s)>=65 and Ord(s)<=95) or (Ord(s)>=97 and Ord(s)<=122) then  
    y := cat(y,s)
 else y := cat(y," ") end if;
end do:
ajouteEspaces(UpperCase(y))
end proc:
 

 

> ajouteEspaces:=proc(x::string)
local i,y,z;
y:=cat(x," "): z:="":
for i to 7 do
 z:=cat(z,substring(y,i))
end do:
z
end proc:
 

 

> AjouteMot:=proc()
global opt,lev2;
local t;
t:=UpperCase(Maplets:-Tools:-Get('TFAjout'('value'))):
if length(t)=opt then
    ajouter(ajouteEspaces(t), lev2)
else
    Maplets:-Tools:-Set('Mess3'('caption')="Longueur incorrecte"):
end if
end proc:
 

 

> ajouter:=proc(x::string, n::posint)
global opt,m1,m2,m3,fichalpha;
local L,line,a,f,g,i,j,t,y,p;
y := convertir(UpperCase(x)):  
for p to opt do
  if Ord(substring(x,p)) < 65 or Ord(substring(x,p)) > 90 then
     Maplets:-Tools:-Set('Mess3'('caption')="Mot incorrect"): return(NULL)
  end if
end do:
t:= trouve(y,opt):
if t >= 0 then
     Maplets:-Tools:-Set('Mess3'('caption')="Mot déjà présent"): return(NULL)
else
    t:= abs(t): j:=m3[opt]-1:  
    Maplets:-Tools:-Set('Mess3'('caption')="Ajout du mot en cours..."):
    if t <= 1 then
      a := 1
    elif t >= m3[opt] then
      a := 1 + j
    else
      a := 1 + t
    end if;
    
    L:=cat("""",y,""",",convert(n,string),Char(13),Char(0)): f:=fichalpha[opt]:
    for i from a to j do
       filepos(f,i*13): line:=readline(f): L:=L,line
    end do:
    fclose(f):
    L:=[L] :
    g:=fopen(fichalpha[opt],APPEND):
    for i from a to j+1 do
       filepos(g,i*13): fprintf(g,"%s\n",convert(L[i-a+1],string)):
    end do:   
    closef(g):
           
    if n = 3 then m3[opt] := m3[opt] + 1 end if;
    if n = 2 then
        m2[opt] := m2[opt] + 1: m3[opt] := m3[opt] + 1
    end if;
    if  n = 1 then
        m1[opt] := m1[opt] + 1: m2[opt] := m2[opt] + 1: m3[opt] := m3[opt] + 1
    end if;
    Maplets:-Tools:-Set('SL1'('upper')= m3[opt] - 21):
    Maplets:-Tools:-Set('Mess3'('caption')=""):
    Maplets:-Tools:-Set('Mess1'('caption')=cat(convert(m3[opt],string)," mots")):
 end if
end proc:
 

 

> trouveMot:=proc(n::posint, index::integer)
global fichalpha,opt;
local f,line;
f:=fichalpha[n]:
filepos(f,index*13): line:=readline(f):
fclose(f);
[substring(line,2..2+opt-1),substring(line,11)]
end proc:
 

 

> Efface1:=proc()
Maplets:-Tools:-Set('TFConsult'('value')=""):
afficheMots(0)
end proc:
 

 

> Efface2:=proc()
local i,L;
Maplets:-Tools:-Set('TFFiltre'('value')=""):
L:=NULL:
for i from 0 to 21 do L:=L,"                                   " end do:
Maplets:-Tools:-Set('LB2'('itemlist')=[L]):
Maplets:-Tools:-Set('Mess2'('caption')="Aucun mot"):
end proc:
 

 

> Efface3:=proc()
Maplets:-Tools:-Set('TFAjout'('value')=""):
end proc:
 

 

> majListe1:=proc()
global opt,m3;
local t;
t:=Maplets:-Tools:-Get('SL1'('value')):
afficheMots(m3[opt]-t+1)  
end proc:
 

 

> majListe2:=proc()
global listefiltree;
local t;
t:=Maplets:-Tools:-Get('SL2'('value')):
afficheMotsFiltres(nops(listefiltree)-t+1)  
end proc:
 

 

> niv1:=proc(n)
global lev1;
 lev1:=n
end proc:
 

 

> niv2:=proc(n)
global lev2;
 lev2:=n
end proc:
 

 

> DicoMaplet := Maplet(
 'onstartup' = 'demarrer',
 Font['F1']('family'="TIMES", 'bold'='false', 'italic'='false', size=12),
 Font['F2']('family'="TIMES", 'bold'='true', 'italic'='false', size=24),
 ButtonGroup['GroupeD1'](), ButtonGroup['GroupeD2'](), ButtonGroup['GroupeD3'](),

 Window['FenDico'](
  'title' = "Dictionnaire", 'layout' = 'DicoLayout', 'width'=725, 'height'=550
 ),
 Action['demarrer'](
    Evaluate('function' ='majAffich(taille)'), RunWindow(FenDico)  
 ),

BoxLayout['DicoLayout'](
BoxColumn(
BoxRow('inset'=0, 'spacing'=0,  
Label(" ",'font'='F1'),Label(" ",'font'='F1'),Label(" ",'font'='F1'),Label('image'=Image( cat(chemin,"motus.gif"))),
Label(" ",'font'='F1'),Label(" ",'font'='F1'),
RadioButton['RBD1']("5 lettres",'group'='GroupeD1','onclick'=Evaluate('function' = 'majAffich(5)')),
RadioButton['RBD2']("6 lettres",'group'='GroupeD1','onclick'=Evaluate('function' = 'majAffich(6)')),
RadioButton['RBD3']("7 lettres",'group'='GroupeD1','onclick'=Evaluate('function' = 'majAffich(7)'))
),

BoxRow('inset'=0, 'spacing'=0,
GridLayout(
 GridRow(
  GridCell(
    BoxColumn('inset'=0, 'spacing'=0, 'border'=true, 'caption'="Consulter - Rechercher",
     Label("  ",'font'=F1),
     Label("Consultation ou recherche"),Label("dans le dictionnaire"),
     Label['nblettres'](cat("des mots de ",taille," lettres")),
     Label("  ",'font'=F1),Label("  ",'font'=F1),
     Label("  ",'font'=F1), Label("  ",'font'=F1),
     Label(" ",'font'='F1'),Label(" ",'font'='F1'),
     Label("Entrez les premières"), Label("lettres du mot souhaité") ,
     Label("puis cliquez ""Rechercher"":"),
     Label("  ",'font'=F1),
     TextField['TFConsult']('width'=12, 'enabled'=true) ,
     Label("  ",'font'=F1),
     Button['Effacer1']("Effacer",'onclick'= Evaluate( 'function'= "Efface1")) ,     
     Label("  ",'font'=F1),
     Button['Rechercher']("Rechercher",'onclick'= Evaluate( 'function'= "RechercheMot")),
     Label("  ",'font'=F1),
     Label['Mess1'](cat(convert(m3[taille],string)," mots"),'foreground'=blue),
     Label("  ",'font'=F1)
    )
  ),
  
  GridCell(
    BoxRow(  
     ListBox['LB1']([]),      
Slider['SL1'](lower=1,upper=10,value=10,filled=true,majorticks=22,minorticks=1,orientation=vertical,
snapticks=false,showticks=false,showlabels=false,'onchange'=Evaluate( 'function'="majListe1"))
    )
  ),
  
  GridCell(
     BoxColumn('inset'=0, 'spacing'=0, 'border'=true, 'caption'="Filtrer",
     Label("Recherche filtrée parmi"), Label("tous les mots de niveau:"),
     Label("  ",'font'=F1),     
     RadioButton['RBD4']("Facile",'group'='GroupeD2','onclick'=Evaluate( 'function'= 'niv1(1)')),
     RadioButton['RBD5']("Moyen",'group'='GroupeD2','onclick'=Evaluate( 'function'= 'niv1(2)')),
     RadioButton['RBD6']("Difficile",'group'='GroupeD2','onclick'=Evaluate( 'function'= 'niv1(3)')),
     RadioButton['RBD7']("Quelconque",'value'=true,'group'='GroupeD2','onclick'=Evaluate( 'function'= 'niv1(4)')),
     Label("  ",'font'=F1),
     Label("Saisissez un filtre de"),Label("recherche (Ex *R**E)"),
     Label("puis cliquez ""Filtrer"":"),  
     Label("  ",'font'=F1),
     TextField['TFFiltre']('width'=12, 'enabled'=true) ,
     Label("  ",'font'=F1),
     Button['Effacer2']("Effacer",'onclick'= Evaluate( 'function'= "Efface2()")) ,
     Label("  ",'font'=F1),
     Button['Filtrer']("Filtrer",'onclick'= Evaluate( 'function'= "FiltreMot")),
     Label("  ",'font'=F1),
     Label['Mess2']("Message2",'foreground'=blue),
     Label("  ",'font'=F1)
     )
  ),

  GridCell(
    BoxRow(
      ListBox['LB2']([]),
Slider['SL2'](lower=1,upper=10,value=10,filled=true,majorticks=22,minorticks=1,orientation=vertical,
snapticks=false,showticks=false,showlabels=false,'onchange'=Evaluate( 'function'="majListe2"))
    )
  ),

  GridCell(
    BoxColumn('inset'=0, 'spacing'=0, 'border'=true, 'caption'="Ajouter",
     Label("  ",'font'=F1),
     Label("Ajouter au dictionnaire"),Label("un mot de niveau:"),
     Label("  ",'font'=F1),
     RadioButton['RBD8']("Facile",'value'=true,'group'='GroupeD3','onclick'=Evaluate( 'function'= 'niv1(1)')),
     RadioButton['RBD9']("Moyen",'group'='GroupeD3','onclick'=Evaluate( 'function'= 'niv1(2)')),
     RadioButton['RBD10']("Difficile",'group'='GroupeD3','onclick'=Evaluate( 'function'= 'niv2(3)')),
     Label("  ",'font'=F1), Label("  ",'font'=F1), Label("  ",'font'=F1),
     Label("Saisissez le mot à ajouter"),
     Label("puis cliquez ""Ajouter"":"),
     Label("  ",'font'=F1),
     TextField['TFAjout']('width'=12, 'enabled'=true) ,
     Label("  ",'font'=F1),
     Button['Effacer3']("Effacer",'onclick'= Evaluate( 'function'= "Efface3")) ,
     Label("  ",'font'=F1),
     Button['Ajouter']("Ajouter",'onclick'= Evaluate( 'function'= "AjouteMot")),
     Label("  ",'font'=F1),
     Label['Mess3']("Message3",'foreground'=blue),
     Label("  ",'font'=F1)
    )
  )
 )
)
),

BoxRow('inset'=0, 'spacing'=0,  
Button("Fermer", CloseWindow(FenDico))
)                                               
))
):
 


---------------------------  Top10Maplet  ( Fenetre "Top10" des meilleurs scores ) ------------------------

 

> Top10:=proc()
  Maplets[Display] (Top10Maplet)
end proc:
 

 

> EntreNom := Maplet( 'abnormalshutdown' = "FAIL",
   InputDialog['ID1'](
       "Saisissez votre prénom:", 'title' = "Entrez au Top10",
       'onapprove' = Shutdown( ['ID1'] ),
       'oncancel' = Shutdown( "FAIL" )
   )
):
 

 

> Formate:=proc(x::string)
local y,z,i;
y:="": z:="":
for i to length(x) do
 if substring(x,i)=" " or substring(x,i)="," then y:=cat(y,"_") else y:=cat(y,substring(x,i)) end if;
end do:
for i to length(y) do
 if i<=15 then z:=cat(z,substring(y,i)) end if
end do:
z
end proc:
 

 

> NomJoueur:=proc(x::posint,r)
global ordre,joueurs,scores,fichscore,taille,total,meilleur_joueur;
local f,i,s,t;
  s:=convert(cat(J,x),name):
  if r="FAIL" then t:="**** MOTUS ****" else t:=Formate(convert(op(r),string)) end if:
  Maplets:-Tools:-Set(s('caption')=UpperCase(t)):
  if x > 0 then
    joueurs[x] := UpperCase(t):
    if ordre = 1 then meilleur_joueur := joueurs[x] end if;
    f := fopen(fichscore[taille],WRITE):
    for i to 10 do
      fprintf(f, "%s\n%d\n",joueurs[i],scores[i])
    end do:
    fclose(f)
  end if:
end proc:
 

 

> RazScores:=proc()
global total,taille,fichscore,meilleur_joueur,meilleur;
local r,i,j,f;
r:=Alert(cat("Vous voulez remettre à zéro tous les scores.\n          Veuillez confirmer ou annuler."),title="Remise à zéro"):
if r=FAIL then return fi;
for i from 5 to 7 do
 f := fopen(fichscore[i],WRITE):
 for j to 10 do
      fprintf(f, "%s\n%d\n","---------------",0)
 end do:
 fclose(f):
end do;
meilleur_joueur:="---------------": meilleur:=0;
total:=0:
majRB(taille);
end proc:
 

 

> LireScores:=proc(n::posint)
global fichscore,joueurs,scores;
local i,f;
if n=5 then Maplets:-Tools:-Set('RBS1'('value')=true)
elif n=6 then Maplets:-Tools:-Set('RBS2'('value')=true)
else Maplets:-Tools:-Set('RBS3'('value')=true)  end if;
f := fopen(fichscore[n],READ):
for i to 10 do
 joueurs[i] := FileTools[Text][ReadString](f):
 scores[i] := FileTools[Text][ReadInteger](f):
end do;
fclose(f):
end proc:
 

 

> classer:=proc(i::integer)
global ordre,joueurs,scores;
local resultat,j,k,s,t,u;
ordre := -1:
if i > scores[10] then
  if i > scores[1] then
         for j from 10 to 2 by -1 do
          scores[j]:=scores[j-1]:joueurs[j]:=joueurs[j-1]
         end do;
         ordre := 1:
  else
    for j to 9 do
        if i > scores[j + 1] and i <= scores[j] then
             if j < 9 then
                  for k from 10 to j + 2 by -1 do
                    scores[k]:=scores[k-1]:joueurs[k]:=joueurs[k-1]
                  end do;
                  ordre := j + 1:
                  break
             else
                  ordre := 10
             end if
        end if
    end do
  end if
end if;
for j to 10 do
 s:=convert(cat("S",j),name): t:=convert(cat("J",j),name):
 Maplets:-Tools:-Set(t('caption')=cat(" ",joueurs[j]," ")):Maplets:-Tools:-Set(s('caption')=scores[j])
end do;
if ordre > 0 then
  scores[ordre]:= i:
  resultat := Maplets[Display](EntreNom);
  s:=convert(cat("S",ordre),name): t:=convert(cat("J",ordre),name):
  Maplets:-Tools:-Set(s('caption') = i):   Maplets:-Tools:-Set(t('caption')=""):
  NomJoueur(ordre,resultat)
end if;
end proc:
 

 

> majAffichage:=proc(n::posint, t::integer)
global total;
LireScores(n): classer(t): total:=0:
end proc:
 

 

> Top10Maplet := Maplet(
 'onstartup' = 'demarrage',
 Font['F1']('family'="TIMES", 'bold'='false', 'italic'='false', size=12),
 Font['F2']('family'="TIMES", 'bold'='true', 'italic'='false', size=24),
 ButtonGroup['GroupeS1'](),

 Window['FenScore'](
  'title' = "Top10", 'layout' = 'Top10Layout', 'width'=400, 'height'=570
 ),
 Action['demarrage'](
   Evaluate('function' ='majAffichage(taille,total)'), RunWindow(FenScore)  
 ),

BoxLayout['Top10Layout'](
    
GridLayout(
GridRow( GridCell(Label('image'=Image( cat(chemin,"motus.gif"))))),
GridRow(GridCell(Label(" ",'font'='F1'))),GridRow(GridCell(Label(" ",'font'='F1'))),
GridRow(
     GridCell(RadioButton['RBS1']("5 lettres",'group'='GroupeS1','onclick'=Evaluate('function' = 'majAffichage(5,-1)'))),
     GridCell(RadioButton['RBS2']("6 lettres",'group'='GroupeS1','onclick'=Evaluate('function' = 'majAffichage(6,-1)'))),
     GridCell(RadioButton['RBS3']("7 lettres",'group'='GroupeS1', 'onclick'=Evaluate('function' = 'majAffichage(7,-1)')))
),
GridRow(GridCell(Label(" ",'font'='F1'))),
GridRow(GridCell(Label("1",'foreground'=red,'font'='F2')),GridCell(Label['J1']("               ",'font'='F2')),GridCell(Label['S1'](" 0",'font'='F2','foreground'=blue)) ),
GridRow(GridCell(Label("2",'foreground'=red,'font'='F2')),GridCell(Label['J2']("               ",'font'='F2')),GridCell(Label['S2'](" 0",'font'='F2','foreground'=blue)) ),
GridRow(GridCell(Label("3",'foreground'=red,'font'='F2')),GridCell(Label['J3']("               ",'font'='F2')),GridCell(Label['S3'](" 0",'font'='F2','foreground'=blue)) ),
GridRow(GridCell(Label("4",'foreground'=red,'font'='F2')),GridCell(Label['J4']("               ",'font'='F2')),GridCell(Label['S4'](" 0",'font'='F2','foreground'=blue)) ),
GridRow(GridCell(Label("5",'foreground'=red,'font'='F2')),GridCell(Label['J5']("               ",'font'='F2')),GridCell(Label['S5'](" 0",'font'='F2','foreground'=blue)) ),
GridRow(GridCell(Label("6",'foreground'=red,'font'='F2')),GridCell(Label['J6']("               ",'font'='F2')),GridCell(Label['S6'](" 0",'font'='F2','foreground'=blue)) ),
GridRow(GridCell(Label("7",'foreground'=red,'font'='F2')),GridCell(Label['J7']("               ",'font'='F2')),GridCell(Label['S7'](" 0",'font'='F2','foreground'=blue)) ),
GridRow(GridCell(Label("8",'foreground'=red,'font'='F2')),GridCell(Label['J8']("               ",'font'='F2')),GridCell(Label['S8'](" 0",'font'='F2','foreground'=blue)) ),
GridRow(GridCell(Label("9",'foreground'=red,'font'='F2')),GridCell(Label['J9']("               ",'font'='F2')),GridCell(Label['S9'](" 0",'font'='F2','foreground'=blue)) ),
GridRow(GridCell(Label("10",'foreground'=red,'font'='F2')),GridCell(Label['J10']("               ",'font'='F2')),GridCell(Label['S10'](" 0",'font'='F2','foreground'=blue)) ),
GridRow(GridCell(Label(" ",'font'='F1'))),GridRow(GridCell(Label(" ",'font'='F1'))),
GridRow( GridCell(Button("    Fermer   ", CloseWindow(FenScore))) )                                                                
))
):
 


----------------------------  MotusMaplet  ( Fenetre de jeu "Motus") ---------------------

 

> MotusMaplet := Maplet(
 'onstartup' = 'start',
 Font['F1']('family'="TIMES", 'bold'='false', 'italic'='false', size=12),
 Font['F2']('family'="TIMES", 'bold'='true', 'italic'='false', size=24),
 ButtonGroup['Groupe1'](),  ButtonGroup['Groupe2'](),

 Window['FenPrincipale'](
  'title' = "Motus", 'menubar'='Menu', 'layout' = 'PrincipalLayout', 'defaultbutton'='Proposer',
  'width'=700, 'height'=500
 ),
 Window['FenQuitter']('title' = "Quitter", 'layout' = 'QuitterLayout', 'width'=350, 'height'=250),
 Window['FenDico']('title' = "Dictionnaire", 'layout' = 'DicoLayout', 'width'=600, 'height'=500),
 Window['FenApropos']('title' = "A propos", 'layout' = 'AproposLayout', 'width'=375, 'height'=275),
 Window['FenComptage']('title'="Comptage des points", 'layout' = 'ComptageLayout', width=500, height=350),
 Window['FenDesc']('title' = "Description du jeu", 'layout' = 'DescLayout', width=500, height=350),
 Window['FenMotsAutorises']('title' = "Mots autorisés", 'layout' = 'MotsAutorisesLayout', width=500, height=350),
 Window['FenMotsExclus']('title' = "Mots exclus", 'layout' = 'MotsExclusLayout', width=500, height=350),
 Window['FenAideMotus']('title' = "Fenêtre ""Motus""", 'layout' = 'AideMotusLayout', width=500, height=350),
 Window['FenAideDict']('title' = "Fenêtre ""Dictionnaire""", 'layout' = 'AideDictLayout', width=500, height=350),
 Window['FenAideTop10']('title' = "Fenêtre ""Top10""", 'layout' = 'AideTop10Layout', width=500, height=350),
 Window['FenConsulter']('title' = "Consulter - Rechercher", 'layout' = 'AideConsulterLayout', width=500, height=350),
 Window['FenFiltrer']('title' = "Filtrer", 'layout' = 'AideFiltrerLayout', width=500, height=350),
 Window['FenAjouter']('title' = "Ajouter un mot", 'layout' = 'AideAjouterLayout', width=500, height=350),
 Window['FenMenus']('title' = "Menus", 'layout' = 'AideMenusLayout', width=500, height=350),
 Window['FenBoutons']('title' = "Boutons de commande", 'layout' = 'AideBoutonsLayout', width=500, height=350),
 Window['FenOptions']('title' = "Options", 'layout' = 'AideOptionsLayout', width=500, height=350),
 Window['FenElements']('title' = "Grille de jeu", 'layout' = 'AideElementsLayout', width=600, height=350),  

Action['start'](
 Evaluate('function' = "Lire_Options"), Evaluate('function' = 'majRB(taille)'), RunWindow('FenPrincipale')
),
Action['maj'](
 Evaluate('function' = "Valider_Options "), Evaluate( 'Grille'= 'trace_grille()')
),
Action['quitter'](
 CloseWindow(FenQuitter), CloseWindow(FenPrincipale)
),
Action['razscores'](
 Evaluate('function' = "RazScores")
),
BoxLayout['PrincipalLayout'](
MenuBar['Menu'](
   Menu['Dictionnaire']("Dictionnaire",
     MenuItem("Consulter", onclick= Evaluate('function' = "Dict")),
     MenuSeparator(),
     MenuItem("Mots autorisés", onclick=RunWindow('FenMotsAutorises')),
     MenuItem("Mots exclus", onclick=RunWindow('FenMotsExclus'))                  
   ),
   Menu['Scores']("Scores",
     MenuItem['MenuScores']("Meilleurs scores", 'onclick'= Evaluate('function' = "Top10")),
     MenuItem['MenuScoresReset']("Remise à zéro", 'onclick'= 'razscores'),
     MenuSeparator(),
     MenuItem("Comptage des points", onclick=RunWindow('FenComptage'))
     ),
   Menu("Aide",
     MenuItem("Description du jeu", onclick=RunWindow('FenDesc')),
     MenuSeparator(),
     MenuItem("Fenêtre ""Motus""", onclick=RunWindow('FenAideMotus')),
     MenuItem(">  Menus",onclick=RunWindow('FenMenus')),
     MenuItem(">  Options",onclick=RunWindow('FenOptions')),
     MenuItem(">  Boutons de commande",onclick=RunWindow('FenBoutons')),
     MenuItem(">  Grille de jeu", onclick=RunWindow('FenElements')),
     MenuSeparator(),
     MenuItem("Fenêtre ""Dictionnaire""", onclick=RunWindow('FenAideDict')),
     MenuItem(">  ""Consulter - Rechercher""", onclick=RunWindow('FenConsulter')),
     MenuItem(">  ""Filtrer""", onclick=RunWindow('FenFiltrer')),
     MenuItem(">  ""Ajouter""", onclick=RunWindow('FenAjouter')),       
     MenuSeparator(),
     MenuItem("Fenêtre ""Top10""", onclick=RunWindow('FenAideTop10')),
     MenuSeparator(),
     MenuItem("A propos", onclick=RunWindow('FenApropos'))
   )
 ), # fin 'Menu'

BoxColumn(
   [BoxRow( 'border'=true, 'inset'=0, 'spacing'=0, 'caption'="Nombre de lettres :",
   [RadioButton['RB1']("5 lettres       ",'value'=true,'group'='Groupe1','onclick'=Evaluate('function' = 'majRB(5)') ),
   RadioButton['RB2']("6 lettres       ",'group'='Groupe1', 'onclick'=Evaluate('function' = 'majRB(6)') ),
   RadioButton['RB3']("7 lettres       ",'group'='Groupe1', 'onclick'=Evaluate('function' = 'majRB(7)') )]  
   ),
   BoxRow( 'border'=true, 'inset'=0, 'spacing'=0, 'caption'="Niveau de jeu :",
   [RadioButton['RB4']("Facile   ",'value'=true,'group'='Groupe2'),
    RadioButton['RB5']("Moyen   ",'group'='Groupe2'),
    RadioButton['RB6']("Difficile   ",'group'='Groupe2')]  
   )],
  BoxRow(
    Button['Defaut']("Options par défaut", 'onclick' = Evaluate('function' = "OptionsParDefaut")),
    Button['Valider']("  Valider les options  ", 'onclick' = 'maj')
  ),

BoxColumn(
    BoxColumn('border'=true, 'inset'=0, 'spacing'=4, 'caption'="Statistiques :",
    [ Label('caption'="Mots proposés:"),
      Label['proposes']('font' = Font("default", bold, 18),'foreground'=red,'caption'=nbmots),   
      Label('caption'="Mots trouvés: "),
      Label['trouves']('font' = Font("default", bold, 18),'foreground'=red,'caption'=nbmotstrouves) ],
     [ Label['tot']('caption'="Score:              "),
      Label['score']('font' = Font("default", bold, 18),'foreground'=red, 'caption'=total),
      Label('caption'="Meilleur score: "),
      Label['meilleurscore']('font' = Font("default", bold, 18),'foreground'=red,'caption'="0")] ,
      [Label('caption'="Meilleur joueur:"),Label['meilleurjoueur']('font' = Font("default", bold=true,italic=false,14), 'foreground'=COLOR(RGB, .2, .2, .6), 'caption'="")]       
),

[Button("   Quitter Motus   ", RunWindow(FenQuitter)), Button['Commencer']("Commencer à jouer", 'enabled'=false, onclick=Evaluate( 'function'= "commencer_jeu"))]
 )
),
 BoxColumn('border'=true, 'inset'=0, 'spacing'=0,
    [Label['LBL1']('image'=Image( cat(chemin,"motus.gif")))],  
    Plotter['Grille']('width'=273, 'height'=273),
    [TextField['Saisie']('width'=12, 'enabled'=false, 'onchange'=Evaluate( 'function'= "ProposeMot")),
     Button['Proposer']("OK",'enabled'=false,'onclick'=Evaluate( 'function'= "ProposeMot"))]
 ),
BoxColumn(VerticalGlue(), VerticalGlue(), VerticalGlue())

),

BoxLayout['QuitterLayout'](
BoxColumn(
 [Label('image'=Image( cat(chemin,"motus.gif")))],
 [BoxRow( Label("Voulez-vous quitter le jeu?"))],
 [Button("Oui",'onclick'='quitter'),Button("Non",'onclick'=CloseWindow(FenQuitter))]
)
),

BoxLayout['AproposLayout'](
BoxColumn('border'=true, 'inset'=0, 'spacing'=0,
  Label(font=F2,"Motus"),
  Label("© Alain Le Stang - ""Apprendre Maple"" - 2004"),
  Label("                    "),
  Label('foreground'=blue,"Des versions ""KMotux"" de ce jeu sous Linux/KDE (KDE2 et KDE3)"),
  Label('foreground'=blue,"sont disponibles gratuitement sur http://alamanya.free.fr/kmotux"),
  Label("                    "),
  Button("Fermer", CloseWindow('FenApropos'))
)
),

BoxLayout['ComptageLayout'](
 BoxColumn('border'=true, 'inset'=0, 'spacing'=4,
   BoxRow('inset'=0, 'spacing'=0,
     TextBox('wrapped'=true, 'width'=80, 'height'=10,  'editable'='false', 'value'=
 "Une lettre trouvée et bien placée dans le mot rapporte 2 points.\nUne lettre trouvée et mal placée dans le mot rapporte 1 point.\n\nUn bonus de 6 points est accordé pour un mot trouvé de niveau difficile.\n\nUn bonus de 3 points est accordé pour un mot trouvé de niveau moyen.\n")),
  [Label('image'=Image( cat(chemin,"comptepts.gif")))],
   BoxRow('inset'=0, 'spacing'=0,
      Button("Fermer", CloseWindow('FenComptage') )
   )
 )
),

BoxLayout['DescLayout'](  # Description du jeu
 BoxColumn('border'=true, 'inset'=0, 'spacing'=4,
   BoxRow('inset'=0, 'spacing'=0,
     TextBox('wrapped'=true, 'width'=80, 'height'=15, 'editable'='false', 'value'=
 "Le jeu MOTUS consiste à découvrir des mots tirés au hasard par l'ordinateur sur un principe identique à celui du  MASTERMIND, de façon à réaliser le plus grand nombre de points.\n\nOn doit réaliser le score maximal en 10 mots proposés.\n\nOn peut jouer avec des mots de 5 , 6 , ou 7 lettres.\n\nPour découvrir un mot de 5, 6, ou 7 lettres , 5, 6, ou 7 essais sont autorisés.\n\nTrois niveaux de dictionnaire : facile, moyen, et difficile sont proposés.\n")
   ),
   BoxRow('inset'=0, 'spacing'=0,
      Button("Fermer", CloseWindow('FenDesc') )
   )
 )
),

BoxLayout['MotsAutorisesLayout']( #Mots autorisés
 BoxColumn('border'=true, 'inset'=0, 'spacing'=4,
   BoxRow('inset'=0, 'spacing'=0,
     TextBox('wrapped'=true, 'width'=80, 'height'=15  ,'editable'='false', 'value'=
 "Les mots autorisés par MOTUS sont les suivants:\n\n   - les noms communs (peuvent être écrits au singulier comme au pluriel).\n\n   - les adjectifs (peuvent être écrits au singulier comme au pluriel, au masculin comme au féminin).\n\n   - les verbes (les seules formes tolérées pour les verbes sont l'infinitif, les participes passés (éventuellement conjugués), et le participe présent.\n\nExemples: MARIER, MARIE, MARIEE , MARIES , MARIEES , MARIANT sont acceptés.\n\nMARIERA, MARIAIT, MARIONS sont refusés.\n")
   ),
   BoxRow('inset'=0, 'spacing'=0,
      Button("Fermer", CloseWindow('FenMotsAutorises') )
   )
 )
),

BoxLayout['MotsExclusLayout'](  #Mots exclus
 BoxColumn('border'=true, 'inset'=0, 'spacing'=4,
   BoxRow('inset'=0, 'spacing'=0,
     TextBox('wrapped'=true, 'width'=80, 'height'=15,  'editable'='false', 'value'=
 "Sont exclus:\n\n   - les noms propres (exemple: LILLE)\n\n   - les prénoms (exemple: RAYMOND)\n\n   - les mots composés (exemple: IN-FOLIO).\n\nLes mots d'essai proposés par le joueur doivent impérativement faire partie du dictionnaire global.\n")
   ),
   BoxRow('inset'=0, 'spacing'=0,
      Button("Fermer",  CloseWindow('FenMotsExclus') )
   )
 )
),

BoxLayout['AideMotusLayout']( # Fenêtre "Motus"
 BoxColumn('border'=true, 'inset'=0, 'spacing'=4,
   BoxRow('inset'=0, 'spacing'=0,
     TextBox('wrapped'=true, 'width'=80, 'height'=15,  'editable'='false', 'value'=
 "La fenêtre ""Motus"" est la fenêtre de jeu: elle comporte une barre de menus, des cadres, des boutons de commande et d'autres éléments:\n\n   - Menus: ""Dictionnaire"", ""Scores"", ""Aide"".\n\n   - Cadres: ""Nombre de lettres"", ""Niveau de jeu"", ""Statistiques"".\n\n   - Boutons: ""Options par défaut"", ""Valider les options"", ""Quitter Motus"", ""Commencer à jouer"", ""OK"".\n\n   - Autres éléments: zone de saisie du mot, grille de jeu.\n\nConsulter les rubriques d'aide correspondantes pour plus de détails sur leurs fonctions.\n")
   ),
   BoxRow('inset'=0, 'spacing'=0,
      Button("Fermer",  CloseWindow('FenAideMotus') )
   )
 )
),

BoxLayout['AideDictLayout'](  # Fenêtre "Dictionnaire"
 BoxColumn('border'=true, 'inset'=0, 'spacing'=4,
   BoxRow('inset'=0, 'spacing'=0,
     TextBox('wrapped'=true, 'width'=80, 'height'=17,  'editable'='false', 'value'=
 "La fenêtre ""Dictionnaire"" s'active en cliquant le sous-menu ""Consulter"" du menu ""Dictionnaire"" de la fenêtre ""Motus"".\n\nSélectionner l'une des options: 5, 6, ou 7 lettres pour visualiser le dictionnaire des mots de 5, 6, ou 7 lettres.\n\nLa fenêtre ""Dictionnaire"" comporte de plus 3 autres cadres et un bouton ""Fermer"":\n\n   - Cadre ""Consulter - Rechercher"".\n\n   - Cadre ""Filtrer"".\n\n   - Cadre ""Ajouter"".\n\nConsulter les rubriques d'aide correspondantes pour plus de détails sur leurs fonctions.\n")
   ),
   BoxRow('inset'=0, 'spacing'=0,
      Button("Fermer", CloseWindow('FenAideDict') )
   )
 )
),

BoxLayout['AideTop10Layout']( # Fenêtre "Top10"
 BoxColumn('border'=true, 'inset'=0, 'spacing'=4,
   BoxRow('inset'=0, 'spacing'=0,
     TextBox('wrapped'=true, 'width'=80, 'height'=15,  'editable'='false', 'value'=
 "La fenêtre ""Top10"" permet de visualiser les meilleurs scores établis dans les différents types de jeu. Choisir l'une des options: 5, 6, ou 7 lettres pour afficher les meilleurs scores correspondants.\n\nCette fenêtre est activée:\n\n   - soit à partir du sous-menu ""Meilleurs scores"" du menu ""Scores"" de la fenêtre ""Motus"".\n\n   - soit, à la fin d'une partie de MOTUS, lorsque votre score est dans les 10 meilleurs scores réalisés. Dans ce cas, vous pourrez inscrire votre nom au Top10.\n")
   ),
   BoxRow('inset'=0, 'spacing'=0,
      Button("Fermer", CloseWindow('FenAideTop10') )
   )
 )
),

BoxLayout['AideConsulterLayout'](
 BoxColumn('border'=true, 'inset'=0, 'spacing'=4,
   BoxRow('inset'=0, 'spacing'=0,
     TextBox('wrapped'=true, 'width'=80, 'height'=15,  'editable'='false', 'value'=
 "Pour consulter le dictionnaire correspondant aux mots de 5, 6, ou 7 lettres, procéder comme suit:\n\n   - cocher l'option correspondante à 5, 6, ou 7 lettres.\n\n   - saisir dans la zone de texte les premières lettres d'un mot, puis cliquer le bouton ""Rechercher"". La liste de mots est alors mise à jour.\n\n   - on peut aussi faire défiler la liste de mots en utilisant l'ascenseur vertical situé à droite de la liste.\n\n Cliquer le bouton ""Effacer"" pour effacer la zone de texte. Dans ce cas, la liste de mots est mise à jour en revenant au début du dictionnaire.\n\n")),
    BoxRow('inset'=0, 'spacing'=0,
      Button("Fermer", CloseWindow('FenConsulter') )
   )
 )
),

BoxLayout['AideFiltrerLayout'](
 BoxColumn('border'=true, 'inset'=0, 'spacing'=4,
   BoxRow('inset'=0, 'spacing'=0,
     TextBox('wrapped'=true, 'width'=80, 'height'=17,  'editable'='false', 'value'=
 "Pour effectuer une recherche filtrée dans le dictionnaire correspondant aux mots de 5, 6, ou 7 lettres, procéder ainsi:\n\n   - cocher l'option correspondante à 5, 6, ou 7 lettres.\n\n   - dans la zone de texte, saisir un filtre de recherche et cliquer l'une des 4 options (""facile"", ""moyen"", ""difficile"" ou ""quelconque"") pour préciser le niveau de difficulté des mots recherchés (l'option ""quelconque"" signifie que la recherche s'effectue parmi tous les mots du dictionnaire).\n\nExemple: Avec 5 lettres, si l'on veut chercher tous les mots dont la 3ème lettre est un E, saisir **E** (ou plus simplement **E , les caractères non tapés étant remplacés par *) en choisissant l'option ""quelconque"".\n\n   - activer la recherche filtrée en cliquant le bouton ""Filtrer"".\n\nLa liste de mots est automatiquement mise à jour et le nombre de mots trouvés est affiché. On peut faire défiler la liste de mots en utilisant l'ascenseur vertical situé à droite de la liste.\n\nCliquer le bouton ""Effacer"" pour effacer la zone de texte et la liste de mots.\n\n")),
      BoxRow('inset'=0, 'spacing'=0,
      Button("Fermer", CloseWindow('FenFiltrer') )
   )
 )
),

BoxLayout['AideAjouterLayout'](
 BoxColumn('border'=true, 'inset'=0, 'spacing'=4,
   BoxRow('inset'=0, 'spacing'=0,
     TextBox('wrapped'=true, 'width'=80, 'height'=17,  'editable'='false', 'value'=
 "Pour ajouter un mot dans le dictionnaire correspondant aux mots de 5, 6, ou 7 lettres, procéder ainsi:\n\n   - cocher l'option correspondante à 5, 6, ou 7 lettres.\n\n   - choisir l'une des 3 options: ""facile"", ""moyen"", ""difficile"" pour préciser le niveau de difficulté du mot à ajouter.\n\n   - dans la zone de texte, saisir le mot à ajouter.\n\n   - pour valider ce mot, cliquer le bouton ""Ajouter"".\n\nCliquer le bouton ""Effacer"" pour effacer la zone de texte.\n\nDans le cas où le mot contient des caractères non alphabétiques , un message ""Mot incorrect"" apparait. Dans le cas où le mot existe déjà dans le dictionnaire , un message ""Mot déjà présent"" apparait. Corriger alors dans la zone de texte le mot à ajouter.\n\n")),
      BoxRow('inset'=0, 'spacing'=0,
      Button("Fermer", CloseWindow('FenAjouter') )
   )
 )
),

BoxLayout['AideMenusLayout'](
 BoxColumn('border'=true, 'inset'=0, 'spacing'=4,
   BoxRow('inset'=0, 'spacing'=0,
     TextBox('wrapped'=true, 'width'=80, 'height'=15,  'editable'='false', 'value'=
 "La barre des menus comporte 3 menus se divisant en sous-menus:\n\nMenu ""Dictionnaire"":\n   - sous-menu ""Consulter"": active la fenêtre ""Dictionnaire"" permettant de consulter, rechercher ou ajouter un mot aux différents dictionnaires.\n   - sous-menu ""Mots autorisés"": aide sur les mots autorisés au jeu ""Motus"".\n   - sous-menu ""Mots exclus"": aide sur les mots interdits au jeu ""Motus"".\n\nMenu ""Scores"":\n   - sous-menu ""Meilleurs scores"": active la fenêtre ""Top10"" permettant de consulter les meilleurs scores réalisés au jeu ""Motus"".\n   - sous-menu ""Remise à zéro"": permet de remettre tous les meilleurs scores à 0 après une demande de confirmation.\n   - sous-menu:""Comptage des points"": aide sur la façon de compter les points au jeu ""Motus"".\n\nMenu ""Aide"":\nCe menu comporte plusieurs sous-menus permettant d'obtenir de l'aide sur le jeu ""Motus"".\n\n   
 ")),
      BoxRow('inset'=0, 'spacing'=0,
      Button("Fermer", CloseWindow('FenMenus') )
   )
 )
),

BoxLayout['AideBoutonsLayout'](
 BoxColumn('border'=true, 'inset'=0, 'spacing'=4,
   BoxRow('inset'=0, 'spacing'=0,
     TextBox('wrapped'=true, 'width'=80, 'height'=15,  'editable'='false', 'value'=
 "Cliquer le bouton ""Options par défaut"" pour restaurer les valeurs par défaut des options de jeu. Les valeurs par défaut des options de jeu sont: ""5 lettres"", niveau ""facile"".\n\nCliquer le bouton ""Valider les options"" pour appliquer les options choisies. Dans ce cas, les boutons ""Commencer à jouer"" et ""OK"" ainsi que la zone de saisie du mot deviennent disponibles.\n\nCliquer le bouton ""Quitter Motus"" pour terminer le jeu.\n\nCliquer le bouton ""Commencer à jouer"" pour débuter une nouvelle partie. Dans ce cas, la consultation des menus ""Dictionnaire"" et ""Top10"" devient impossible.\n\nCliquer le bouton ""OK"" en cours de jeu pour valider le mot contenu dans la zone de saisie.\n\n
")),
      BoxRow('inset'=0, 'spacing'=0,
      Button("Fermer", CloseWindow('FenBoutons') )
   )
 )
),

BoxLayout['AideElementsLayout'](
 BoxColumn('border'=true, 'inset'=0, 'spacing'=4,
  
   BoxRow('inset'=0, 'spacing'=0,
        [Label('image'=Image( cat(chemin,"grille.gif")))],
     TextBox('wrapped'=true, 'width'=80, 'height'=15,  'editable'='false', 'value'=
 "La grille de jeu est un tableau carré (5x5 , 6x6 , ou 7x7) où les mots du joueur sont analysés puis affichés avec un code de couleur, selon un principe similaire à celui du MASTERMIND.\n\nLa zone de saisie, située sous la grille de jeu, permet au joueur d'entrer ses mots d'essai.\n\nValidation du mot: elle peut se faire en pressant la touche <Entrée> du clavier dans la zone de texte, ou en cliquant le bouton ""OK"" situé à droite de la zone de saisie.\n\nCodes couleurs: l'ordinateur fournit la première lettre du mot qu'il a choisi. La première ligne de la grille correspond au premier essai du joueur, la seconde au deuxième essai ... Le joueur a donc 5 essais pour trouver un mot de 5 lettres, 6 essais pour trouver un mot de 6 lettres, 7 essais pour trouver un mot de 7 lettres.\n\nUne lettre de couleur orange correspond à une lettre présente et bien placée dans le mot, cette lettre pouvant figurer par ailleurs dans ce mot.\nUne lettre de couleur jaune correspond à une lettre présente et mal placée dans le mot, cette lettre pouvant figurer par ailleurs dans ce mot.\nUne lettre de couleur blanche correspond à une lettre absente du mot.\n\n
")),
      BoxRow('inset'=0, 'spacing'=0,
      Button("Fermer", CloseWindow('FenElements') )
   )
 )
),

BoxLayout['AideOptionsLayout'](
 BoxColumn('border'=true, 'inset'=0, 'spacing'=4,
   BoxRow('inset'=0, 'spacing'=0,
     TextBox('wrapped'=true, 'width'=80, 'height'=15,  'editable'='false', 'value'=
 "Le cadre ""Nombre de lettres"" permet de choisir l'option: mots de 5, de 6, ou de 7 lettres.\n\nLe cadre ""Niveau de jeu"" permet de choisir des mots de niveau facile, moyen, ou difficile.\n\nLes valeurs par défaut des options de jeu sont: ""5 lettres"", niveau ""facile"".\n\nLe cadre ""Statistiques"" fournit des renseignements au cours du jeu: nombre de mots proposés (de 1 à 10), nombre de mots trouvés (de 1 à 10), score du joueur, meilleur score, nom du meilleur joueur.\n\n"
)),
      BoxRow('inset'=0, 'spacing'=0,
      Button("Fermer", CloseWindow('FenOptions') )
   )
 )
)

):
   

Initialisation des variables globales et démarrage du jeu:

> nbmotstrouves:=0: meilleur:=0 : taille:=5 : niveau:=1 :
level:=0 : lev1:=4 : lev2:=1 : opt:=5: listefiltree:=[]:
total:=0: ordre:=0: mot:="": motsaisi:="": nbmots:=0: fin:=false: ligne:=0 :
gagne:=false: meilleur_joueur:="": qual["1"] := " (Facile)": qual["2"] := " (Moyen)": qual["3"] := " (Difficile)":
for k to 10 do joueurs[k]:="": scores[k]:=0 end do:
m1:=array(5..7): m2:=array(5..7): m3:=array(5..7):
for i from 5 to 7 do
 fichalpha[i] := cat(chemin,"motsenclair",i,".txt"):
 fichscore[i] := cat(chemin,"top",i,".txt")
end do:
pref:=cat(chemin,"pref.txt"):


Maplets[Display] (MotusMaplet);

 


 


 


haut de cette page


©  - Alain Le Stang - Navigation optimisée pour une résolution 1024 x 768.