Forum Liberty Basic France : Voir tous les messages du membre
• Index
Et en version boucles :
Code VB :
Code VB :
TentaMax = 10 'nombre de tentatives maxi du joueur DO 'présentation du programme à l'utilisateur cls Print "Jeu du plus ou moins" Print " Devinez un nombre entre 1 et 100 " Print "" Print " Entrez votre proposition : " 'initialisation des variables Nombre = int(100*(rnd(1))) 'nombre choisi par l'ordinateur Tentative = 0 'c'est la première tentative... DO Tentative = Tentative + 1 'proposition du joueur Input " Tentative " ;Tentative;" :";Proposi if Proposi > Nombre then print " Plus petit" else if Proposi < Nombre then print " Plus grand" end if print LOOP UNTIL Tentative = TentaMax or Proposi = Nombre if Proposi = Nombre then print "Bravo, vous avez trouvé le ";Nombre else print "Perdu...!" print Input "Voulez-vous rejouer (oui/non) ?";Souhait$ LOOP UNTIL instr("OUIoui",Souhait$)=0 'fin du programme cls print "Vous avez quitté le jeu, salut !" END
Avec word$() c'est pas toujours ce qu'il y a dans la chaine qui compte, mais plutôt le chiffre qu'il y a après... surtout si celui-ci doit être le résultat d'une opération !
La chaine peut donc aussi bien être adaptée afin d'obtenir ce que l'on veut.
Quoi qu'il en soit la formule de Christophe est simplifiée et fonctionne tout aussi bien apparemment.
La chaine peut donc aussi bien être adaptée afin d'obtenir ce que l'on veut.
Quoi qu'il en soit la formule de Christophe est simplifiée et fonctionne tout aussi bien apparemment.
Au risque de racompter des carabistouilles, il me semble que c'était une adaptation de la formule anglaise pour lesquel le premier jour de la semaine n'est pas le Lundi mais le Dimanche...
@+
@+
Excellent Christophe
J'avais déjà vu et corrigé ça, mais comme je suis fainéant, j'ai copié/collé des bouts de code depuis un code plus ancien
Roland a aussi trouvé des trucs pas forcément utiles dû à ça....
Il y a aussi la récupération de la dimension exacte de la fenêtre graphique grace a HOME...
Et aussi la SUB fileExists(path$, filename$) que je n'utilise pas...
Tout ça sont souvent des astuces trouvées dans le forum anglophone.
etc
Si tu as des questions ou d'autres optimisations n'hésite pas. Voilà la vrai utilité du forum
@+
Gilles

J'avais déjà vu et corrigé ça, mais comme je suis fainéant, j'ai copié/collé des bouts de code depuis un code plus ancien

Roland a aussi trouvé des trucs pas forcément utiles dû à ça....
Il y a aussi la récupération de la dimension exacte de la fenêtre graphique grace a HOME...
Et aussi la SUB fileExists(path$, filename$) que je n'utilise pas...
Tout ça sont souvent des astuces trouvées dans le forum anglophone.
etc
Si tu as des questions ou d'autres optimisations n'hésite pas. Voilà la vrai utilité du forum

@+
Gilles
Désolé pour ton cul Roland : ça doit faire mal

