Logicielsmoto.com

Nous sommes le 19 Mar 2024, 04:34

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 7 messages ] 
Auteur Message
MessagePosté: 16 Avr 2021, 12:02 
Hors ligne

Inscription: 21 Fév 2020, 11:38
Messages: 366
Salut la compagnie

Je suis en train de recopier le code BASIC d'un manuel qui sera très prochainement téléchargeable (avec les codes sources en fichiers txt corrigés et amélioré et une disquette fd pour les TO8) de "Boite à outils pour MO5 et TO7/70" sur le site de DCMoto.

J'en suis au 10ème programme qui est un jeu de Simon sensé se jouer au crayon optique.

Le programme basic est

Code:
1000 ' ******************************
1001 ' Simon
1002 ' ******************************
1003 defint C-j:CLEAR,,4
1004 CLS:GOSUB 1010 ' Présentation et initialisation
1005 GOSUB 2000 ' Jeu
1006 GOTO 3000 ' Fin du jeu
1007 END

1010' *** Présentation et initialistion ***
1020 gosub 1100 'Présentation
1030 gosub 1700 'Initialisation
1040 return

1090 '*** Présentation du jeu ***
1100 Screen 6,0,0: Locate 14,1,0  : attrb 1,1
1170 print "SIMON"
1180 ATTRB 0,0:print:print SPC(18)"Objet"
1190 print "Jeu de mémoire."
1200 ' Job
1220 ' COLOR 5,0
1230 print:print SPC(18)"JOB"
1240 'color 5,0
1250 print "MOTO va afficher une suite"
1260 print "de symboles lumineux. Grâce au stylo"
1270 print "optique, vous devrez les restituer dans"
1280 print "le bon ordre."
1310 'Début
1320 Print:print
1330 ' Color 3,0
1340 Print spc(17)"DEBUT"
1350 'color 6,0
1360 print "Pour commencer, appuyez sur une touche"
1370 print "quelconque."
1380 B=RND: if inkey$ ="" THEN 1380 'Attente
1390 return

1690 '*** Initialisation des variables de jeu ***
1700 dim lo(16),t(100):restore
1710 for i=1 to 4
1720 READ co(i) 'couleurs des rectangles
1730 next I
1740 for i=1 to 16
1750 read lo(i) 'Coordonnées des rectangles
1760 next i
1770 for i=1 to 4
1780 read no$(i) 'Notes
1790 next i
1800 data 5,4,3,2
1810 data 125,15,175,50,240,50,290,85
1820 data 125,85,175,120,10,50,60,85
1830 data DO,RE,MI,FA
1840 CLS
1850 ATTRB 1,1 : locate 14,18: print "SIMON": attrb 0,0
1860 for I=1 to 4
1870 A=(I-1)*4+1 'On peut remplacer par 4*I-3
1880 color co(i)
1900 BOXF(lo(a),lo(a+1))-(lo(a+2),lo(a+3))
1910 next I
1920 color 6 : locate 0,22,0
1930 print "Appuyez sur une touche pour commencer"
1940 b=rnd : if inkey$="" then 1940
1950 return

1990 '*** Jeu ***
2000 ok=0:locate 0,22:print chr$(24): locate 0,23 : print chr$(24) 'Effacement de message
2010 N=N+1 : A = INT(rnd*4)+1:T(n)=a
2020 for I=1 to N
2030 A=(t(i)-1)*4+1
2040 X1=lo(a):y1=lo(a+1):x2=lo(a+2):y2=lo(a+3)
2050 gosub 2300 'affichage de la case sélectionnée
2060 next i
2070 for i=1 to n
2080 input pen X,Y 'Saisie crayon optique
2085 locate 0,22: print X,Y CHR$(24)
2090 gosub 2500 'Test si réponse OK
2095 if p=0 then 2080 'Ajout sur le programme original
2100 a=(p-1)*4+1
2110 X1=lo(a):y1=lo(a+1):x2=lo(a+2):y2=lo(a+3)
2120 gosub 2300 'Affichage
2130 next i
2140 if ok=-1 then 2010
2150 return

