Forum Liberty Basic France
• Index
Hello du soir !
Pour changer un peu de récentes petites prises de tête philosophico-forumesques distinguées, je vous invite à voyager :
Code VB :
Il ne manque que le bruit des palettes qui tombent... (c'est peut-être un peu plus difficile à faire si on veut le synchroniser avec chaque caractère)
Je vous laisse deviner le fonctionnement du truc. Tu constatera, Roland, que je n'ai pas utilisé mes datas
Pour changer un peu de récentes petites prises de tête philosophico-forumesques distinguées, je vous invite à voyager :
Code VB :
'Affichage hall de gare 'durée mini entre affichages de deux caractères successifs ecart=100 'milliseconde 'jeu de caractères alphabet$=" ABCDEFGHIJKLMNOPQRSTUVWXYZ+-.*/0123456789" 'grille des départs p$(0)="TRAIN HEURE DESTINATION DEPART" p$(1)="TGV6128 19H50 - MARSEILLE SAINT CHARLES - VOIE A" p$(2)="TER512 20H04 - MIRAMAS SALON DE PROV. - VOIE E" p$(3)="TER2232 20H35 - LYON PART DIEU - VOIE D" p$(4)="ARBALETE 20H55 - TOULOUSE MATABIAU - VOIE B" p$(5)="AF0717 21H52 - LONDRES HEATROW - GATE 2" 'affiche le tableau des départs print p$(0) for destination=1 to 5 phrase$=p$(destination) lng=len(phrase$) dim phr$(lng) dim phrf$(lng) dim ok(lng) gosub [affiche_ligne] print next end [affiche_ligne] for a=1 to lng phr$(a)=mid$(phrase$,a,1) next fini=0 a=1 while fini=0 if a>len(alphabet$) then fini=1 al$=mid$(alphabet$,a,1) for b=1 to lng if ok(b)=0 then if al$=phr$(b) then phrf$(b)=phr$(b) ok(b)=1 else phrf$(b)=al$ end if end if next aff$="" for b=1 to lng aff$=aff$+phrf$(b) next 'temporisation tac=0 t=time$("ms") while tac=0 if t+ecart<time$("ms") then tac=1 wend 'affichage de la phrase locate 0,destination+1:print aff$ a=a+1 wend return
Il ne manque que le bruit des palettes qui tombent... (c'est peut-être un peu plus difficile à faire si on veut le synchroniser avec chaque caractère)
Je vous laisse deviner le fonctionnement du truc. Tu constatera, Roland, que je n'ai pas utilisé mes datas

____________________
Just BASIC v2.0 :
utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc
Just BASIC v2.0 :
Tu n'a pas donné ton avis sur mon "Quizz crypt".
Je boude.
Je boude.

____________________
Roro
Roro
Pas beau de bouder
Tiens, voiçi quelques caramels :

(Photo Evan Amos - License Creative Common BY-SA 3.0)
Cette aprèm' j'ai voulu faire une version avec une horloge en boucle principale, qui interroge la grille horaire pour savoir quels trains afficher. C'est pas très compliqué dans le principe mais la mainwin ne permet pas la capture des évènements clavier ou souris qui permettraient de fermer le programme. La solution est d'en faire une version graphique, mais je ne viens qu'une fois tous les trois mois et j'ai déjà autre chose au four, donc je laisse en l'état. Si certains veulent s'emparer de l'idée, ils peuvent.
Comme je suis fâché avec le timer, j'ai créé un équivalent. Il n'est pas forcément très précis, mais il fait le job pour des petites durées :
Code VB :
Pour des durées plus longues, on pourrait avoir envie de sortir du programme avant la fin de la temporisation, mais ça devrait pas être trop difficile à programmer.
Roland, je regarde comment tu as goupillé ton quizz.


(Photo Evan Amos - License Creative Common BY-SA 3.0)
Cette aprèm' j'ai voulu faire une version avec une horloge en boucle principale, qui interroge la grille horaire pour savoir quels trains afficher. C'est pas très compliqué dans le principe mais la mainwin ne permet pas la capture des évènements clavier ou souris qui permettraient de fermer le programme. La solution est d'en faire une version graphique, mais je ne viens qu'une fois tous les trois mois et j'ai déjà autre chose au four, donc je laisse en l'état. Si certains veulent s'emparer de l'idée, ils peuvent.
Comme je suis fâché avec le timer, j'ai créé un équivalent. Il n'est pas forcément très précis, mais il fait le job pour des petites durées :
Code VB :
'temporisation ecart=200 'millisecondes tac=0 t=time$("ms") while tac=0 if t+ecart<time$("ms") then tac=1 wend
Pour des durées plus longues, on pourrait avoir envie de sortir du programme avant la fin de la temporisation, mais ça devrait pas être trop difficile à programmer.
Roland, je regarde comment tu as goupillé ton quizz.
____________________
Just BASIC v2.0 :
utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc
Just BASIC v2.0 :
Voilà la version graphique, il n'y a plus qu'à construire le réseau ferroviaire qui va autour 
Mais ce sera pour une autre fois, car le projet ne s'est pas laissé faire, le bougre, et j'ai eu du mal à le mettre au point : la difficulté principale a été le défilement des caractères de toute une ligne, au rythme d'un afficheur par caractère, les afficheurs étant à la fois synchronisés pour le rythme de défilement, et indépendants pour la gestion du symbole à afficher. Un sacré micmac.
Je me suis inspiré de souvenirs de voyage, et les afficheurs à palettes sont simulés par l'affichage répétitif d'une chaine de caractères toujours au même endroit, jusqu'à ce que la ligne affiche tous les symboles attendus. Le Bon Internet dans sa généreuse bonté m'a fourni cette vidéo montrant les vrais afficheurs en action.
Je n'ai pas testé le cas de deux trains partant à la même heure, ni le cas des trains qui partent après minuit quand il n'est pas encore minuit, et à mon avis ça devrait poser problème dans les deux cas. Il n'y a pas le bruitage non plus.
J'ai découvert l'utilité de l'instruction "scan" pour continuer de détecter les clics souris et frappes clavier durant une boucle longue, qui autrement nécessiterait d'être achevée pour qu'on puisse fermer le programme.
Le dessin des horloges est fait avec la tortue plutôt qu'avec les habituelles coordonnées cartésiennes.
On pourrait facilement remplacer les quelques destinations de test par un fichier couvrant la vie d'une gare durant 24 heures. A voir pour plus tard si j'ai envie de perfectionner ce petit interlude.
Le programme :
en zip : annonce gare 3.bas
en listing :
(il y a un départ toutes les minutes dès le lancement du programme à cause d'une variable "essai" qui vaut 1. La mettre à zéro pour respecter les horaires fixés dans train$()
Code VB :

Mais ce sera pour une autre fois, car le projet ne s'est pas laissé faire, le bougre, et j'ai eu du mal à le mettre au point : la difficulté principale a été le défilement des caractères de toute une ligne, au rythme d'un afficheur par caractère, les afficheurs étant à la fois synchronisés pour le rythme de défilement, et indépendants pour la gestion du symbole à afficher. Un sacré micmac.
Je me suis inspiré de souvenirs de voyage, et les afficheurs à palettes sont simulés par l'affichage répétitif d'une chaine de caractères toujours au même endroit, jusqu'à ce que la ligne affiche tous les symboles attendus. Le Bon Internet dans sa généreuse bonté m'a fourni cette vidéo montrant les vrais afficheurs en action.
Je n'ai pas testé le cas de deux trains partant à la même heure, ni le cas des trains qui partent après minuit quand il n'est pas encore minuit, et à mon avis ça devrait poser problème dans les deux cas. Il n'y a pas le bruitage non plus.
J'ai découvert l'utilité de l'instruction "scan" pour continuer de détecter les clics souris et frappes clavier durant une boucle longue, qui autrement nécessiterait d'être achevée pour qu'on puisse fermer le programme.
Le dessin des horloges est fait avec la tortue plutôt qu'avec les habituelles coordonnées cartésiennes.
On pourrait facilement remplacer les quelques destinations de test par un fichier couvrant la vie d'une gare durant 24 heures. A voir pour plus tard si j'ai envie de perfectionner ce petit interlude.
Le programme :
en zip : annonce gare 3.bas
en listing :
(il y a un départ toutes les minutes dès le lancement du programme à cause d'une variable "essai" qui vaut 1. La mettre à zéro pour respecter les horaires fixés dans train$()
Code VB :
'Affichage hall de gare 'pour mise au point ou démo : 'essai=1 ajuste automatiquement le départ des train au lancement du programme 'et selon un intervalle constant 'essai=0 respecte les horaires spécifiés dans le tableau "trains()" essai=1 intervalle=1 'minutes d'intervalles entre deux trains, actif si essai=1 'initialisation nomainwin ecart=100 'en milliseconde, durée nécessaire pour changer de symbole sur un afficheur ntrain=-1 'numéro du premier train à afficher, -1 à l'initialisation alphabet$=" ABCDEFGHIJKLMNOPQRSTUVWXYZ+-.*/0123456789" 'jeu de caractères des afficheurs lenalpha=len(alphabet$) 'table des trains nbtrains=7 : dim train$(nbtrains) entete$= "TRAIN DEPART DESTINATION VOIE" train$(0)="TGV6128 21H45 - MARSEILLE SAINT CHARLES - A" train$(1)="TER512 21H57 - MIRAMAS SALON DE PROV. - E" train$(2)="TER2232 22H10 - LYON PART DIEU - D" train$(3)="ARBALETE 22H24 - TOULOUSE MATABIAU - B" train$(4)="AF0717 22H42 - LONDRES HEATROW - 2" train$(5)="TER627 22H50 - DIJON VILLE - A" train$(6)="TGV4555 23H05 - LYON PERRACHE - D" 'horaire selon lancement du programme (1) ou horaires présent dans train$() (0) if essai=1 then gosub [donne_heure] h$=left$(time$(),5) 'on ne garde qu'heures et minutes heure$=right$("00"+str$(heure),2) minute$=right$("00"+str$(minute),2) 'et on remplace l'horaire présent dans train$() for a=0 to nbtrains-1 minute=minute+intervalle if minute>59 then minute=0:heure=heure+1 if heure>23 then heure=0 heure$=right$("00"+str$(heure),2) minute$=right$("00"+str$(minute),2) a$=train$(a) train$(a)=left$(a$,9)+heure$+"H"+minute$+right$(a$,31) next end if 'tableau des départs nblignes=5 'nombre de lignes du tableau capaligne=45 'nombre d'afficheurs disponibles dans une ligne dim tableau$(nblignes,capaligne) 'tableau des départs dim debut(capaligne) 'numéro du caractère présentement affiché dim fin(capaligne) 'numéro du caractère qui va le remplacer 'Tableau d'affichage heure+trains au départ WindowWidth=800 WindowHeight=190 statictext #w.st,"",145,20,560,20 graphicbox #w.h1, 10,40,111,111 graphicbox #w.gb, 135,40,520,111 graphicbox #w.h2, 670,40,111,111 open "Tableau des Départs" for window as #w #w, "trapclose [quitter]" #w.st, "!font liberation_mono 12" 'fonte à chasse fixe nécessaire #w.st, entete$ #w.gb, "down" #w.h1, "down" #w.h2, "down" gosub [dessin_horloges_et_afficheur] gosub [donne_heure] gosub [affiche_heure] gosub [verifie_departs_et_affiche_tableau_des_departs] 'initialisation tableau des départs for a=0 to capaligne-1 tableau$(0,a)=" " next 'actualisation de l'heure en continu, minute par minute 'si l'heure a changé, on voit s'il faut réafficher les départs [top] ancienh$=h$ : gosub [donne_heure] if h$<>ancienh$ then gosub [affiche_heure] gosub [verifie_departs_et_affiche_tableau_des_departs] end if scan 'évite que la boucle [top] tourne indéfiniment goto [top] wait '****************** sous-programmes ************** [donne_heure] h$=left$(time$(),5) 'ne garder qu'heures et minutes heure=val(left$(h$,2)) minute=val(right$(h$,2)) minuthorloge=heure*60+minute return [dessin_horloges_et_afficheur] 'bloc afficheur #w.gb, "fill darkgray;color yellow;backcolor darkgray" #w.gb, "font liberation_mono 12" 'horloge 1 'dessin des graduations des minutes #w.h1, "fill darkgray;color green;size 1" mn=360/60 for a=1 to 60 #w.h1, "home;turn ";mn;";go 48" next #w.h1, "home;backcolor darkgray;color darkgray;circlefilled 42" 'dessin des graduations des heures #w.h1, "color yellow;size 2" hr=360/12 for a=1 to 12 #w.h1, "home;turn ";hr;";go 47" next #w.h1, "home;backcolor darkgray;color darkgray;circlefilled 37" 'horloge 2 'dessin des graduations des minutes #w.h2, "fill darkgray;color green;size 1" mn=360/60 for a=1 to 60 #w.h2, "home;turn ";mn;";go 48" next #w.h2, "home;backcolor darkgray;color darkgray;circlefilled 42" 'dessin des graduations des heures #w.h2, "color yellow;size 2" hr=360/12 for a=1 to 12 #w.h2, "home;turn ";hr;";go 47" next #w.h2, "home;backcolor darkgray;color darkgray;circlefilled 37" return [affiche_heure] 'on efface l'heure précédente #w.h1, "home;backcolor darkgray;color darkgray;circlefilled 37" #w.h2, "home;backcolor darkgray;color darkgray;circlefilled 37" 'on affiche la nouvelle heure : 'heures degres=heure*hr+minute*0.5 #w.h1, "color yellow;home;turn ";degres;";go 28;turn ";degres*-1 #w.h2, "color yellow;home;turn ";degres;";go 28;turn ";degres*-1 'minutes degres=minute*mn retour0=degres*-1 #w.h1, "color yellow;home;turn ";degres;";go 34;turn ";degres*-1 #w.h2, "color yellow;home;turn ";degres;";go 34;turn ";degres*-1 return [verifie_departs_et_affiche_tableau_des_departs] 'recherche du premier train à afficher en fonction de l'heure 'l'heure actuelle est en minutes, et se trouve dans "minuthorloge" 'en cette minute, quel est le premier train à afficher ? bcl=0 'index de boucle pour faire le tour de la liste des trains exntrain=ntrain fin=0 while fin=0 'heure de départ du train, convertie en minutes ht=val(mid$(train$(bcl),10,2)) mt=val(mid$(train$(bcl),13,2)) minutedepart=ht*60+mt 'trouver le train le plus proche du départ if minutedepart>minuthorloge then ntrain=bcl : fin=1 'si on a étudié tous les trains if bcl=nbtrains then fin=1 else bcl=bcl+1 wend if ntrain<>exntrain then for tabligne=0 to nblignes-1 'afficher les destinations au tableau 'future ligne de caractères à afficher if ntrain+tabligne>=nbtrains then lf$=space$(capaligne) else lf$=train$(ntrain+tabligne) end if gosub [afficheligne] next else 'pour effacer la dernière ligne affichée sur le tableau if bcl=nbtrains then bcl=0 'pour ne pas revenir plusieurs fois tabligne=0 'ligne à effacer lf$=space$(capaligne) gosub [afficheligne] end if end if return [afficheligne] 'recherche des bornes de l'animation pour chaque afficheur for b=1 to capaligne scan index=b-1 'attribution du symbole à l'afficheur actuel$=tableau$(tabligne,index) futur$=mid$(lf$,b,1) 'limites pour chaque symbole de la ligne for a=1 to lenalpha a$=mid$(alphabet$,a,1) if a$=actuel$ then debut(index)=a':print "caractère ";a;", début=";debut(index) if a$=futur$ then fin(index)=a':print "caractère ";a;", fin=";fin(index) next 'nombre de pas if fin(index)<debut(index) then fin(index)=fin(index)+lenalpha nbpas=fin(index)-debut(index) if nbpasmax<nbpas then nbpasmax=nbpas print "nbpas=";nbpas;" nbpasmax=";nbpasmax next 'affichage de l'animation for pas=0 to nbpasmax aff$="" for b=0 to capaligne-1 scan pa=debut(b)+pas if pa<=fin(b) then if pa>lenalpha then pasactuel=pa-lenalpha else pasactuel=pa 'pa peut faire deux tours d'alphabet$ tableau$(tabligne,b)=mid$(alphabet$,pasactuel,1) end if next 'temporisation tac=0 t=time$("ms") while tac=0 if t+ecart<time$("ms") then tac=1 wend 'construction de la ligne aff$="" for c=0 to capaligne-1 aff$=aff$+tableau$(tabligne,c) next 'affichage de la ligne #w.gb, "place 10 ";(tabligne+1)*20 #w.gb, "\";aff$ next return [quitter] close #w end
____________________
Just BASIC v2.0 :
utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc
Just BASIC v2.0 :
Et alors ? on n'aligne plus les colonnes ? Y a du laisser aller.

____________________
Roro
Roro
Normalement elles devraient... Tu as changé le nom de la fonte ?
Je n'ai rien changé.
Je n'ai rien changé.
____________________
Just BASIC v2.0 :
utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc
Just BASIC v2.0 :
• 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é
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie