Forum Liberty Basic France

Le 14/05/2015 à 09h42

Libertynaute Expert

Groupe: Membre

Inscrit le: 19/02/2011
Messages: 767
Reprise du message précédent

Christophe:

Petit edit du lendemain : je dis "je", mais on pourrait bien dire "maintenant que nous savons détecter la présence de la souris", si on peut étudier à fond les combobox pour voir si elles sont utilisables ici, allons-y...


Non non, tu peux dire "je" puisque Roland et moi savions déjà le faire :lol

En y repensant je me demande si une LISTBOX ne serait-elle pas mieux appropriée ? mais bon, c'est presque pareil...

Je pense que la détection du passage de la souris ne devrait simplement QUE déterminer de nouvelles coordonnées au COMBOBOX ou à la LISTBOX:
- dès que de nouvelles coordonnées valident sont déterminées :
- on désactive la détection de la souris,
- on affiche la LISTBOX (après l'avoir mis à jour avec tous les paramètres liés à sa position dans la fable) tant que le joueur n'a pas sélectionné un mot dans la liste,
- puis on fait disparaitre la LISTBOX (en la positionnant en dehors de la fenêtre par exemple: voir mon dernier bout de code modifié... plus haut),
- on affiche le mot sélectionné,
- et on réactive la détection à la souris...


@Roland, je ne vois pas de différence de comportement entre la zone 3 et les autres ???
Roland:
Mais ça ne va pas être simple de faire un nombre de zones variable.

Avec ma méthode des sprites il suffit de les compter à la lecture du fichier texte pour savoir le nombre de sprites à créer... On met leur n° dans leur nom et on connaitra ainsi leur n° avec SPRITECOLLIDE Curs,list$...
Ce nombre sera d'ailleurs essentiel à connaître car il conditionnera la taille de plusieures variables tableaux : les listes de mots, les coordonnées x,y de ces listes qui sont aussi celles des zones pour la souris, etc...

Bonne journée

Gilles.



Edité par cassiope01 Le 14/05/2015 à 10h50
____________________
Devise Shadocks : "Mieux vaut mobiliser son intelligence pour des conneries, que mobiliser sa connerie pour des choses intelligentes"
Coluche disait : "C'est parce que la vitesse de la lumière est plus rapide que celle du son que certains peuvent paraîtrent brillants jusqu'à ce qu'ils ouvrent la bouche."

Web    
Le 14/05/2015 à 10h52

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2200
C'est sûr qu'on va êtres obligés d'y passer à tes satanés sprites.
parce que je ne vois comment avec la méthode de détection actuelle on peut faire un nombre de détection variable.
J'ai largement élagué pour tenter l'aventure du nombre variable (que je vois se dresser comme un mur infranchissable) :)
Code VB :
 
 
  nomainwin
    WindowWidth = 300
    WindowHeight = 300
    UpperLeftX = 200
    UpperLeftY = 20
    aa=480 :bb=30
    combobox #w.comb, array$(), [event], aa, bb, 100, 100
    GRAPHICBOX #w.g 5, 5, 285, 260
    OPEN "souris sur zone ?" FOR window_nf AS #w
    #w, "TRAPCLOSE [quit]"
    #w.g, "when mouseMove [souris_se_deplace]"
    #w.g, "when leftButtonDown ButtonLeftDown"
    #w.g, "when leftButtonUp [ButtonLeftUp]"
  [ButtonLeftUp]
    #w.g , "cls"
    #w.g , "down"
    #w.g , "fill darkgreen"
    #w.g, "color white; backcolor darkgreen"
    #w.g, "place 10 10"
    #w.g, "\Clic Gauche = pos souris"
 
    'zone 1
    #w.g, "color red; backcolor red"
    #w.g, "place 20 50"
    #w.g, "boxfilled 60 70"
    'zone 2
    #w.g, "color yellow; backcolor yellow"
    #w.g, "place 20 100"
    #w.g, "boxfilled 60 120"
    'zone 3
    #w.g, "color blue; backcolor blue"
    #w.g, "place 20 150"
    #w.g, "boxfilled 60 170"
wait
 
  [souris_se_deplace]
    X = MouseX : Y = MouseY
    zone = 0
    if X > 20 and X < 60 and Y > 50 and Y < 70 then zone = 1
    if X > 20 and X < 60 and Y > 100 and Y < 120 then zone = 2
    if X > 20 and X < 60 and Y > 150 and Y < 170 then zone = 3
 
    select case zone
        case 0
        aa=400:bb=0
        case 1
        aa=20:bb=50
        case 2
        aa=20:bb=100
        case 3
        aa=20:bb=150
    end select
    #w "refresh"
    #w.g, "flush;discard"
 
  wait
         Sub ButtonLeftDown handle$, xClick, yClick  'prise de cotes
         #w.g, "color white; backcolor darkgreen"
         Print #w.g, "Place ";xClick;" ";yClick
         Print #w.g, "\x=";xClick
         Print #w.g, "\y=";yClick
         End Sub
 
  [quit]
    print "[quit]"
    close #w
  end
 
 
____________________
Roro

   
Le 14/05/2015 à 11h10

Libertynaute Expert