2290'*** Affichage d'une case sélectionnée ***
2295'** Réponse correcte OK=-1 sinon OK=1 ***
2300 color 1
2310 boxf(X1,Y1)-(X2,Y2)
2320 if ok=1 then I=n:play "SISISISISI": color co(P) ELSE play no$(t(i)) : color co(t(i))
2350 'color co(t(i)) 'Couleur d'origine
2360 boxf(X1,Y1)-(X2,Y2)
2370 return

2490 '*** Test si réponse correcte ***
2500 P=0
2510 if Y<lo(4)+1 and y>lo(2)-1 and X<lo(3)+1 and X>lo(1)-1 then P=1 'Haut
2520 if Y<lo(8)+1 and y>lo(6)-1 and X<lo(7)+1 and X>lo(5)-1 then P=2 'Droite
2530 if Y<lo(12)+1 and y>lo(10)-1 and X<lo(11)+1 and X>lo(9)-1 then P=3 'Bas
2540 if Y<lo(16)+1 and y>lo(14)-1 and X<lo(15)+1 and X>lo(13)-1 then P=4 'Gauche
2550 if t(i)=P then ok=-1 else if p<>0 then ok=1
2560 return

2999 '*** Fin de partie ***
3000 COLOR 6,0 ': cls
3010 locate 0,22 : print "Perdu au bout de "N" notes."
3050 Locate 0,23 : print "Une autre partie ?"
3060 r$=inkey$ : if r$="" then 3060
3070 if r$="O" then N=0: locate 0,22 : print chr$(24):locate 0,23 : print chr$(24): goto 1005
3080 'LOAD "AUTO.BAT",R
3100 '*******************************


Quand on lance ce programme sous DC Moto (mode TO8D et 1 au lancement) le jeu fonctionne bien sauf quand il s'agit de cliquer avec le crayon optique sur le rectangle bleu!
J'ai ajouté une instruction pour afficher les coordonnées du light pen quand on clique dessus, et dans la zone bleue (comme dans les zones noires d'ailleurs), ça met "-1 ,-1" en coordonnées X et Y... alors qu'avec les couleurs plus claires (Jaune, Magenta etc) ça donne les bonnes coordonnées. Et à cause de ça, le jeu ne peut se jouer. Est ce dû à une erreur de DC Moto ? ou est ce que le lighpen dans la réalité est incapable de visualiser ce qui est en bleu (et autre couleur sombre) ?

Il y a pas mal d'erreur ou de manques d'optimisation dans les programmes basic de l'auteur mais je ne pense pas que ceci en sot une. Je ne sais pas comment fonctionne le lighpen, je pensais que quelle que soit l'endroit où on clique, ça donnait les bonne coordonnées ?

D'autre part, il y a aussi un problème récurrent si je choisi le mode 2 du TO8 et que je recopie le code via l'outil dédié sur DCMoto (copier coller)., le recopiage s'arrête toujours à un certain endroit et DC Moto plante (faites le test avec ce code basic et vous comprendrez), c'est pourquoi je n'utilise que me mode 1 (Basic 512).

ADDENTUM : en mettant la couleur du 2ème rectangle en cyan (indice 6) le crayon optique fonctionne cette fois, mais pas avec la couleur 4.


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 16 Avr 2021, 13:09 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1800
Localisation: Brest
Le bleu pur a une intensité très faible (entre 6 et 11% du blanc pur) ce qui fait que le crayon optique a du mal à capturer le passage du faisceau d'électron quand on affiche cette couleur. Si tu augmentes la luminosité du CRT ca devrait mieux marcher, mais cela abime les yeux. Donc ce choix de pointer du bleu n'est pas franchement idéal pour le crayon optique.

_________________
Good morning, that's a nice Tnetennba


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 16 Avr 2021, 14:46 
Hors ligne

Inscription: 06 Juin 2004, 08:23
Messages: 464
Citation:
cliquer avec le crayon optique sur le rectangle bleu!

Sam a tout dit, je crois. Le vrai crayon optique est quasi-aveugle sur le bleu (et par définition, totalement sur le noir, puisqu'il n'y a pas de lumière). Je ne pensais pas que Daniel avait poussé le vice à émuler aussi ça ! :ptdr:

C'est quoi le mode 1 et le mode 2 du TO8 ? :???:


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 16 Avr 2021, 15:08 
Hors ligne

Inscription: 21 Fév 2020, 11:38
Messages: 366
Fool-DupleX a écrit:
Citation:
cliquer avec le crayon optique sur le rectangle bleu!

Sam a tout dit, je crois. Le vrai crayon optique est quasi-aveugle sur le bleu (et par définition, totalement sur le noir, puisqu'il n'y a pas de lumière). Je ne pensais pas que Daniel avait poussé le vice à émuler aussi ça ! :ptdr:

C'est quoi le mode 1 et le mode 2 du TO8 ? :???:


Eh si il l'a fait...

Dans mon premier message j'avais mis un addentum avant vos réponses. Ca marche avec le cyan donc. Mais la réponse est celle que j'attendais (et je m'en doutais un peu)

Et là il me viens une question (peut-être trop pointue ?) comment le crayon optique fait pour repérer une position précise sur l'écran ? L'écran est un objet qui peut être positionné n'importe où dans un espace 3D, il n'y a pas à priori, de détecteur de position du lightpen, une même couleur peut apparître plusieurs fois sur un écran, alors, peut-être que le lightpen visualise tout l'écran et détecte le point précis om il pointe ? Mais alors ça devrait fonctionner avec tout écran y compris n'étant pas connecté au Thomson... Franchement là je sèche,n c'est vraiment un objet "magoique" en fait le lightpen!!

Ya un bug sur le site, je ne peux plus consulter la messagerie.


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 16 Avr 2021, 17:21 
Hors ligne

Inscription: 24 Juil 2010, 16:08
Messages: 454
Localisation: France
L'écran est affiché avec un balayage ligne par ligne et pixel par pixel. Les humains ne le voient pas car c'est trop rapide, mais le crayon optique, si.

En fait tout ce qu'il fait c'est dire "je vois la lumière MAINTENANT!". C'est synchronisé avec les registres internes de génération vidéo de l'ordinateur (qui sait quelle ligne et quel pixel il est en train de générer à ce moment là) et on peut donc en déduire la position du stylo.

Et c'est pour ça que certaines couleurs ne marchent pas bien, le capteur dans le stylo optique, est rapide, mais il ne voit pas toutes les couleurs.


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 16 Avr 2021, 18:35 
Hors ligne

Inscription: 06 Avr 2010, 01:59
Messages: 477
Hello,
si on force sur le réglage de la luminosité de l'écran et qu'on diminue un peu le contraste, le crayon pourrait-il voir suffisamment de lumière dans le bleu foncé aux moins ?

_________________
Image


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 17 Avr 2021, 08:05 
Hors ligne

Inscription: 06 Juin 2004, 08:23
Messages: 464
PulkoMandy a très bien résumé le principe de fonctionnement du crayon optique. Et d'ailleurs, ce principe implique quelques détails amusants :

- Le crayon optique fonctionne de la même manière qu'il soit appuyé contre la surface de l'écran ou maintenu à quelques cm de celle-ci; plus la distance est grande, moins le crayon ne capte de lumière, mais les coordonnées restent correctes.
- Avez-vous déjà essayé de pointer le crayon optique d'un ordinateur sur l'écran d'un autre ? On obtient des coordonnées pseudo-aléatoires en raison de la désynchronisation et de la différence de fréquence de rafraichissement (si c'est pas le même mode graphique)
- Sur Thomson en tout cas, il est tout à fait possible d'écrire une routine qui renvoit des coordonnées correctes en dehors de la fenêtre 320x200
- Précision utile, sur toutes les machines Thomson, en mode 320x200, la résolution du crayon est 320x200 sauf sur le T9000/TO7 sur lequel elle n'est que de 40x200. Sur le T9000, éloigner le crayon de l'écran provoque un bug de dépassement de tampon qui peut faire planter le BASIC.

Neotenien, tu peux poser ici toutes les questions techniques que tu souhaites, tu es le bienvenu. Nous connaissons les machines Thomson par coeur jusqu'à leur moindre transistor, ainsi que, en ce qui me concerne en tout cas, le contexte dans lequel elles ont été conçues.

adnz: et même dans le noir, si tu exagères franchement. Mais ton image ne sera pas terrible :)


Haut
 Profil  
Répondre en citant le message  
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 7 messages ] 

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages
Vous ne pouvez pas joindre des fichiers

Rechercher:
Aller à:  
cron
Développé par phpBB® Forum Software © phpBB Group
Traduction par phpBB-fr.com