Roland à raison Christophe, je suis confu mais mon code est plutôt conçu pour respecter entièrement le cahier des charges de ton code d'origine ( ou en tout cas ce que j'en ai compris
) et non pour y être intégré...
J'avais quand même réfléchi aux solutions à mettre en oeuvre lors de mes post précédents... mais effectivement je l'ai fait en quelques heures (il a bien fallu que je relise beaucoup la doc, depuis le temps, j'avais beaucoup oublié...) et je n'ai donc pas trop pris la peine de commenter... désolé pour ça.
J'essayerai de répondre à toute question...
Pourquoi s'embéter avec toutes ces questions de largeur de texte etc ?? centrer simplement le mot trouvé dans l'espace réservé me semblait plus simple...!!!
Pourquoi veux-tu créer une ComboBox (ou LisBox) "fait main" puisqu'elle existe toute faite ? de plus on peut décider de sa taille, sa position à l'écran, sa couleur, la police des mots qu'elle contient, etc... à moins que ce ne soit que pour le fun
Mon but est bien de te montrer qu'on peut faire plein de choses en relativement peu de code avec JustBasic, en évitant l'usine à gaz souvent décourageante tant on n'arrive parfois jamais à en voir le bout... sans pourtant obtenir vraiment ce que l'on souhaitais au départ...
Il faut vraiment essayer de voir les choses plus simplement (pas comme Roland
) car après tout, ce ne sont que quelques commandes qu'on écrit les unes à la suite des autres en faisant en sorte que la chronologie d'écriture donne le résultat recherché...!
C'est tout comme les LEGO
@+
Gilles

J'avais quand même réfléchi aux solutions à mettre en oeuvre lors de mes post précédents... mais effectivement je l'ai fait en quelques heures (il a bien fallu que je relise beaucoup la doc, depuis le temps, j'avais beaucoup oublié...) et je n'ai donc pas trop pris la peine de commenter... désolé pour ça.
J'essayerai de répondre à toute question...
Pourquoi s'embéter avec toutes ces questions de largeur de texte etc ?? centrer simplement le mot trouvé dans l'espace réservé me semblait plus simple...!!!
Pourquoi veux-tu créer une ComboBox (ou LisBox) "fait main" puisqu'elle existe toute faite ? de plus on peut décider de sa taille, sa position à l'écran, sa couleur, la police des mots qu'elle contient, etc... à moins que ce ne soit que pour le fun

Mon but est bien de te montrer qu'on peut faire plein de choses en relativement peu de code avec JustBasic, en évitant l'usine à gaz souvent décourageante tant on n'arrive parfois jamais à en voir le bout... sans pourtant obtenir vraiment ce que l'on souhaitais au départ...
Il faut vraiment essayer de voir les choses plus simplement (pas comme Roland

C'est tout comme les LEGO

@+
Gilles
Tu as essayé ? parce que je crois bien qu'en donnant les valeurs de largeur et hauteur dans FONT, on "force" les caractères à ces dimensions...
Pourquoi faire aussi compliqué ? Qu'est-ce que c'est que le "token" ?
Plus simplement il est aussi possible de définir les largeur et hauteur de la police utilisé dans la commande de sa déclaration FONT.
Le reste c'est au pifomètre jusqu'à satisfaction esthétique, et puis voilà...
Plus simplement il est aussi possible de définir les largeur et hauteur de la police utilisé dans la commande de sa déclaration FONT.
Le reste c'est au pifomètre jusqu'à satisfaction esthétique, et puis voilà...

Ah oui ! c'est un oubli : réparé.
Le nom du fichier apparait maintenant en bas à gauche.
Le nom du fichier apparait maintenant en bas à gauche.
Bon, juste histoire de finir ce que j'ai commencé, et aussi pour mon plaisir
voici la version complète, avec décorticage du fichier texte et installation de la fable à l'écran.
Le prog devrait pouvoir lire tout fichier texte ( "Fable**.txt" ) pour peu qu'il soit formaté EXACTEMENT comme ci-dessous, avec 7 lignes maximum (ou bien il faut augmenter la hauteur de la fenêtre), et 10 mots maximum à trouver.
Code TEXT :
Comme je ne sais plus s'il existe une commande qui donne la largeur d'un texte EN PIXELS , Il resterait à trouver les bonnes valeurs pour évaluer la bonne largeur des phrases en pixels...
Code VB :
Pas testé avec une autre fable...
@+
Gilles.

Le prog devrait pouvoir lire tout fichier texte ( "Fable**.txt" ) pour peu qu'il soit formaté EXACTEMENT comme ci-dessous, avec 7 lignes maximum (ou bien il faut augmenter la hauteur de la fenêtre), et 10 mots maximum à trouver.
Code TEXT :
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;Blaireau;Bigorneau;Taureau;Cours d'Eau-que vous êtes joli ! que vous me semblez beau !
Comme je ne sais plus s'il existe une commande qui donne la largeur d'un texte EN PIXELS , Il resterait à trouver les bonnes valeurs pour évaluer la bonne largeur des phrases en pixels...
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, trou$ 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" trou$ = "-------------" statictext #w.debug "message de debug", 10, WindowHeight-55, 310, 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*21 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 11 bold" #w.lb "singleclickselect" 'pour ne cliquer qu'une fois dans la listbox pour valider un mot... #w.gr "backcolor ";bckColor$;"; fill ";bckColor$ call Charge "#w" #w.gr "when mouseMove XY" WAIT sub mep ' -------------------- en principe : décorticage du fichier texte ------------------- ' traitement du fichier texte avec gestion des positions des mots, etc... call message 15,20,"" for m=1 to 10 mt$(m) = trou$ next #w.gr "backcolor ";bckColor$;"; fill ";bckColor$ #w.gr "color ";textColor$ #w.gr "place 150 50;|";upper$(lf$(1)) mah = 30 itl = 50 mag = 20 li = 2 nm = 0 do lmt$ = word$(lf$(li),1,"-") if lmt$<>"" then ngm = 1 ecm = 0 do if instr(lmt$,";") then nm = nm + 1 lrmat$(nm) = lmt$ #w.gr "place ";mag + ecm;" ";mah + itl * li;";|";mt$(nm) #w.gr "spritexy zone";nm;" ";mag + ecm;" ";mah +itl * li -20 ecm = ecm + len(mt$(nm))*13 else #w.gr "place ";mag + ecm;" ";mah +itl * li;";|";lmt$ ecm = ecm + len(lmt$)*10 end if ngm = ngm + 1 lmt$ = word$(lf$(li),ngm,"-") loop until lmt$="" else #w.gr "place ";mag;" ";mah+itl*li;";|";lf$(li) end if li = li + 1 loop until lf$(li) = "" #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 and nz<>oldnz 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" oldnz = nz else lbx = 0 lby = -200 #w "refresh" end if end sub [rejoue] call message 15,20,"" #w.gr "color yellow" for m=1 to nm mt$(m) = trou$ #w.gr "spritexy? zone";str$(m);" x y" #w.gr "place ";x;" ";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" lbx = 0 lby = -200 #w "refresh" if len(mot$)<len(trou$) then ' essai de centrage de l'affichage du mot... nsp = int((len(trou$)-len(mot$))/2)+3 mot$ = space$(nsp)+mot$+space$(nsp) end if #w.gr "place ";x-5;" ";y+20;";|";mot$ ' au besoin ajuster la largeur à afficher pour correspondre à trou$ #w.gr "flush ;discard" 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 !" else call message 15,20,"" 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 #w.debug fileName$ call mep end if end sub sub Quit handle$ close #w END end sub
Pas testé avec une autre fable...

@+
Gilles.
• Index
1 Utilisateur en ligne : 0 Administrateur, 0 Modérateur, 0 Membre et 1 Visiteur
Utilisateur en ligne : Aucun membre connecté
Utilisateur en ligne : Aucun membre connecté