Groupe: Membre

Inscrit le: 19/02/2011
Messages: 767
Je ne comprends pas ce que tu veux dire : ta détection variable fonctionne !!!
Essaye donc le bout de code que j'ai adapté plus haut...



Edité par cassiope01 Le 14/05/2015 à 11h21
____________________
Devise Shadocks : "Mieux vaut mobiliser son intelligence pour des conneries, que mobiliser sa connerie pour des choses intelligentes"
Coluche disait : "C'est parce que la vitesse de la lumière est plus rapide que celle du son que certains peuvent paraîtrent brillants jusqu'à ce qu'ils ouvrent la bouche."

Web    
Le 14/05/2015 à 11h13

Modérateur

Groupe: Modérateur

Inscrit le: 09/02/2015
Messages: 601
Roland:
:lol J'ai largement élagué pour tenter l'aventure du nombre variable (que je vois se dresser comme un mur infranchissable)


C'est donc une sorte de mur du son appliqué à la programmation, notre combobox volante sera supersonique :lol

Autrement je tente de concevoir une simili-combo. C'est beaucoup trop embryonnaire aujourd'hui pour fournir un code, mais je pense y arriver. Comme d'habitude, beaucoup d'inconnues à ce jour.

A+
____________________
Just BASIC v2.0 :
  • utilisation courante avec GNU/Linux Mageia6 + Wine (Pas trouvé d'incohérences ou de bug de compilation à ce jour)
  • utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc

   
Le 14/05/2015 à 11h22

Libertynaute Expert

Groupe: Membre

Inscrit le: 19/02/2011
Messages: 767
Donc la devise de Christophe : "pourquoi faire simple quand on peux faire compliqué..." :lol

Je remet le bout de code dans ce post car je l'ai encore modifié... ;) (il faut cliquer 2 fois le mot choisi)

Code VB :
'détection de souris sur plusieurs zones d'une fenêtre
nomainwin
'définir la fenêtre
'   (dimensions modifiées par des coefficients allant de 0 à 1 inclus)

    'dimensions de la fenêtre
    WindowWidth = int(DisplayWidth * 0.6)
    WindowHeight = int(DisplayHeight * 0.6)
 
    'position de l'angle supérieur gauche de la fenêtre sur l'écran
    UpperLeftX = int(DisplayWidth * 0.2)
    UpperLeftY = int(DisplayHeight * 0.2)
 
 
'position des écritures « position pointeur »
    XLigneAffichage = int(WindowWidth * 0.05)
    YLigneAffichage = int(WindowHeight * 0.05)
 
'position et dimension des zones dans lesquelles on devra détecter la souris
'   on définit ici le point supérieur gauche et le point inférieur droit de la zone
'   axes de référence : bords droit et haut de la fenêtre

    Zone1XHautGauche = int(WindowWidth * 0.3)
    Zone1YHautGauche = int(WindowHeight * 0.3)
    Zone1XBasDroite = Zone1XHautGauche + int(WindowWidth * 0.5)
    Zone1YBasDroite = Zone1YHautGauche + int(WindowHeight * 0.5)
    couleur1$ = "darkgreen"
 
    Zone2XHautGauche = int(WindowWidth * 0.15)
    Zone2YHautGauche = int(WindowHeight * 0.11)
    Zone2XBasDroite = Zone2XHautGauche + int(WindowWidth * 0.2)
    Zone2YBasDroite = Zone2YHautGauche + int(WindowHeight * 0.15)
    couleur2$ = "red"
 
    Zone3XHautGauche = int(WindowWidth * 0.09)
    Zone3YHautGauche = int(WindowHeight * 0.36)
    Zone3XBasDroite = Zone3XHautGauche + int(WindowWidth * 0.09)
    Zone3YBasDroite = Zone3YHautGauche + int(WindowHeight * 0.08)
    couleur3$ = "blue"
 
'ouvrir la fenêtre en mode graphique (la lecture de la souris ne marche pas en mode window
'il semblerait d'ailleurs qu'il y ait un monde entre ces deux univers)
    dim mots$(10,3), array$(10)
 
    aa=-480 :bb=30
 
    graphicbox #fenetre1.gra, 20,20,WindowWidth-40,WindowHeight-60
    listbox #fenetre1.ext, array$(), [valider], aa, bb, 100, 108
    OPEN "souris sur zone ?" for window_nf as #fenetre1
    #fenetre1 "trapclose [quit]"
    #fenetre1, "font Comic Sans MS 10 bold"
    #fenetre1.gra, "font Comic Sans MS 12 bold"
 
'affichage du texte "bougez la souris !"
    #fenetre1.gra, "color black"
    #fenetre1.gra, "down"
    #fenetre1.gra, "place ";XLigneAffichage;" ";YLigneAffichage
    #fenetre1.gra, "\Bougez la souris !"
 
'dessin des zones
    'zone 1
    #fenetre1.gra, "place ";Zone1XHautGauche;" ";Zone1YHautGauche
    #fenetre1.gra, "backcolor " + couleur1$
    #fenetre1.gra, "boxfilled ";Zone1XBasDroite;" ";Zone1YBasDroite
 
    'zone 2
    #fenetre1.gra, "place ";Zone2XHautGauche;" ";Zone2YHautGauche
    #fenetre1.gra, "backcolor " + couleur2$
    #fenetre1.gra, "boxfilled ";Zone2XBasDroite;" ";Zone2YBasDroite
 
    'zone 3
    #fenetre1.gra, "place ";Zone3XHautGauche;" ";Zone3YHautGauche
    #fenetre1.gra, "backcolor " + couleur3$
    #fenetre1.gra, "boxfilled ";Zone3XBasDroite;" ";Zone3YBasDroite
    #fenetre1.gra, "backcolor white"
 
    #fenetre1.gra "flush : discard"
    #fenetre1.gra, "when mouseMove [souris_se_deplace]"
 
    mot$(1,1) = "Corbeau"
    mot$(2,1) = "Loup"
    mot$(3,1) = "Renard"
    mot$(4,1) = "Corbeau"
    mot$(5,1) = "Souriceau"
    mot$(6,1) = "Lion"
 
    mot$(1,2) = "perché"
    mot$(2,2) = "en fleur"
    mot$(3,2) = "déraciné"
    mot$(4,2) = "perché"
    mot$(5,2) = "feuillu"
    mot$(6,2) = "magnifique"
 
    mot$(1,3) = "alléchée"
    mot$(2,3) = "rouge vif"
    mot$(3,3) = "bleue"
    mot$(4,3) = "alléchée"
    mot$(5,3) = "puissante"
    mot$(6,3) = "sereine"
'attente…
wait
 
[valider]
    #fenetre1.ext "selection? mot$"
    #fenetre1.gra, "place ";XLigneAffichage;" ";YLigneAffichage
    #fenetre1.gra, "\Pos X = ";X;",  Pos Y = ";Y;"           Dernier mot choisi = "+mot$+"           "
    aa=-480 :bb=30
    #fenetre1 "refresh"
wait
 
'******** zone des sous-programmes ********

[quit]
    'fermeture sans confirmation et par le gadget de fermeture de la fenetre
    print "[quit]"
    close #fenetre1
end
 
 
[souris_se_deplace]
 
    X = MouseX : Y = MouseY
    aa=-480 :bb=30
 
    'le pointeur est-il dans la zone ?
    zone = 0
    if X > Zone1XHautGauche and X < Zone1XBasDroite and Y > Zone1YHautGauche and Y < Zone1YBasDroite then zone = 1
    if X > Zone2XHautGauche and X < Zone2XBasDroite and Y > Zone2YHautGauche and Y < Zone2YBasDroite then zone = 2
    if X > Zone3XHautGauche and X < Zone3XBasDroite and Y > Zone3YHautGauche and Y < Zone3YBasDroite then zone = 3
 
 
    select case zone
      case 0
        afficher$ = "La souris est hors-zone        "
        couleur$ = "black"
 
      case 1
        afficher$ = "La souris est dans la zone 1   "
        couleur$ = couleur1$ 
        aa=Zone1XHautGauche+22
        bb=Zone1YHautGauche+22
        for m=1 to 6
          array$(m) = mot$(m,1)
        next
 
      case 2
        afficher$ = "La souris est dans la zone 2   "
        couleur$ = couleur2$ 
        aa=Zone2XHautGauche+22
        bb=Zone2YHautGauche+22
        for m=1 to 6
          array$(m) = mot$(m,2)
        next
 
      case 3
        afficher$ = "La souris est dans la zone 3   "
        couleur$ = couleur3$ 
        aa=Zone3XHautGauche+22
        bb=Zone3YHautGauche+22
        for m=1 to 6
          array$(m) = mot$(m,3)
        next
 
    end select
    #fenetre1.ext "reload"
    #fenetre1 "refresh"
 
    'affichage de la position du pointeur et de l'information "en/hors zone"
    #fenetre1.gra, "color black"
    #fenetre1.gra, "place ";XLigneAffichage;" ";YLigneAffichage
    #fenetre1.gra, "\Pos X = ";X;",  Pos Y = ";Y;"       "
    #fenetre1.gra, "place ";XLigneAffichage;" ";YLigneAffichage + 20
    #fenetre1.gra, "color " + couleur$
    #fenetre1.gra, "\" + afficher$
 
wait
 




Edité par cassiope01 Le 14/05/2015 à 12h02
____________________
Devise Shadocks : "Mieux vaut mobiliser son intelligence pour des conneries, que mobiliser sa connerie pour des choses intelligentes"
Coluche disait : "C'est parce que la vitesse de la lumière est plus rapide que celle du son que certains peuvent paraîtrent brillants jusqu'à ce qu'ils ouvrent la bouche."

Web    
Le 14/05/2015 à 11h49

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2200
Hey..Je ne peux pas deviner que tu a modifié le code sur place.
Le nombre de zones doit être variable
Dans le code suivant on défini le nombre de zones de 2 à 4 dans le textbox
Dans le prog de Christophe, il sera défini en entrée de prog

Je ne vois pas quelle modif tu a faite pour stabiliser les combo
Ni pour que les combos se présentent "ouvertes"

Code VB :
 
 
  nomainwin
    WindowWidth = 300
    WindowHeight = 300
    UpperLeftX = 200
    UpperLeftY = 20
    aa=480 :bb=30
      dim mots$(10,3), array$(10)
    TEXTBOX #w.entr, 240 , 10, 40, 20
    BUTTON #w.ok, "Ok", [ok], UL, 250, 60, 30, 20
    listbox #w.comb, array$(), [valider], aa, bb, 100, 100
    GRAPHICBOX #w.g 5, 5, 285, 260
    OPEN "souris sur zone ?" FOR window_nf AS #w
    #w, "TRAPCLOSE [quit]"
    #w.g, "when mouseMove [souris_se_deplace]"
    #w.g, "when leftButtonDown ButtonLeftDown"
    #w.g, "when leftButtonUp [ButtonLeftUp]"
    entr$="Corbeau Loup Renard Corbeau Souriceau Lion perché en.fleur déraciné perché feuillu magnifique "+_
       "alléchée rouge.vif bleue alléchée puissante sereine rien nada nibe que.dalle nada keuts"
       jj=0
    for i=1 to 4
      for j=1 to 6
        mot$(j,i)=word$(entr$, jj+j)
      next j
      jj=jj+6
    next i
 
  [ButtonLeftUp]
    #w.g , "cls"
    #w.g , "down"
    #w.g , "fill darkgreen"
    #w.g, "color white; backcolor darkgreen"
    #w.g, "place 10 10": #w.g, "\Clic Gauche = pos souris"
    #w.g, "place 170 40": #w.g, "\Zones 1 < N < 5"
  wait
 [ok]
    #w.g , "cls"
    #w.g , "down"
    #w.g , "fill darkgreen"
    #w.g, "color white; backcolor darkgreen"
    #w.g, "place 10 10": #w.g, "\Clic Gauche = pos souris"
    #w.g, "place 170 40": #w.g, "\Zones 1 < N < 4"
    #w.entr, "!contents? var$": n=val(var$)
    if n < 2 then n=2: if n > 4 then n=4
    'zone 1
    #w.g, "color red; backcolor red"
    #w.g, "place 20 50"
    #w.g, "boxfilled 60 70"
    'zone 2
    #w.g, "color yellow; backcolor yellow"
    #w.g, "place 20 100"
    #w.g, "boxfilled 60 120"
    if n=2 then [saut1]
    'zone 3
    #w.g, "color blue; backcolor blue"
    #w.g, "place 20 150"
    #w.g, "boxfilled 60 170"
    if n=3 then [saut2]
    'zone 4
    #w.g, "color blue; backcolor green"
    #w.g, "place 150 150"
    #w.g, "boxfilled 190 170"
  wait
  [saut1]
  [saut2]
 
  [souris_se_deplace]
    X = MouseX : Y = MouseY
    zone = 0
    if X > 20 and X < 60 and Y > 50 and Y < 70 then zone = 1
    if X > 20 and X < 60 and Y > 100 and Y < 120 then zone = 2
    if n=2 then [passe1]
    if X > 20 and X < 60 and Y > 150 and Y < 170 then zone = 3
    if n=3 then [passe2]
    if X > 150 and X < 190 and Y > 150 and Y < 170 then zone = 4
  [passe1]
  [passe2]
    select case zone
        case 0
        aa=400:bb=0
        case 1
        aa=20:bb=50
        for m=1 to 6
          array$(m) = mot$(m,1)
        next
        case 2
        aa=20:bb=100
        for m=1 to 6
          array$(m) = mot$(m,2)
        next
        case 3
        aa=20:bb=150
        for m=1 to 6
          array$(m) = mot$(m,3)
        next
        case 4
        aa=150:bb=150
        for m=1 to 6
          array$(m) = mot$(m,4)
        next
    end select
    #w.comb "reload"
    #w "refresh"
    #w.g, "flush;discard"
      wait
[valider]
    #w.comb "selection? mot$"
    #w.g, "place 10 220"
    #w.g, "\           Dernier mot choisi = "+mot$+"           "
    aa=-480 :bb=30
    #w "refresh"
wait
 
  wait
         Sub ButtonLeftDown handle$, xClick, yClick  'prise de cotes
         #w.g, "color white; backcolor darkgreen"
         Print #w.g, "Place ";xClick;" ";yClick
         Print #w.g, "\x=";xClick
         Print #w.g, "\y=";yClick
         End Sub
 
  [quit]
    print "[quit]"
    close #w
  end
 
 
____________________
Roro

   
Le 14/05/2015 à 11h57

Libertynaute Expert

Groupe: Membre

Inscrit le: 19/02/2011
Messages: 767
Comme je l'ai dis plus haut... (pardon je parlais des mots à trouver ;) )

cassiope01:
Avec ma méthode des sprites il suffit de les compter à la lecture du fichier texte pour savoir le nombre de sprites à créer... On met leur n° dans leur nom et on connaitra ainsi leur n° avec SPRITECOLLIDE Curs,list$...
Ce nombre sera d'ailleurs essentiel à connaître car il conditionnera la taille de plusieures variables tableaux : les listes de mots, les coordonnées x,y de ces listes qui sont aussi celles des zones pour la souris, etc...

Bonne journée

Gilles.


Evidemment c'est à refaire à chaque chargement d'un nouveau fichier texte...



Edité par cassiope01 Le 14/05/2015 à 11h59
____________________
Devise Shadocks : "Mieux vaut mobiliser son intelligence pour des conneries, que mobiliser sa connerie pour des choses intelligentes"
Coluche disait : "C'est parce que la vitesse de la lumière est plus rapide que celle du son que certains peuvent paraîtrent brillants jusqu'à ce qu'ils ouvrent la bouche."

Web    
Le 14/05/2015 à 12h30

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2200
Ah Ok. C'est la listbox à la place de la combo qui la présente ouverte.
J'ai modifié mon dernier code pour l'adapter au tiens
Comme ça Christophe aura le choix entre ma méthode (qui paraît jouable) et celle des sprites

Avec ma méthode, il faut faire un nombre supérieur au nombre max et sauter/passer les surnuméraires
Avec une flopée de variables
____________________
Roro

   
Le 14/05/2015 à 12h55

Libertynaute Expert

Groupe: Membre

Inscrit le: 19/02/2011
Messages: 767
Disons qu'avec les sprites il n'y a aucun select case à faire puisqu'on obtient directement le n° du sprite (zone) concerné, et donc sa position à l'écran.



Edité par cassiope01 Le 14/05/2015 à 12h56
____________________
Devise Shadocks : "Mieux vaut mobiliser son intelligence pour des conneries, que mobiliser sa connerie pour des choses intelligentes"
Coluche disait : "C'est parce que la vitesse de la lumière est plus rapide que celle du son que certains peuvent paraîtrent brillants jusqu'à ce qu'ils ouvrent la bouche."

Web    
Le 14/05/2015 à 15h12

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2200
C'est sûr que la méthode avec les sprites est alléchante
Mais si tu ne lui fait pas une "amorce", je doute qu'il s'en sorte.
C'est assez "velu" pour une première manip avec les sprites.
Je me suis moi-même pas mal pris la tête avec spritecollide
Et il y a aussi le background qui a ses spécificités.
____________________
Roro

   
Le 14/05/2015 à 23h43

Modérateur

Groupe: Modérateur

Inscrit le: 09/02/2015
Messages: 601
Il y a des avancées significatives :top

Cassiopee01:

"pourquoi faire simple quand on peux faire compliqué..."

Au delà de la plaisante complexification, c'est aussi pour l'exercice et la culture. Mais, devise adoptée, car c'est pas faux^^

Je comboboxe-experimentale pour le moment, car même si ça ne débouche sur rien aujourd'hui ce n'est pas du temps perdu, et je vais voir vos derniers codes car il faut maintenant pouvoir choisir une entrée dans la liste (et j'aurais aussi un aperçu du fonctionnement des sprites)

Bon, pour le moment, au dodo, y'a besoin. Bonne nuit !

Christophe.
____________________
Just BASIC v2.0 :
  • utilisation courante avec GNU/Linux Mageia6 + Wine (Pas trouvé d'incohérences ou de bug de compilation à ce jour)
  • utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc

   
Le 15/05/2015 à 05h56

Libertynaute Expert

Groupe: Membre

Inscrit le: 19/02/2011
Messages: 767
C'est vrai qu'avec une "amorce" ça fonctionne beaucoup mieux :lol

Code VB :
' http://libertybasic.fr/forum/topic-384+definir-des-combobox-quand-on-n-en-connait-pas-le-nombre.php
' http://libertybasic.fr/forum/topic-393-0-4259+detecter-si-la-souris-est-au-dessus-d-une-zone.php#m4259
    nomainwin
 
    WindowWidth = 1000
    WindowHeight = 600
    UpperLeftX = (DisplayWidth-WindowWidth) / 3
    UpperLeftY = (DisplayHeight-WindowHeight) / 2
 
    mois$ = "Jan Fév Mar Avr Mai Jun Jui Aou Sep Oct Nov Déc"
    today$ = date$("mm/dd/yyyy")
    j = date$(today$)
    jsem$ = word$("Mar Mer Jeu x Ven Sam x Dim Lun",int((j/7-int(j/7))*10)+1)
    date$ = jsem$+" "+mid$(today$,4,2)+" "+word$(mois$, val(today$))+"   "+left$(time$(),5)'right$(today$,4)

    GLOBAL textFont$, textColor$, bckColor$, Gwidth, Gheight, lbx, lby, nz, nm
 
    DIM info$(10,10), lrmat$(10), mt$(10), mots$(6), lf$(10)
    lbx = 0
    lby = -200
 
    textFont$  = "Comic_Sans_MS" ' "Times_New_Roman"
    textColor$ = "yellow"
    bckColor$  = "26 72 43"    ' dark green ...
    ListboxColor$ = "cyan"
 
    statictext #w.debug "message de debug", 10, WindowHeight-60, 300, 40
    graphicbox #w.gr, 0, 0, WindowWidth, WindowHeight-135
    graphicbox #w.grtxt, 0, WindowHeight-136, WindowWidth, 65
    listbox #w.lb, mots$(), [valider], lbx, lby, 130, 6*20
 
    BUTTON #w.t1, "Nouveau fichier", Charge, UL, WindowWidth-480, WindowHeight-60 , 140, 25
    BUTTON #w.t2, "recommencer", [rejoue], UL, WindowWidth-280, WindowHeight-60 , 100, 25
    BUTTON #w.exit, "QUITTER", Quit, UL, WindowWidth-120, WindowHeight-60 , 100, 25
    open "    Mots à trouver..."+space$(20)+date$ for window_nf as #w    ' graphics_nf_nsb
    #w "trapclose Quit"
    #w.gr "home; posxy CenterX CenterY"
    Gwidth = CenterX * 2
    Gheight = CenterY * 2
    #w "font ";textFont$;" 10 bold"
    #w.gr "font ";textFont$;" 14 bold"
    #w.gr "down"
    gosub [makeSprites]
    #w.grtxt "down; fill ";bckColor$ 
    #w.debug "!font Times_New_Roman 12 bold"
    #w.lb "singleclickselect"    'pour ne cliquer qu'une fois dans la listbox pour valider un mot...

    call mep
    #w.gr "when mouseMove XY"
 
WAIT
 
 
  sub mep  ' -------------------- en principe : lecture du fichier texte -------------------

'  bien sûr il faut traiter le fichier texte correctement, avec gestion des positions des mots, etc...
'  Là j'ai fais ça un peu à la louche !

    for m=1 to 10
      mt$(m) = "_____________"
    next
 
    lrmat$(1) = "Corbeau;Loup;Renard;Blaireau;Souriceau;Lion"
    lrmat$(2) = "perché;en fleur;déraciné;penché;feuillu;magnifique"
    lrmat$(3) = "alléchée;rouge vif;bleue;pourrie;puissante;sereine;assurée"
    lrmat$(4) = "Corbeau;Courneau;Blaireau;Bigorneau;Taureau;Cours d'Eau"
 
    #w.gr "backcolor ";bckColor$;"; fill ";bckColor$
    #w.gr "color ";textColor$
 
    #w.gr "place 100 40;|";upper$("Le Corbeau et le Renard")
    #w.gr "place 20 100;|Maître"
    #w.gr "place 100 100;|";mt$(1)
    #w.gr "spritexy zone1 100 80"
 
    #w.gr "place 275 100;|sur un arbre"
    #w.gr "place 400 100;|";mt$(2)
    #w.gr "spritexy zone2 400 80"
 
    #w.gr "place 580 100;|tenait en son bec un fromage."
    #w.gr "place 20 140;|Maître Renard, par l'odeur"
    #w.gr "place 290 140;|";mt$(3)
    #w.gr "spritexy zone3 300 120"
 
    #w.gr "place 460 140;|lui tint à peu près ce langage."
    #w.gr "place 20 180;|Hé ! bonjour, Monsieur du"
    #w.gr "place 280 180;|";mt$(4)
    #w.gr "spritexy zone4 280 160"
 
    #w.gr "place 460 180;|que vous êtes joli ! que vous me semblez beau !"
 
    nm = 4
    #w.gr "flush"
    #w.gr "color green"
  end sub
 
    sub XY handle$, mx, my    ' when mouseMove ...
       ' mx = MouseX
       ' my = MouseY

        #w.gr "spritexy Curs ";mx;" ";my
        #w.gr "spritecollides Curs list$"
        nz = val(right$(word$(list$,1),1))
        if nz>0 and nz<=nm then
           #w.gr "spritexy? ";word$(list$,1);" x y"
           lbx = x
           lby = y
           for m=1 to 6
             mots$(m) =word$(lrmat$(nz),m,";")   'charge la nouvelle liste de mots
           next
           for mel=1 to 30           ' mélange
             hz0 = int(rnd(1)*nm)+1
             tmp$ = mots$(hz0)
             hz = int(rnd(1)*nm)+1
             mots$(hz0) = mots$(hz)
             mots$(hz) = tmp$
           next
           #w.lb "reload"
           #w "refresh"
        else
           lbx = 0
           lby = -200
           #w "refresh"
        end if
    end sub
 
  [rejoue]
    #w.debug "Effacement des mots trouvés..."
    call message 15,20,""
    #w.gr "color yellow"
    for m=1 to nm
      mt$(m) = "_____________"
      #w.gr "spritexy? zone";str$(m);" x y"
      #w.gr "place ";x-5;" ";y+20;";|";mt$(m)
    next
    #w.gr "flush ;discard"
    #w.gr "color green"
  wait
 
  [valider]
    #w.gr "when mouseMove"
    #w.lb "selection? mot$"
    mt$(nz) = mot$
    #w.gr "spritexy? zone";str$(nz);" x y"
    #w.gr "place ";x-5;" ";y+20;";|    ";mt$(nz);"     "
    #w.gr "flush ;discard"
    lbx = 0
    lby = -200
    #w "refresh"
    mc = 0
    for m = 1 to nm
      if mt$(m) = word$(lrmat$(m),1,";") then mc = mc + 1
    next
    if mc = nm then
      call message 15,20,"Bravo !  tout les mots sont justes !"
    end if
    #w.gr "when mouseMove XY"
  wait
 
  [makeSprites]
     #w.gr "backcolor black; place 0 0 ;boxfilled 1 1"
     #w.gr "place 0 1 ; box 1 2"
     #w.gr "getbmp Curseur 0 0 1 2"
     #w.gr "addsprite Curs Curseur"   ' create sprite
     unloadbmp "Curseur"
     ' #w.gr "spritevisible Curs off"   ' hide curs

      'admettons qu'on prépare 10 sprites pour 10 mots a trouver maximum...
     #w.gr "place 0 10 ; boxfilled 130 30"
     #w.gr "place 0 30 ; box 130 50"
     #w.gr "getbmp zone 0 10 130 40"
     for nz = 1 to 10
       #w.gr "addsprite zone";nz;" zone"
     '  #w.gr "spritevisible zone";nz;" off"
     next
     unloadbmp "zone"
   return
 
    sub message posY,fonte,txt$
        #w.grtxt "font ";textFont$;" ";fonte
        #w.grtxt "fill ";bckColor$
        #w.grtxt "backcolor ";bckColor$;" ; color ";textColor$
        #w.grtxt "place 20 ";posY+26;" ;|";txt$
    end sub
 
    FUNCTION fileExists(path$, filename$)
        'DIM info$(10,10)   must be declared at the start of the prog.
        files DefaultDir$, filename$, info$()  ' path$ = 'DefaultDir$' generally.
        fileExists = val(info$(0, 0))  'not zero if true
    END FUNCTION
 
    SUB Charge handle$
        filedialog "Fichiers de données", "Fable*.txt", fileName$
        if fileName$ <> "" then
            #w.debug "Bientôt sans doute..."
            open fileName$ for input as #show
            while eof(#show) = 0
                ligne = ligne + 1
                line input #show, lf$(ligne)
            wend
            lf$(ligne+1) = ""
            close #show
            call mep
        end if
    end sub
 
    sub Quit handle$
        close #w
        END
    end sub
 




Edité par cassiope01 Le 16/05/2015 à 08h12
____________________
Devise Shadocks : "Mieux vaut mobiliser son intelligence pour des conneries, que mobiliser sa connerie pour des choses intelligentes"
Coluche disait : "C'est parce que la vitesse de la lumière est plus rapide que celle du son que certains peuvent paraîtrent brillants jusqu'à ce qu'ils ouvrent la bouche."

Web    
Le 15/05/2015 à 09h18

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2200
Houlà ! Je vois que tu n'a pas perdu la main ;)
De la louche efficace, concise, élégante...Bref, la classe. :top
Christophe n'a plus qu'à assimiler le morceau (je prends les paris sur les sujets de questions).
C'est un démarrage sur les chapeaux de roues. :D

Edit: Ma petite vengeance:
Tu m'a tellement tuées de variables par le passé, que j'ai mis trois apostrophes dans [makesprites] sans nuire au fonctionnement.
' #w.gr "place 0 1 ; box 1 2"
' #w.gr "place 0 10 ; boxfilled 130 30"
' #w.gr "place 0 30 ; box 130 50"
____________________
Roro

   
Le 15/05/2015 à 10h37

Libertynaute Expert

Groupe: Membre

Inscrit le: 19/02/2011
Messages: 767
oui, c'est parce que j'étais parti pour fabriquer de "vrai" sprites... (j'aurai pu aussi utiliser de vrai fichier BMP) mais l'utilisation que j'en fais ici est relativement peu orthodoxe dirons-nous, et donc ne le nécessite pas forcément tant qu'on n'utilise pas DRAWSPRITE.

J'ai mis la création de l'affichage de la fable dans une Sub routine pour pouvoir l'appeler dans la Sub routine de Chargement d'un nouveau fichier...

Je l'ai nommée "mep" comme "Mise En Place". C'est un bon petit casse tête que je laisse à votre sagacité je pense... :top

Voici le fichier fable qui sert de base : à mettre dans un simple fichier texte nommé : "Fable01.txt"
Code VB :
Le Corbeau et le Renard
Maître-Corbeau;Loup;Renard;Blaireau;Souriceau;Lion-sur un arbre-perché;en fleur;déraciné;penché;feuillu;magnifique-tenait en son bec un fromage.
Maître Renard, par l'odeur-alléchée;rouge vif;bleue;pourrie;puissante;sereine;assurée-lui tint à peu près ce langage.
Hé ! bonjour, Monsieur du-Corbeau;Courneau;Taureau;Blaireau;Bigorneau;Cours d'Eau-Que vous êtes joli ! que vous me semblez beau !


Grace à la commande WORD$(string$,n,"-") qu'il faut utiliser ligne par ligne excepté la première qui est le titre (tout ça dans une jolie boucle bien sûr), on peut définir les lrmat$(), et afficher les textes (la largeur du mot à trouver étant bien entendu la largeur de la LISTBOX que j'ai fixé à 130 un peu arbitrairement), et ainsi positionner les sprites "zone1 zone2 zone3 zone4 etc..." et les mot$() à trouver...



Edité par cassiope01 Le 16/05/2015 à 10h41
____________________
Devise Shadocks : "Mieux vaut mobiliser son intelligence pour des conneries, que mobiliser sa connerie pour des choses intelligentes"
Coluche disait : "C'est parce que la vitesse de la lumière est plus rapide que celle du son que certains peuvent paraîtrent brillants jusqu'à ce qu'ils ouvrent la bouche."

Web    
Le 15/05/2015 à 10h58

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2200
Citation:
c'est parce que j'étais parti pour fabriquer de "vrai" sprites.

Yes, il semble que tout se passe "en mémoire", il n'y a pas besoin ni de placer ni d'afficher.

J'ai aussi apostrophé ça:
' #w.gr "home; posxy CenterX CenterY"
' Gwidth = CenterX * 2
' Gheight = CenterY * 2
Et je pique la syntaxe exotique:
#w.grtxt "backcolor ";bckColor$;" ; color ";textColor$
Que je mets dans les "trucs" de la traduction

Il est bien "charnu" ton code; Christophe va y passer un moment. :)
____________________
Roro

   
Le 15/05/2015 à 11h06

Libertynaute Expert

Groupe: Membre

Inscrit le: 19/02/2011
Messages: 767
Ben si bien sûr qu'il y a besoin de placer, sinon comment veux-tu que la détection à la souris fonctionne !!

Roland:
Il est bien "charnu" ton code; Christophe va y passer un moment.

absolument pas : tu devrais ralentir sur des petites phrases comme ça qui n'aident sûrement pas Christophe à percevoir la facilité d'utilisation de JustBasic :(
____________________
Devise Shadocks : "Mieux vaut mobiliser son intelligence pour des conneries, que mobiliser sa connerie pour des choses intelligentes"
Coluche disait : "C'est parce que la vitesse de la lumière est plus rapide que celle du son que certains peuvent paraîtrent brillants jusqu'à ce qu'ils ouvrent la bouche."

Web    
Le 15/05/2015 à 11h23

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2200
Bah, il fera la moyenne entre tes: "c'est très facile" et mes: "Houlà! ça décoiffe!".

Mais hum...Vu le rapport du nombre de posts au nombre d'inscrits (et de visiteurs: 40/J de moyenne avec des pointes à plus de 100) il semblerait que ça ne soit pas si facile pour tout le monde.

Ne r'ouvrons pas le vieux débat sur la modestie. ;)
____________________
Roro

   
Le 15/05/2015 à 11h55

Libertynaute Expert

Groupe: Membre

Inscrit le: 19/02/2011
Messages: 767
Il serait plus constructif de s'intérresser à la SUB mep. C'est un sympa petit morceau à traiter... et le programme de Christophe serait terminé !



Edité par cassiope01 Le 15/05/2015 à 11h58
____________________
Devise Shadocks : "Mieux vaut mobiliser son intelligence pour des conneries, que mobiliser sa connerie pour des choses intelligentes"
Coluche disait : "C'est parce que la vitesse de la lumière est plus rapide que celle du son que certains peuvent paraîtrent brillants jusqu'à ce qu'ils ouvrent la bouche."

Web    
Le 15/05/2015 à 12h28

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2200
Citation:
Il serait plus constructif de s'intérresser à la SUB mep

Et ben oui, mais il faut le laisser cogiter, aussi.
Là, y a un gros morceau de fait. Mais il va falloir qu'il l'ingurgite (et le poisson comporte quelques arrêtes).
Comme il n'a pas l'air d'être à la retraite, y va falloir patienter. ;)
____________________
Roro

   
Le 15/05/2015 à 12h39

Libertynaute Expert

Groupe: Membre

Inscrit le: 19/02/2011
Messages: 767
Aucune arête : c'est du poisson carré surgelé :lol
____________________
Devise Shadocks : "Mieux vaut mobiliser son intelligence pour des conneries, que mobiliser sa connerie pour des choses intelligentes"
Coluche disait : "C'est parce que la vitesse de la lumière est plus rapide que celle du son que certains peuvent paraîtrent brillants jusqu'à ce qu'ils ouvrent la bouche."

Web    
Le 15/05/2015 à 17h18

Modérateur

Groupe: Modérateur

Inscrit le: 09/02/2015
Messages: 601
Manquerait plus que ce soit du (presque) tout cuit^^

Autrement je ne dirais qu'un mot : purée !

Je n'ai pas encore regardé vos productions que vous en êtes déjà à la version suivante ou à celle d'après, et fonctionnelle en plus : faut que je souffle un peu, là, j'arrive plus à suivre. En tout cas j'aurais de quoi étudier, c'est sûr. C'est peut-être même ce que je vais commencer par faire :)

Bon après-midi vous deux, et merci du coup de main... (je reste dans le secteur)

A+

Christophe, pas encore retraité :)
____________________
Just BASIC v2.0 :
  • utilisation courante avec GNU/Linux Mageia6 + Wine (Pas trouvé d'incohérences ou de bug de compilation à ce jour)
  • utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc

   

 |  |

1 Utilisateur en ligne : 0 Administrateur, 0 Modérateur, 0 Membre et 1 Visiteur
Utilisateur en ligne : Aucun membre connecté
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie