Précédente Accueil Remonter Suivante

GEOMETRIE

Visual Basic for MS-DOS

 

 

DECLARE SUB orth (prog%, re%, ni%, mo$(), rt$, gg$, pre$, titr$, noir%, bleu%, vert%, rouge%, marron%, blanc%, vertclair%, cyanclair%, rougeclair%, jaune%, blancbrill%, couleur%, coef1!, coef2!)
DECLARE SUB fleches (v%, h%, w$(), np%, r%, coul%, drap%, v2%, h2%)
DECLARE SUB getinvimouse (rr%)
DECLARE SUB ouinon (r$)
DECLARE SUB tableauexo (p$())
DECLARE SUB cadre (v%, h%, l%, nli%, c%)
DECLARE SUB attendre (tx!)
DECLARE SUB bilan (ma$(), niveaux%(), VarEnreg AS ANY)
DECLARE SUB cadrenb (v%, h%, l%, nli%, c%, c2%, c3%)
DECLARE SUB calmoy (t$(), moy$(), niveaux%())
DECLARE SUB centre (v%, coul%, ph$)
DECLARE SUB chiffres ()
DECLARE SUB convertir (z$)
DECLARE SUB entree ()
DECLARE SUB flechesmenu (w$(), r%, coul%)
DECLARE SUB getinvi (rr%)
DECLARE SUB lettres ()
DECLARE SUB niveau (r%, np%, titr$)
DECLARE SUB quitter ()
DECLARE SUB titre (titr$)
DECLARE SUB agrand (re%, ni%, rt$, gg$, pre$, titr$, noir%, bleu%, vert%, rouge%, marron%, blanc%, vertclair%, cyanclair%, rougeclair%, jaune%, blancbrill%, couleur%, coef1!, coef2!)
DECLARE SUB frise (re%, ni%, rt$, gg$, pre$, titr$, noir%, bleu%, vert%, rouge%, marron%, blanc%, vertclair%, cyanclair%, rougeclair%, jaune%, blancbrill%, couleur%, coef1!, coef2!)
DECLARE SUB symetrie (re%, ni%, rt$, gg$, pre$, titr$, noir%, bleu%, vert%, rouge%, marron%, blanc%, vertclair%, cyanclair%, rougeclair%, jaune%, blancbrill%, couleur%, coef1!, coef2!)
DECLARE SUB aire (re%, ni%, rt$, gg$, pre$, titr$, noir%, bleu%, vert%, rouge%, marron%, blanc%, vertclair%, cyanclair%, rougeclair%, jaune%, blancbrill%, couleur%, coef1!, coef2!)
DECLARE SUB convexe (re%, ni%, rt$, gg$, pre$, titr$, noir%, bleu%, vert%, rouge%, marron%, blanc%, vertclair%, cyanclair%, rougeclair%, jaune%, blancbrill%, couleur%, coef1!, coef2!)
DECLARE SUB droitegauche (re%, ni%, rt$, gg$, pre$, titr$, noir%, bleu%, vert%, rouge%, marron%, blanc%, vertclair%, cyanclair%, rougeclair%, jaune%, blancbrill%, couleur%, coef1!, coef2!)
DECLARE SUB intrus (re%, ni%, motintrus$(), rt$, gg$, pre$, titr$, noir%, bleu%, vert%, rouge%, marron%, blanc%, vertclair%, cyanclair%, rougeclair%, jaune%, blancbrill%, couleur%, coef1!, coef2!)
DECLARE SUB trouve (re%, ni%, rt$, gg$, pre$, titr$, noir%, bleu%, vert%, rouge%, marron%, blanc%, vertclair%, cyanclair%, rougeclair%, jaune%, blancbrill%, couleur%, coef1!, coef2!)
DECLARE SUB angle1 (re%, ni%, rt$, gg$, pre$, titr$, noir%, bleu%, vert%, rouge%, marron%, blanc%, vertclair%, cyanclair%, rougeclair%, jaune%, blancbrill%, couleur%, coef1!, coef2!)
DECLARE SUB angle2 (re%, ni%, rt$, gg$, pre$, titr$, noir%, bleu%, vert%, rouge%, marron%, blanc%, vertclair%, cyanclair%, rougeclair%, jaune%, blancbrill%, couleur%, coef1!, coef2!)
DECLARE SUB paraperpen (re%, ni%, rt$, gg$, pre$, titr$, noir%, bleu%, vert%, rouge%, marron%, blanc%, vertclair%, cyanclair%, rougeclair%, jaune%, blancbrill%, couleur%, coef1!, coef2!)
DECLARE SUB recoformes (re%, ni%, s%, n$(), rt$, gg$, pre$, titr$, noir%, bleu%, vert%, rouge%, marron%, blanc%, vertclair%, cyanclair%, rougeclair%, jaune%, blancbrill%, couleur%, coef1!, coef2!, programme1$)
DECLARE SUB solide2 (re%, ni%, rt$, gg$, pre$, titr$, noir%, bleu%, vert%, rouge%, marron%, blanc%, vertclair%, cyanclair%, rougeclair%, jaune%, blancbrill%, couleur%, coef1!, coef2!)
DECLARE SUB verti (re%, ni%, rt$, gg$, pre$, titr$, noir%, bleu%, vert%, rouge%, marron%, blanc%, vertclair%, cyanclair%, rougeclair%, jaune%, blancbrill%, couleur%, coef1!, coef2!)
DECLARE SUB vocabu (re%, ni%, rt$, gg$, pre$, titr$, noir%, bleu%, vert%, rouge%, marron%, blanc%, vertclair%, cyanclair%, rougeclair%, jaune%, blancbrill%, couleur%, coef1!, coef2!)
DECLARE SUB coord (re%, ni%, rt$, gg$, pre$, titr$, noir%, bleu%, vert%, rouge%, marron%, blanc%, vertclair%, cyanclair%, rougeclair%, jaune%, blancbrill%, couleur%, coef1!, coef2!)
DECLARE SUB frise1 (re%, ni%, rt$, gg$, pre$, titr$, noir%, bleu%, vert%, rouge%, marron%, blanc%, vertclair%, cyanclair%, rougeclair%, jaune%, blancbrill%, couleur%, coef1!, coef2!)
DECLARE SUB reproduction (re%, ni%, rt$, gg$, pre$, titr$, noir%, bleu%, vert%, rouge%, marron%, blanc%, vertclair%, cyanclair%, rougeclair%, jaune%, blancbrill%, couleur%, coef1!, coef2!)
DECLARE SUB reproduction1 (re%, ni%, rt$, gg$, pre$, titr$, noir%, bleu%, vert%, rouge%, marron%, blanc%, vertclair%, cyanclair%, rougeclair%, jaune%, blancbrill%, couleur%, coef1!, coef2!)
DECLARE SUB symetrie1 (re%, ni%, rt$, gg$, pre$, titr$, noir%, bleu%, vert%, rouge%, marron%, blanc%, vertclair%, cyanclair%, rougeclair%, jaune%, blancbrill%, couleur%, coef1!, coef2!)
DECLARE SUB heure (re%, ni%, rt$, gg$, pre$, titr$, noir%, bleu%, vert%, rouge%, marron%, blanc%, vertclair%, cyanclair%, rougeclair%, jaune%, blancbrill%)
DECLARE SUB mesureduree (re%, ni%, rt$, gg$, pre$, titr$, noir%, bleu%, vert%, rouge%, marron%, blanc%, vertclair%, cyanclair%, rougeclair%, jaune%, blancbrill%)
'EXERCICES 1 GEOMETRIE souris
'Clerc Daniel 19/12/2001
'version 1.4.3

DEFINT A-Z
'procédures

'variables globales
COMMON SHARED prog, programme1$, eleve, rt$, gg$, gg2$, pre$, titr$, noir, bleu, vert, rouge, marron, blanc, vertclair, cyanclair, rougeclair, jaune, blancbrill, couleur, coef1!, coef2!

' Inclut les fichiers contenant les déclarations relatives aux procédures appelées.
'$INCLUDE: 'MOUSE.BI'
'$INCLUDE: 'VBDOS.BI'

CONST FALSE = 0
CONST TRUE = NOT FALSE

SCREEN 9
SCREEN 0

rt$ = CHR$(17) + CHR$(196) + CHR$(217)
gg$ = CHR$(24) + " " + CHR$(25) + " puis " + rt$
gg2$ = CHR$(24) + " " + CHR$(25) + " " + CHR$(27) + " " + CHR$(26) + " puis " + rt$

coef1! = .72 'pour carré
coef2! = .72 'pour cercle

programme1$ = "exo_ge" '===
programme2$ = "menuexo" '===
ON ERROR GOTO erreur '===

TYPE TypeEnreg
nom AS STRING * 20
prenom AS STRING * 20
nbexo AS STRING * 21
Divers AS STRING * 50
notes AS STRING * 3000
END TYPE
DIM VarEnreg AS TypeEnreg

ma = 21 '===
DIM niveaux(ma), t$(100), moy$(21), p$(21), un$(9), di$(9), n$(ma)
DIM motintrus$(90), motorth$(40)

RANDOMIZE TIMER
OPEN "pointeur.dat" FOR INPUT AS #1
INPUT #1, eleve, sens, couleur, texte, lecture$
CLOSE
OPEN "pointeur.dat" FOR OUTPUT AS #1
WRITE #1, eleve, 2, 1, texte, lecture$
CLOSE

couleur = 1
noir = 0: bleu = 1: vert = 2: rouge = 4: marron = 6: blanc = 7: vertclair = 10: cyanclair = 11: rougeclair = 12: jaune = 14: blancbrill = 15

SCREEN 0: COLOR , noir, noir: CLS : KEY OFF: LOCATE , , 0
GOSUB init

IF sens = 1 AND eleve > 0 THEN
CALL bilan(p$(), niveaux(), VarEnreg)
END IF

menuprincipal:
' Vérifie que le gestionnaire de souris est installé.
MouseInit
MouseShow

COLOR , bleu, noir: CLS
CALL cadre(2, 20, 40, 2, vert)
COLOR , vert
CALL centre(3, blancbrill, "ACTIVITES de GEOMETRIE et de MESURES")
COLOR , bleu

IF eleve <> 0 THEN
'lecture des notes
OPEN "fichier.dat" FOR RANDOM AS #1 LEN = LEN(VarEnreg)
GET #1, eleve, VarEnreg
nom$ = RTRIM$(VarEnreg.nom)
pre$ = RTRIM$(VarEnreg.prenom)
'géométrie en 5°
nbexo$ = LTRIM$(STR$(VAL(MID$(VarEnreg.nbexo, 13, 3))))
resultat$ = MID$(VarEnreg.notes, 1601, 400)
j = 1
FOR i = 1 TO 200 STEP 2 '===
t$(j) = MID$(resultat$, i, 2)
j = j + 1
NEXT
CLOSE
CALL calmoy(t$(), moy$(), niveaux())
END IF

IF VAL(nbexo$) > 1 THEN
COLOR jaune
z$ = RTRIM$(nbexo$) + " exercices"
LOCATE 4, 79 - LEN(z$): PRINT z$
END IF
LOCATE 4, 2
COLOR jaune
IF eleve <> 0 THEN
w$ = pre$ + " " + nom$
IF LEN(w$) > 17 THEN
PRINT nom$
ELSE
PRINT w$
END IF
END IF

CALL tableauexo(p$())

'affiche liste exo
h1 = 6: h2 = 32: h3 = 58
COLOR blancbrill
LOCATE 7
FOR i = 1 TO 7
LOCATE , h1: PRINT p$(i): PRINT
NEXT
LOCATE 7
FOR i = 8 TO 14
LOCATE , h2: PRINT p$(i): PRINT
NEXT
LOCATE 7
FOR i = 15 TO 21
LOCATE , h3: PRINT p$(i): PRINT
NEXT

IF eleve <> 0 THEN
'affiche éval sur trois colonnes
COLOR , noir
debut = 1: fin = 7: h = 4
FOR boucle = 1 TO 3
LOCATE 7
FOR i = debut TO fin
LOCATE , h
IF moy$(i) = "" THEN
PRINT " ": PRINT
ELSEIF (VAL(moy$(i)) = 9 OR VAL(moy$(i)) = 10) THEN
COLOR vertclair: PRINT "A": PRINT
ELSEIF (VAL(moy$(i)) = 7 OR VAL(moy$(i)) = 8) THEN
COLOR vert: PRINT "B": PRINT
ELSEIF (VAL(moy$(i)) = 6 OR VAL(moy$(i)) = 5) THEN
COLOR jaune: PRINT "C": PRINT
ELSE
COLOR rougeclair: PRINT "D": PRINT
END IF
COLOR blancbrill
NEXT
debut = fin + 1: fin = fin + 7: IF fin > ma THEN fin = ma
h = h + 26
NEXT boucle
COLOR , bleu
END IF

CALL flechesmenu(p$(), prog, rouge)
COLOR , bleu

IF prog = 0 THEN
LOCATE 22, 1: PRINT SPACE$(80)
LOCATE 22, 28
COLOR blanc: BEEP: PRINT "Quitter ";
CALL ouinon(r$)
IF r$ = "O" THEN GOTO fin
GOTO menuprincipal
END IF

IF prog = 42 THEN
CALL bilan(p$(), niveaux(), VarEnreg)
GOTO menuprincipal
END IF

COLOR , noir: CLS
titr$ = p$(prog): ni = 1

'valeur de la matière
mat = 0
FOR i = 1 TO prog - 1
mat = mat + niveaux(i)
NEXT

SELECT CASE prog
CASE 1
CALL droitegauche(re, ni, rt$, gg$, pre$, titr$, noir, bleu, vert, rouge, marron, blanc, vertclair, cyanclair, rougeclair, jaune, blancbrill, couleur, coef1!, coef2!)

CASE 2
CALL verti(re, ni, rt$, gg$, pre$, titr$, noir, bleu, vert, rouge, marron, blanc, vertclair, cyanclair, rougeclair, jaune, blancbrill, couleur, coef1!, coef2!)

CASE 3
CALL trouve(re, ni, rt$, gg$, pre$, titr$, noir, bleu, vert, rouge, marron, blanc, vertclair, cyanclair, rougeclair, jaune, blancbrill, couleur, coef1!, coef2!)

CASE 4
CALL recoformes(re, ni, 1, n$(), rt$, gg$, pre$, titr$, noir, bleu, vert, rouge, marron, blanc, vertclair, cyanclair, rougeclair, jaune, blancbrill, couleur, coef1!, coef2!, programme1$)

CASE 5
CALL recoformes(re, ni, 6, n$(), rt$, gg$, pre$, titr$, noir, bleu, vert, rouge, marron, blanc, vertclair, cyanclair, rougeclair, jaune, blancbrill, couleur, coef1!, coef2!, programme1$)

CASE 6
CALL recoformes(re, ni, 11, n$(), rt$, gg$, pre$, titr$, noir, bleu, vert, rouge, marron, blanc, vertclair, cyanclair, rougeclair, jaune, blancbrill, couleur, coef1!, coef2!, programme1$)

CASE 7
CALL vocabu(re, ni, rt$, gg$, pre$, titr$, noir, bleu, vert, rouge, marron, blanc, vertclair, cyanclair, rougeclair, jaune, blancbrill, couleur, coef1!, coef2!)

CASE 8
CALL paraperpen(re, ni, rt$, gg$, pre$, titr$, noir, bleu, vert, rouge, marron, blanc, vertclair, cyanclair, rougeclair, jaune, blancbrill, couleur, coef1!, coef2!)

CASE 9
CALL convexe(re, ni, rt$, gg$, pre$, titr$, noir, bleu, vert, rouge, marron, blanc, vertclair, cyanclair, rougeclair, jaune, blancbrill, couleur, coef1!, coef2!)

CASE 10
CALL coord(re, ni, rt$, gg$, pre$, titr$, noir, bleu, vert, rouge, marron, blanc, vertclair, cyanclair, rougeclair, jaune, blancbrill, couleur, coef1!, coef2!)

CASE 11
CALL niveau(ni, 4, titr$)
IF ni = 1 THEN
CALL reproduction1(re, ni, rt$, gg$, pre$, titr$, noir, bleu, vert, rouge, marron, blanc, vertclair, cyanclair, rougeclair, jaune, blancbrill, couleur, coef1!, coef2!)
ELSE
CALL reproduction(re, ni, rt$, gg$, pre$, titr$, noir, bleu, vert, rouge, marron, blanc, vertclair, cyanclair, rougeclair, jaune, blancbrill, couleur, coef1!, coef2!)
END IF

CASE 12
CALL niveau(ni, 4, titr$)
IF ni = 1 OR ni = 2 THEN
CALL frise1(re, ni, rt$, gg$, pre$, titr$, noir, bleu, vert, rouge, marron, blanc, vertclair, cyanclair, rougeclair, jaune, blancbrill, couleur, coef1!, coef2!)
ELSE
CALL frise(re, ni, rt$, gg$, pre$, titr$, noir, bleu, vert, rouge, marron, blanc, vertclair, cyanclair, rougeclair, jaune, blancbrill, couleur, coef1!, coef2!)
END IF

CASE 13
CALL agrand(re, ni, rt$, gg$, pre$, titr$, noir, bleu, vert, rouge, marron, blanc, vertclair, cyanclair, rougeclair, jaune, blancbrill, couleur, coef1!, coef2!)

CASE 14
CALL niveau(ni, 4, titr$)
IF ni = 1 OR ni = 2 THEN
CALL symetrie1(re, ni, rt$, gg$, pre$, titr$, noir, bleu, vert, rouge, marron, blanc, vertclair, cyanclair, rougeclair, jaune, blancbrill, couleur, coef1!, coef2!)
ELSE
CALL symetrie(re, ni, rt$, gg$, pre$, titr$, noir, bleu, vert, rouge, marron, blanc, vertclair, cyanclair, rougeclair, jaune, blancbrill, couleur, coef1!, coef2!)
END IF

CASE 15
CALL aire(re, ni, rt$, gg$, pre$, titr$, noir, bleu, vert, rouge, marron, blanc, vertclair, cyanclair, rougeclair, jaune, blancbrill, couleur, coef1!, coef2!)

CASE 16
CALL niveau(ni, 2, titr$)
IF ni = 1 THEN
CALL recoformes(re, ni, 16, n$(), rt$, gg$, pre$, titr$, noir, bleu, vert, rouge, marron, blanc, vertclair, cyanclair, rougeclair, jaune, blancbrill, couleur, coef1!, coef2!, programme1$)
ELSE
CALL solide2(re, ni, rt$, gg$, pre$, titr$, noir, bleu, vert, rouge, marron, blanc, vertclair, cyanclair, rougeclair, jaune, blancbrill, couleur, coef1!, coef2!)
END IF

CASE 17
CALL angle1(re, ni, rt$, gg$, pre$, titr$, noir, bleu, vert, rouge, marron, blanc, vertclair, cyanclair, rougeclair, jaune, blancbrill, couleur, coef1!, coef2!)

CASE 18
CALL angle2(re, ni, rt$, gg$, pre$, titr$, noir, bleu, vert, rouge, marron, blanc, vertclair, cyanclair, rougeclair, jaune, blancbrill, couleur, coef1!, coef2!)

CASE 19
titr$ = "heures - minutes"
CALL niveau(ni, 4, titr$)
IF ni = 1 OR ni = 2 THEN
CALL heure(re, ni, rt$, gg$, pre$, titr$, noir, bleu, vert, rouge, marron, blanc, vertclair, cyanclair, rougeclair, jaune, blancbrill)
ELSE
CALL mesureduree(re, ni, rt$, gg$, pre$, titr$, noir, bleu, vert, rouge, marron, blanc, vertclair, cyanclair, rougeclair, jaune, blancbrill)
END IF

CASE 20
CALL orth(prog, re, ni, motorth$(), rt$, gg$, pre$, titr$, noir%, bleu%, vert%, rouge%, marron%, blanc%, vertclair%, cyanclair%, rougeclair%, jaune%, blancbrill%, couleur%, coef1!, coef2!)

CASE 21
CALL intrus(re, ni, motintrus$(), rt$, gg$, pre$, titr$, noir%, bleu%, vert%, rouge%, marron%, blanc%, vertclair%, cyanclair%, rougeclair%, jaune%, blancbrill%, couleur%, coef1!, coef2!)

END SELECT

GOSUB enregistre
COLOR blanc: LOCATE 23, 37: PRINT rt$
CALL getinvimouse(rr)

GOTO menuprincipal
END

fin:
IF eleve > 0 THEN
CALL bilan(p$(), niveaux(), VarEnreg)
END IF
COLOR , noir: CLS
RUN programme2$
END

init:
DATA Droite-Gauche,3
DATA Verticale-Horizont.,2
DATA Reconnaissance,3
DATA Figures simples,1
DATA Triangles,1
DATA Quadrilatères,1
DATA Vocabulaire,2
DATA Parallèle-Perpend.,2
DATA Convexe-Concave,1
DATA Coordonnées,3

DATA Reproduction,4
DATA Frises,4
DATA Agrandir-Réduire,2
DATA Symétrie,4
DATA Périmètre-Aire,1
DATA Solides,2
DATA Nom des angles,1
DATA Valeur des angles,2
DATA Heures-Minutes,4
DATA Orthographe,3
DATA Intrus,2

FOR i = 1 TO ma: READ p$(i), niveaux(i): NEXT

'data pour recoformes
DATA rectangle,carré,cercle,losange,triangle
DATA triangle quelconque,triangle rectangle (non isocèle),triangle isocèle,triangle équilatéral,triangle rectangle isocèle
DATA rectangle,carré,losange,trapèze,parallélogramme quelconque
DATA cube,parallélépipède quelconque,pyramide,cône,cylindre
FOR i = 1 TO 20: READ n$(i): NEXT i


'data intrus
DATA mm,cm,dm,m²*,dam,hm,km,Le "m²" n'est pas une unité de longueur mais d'aire.,"="
DATA carré,rectangle,cercle*,losange,triangle,hexagone,Le cercle n'est pas composé de lignes droites.,"="
DATA rectangle,carré,losange,hexagone*,trapèze,parallélogramme,L'hexagone n'est pas un quadrilatère. Il a 6 côtés.,"="
DATA carré,trapèze*,hexagone,pentagone,octogone,triangle équilatéral,Le trapèze n'est pas un polygone régulier (angles et côtés égaux).,"="
DATA carré,rectangle,triangle rectangle,trapèze rectangle,triangle équilatéral*,Le triangle équilatéral n'a pas d'angle droit.,"="

DATA diamètre,diagonale,périmètre,hauteur,surface*,rayon,largeur,La surface n'est pas une longueur.,"="
DATA cube,sphère,cône,cylindre,parallépipède,disque*,tétraèdre,Le disque n'est pas un solide.,"="
DATA mm²,cm*,dm²,m²,dam²,hm²,km²,Le 'cm' n'est pas une unité d'aire mais de longueur.,"="
DATA cube*,cercle,carré,triangle,ellipse,hexagone,pentagone,Le cube n'est pas une surface. C'est un solide.,"="
DATA rayon,circonférence,arc de cercle,diamètre,hauteur*,La hauteur n'est pas utilisée dans les cercles.,"="

DATA ""

i = 0
DO
i = i + 1
READ motintrus$(i)
LOOP WHILE motintrus$(i) <> ""

'niveau 1 (13)
DATA carré,rectangle,losange,largeur,longueur,sommet,triangle,cube,cercle,disque
DATA hauteur,verticale,horizontale
'niveau 2 (13)
DATA angle,aigu,obtus,diagonale,arc,diamètre,rayon,aire,isocèle,parallèle
DATA circonférence,périmètre,trapèze
'niveau 3 (13)
DATA ellipse,pentagone,sphère,coordonnée,cylindre,hexagone,équilatéral,symétrie,pyramide
DATA parallélogramme,périmètre,perpendiculaire,octogone
DATA ""

i = 0
DO
i = i + 1
READ motorth$(i)
LOOP WHILE motorth$(i) <> ""
'39
RETURN

enregistre:
COLOR , noir
IF eleve = 0 THEN RETURN
CALL centre(23, blanc, "Enregistrement de la note")
re$ = LTRIM$(STR$(re)): IF LEN(re$) = 1 THEN re$ = " " + re$
pointeur = ni + mat
OPEN "fichier.dat" FOR RANDOM AS #1 LEN = LEN(VarEnreg)
GET #1, eleve, VarEnreg

nbexo$ = VarEnreg.nbexo

nombre$ = LTRIM$(STR$(VAL(MID$(nbexo$, 13, 3)) + 1))
IF LEN(nombre$) = 1 THEN
nombre$ = "00" + nombre$
ELSEIF LEN(nombre$) = 2 THEN
nombre$ = "0" + nombre$
END IF

'=== geo est en 5° -> 12
IF VAL(nombre$) < 1000 THEN
VarEnreg.nbexo = MID$(nbexo$, 1, 12) + nombre$ + MID$(nbexo$, 16)
END IF

notes$ = MID$(VarEnreg.notes, 1601, 400)
IF pointeur = 1 THEN
notes$ = re$ + MID$(notes$, 2 * pointeur + 1)
ELSE
notes$ = MID$(notes$, 1, (pointeur - 1) * 2) + re$ + MID$(notes$, 2 * pointeur + 1)
END IF

VarEnreg.notes = MID$(VarEnreg.notes, 1, 1600) + notes$ + MID$(VarEnreg.notes, 2001)
PUT #1, eleve, VarEnreg
CLOSE #1
CALL attendre(.5)
LOCATE 23: PRINT SPACE$(80)
re = 0
RETURN

erreur:
programme$ = "exo_ge"
SCREEN 0
COLOR , bleu: CLS
BEEP
CALL cadre(8, 5, 70, 9, rouge)
COLOR , rouge
CALL centre(10, blanc, "ATTENTION")

IF ERR = 5 THEN
CALL centre(12, blancbrill, "Votre ordinateur ne possède pas de carte graphique EGA ou VGA.")
CALL centre(14, blancbrill, "Les activités de GEOMETRIE et de MESURES ne sont pas accessibles.")
COLOR , noir
CALL getinvimouse(w)
RUN
END IF


SELECT CASE ERR
CASE 71
CALL centre(12, blancbrill, "Disque non prêt")

CASE 70
CALL centre(12, blancbrill, "Disquette protégée")

CASE 53, 57, 72
CALL centre(12, blancbrill, "Problème sur le disque")

CASE 61
CALL centre(12, blancbrill, "Disque plein")

CASE 25, 26, 68
CALL centre(12, blancbrill, "Imprimante non prête")

CASE 27
CALL centre(12, blancbrill, "Imprimante sans papier")

CASE ELSE
CALL centre(12, blancbrill, "Erreur système n°" + LTRIM$(STR$(ERR)))
CALL centre(14, blancbrill, "Essayez de relancez le programme.")
CLOSE
w$ = INPUT$(1)
COLOR , noir: CLS
END

END SELECT

CALL centre(14, blancbrill, "Corrigez puis tapez " + rt$ + " [Echap] = Fin")
CALL getinvimouse(r)
IF r = 27 THEN COLOR , noir: CLS : END
COLOR , bleu: CLS : RUN programme$
RESUME


DEFINT A-Z
SUB attendre (tx!)
DEF SEG = 0
POKE 1050, PEEK(1052)
DEF SEG
t! = tx! * 2
debut! = TIMER
DO
IF INKEY$ <> "" THEN EXIT DO
fin! = TIMER
LOOP WHILE fin! - debut! < t!

END SUB

DEFINT A-Z
SUB bilan (ma$(), niveaux(), VarEnreg AS TypeEnreg)
ma = 21
DIM t$(100), moy$(ma), bi$(ma)
FOR i = 1 TO ma
bi$(i) = ma$(i)
IF LEN(bi$(i)) > 20 THEN bi$(i) = LEFT$(bi$(i), 19) + "."
NEXT

ll$ = STRING$(30, ".")
pt$ = MID$(ll$, 1, 15)
ni$ = "Niveau " + CHR$(26) + " 1 2 3 4"

COLOR , noir: CLS

'lecture des notes
OPEN "fichier.dat" FOR RANDOM AS #1 LEN = LEN(VarEnreg)
GET #1, eleve, VarEnreg
nom$ = RTRIM$(VarEnreg.nom)
pre$ = RTRIM$(VarEnreg.prenom)
'géométrie en 5°
nbexo$ = LTRIM$(MID$(VarEnreg.nbexo, 13, 3))

IF VAL(nbexo$) = 0 THEN CLOSE : EXIT SUB

resultat$ = MID$(VarEnreg.notes, 1601, 400)
j = 1
FOR i = 1 TO 200 STEP 2 '===
t$(j) = MID$(resultat$, i, 2)
j = j + 1
NEXT
CLOSE
CALL calmoy(t$(), moy$(), niveaux())

CALL titre("bilan")

'moy générale
tt = 0: nt = 0
FOR j = 1 TO ma
IF moy$(j) <> "" THEN tt = tt + VAL(moy$(j)): nt = nt + 1
NEXT j
IF nt = 0 THEN moygen$ = " " ELSE moygen$ = LTRIM$(STR$(INT((tt / nt) * 10) / 10))

z$ = pre$ + " " + nom$ + " a fait" + STR$(VAL(nbexo$)) + " exercice"
IF VAL(nbexo$) > 1 THEN z$ = z$ + "s"
z$ = z$ + " de géométrie"
COLOR , marron
CALL centre(4, blancbrill, " " + z$ + " ")
COLOR , bleu

LOCATE 6, 16: COLOR vertclair: PRINT ni$: COLOR jaune: LOCATE 6, 36: PRINT "Moy"
COLOR vertclair: LOCATE 6, 57: PRINT ni$: COLOR jaune: LOCATE 6, 77: PRINT "Moy"

COLOR , rouge

v = 7: h = 1: debut = 8: fin = 18: GOSUB cadre
v = 7: h = 42: debut = 8: fin = 17: GOSUB cadre
LOCATE 8
FOR i = 1 TO 11
LOCATE , 2: PRINT bi$(i); " "; LEFT$(ll$, 20 - LEN(bi$(i)))
NEXT
LOCATE 8
FOR i = 12 TO ma
LOCATE , 43: PRINT bi$(i); " "; LEFT$(ll$, 20 - LEN(bi$(i)))
NEXT

'affichage des moyennes
LOCATE 8
FOR i = 1 TO 11
LOCATE , 36
IF moy$(i) = "" THEN
PRINT
ELSEIF VAL(moy$(i)) = 9 OR VAL(moy$(i)) = 10 THEN
COLOR blancbrill
PRINT moy$(i);
COLOR vertclair
LOCATE , 38
PRINT "A"
ELSEIF VAL(moy$(i)) = 7 OR VAL(moy$(i)) = 8 THEN
COLOR blancbrill
PRINT moy$(i);
COLOR vert
LOCATE , 38
PRINT "B"
ELSEIF VAL(moy$(i)) = 6 OR VAL(moy$(i)) = 5 THEN
COLOR blancbrill
PRINT moy$(i);
LOCATE , 38
COLOR jaune
PRINT "C"
ELSE
COLOR blancbrill
PRINT moy$(i);
COLOR rougeclair
LOCATE , 38
PRINT "D"
END IF
NEXT
LOCATE 8
FOR i = 12 TO ma
LOCATE , 77
IF moy$(i) = "" THEN
PRINT
ELSEIF VAL(moy$(i)) = 9 OR VAL(moy$(i)) = 10 THEN
COLOR blancbrill
PRINT moy$(i);
COLOR vertclair
LOCATE , 79
PRINT "A"
ELSEIF VAL(moy$(i)) = 7 OR VAL(moy$(i)) = 8 THEN
COLOR blancbrill
PRINT moy$(i);
COLOR vert
LOCATE , 79
PRINT "B"
ELSEIF VAL(moy$(i)) = 5 OR VAL(moy$(i)) = 6 THEN
COLOR blancbrill
PRINT moy$(i);
LOCATE , 79
COLOR jaune
PRINT "C"
ELSE
COLOR blancbrill
PRINT moy$(i);
COLOR rougeclair
LOCATE , 79
PRINT "D"
END IF
NEXT
COLOR blanc

'++++++++++++++
v = 8
debut = 1
FOR Valeur = 1 TO 11
fin = debut + (niveaux(Valeur) - 1)
h = 24: GOSUB place
debut = fin + 1: v = v + 1
NEXT

v = 8
FOR Valeur = 12 TO ma
fin = debut + (niveaux(Valeur) - 1)
h = 65: GOSUB place
debut = fin + 1: v = v + 1
NEXT
'++++++++++
COLOR , bleu
IF VAL(moygen$) <> 0 THEN
COLOR cyanclair: LOCATE 19, 43
CALL convertir(moygen$)
PRINT "Moyenne générale : "; moygen$; " sur 10"
END IF
CALL entree

EXIT SUB

place:
LOCATE v
FOR i = debut TO fin
LOCATE , h
IF VAL(t$(i)) < 10 THEN PRINT " ";
IF t$(i) <> " " THEN PRINT LTRIM$(t$(i)); ELSE PRINT "-";
h = h + 3
NEXT
RETURN

cadre:
COLOR blancbrill
LOCATE v, h: PRINT "┌─────────────────────┬──┬──┬──┬──┬───┐"
FOR i = debut TO fin
LOCATE , h: PRINT "│ │ │ │ │ │ │"
NEXT i
LOCATE , h: PRINT "└─────────────────────┴──┴──┴──┴──┴───┘"
RETURN


END SUB

DEFINT A-Z
SUB cadre (v, h, l, nli, c)
'c est l'intérieur
'le fond écran est bleu

v2 = v

'cadre
COLOR c, bleu

LOCATE v2, h
PRINT STRING$(l + 2, 220)
FOR i = 1 TO nli - 1
v2 = v2 + 1: LOCATE v2, h
PRINT STRING$(l + 2, 219)
NEXT

COLOR , bleu
LOCATE v2 + 1, h: PRINT CHR$(223)

COLOR , 0
LOCATE v + 1
FOR i = 1 TO nli
LOCATE , h + l + 2
PRINT " "
NEXT
LOCATE v2 + 1, h + 1
PRINT STRING$(l + 1, 223)
COLOR blancbrill
END SUB

DEFINT A-Z
SUB cadre3 (v, h, nb, coul)
'inversion de v et h !
LINE (((h - 1) * 8) - 5, ((v - 1) * 14) - 2)-(((h - 1 + nb) * 8) + 5, (v * 14) + 2), coul, B
END SUB

DEFINT A-Z
SUB calmoy (t$(), moy$(), niveaux())
'5/5/96

debut = 1
FOR Valeur = 1 TO 21 '===
fin = debut + (niveaux(Valeur) - 1)
GOSUB calcul
debut = fin + 1
NEXT

EXIT SUB

calcul:
tt = 0: nt = 0
FOR j = debut TO fin
IF t$(j) <> " " THEN tt = tt + VAL(t$(j)): nt = nt + 1
NEXT j
IF nt = 0 THEN moy$(Valeur) = "" ELSE moy$(Valeur) = LTRIM$(STR$(INT(INT(tt / nt) * 10) / 10))
RETURN

END SUB

DEFINT A-Z
SUB centre (v, coul, ph$)
COLOR coul
LOCATE v, INT(41 - (LEN(ph$) / 2))
PRINT ph$
COLOR blancbrill
END SUB

DEFINT A-Z
SUB chiffres ()
LOCATE 23, 1, 0
FOR i = 1 TO 80
xx$ = xx$ + CHR$(SCREEN(23, i))
NEXT
LOCATE 23, 1: PRINT SPACE$(80)
CALL centre(23, rougeclair, "Des chiffres !")
CALL attendre(1)
COLOR blanc: LOCATE 23, 1: PRINT xx$
END SUB

DEFINT A-Z
SUB claviernumerique (z$)
CALL titre(titr$)
CALL cadre(4, 5, 70, 15, marron)
COLOR , marron
w$ = "Avec les touches du clavier numérique, tu vas devoir"
IF eleve <> 0 THEN
CALL centre(6, blancbrill, pre$ + ","): w$ = LCASE$(w$)
CALL centre(8, blancbrill, w$)
ELSE
CALL centre(7, blancbrill, w$)
END IF
CALL centre(9, blancbrill, z$)
LOCATE 11: h = 35
LOCATE , h: PRINT "7 8 9"
LOCATE , h: PRINT " \ │ /"
LOCATE , h: PRINT "4───┼───6"
LOCATE , h: PRINT " / │ \"
LOCATE , h: PRINT "1 2 3"
CALL centre(17, blancbrill, "Tu peux corriger tes erreurs avec la touche " + CHR$(27) + "- ou la touche suppr.")

CALL entree
z$ = "": w$ = ""
END SUB

DEFINT A-Z
SUB consigne (nl, w$, z$, xx$)
CALL titre(titr$)
IF nl = 1 THEN z$ = "": xx$ = ""
IF nl = 2 THEN xx$ = ""
l = LEN(w$)
IF LEN(z$) > l THEN l = LEN(z$)
IF LEN(xx$) > l THEN l = LEN(xx$)

l = l + 6
h = INT(40 - l / 2)

IF eleve <> 0 THEN nl = nl + 1

IF nl = 1 OR nl = 2 THEN
v = 8
ELSEIF nl = 3 THEN
v = 7
ELSEIF nl = 4 THEN
v = 6
END IF

CALL cadre(v, h, l, 4 + (nl * 2), marron)
COLOR , marron
IF eleve <> 0 THEN
CALL centre(v + 3, blancbrill, pre$ + ","): w$ = LCASE$(w$)
CALL centre(v + 5, blancbrill, w$)
CALL centre(v + 7, blancbrill, z$)
CALL centre(v + 9, blancbrill, xx$)
ELSE
CALL centre(v + 3, blancbrill, w$)
CALL centre(v + 5, blancbrill, z$)
CALL centre(v + 7, blancbrill, xx$)
END IF
CALL entree
w$ = "": z$ = "": xx$ = ""


END SUB

DEFINT A-Z
SUB convertir (z$)
'convertir les . en ,
s = INSTR(1, z$, ".")
IF s <> 0 THEN z$ = MID$(z$, 1, s - 1) + "," + MID$(z$, s + 1)
END SUB

DEFINT A-Z
SUB entree ()
COLOR 7, 0
LOCATE 23, , 0: PRINT SPACE$(37); CHR$(17) + CHR$(196) + CHR$(217) + SPACE$(40)
DEF SEG = 0
POKE 1050, PEEK(1052)
DEF SEG
r$ = ""
DO
r$ = INKEY$
' Obtient l'emplacement de la souris et l'état des boutons.
MousePoll v_mouse, h_mouse, lButton, rButton
IF lButton THEN
r$ = CHR$(13)
CALL attendre(.5)
END IF
LOOP WHILE r$ = ""

IF LEN(r$) < 2 THEN rr = ASC(r$) ELSE rr = ASC(RIGHT$(r$, 1))

'IF rr = 27 THEN CALL quitter
END SUB

DEFINT A-Z
SUB erreur (tx!)
LOCATE 23: PRINT SPACE$(60)
CALL centre(23, rougeclair, "Erreur"): CALL attendre(tx!)
END SUB

DEFINT A-Z
SUB erreur3 (tx!)
CALL centre(23, noir, SPACE$(10))
CALL centre(23, rougeclair, "Erreur"): CALL attendre(tx!)
CALL centre(23, blancbrill, " ")

END SUB

DEFINT A-Z
SUB exact (tx!)
LOCATE 23: PRINT SPACE$(70)
CALL centre(23, jaune, "Exact"): CALL attendre(tx!)
END SUB

DEFINT A-Z
SUB exact3 (tx!)
CALL centre(23, noir, SPACE$(10))
CALL centre(23, jaune, "Exact"): CALL attendre(tx!)
CALL centre(23, blancbrill, " ")

END SUB

DEFINT A-Z
SUB fleches (v, h, w$(), np, r, coul, drap, v2, h2)
'PRINT v2, h2
'v2 et h2 sont la ligne colonne des fleches
DIM p$(np)

LOCATE , , 0
FOR i = 1 TO np: p$(i) = w$(i): NEXT
l2 = 0
FOR i = 1 TO np
l1 = LEN(p$(i)): IF l2 < l1 THEN l2 = l1
NEXT
FOR i = 1 TO np
p$(i) = p$(i) + SPACE$(l2 - LEN(p$(i)))
NEXT

IF h2 > 0 THEN
COLOR blanc, noir
LOCATE v2, h2: PRINT gg$
END IF

'souris
v_mini = v: v_maxi = v_mini + np - 1
h_mini = h - 1: h_maxi = LEN(p$(1)) + h_mini + 1
'LOCATE 22, 1: PRINT v_mini, v_maxi, h_mini, h_maxi '===
'cadre
IF drap = 1 THEN
CALL cadre(v - 1, h - 3, l2 + 4, np + 1, coul)
END IF
COLOR blancbrill, coul

LOCATE v
FOR i = 1 TO np
LOCATE , h - 1: PRINT " "; p$(i); " "
NEXT
vt = v - 1
LOCATE v, h - 1
IF couleur = 1 THEN COLOR coul, blanc ELSE COLOR noir, blanc
PRINT " "; p$(1); " "
COLOR blancbrill, coul
DO
DEF SEG = 0
POKE &H417, (PEEK(&H417) AND &H9F)'non numérique
POKE 1050, PEEK(1052)
DEF SEG
souris = 0
DO
r$ = INKEY$
' Obtient l'emplacement de la souris et l'état des boutons.
MousePoll v_mouse, h_mouse, lButton, rButton
'LOCATE 21, 1: PRINT "Position de la souris : "; v_mouse; ", "; h_mouse '===
IF lButton THEN
IF v_mouse >= v_mini AND v_mouse <= v_maxi THEN
IF h_mouse >= h_mini AND h_mouse <= h_maxi THEN
LOCATE v_mini
FOR i = 1 TO np
LOCATE , h_mini: PRINT " "; p$(i); " "
NEXT
calcul = v_mouse - v_mini + 1
LOCATE v_mouse, h_mini
COLOR coul, blancbrill
PRINT " "; p$(calcul); " "
CALL attendre(.3)
r = calcul
EXIT SUB
ELSE
BEEP
END IF
ELSEIF v_mouse = v2 AND h_mouse = h2 THEN
rr = 72 'fleche haut
souris = 1
CALL attendre(.2)
EXIT DO
ELSEIF v_mouse = v2 AND h_mouse = h2 + 2 THEN
rr = 80 'fleche bas
souris = 1
CALL attendre(.2)
EXIT DO
ELSEIF v_mouse = v2 AND (h_mouse >= h2 + 9 AND h_mouse <= h2 + 11) THEN
rr = 13
souris = 1
CALL attendre(.3)
EXIT DO
ELSE
BEEP
END IF
END IF

LOOP WHILE r$ = ""

IF souris = 0 THEN
IF LEN(r$) < 2 THEN
rr = ASC(r$)
ELSE
rr = ASC(RIGHT$(r$, 1))
END IF
END IF

IF rr = 27 THEN
CALL quitter
END IF


LOCATE v, h - 1: PRINT " "; p$(v - vt); " "
IF rr = 72 THEN v = v - 1: IF v = vt THEN v = vt + np
IF rr = 80 THEN v = v + 1: IF v = vt + np + 1 THEN v = vt + 1
LOCATE v, h - 1
IF couleur = 1 THEN COLOR coul, blanc ELSE COLOR noir, blanc
PRINT " "; p$(v - vt); " "
COLOR blancbrill, coul
LOOP WHILE rr <> 13
r = v - vt
COLOR blancbrill

END SUB

DEFINT A-Z
SUB fleches2 (v%, h%, ll%, nm%, h2%, w$(), r, coul)
DIM p$(nm%)
CONST gauche = 75, droite = 77, bas = 80, haut = 72

'on met des espaces à la fin
FOR i = 1 TO nm
p$(i) = w$(i)
NEXT
l2 = 0
FOR i = 1 TO nm
l1 = LEN(p$(i)): IF l2 < l1 THEN l2 = l1
NEXT
FOR i = 1 TO nm
p$(i) = p$(i) + SPACE$(l2 - LEN(p$(i)))
NEXT
'+++
n! = nm / 2
paire = 0: IF n! = INT(nm / 2) THEN paire = 1
vv = v: hh = h: r = 1
GOSUB affiche

'fleches
IF couleur = 1 THEN COLOR coul, blanc ELSE COLOR noir, blanc
LOCATE v, h - 1
PRINT " "; p$(1); " "
COLOR blancbrill, coul

DO
DEF SEG = 0
POKE &H417, (PEEK(&H417) AND &H9F)'non numérique
POKE &H417, (PEEK(&H417) AND &HBF) 'minus
POKE 1050, PEEK(1052)
DEF SEG

souris = 0
DO
r$ = INKEY$
' Obtient l'emplacement de la souris et l'état des boutons.
MousePoll v_mouse, h_mouse, lButton, rButton
'LOCATE 22, 1: PRINT v_mouse, h_mouse'===
IF lButton THEN
IF v_mouse >= vv AND v_mouse <= vv + ll - 1 THEN
FOR nombre = 1 TO nm
IF v_mouse = vv + nombre - 1 THEN
IF h_mouse >= h AND h_mouse <= h + l2 THEN
GOSUB affiche
LOCATE v_mouse, h - 1
IF couleur = 1 THEN COLOR coul, blanc ELSE COLOR noir, blanc
PRINT " "; p$(nombre); " "
COLOR blancbrill, coul
CALL attendre(.3)
r = nombre
EXIT SUB

ELSEIF h_mouse >= h2 AND h_mouse <= h2 + l2 THEN
GOSUB affiche
LOCATE v_mouse, h2 - 1
IF couleur = 1 THEN COLOR coul, blanc ELSE COLOR noir, blanc
PRINT " "; p$(nombre + ll); " "
COLOR blancbrill, coul
CALL attendre(.3)
r = nombre + ll
EXIT SUB
END IF
END IF
NEXT

ELSEIF v_mouse = 23 THEN
IF h_mouse = 33 THEN
'fleche haut
rr = haut
CALL attendre(.3)
souris = 1
EXIT DO
ELSEIF h_mouse = 35 THEN
'fleche bas
rr = bas
CALL attendre(.3)
souris = 1
EXIT DO
ELSEIF h_mouse = 37 THEN
'fleche gauche
rr = gauche
CALL attendre(.3)
souris = 1
EXIT DO
ELSEIF h_mouse = 39 THEN
'fleche droite
rr = droite
CALL attendre(.3)
souris = 1
EXIT DO
ELSEIF h_mouse >= 46 AND h_mouse <= 48 THEN
'entree
rr = 13
CALL attendre(.3)
souris = 1
EXIT DO

END IF
ELSE
BEEP
END IF
END IF

LOOP WHILE r$ = ""

IF souris = 0 THEN
IF LEN(r$) < 2 THEN rr = ASC(r$) ELSE rr = ASC(RIGHT$(r$, 1))
IF rr = 27 THEN r = 0: EXIT SUB
END IF

LOCATE v, hh - 1
PRINT " "; p$(r); " "

GOSUB fldirect
LOCATE v, hh - 1
IF couleur = 1 THEN COLOR coul, blanc ELSE COLOR noir, blanc
PRINT " "; p$(r); " "
COLOR blancbrill, coul
LOOP WHILE rr <> 13

EXIT SUB

fldirect:
IF rr = gauche THEN r = r - ll: IF hh = h2 THEN hh = h ELSE IF hh = h THEN hh = h2 'gauche
IF rr = droite THEN
IF paire = 0 AND r = ll + 1 THEN
r = r + ll + 1
ELSE
r = r + ll
END IF
IF hh = h2 THEN hh = h ELSE IF hh = h THEN hh = h2 'droite
END IF
IF rr = haut THEN v = v - 1: r = r - 1 'haut
IF rr = bas THEN v = v + 1: r = r + 1 'bas

IF r = ll + 1 THEN v = vv: hh = h2
IF r = ll THEN v = ll + (vv - 1): hh = h
IF r = 2 * ll THEN v = ll + (vv - 1): hh = h2
IF r > nm THEN r = 1: v = vv: hh = h
IF r >= 1 THEN RETURN
r = nm
v = (vv - 1) + nm - ll: hh = h2
RETURN

affiche:
COLOR , coul
LOCATE vv
FOR i = 1 TO ll: LOCATE , h - 1: PRINT " "; p$(i); " ": NEXT
LOCATE vv
FOR i = ll + 1 TO nm: LOCATE , h2 - 1: PRINT " "; p$(i); " ": NEXT
RETURN
END SUB

DEFINT A-Z
SUB flechesbis (v, h, p$(), np, r)
v2 = 18: h2 = 62
DEF SEG = 0
POKE &H417, (PEEK(&H417) AND &H9F)'non numérique
DEF SEG
COLOR blancbrill

LOCATE v
l = 0
FOR i = 1 TO np
LOCATE , h: PRINT p$(i)
IF LEN(p$(i)) > l THEN l = LEN(p$(i))
NEXT
vt = v - 1
LOCATE v, h - 1: COLOR jaune: PRINT "-"; p$(1); "-": COLOR blancbrill

'souris
v_mini = v: v_maxi = v_mini + np - 1
h_mini = h - 1: h_maxi = l + h_mini + 1

DO
MouseBorder 46, 435, 260, 620
MouseShow
souris = 0
DEF SEG = 0
POKE 1050, PEEK(1052)
DEF SEG

DO
r$ = INKEY$
' Obtient l'emplacement de la souris et l'état des boutons.
MousePoll v_mouse, h_mouse, lButton, rButton
'LOCATE 21, 1: PRINT v_mouse, h_mouse'===
'matrice 14 x 8 = transforme en coord écran
v_mouse = INT(v_mouse / 14) + 1
h_mouse = INT(h_mouse / 8) + 1
IF lButton THEN
IF v_mouse >= v_mini AND v_mouse <= v_maxi THEN
IF h_mouse >= h_mini AND h_mouse <= h_maxi THEN
MouseHide
LOCATE v_mini
FOR i = 1 TO np
LOCATE , h_mini: PRINT " "; p$(i); " "
NEXT
calcul = v_mouse - v_mini + 1
LOCATE v_mouse, h_mini
COLOR jaune
PRINT "-"; p$(calcul); "-"
CALL attendre(.3)
r = calcul
EXIT SUB
ELSE
BEEP
END IF
ELSEIF v_mouse = v2 AND h_mouse = h2 THEN
rr = 72 'fleche haut
souris = 1
CALL attendre(.2)
EXIT DO
ELSEIF v_mouse = v2 AND h_mouse = h2 + 2 THEN
rr = 80 'fleche bas
souris = 1
CALL attendre(.2)
EXIT DO
ELSEIF v_mouse = v2 AND (h_mouse >= h2 + 9 AND h_mouse <= h2 + 11) THEN
rr = 13
souris = 1
CALL attendre(.3)
EXIT DO
ELSE
BEEP
END IF
END IF

LOOP WHILE r$ = ""

MouseHide

IF souris = 0 THEN
IF LEN(r$) < 2 THEN rr = ASC(r$) ELSE rr = ASC(RIGHT$(r$, 1))
END IF

IF rr = 27 THEN r = 0: EXIT SUB
LOCATE v, h - 1: PRINT " "; p$(v - vt); " "
IF rr = 72 THEN v = v - 1: IF v = vt THEN v = vt + np
IF rr = 80 THEN v = v + 1: IF v = vt + np + 1 THEN v = vt + 1
LOCATE v, h - 1: COLOR jaune: PRINT "-"; p$(v - vt); "-": COLOR blancbrill
LOOP WHILE rr <> 13
r = v - vt
COLOR blancbrill

END SUB

DEFINT A-Z
SUB flechesmenu (w$(), r, coul)
nm = 21 '===
DIM p$(nm)
CONST gauche = 75, droite = 77, bas = 80, haut = 72
h1 = 6: h2 = 32: h3 = 58

'on met des espaces à la fin
FOR i = 1 TO nm
p$(i) = w$(i)
NEXT
l2 = 0
FOR i = 1 TO nm
l1 = LEN(p$(i)): IF l2 < l1 THEN l2 = l1
NEXT
FOR i = 1 TO nm
p$(i) = p$(i) + SPACE$(l2 - LEN(p$(i)))
NEXT
'+++

h = h1: v = 7
r = 1

DO

IF couleur = 1 THEN COLOR coul, blanc ELSE COLOR noir, blanc
LOCATE v, h - 1
PRINT " "; p$(r); " "
COLOR blancbrill, coul

hh = h: vv = v

'fleches
DEF SEG = 0
POKE &H417, (PEEK(&H417) AND &H9F)'non numérique
POKE &H417, (PEEK(&H417) AND &HBF) 'minus
POKE 1050, PEEK(1052)
DEF SEG

souris = 0
DO
r$ = INKEY$

' Obtient l'emplacement de la souris et l'état des boutons.
MousePoll v_mouse, h_mouse, lButton, rButton
' LOCATE 21, 1: PRINT "Position de la souris : "; v_mouse; ", "; h_mouse '===
IF lButton THEN
'ligne fleches et entree
IF v_mouse = 22 THEN
IF h_mouse = 33 THEN
'fleche haut
rr = haut
CALL attendre(.3)
souris = 1
EXIT DO
ELSEIF h_mouse = 35 THEN
'fleche bas
rr = bas
CALL attendre(.3)
souris = 1
EXIT DO
ELSEIF h_mouse = 37 THEN
'fleche gauche
rr = gauche
CALL attendre(.3)
souris = 1
EXIT DO
ELSEIF h_mouse = 39 THEN
'fleche droite
rr = droite
CALL attendre(.3)
souris = 1
EXIT DO
ELSEIF h_mouse >= 46 AND h_mouse <= 48 THEN
'entree
rr = 13
CALL attendre(.3)
souris = 1
EXIT DO
ELSEIF h_mouse >= 3 AND h_mouse <= 15 THEN
'ligne echap et *
rr = 27
CALL attendre(.3)
souris = 1
EXIT DO
ELSEIF h_mouse >= 68 AND h_mouse <= 78 THEN
rr = 42
CALL attendre(.3)
souris = 1
EXIT DO
ELSE
BEEP
END IF
END IF

'lignes noms des activités
IF v_mouse = 7 THEN
IF h_mouse >= 6 AND h_mouse <= 24 THEN
GOSUB afficheliste
r = 1
LOCATE v_mouse, 5
IF couleur = 1 THEN COLOR coul, blanc ELSE COLOR noir, blanc
PRINT " "; p$(r); " "
CALL attendre(.5)
EXIT SUB
ELSEIF h_mouse >= 32 AND h_mouse <= 50 THEN
GOSUB afficheliste
r = 8
LOCATE v_mouse, 31
IF couleur = 1 THEN COLOR coul, blanc ELSE COLOR noir, blanc
PRINT " "; p$(r); " "
CALL attendre(.5)
EXIT SUB
ELSEIF h_mouse >= 57 AND h_mouse <= 76 THEN
GOSUB afficheliste
r = 15
LOCATE v_mouse, 57
IF couleur = 1 THEN COLOR coul, blanc ELSE COLOR noir, blanc
PRINT " "; p$(r); " "
CALL attendre(.5)
EXIT SUB

ELSE
BEEP
END IF
ELSEIF v_mouse = 9 THEN
IF h_mouse >= 6 AND h_mouse <= 24 THEN
GOSUB afficheliste
r = 2
LOCATE v_mouse, 5
IF couleur = 1 THEN COLOR coul, blanc ELSE COLOR noir, blanc
PRINT " "; p$(r); " "
CALL attendre(.5)
EXIT SUB
ELSEIF h_mouse >= 32 AND h_mouse <= 50 THEN
GOSUB afficheliste
r = 9
LOCATE v_mouse, 31
IF couleur = 1 THEN COLOR coul, blanc ELSE COLOR noir, blanc
PRINT " "; p$(r); " "
CALL attendre(.5)
EXIT SUB
ELSEIF h_mouse >= 57 AND h_mouse <= 76 THEN
GOSUB afficheliste
r = 16
LOCATE v_mouse, 57
IF couleur = 1 THEN COLOR coul, blanc ELSE COLOR noir, blanc
PRINT " "; p$(r); " "
CALL attendre(.5)
EXIT SUB
ELSE
BEEP
END IF
ELSEIF v_mouse = 11 THEN
IF h_mouse >= 6 AND h_mouse <= 24 THEN
GOSUB afficheliste
r = 3
LOCATE v_mouse, 5
IF couleur = 1 THEN COLOR coul, blanc ELSE COLOR noir, blanc
PRINT " "; p$(r); " "
CALL attendre(.5)
EXIT SUB

ELSEIF h_mouse >= 32 AND h_mouse <= 50 THEN
GOSUB afficheliste
r = 10
LOCATE v_mouse, 31
IF couleur = 1 THEN COLOR coul, blanc ELSE COLOR noir, blanc
PRINT " "; p$(r); " "
CALL attendre(.5)
EXIT SUB
ELSEIF h_mouse >= 57 AND h_mouse <= 76 THEN
GOSUB afficheliste
r = 17
LOCATE v_mouse, 57
IF couleur = 1 THEN COLOR coul, blanc ELSE COLOR noir, blanc
PRINT " "; p$(r); " "
CALL attendre(.5)
EXIT SUB

ELSE
BEEP
END IF
ELSEIF v_mouse = 13 THEN
IF h_mouse >= 6 AND h_mouse <= 24 THEN
GOSUB afficheliste
r = 4
LOCATE v_mouse, 5
IF couleur = 1 THEN COLOR coul, blanc ELSE COLOR noir, blanc
PRINT " "; p$(r); " "
CALL attendre(.5)
EXIT SUB

ELSEIF h_mouse >= 32 AND h_mouse <= 50 THEN
GOSUB afficheliste
r = 11
LOCATE v_mouse, 31
IF couleur = 1 THEN COLOR coul, blanc ELSE COLOR noir, blanc
PRINT " "; p$(r); " "
CALL attendre(.5)
EXIT SUB
ELSEIF h_mouse >= 57 AND h_mouse <= 76 THEN
GOSUB afficheliste
r = 18
LOCATE v_mouse, 57
IF couleur = 1 THEN COLOR coul, blanc ELSE COLOR noir, blanc
PRINT " "; p$(r); " "
CALL attendre(.5)
EXIT SUB

ELSE
BEEP
END IF
ELSEIF v_mouse = 15 THEN
IF h_mouse >= 6 AND h_mouse <= 24 THEN
GOSUB afficheliste
r = 5
LOCATE v_mouse, 5
IF couleur = 1 THEN COLOR coul, blanc ELSE COLOR noir, blanc
PRINT " "; p$(r); " "
CALL attendre(.5)
EXIT SUB

ELSEIF h_mouse >= 32 AND h_mouse <= 50 THEN
GOSUB afficheliste
r = 12
LOCATE v_mouse, 31
IF couleur = 1 THEN COLOR coul, blanc ELSE COLOR noir, blanc
PRINT " "; p$(r); " "
CALL attendre(.5)
EXIT SUB
ELSEIF h_mouse >= 57 AND h_mouse <= 76 THEN
GOSUB afficheliste
r = 19
LOCATE v_mouse, 57
IF couleur = 1 THEN COLOR coul, blanc ELSE COLOR noir, blanc
PRINT " "; p$(r); " "
CALL attendre(.5)
EXIT SUB

ELSE
BEEP
END IF
ELSEIF v_mouse = 17 THEN
IF h_mouse >= 6 AND h_mouse <= 24 THEN
GOSUB afficheliste
r = 6
LOCATE v_mouse, 5
IF couleur = 1 THEN COLOR coul, blanc ELSE COLOR noir, blanc
PRINT " "; p$(r); " "
CALL attendre(.5)
EXIT SUB

ELSEIF h_mouse >= 32 AND h_mouse <= 50 THEN
GOSUB afficheliste
r = 13
LOCATE v_mouse, 31
IF couleur = 1 THEN COLOR coul, blanc ELSE COLOR noir, blanc
PRINT " "; p$(r); " "
CALL attendre(.5)
EXIT SUB
ELSEIF h_mouse >= 57 AND h_mouse <= 76 THEN
GOSUB afficheliste
r = 20
LOCATE v_mouse, 57
IF couleur = 1 THEN COLOR coul, blanc ELSE COLOR noir, blanc
PRINT " "; p$(r); " "
CALL attendre(.5)
EXIT SUB

ELSE
BEEP
END IF

ELSEIF v_mouse = 19 THEN
IF h_mouse >= 6 AND h_mouse <= 24 THEN
GOSUB afficheliste
r = 7
LOCATE v_mouse, 5
IF couleur = 1 THEN COLOR coul, blanc ELSE COLOR noir, blanc
PRINT " "; p$(r); " "
CALL attendre(.5)
EXIT SUB

ELSEIF h_mouse >= 32 AND h_mouse <= 50 THEN
GOSUB afficheliste
r = 14
LOCATE v_mouse, 31
IF couleur = 1 THEN COLOR coul, blanc ELSE COLOR noir, blanc
PRINT " "; p$(r); " "
CALL attendre(.5)
EXIT SUB
ELSEIF h_mouse >= 57 AND h_mouse <= 76 THEN
GOSUB afficheliste
r = 21
LOCATE v_mouse, 57
IF couleur = 1 THEN COLOR coul, blanc ELSE COLOR noir, blanc
PRINT " "; p$(r); " "
CALL attendre(.5)
EXIT SUB

ELSE
BEEP

END IF

ELSE
BEEP
END IF
END IF
LOOP WHILE r$ = ""

IF souris = 0 AND LEN(r$) < 2 THEN
rr = ASC(r$)
ELSEIF souris = 0 THEN
rr = ASC(RIGHT$(r$, 1))
END IF

SELECT CASE rr

CASE gauche
h = h - 26
IF h < h1 THEN
v = v - 2: h = h3
END IF
IF v < 7 THEN
v = 19
END IF

CASE droite
h = h + 26
IF h > h3 THEN
v = v + 2: h = h1
END IF
IF v > 19 THEN
v = 7
END IF

CASE bas
v = v + 2
IF v > 19 THEN
IF h = h1 THEN
h = h2: v = 7
ELSEIF h = h2 THEN
h = h3: v = 7
ELSEIF h = h3 THEN
h = h1: v = 7
END IF
END IF

CASE haut
v = v - 2
IF v < 7 THEN
IF h = h3 THEN
h = h2: v = 19
ELSEIF h = h2 THEN
h = h1: v = 19
ELSEIF h = h1 THEN
h = h3: v = 19
END IF
END IF

CASE 13
GOSUB calculr
EXIT SUB

CASE 27
r = 0
EXIT SUB

CASE 42, 36, 56, 230, 43
IF eleve <> 0 THEN
'l'étoile
r = 42
EXIT SUB
END IF

END SELECT

COLOR blancbrill, coul
LOCATE vv, hh - 1
PRINT " "; p$(r); " "

GOSUB calculr

LOOP

EXIT SUB

calculr:
IF h = h1 THEN
r = ((v - 7) / 2) + 1
ELSEIF h = h2 THEN
r = ((v - 7) / 2) + 8
ELSEIF h = h3 THEN
r = ((v - 7) / 2) + 15
END IF
RETURN

afficheliste:
'affiche liste exo
h1 = 5: h2 = 31: h3 = 57
COLOR blancbrill
LOCATE 7
FOR i = 1 TO 7
LOCATE , h1: PRINT " "; p$(i); " ": PRINT
NEXT
LOCATE 7
FOR i = 8 TO 14
LOCATE , h2: PRINT " "; p$(i); " ": PRINT
NEXT
LOCATE 7
FOR i = 15 TO 21
LOCATE , h3: PRINT " "; p$(i); " ": PRINT
NEXT
RETURN

END SUB

DEFINT A-Z
SUB getinvi (rr%)
DEF SEG = 0
POKE 1050, PEEK(1052)
DEF SEG
DO
r$ = INKEY$
LOOP WHILE r$ = ""
IF LEN(r$) < 2 THEN rr = ASC(r$) ELSE rr = ASC(RIGHT$(r$, 1))
END SUB

DEFINT A-Z
SUB getinvimouse (rr)
DEF SEG = 0
POKE 1050, PEEK(1052)
DEF SEG
DO
r$ = INKEY$
' Obtient l'emplacement de la souris et l'état des boutons.
MousePoll v_mouse, h_mouse, lButton, rButton
IF lButton THEN
r$ = CHR$(13)
CALL attendre(.5)
END IF
LOOP WHILE r$ = ""
IF LEN(r$) < 2 THEN rr = ASC(r$) ELSE rr = ASC(RIGHT$(r$, 1))


END SUB

DEFINT A-Z
SUB inputgen (nl%, r$, deb%, fin%)
DIM re$(nl + 1)

inpdebut:
r$ = "."
DEF SEG = 0
POKE 1050, PEEK(1052)
DEF SEG
IF prog = 20 THEN 'orth
COLOR noir, blanc
END IF

ligne = CSRLIN
col = POS(0)
LOCATE ligne, col: IF fin% = 57 THEN PRINT LEFT$(SPACE$(40), nl)
LOCATE ligne, col, 1
FOR ii = 1 TO nl + 1
input0:
IF ii <= 0 THEN ii = 1
DO
re$(ii) = INKEY$
LOOP WHILE re$(ii) = ""

IF ASC(re$(ii)) = 27 THEN
LOCATE , , 0
CALL quitter
r$ = ""
EXIT FOR
END IF

IF LEN(re$(ii)) = 2 THEN z2 = ASC(RIGHT$(re$(ii), 1)): IF ii > 1 AND (z2 = 75 OR z2 = 83 OR z2 = 15) THEN PRINT CHR$(29); " "; CHR$(29); : ii = ii - 1: z2 = 0: GOTO input0 ELSE GOTO input0

IF ASC(re$(ii)) = 13 THEN EXIT FOR

IF ii > 1 AND ASC(re$(ii)) = 8 THEN PRINT CHR$(29); " "; CHR$(29); : ii = ii - 1: GOTO input0 ELSE IF ASC(re$(ii)) = 8 THEN GOTO input0

IF ASC(re$(ii)) < deb OR ASC(re$(ii)) > fin THEN IF deb = 48 THEN CALL chiffres: r$ = "": EXIT FOR ELSE CALL lettres: r$ = "": EXIT FOR

IF ii = nl + 1 THEN BEEP: GOTO input0

PRINT re$(ii);
NEXT ii
IF r$ = "" THEN LOCATE ligne, col: GOTO inpdebut
PRINT
r$ = "": FOR JJ = 1 TO ii - 1: r$ = r$ + re$(JJ): NEXT
r$ = LTRIM$(r$): r$ = RTRIM$(r$)
IF r$ = "" THEN BEEP: LOCATE ligne, col: GOTO inpdebut
LOCATE , , 0

END SUB

DEFINT A-Z
SUB lettres ()
LOCATE 23, 1, 0
FOR i = 1 TO 80
xx$ = xx$ + CHR$(SCREEN(23, i))
NEXT
LOCATE 23, 1: PRINT SPACE$(80)
CALL centre(23, rougeclair, "Des lettres !")
CALL attendre(1)
COLOR blanc: LOCATE 23, 1: PRINT xx$
END SUB

DEFINT A-Z
SUB niveau (r%, np%, titr$)
CALL titre(titr$)
DIM p$(4)
p$(1) = "1": p$(2) = "2": p$(3) = "3": p$(4) = "4"
CALL cadre(7, 25, 30, 2, vert)
COLOR , vert
CALL centre(8, blancbrill, "Niveau de difficulté")
COLOR blanc, noir
CALL centre(23, blanc, gg$)
COLOR 15, bleu
p$(1) = "1": p$(2) = "2": p$(3) = "3": p$(4) = "4"
'CALL cadre(11, 36, 7, 3 + np, rouge)

DO
CALL fleches(13, 40, p$(), np, r, rouge, 1, 23, 35)
IF r = 0 THEN
CALL quitter
END IF
LOOP WHILE r = 0
END SUB

DEFINT A-Z
SUB ouinon (r$)
h = POS(0)
v = CSRLIN

DIM regs AS RegType
regs.ax = &HF00
INTERRUPT &H10, regs, regs ' &H10 renvoie informations
' sur vidéo.
sWidth = (regs.ax AND &HFF00) \ 256 ' Octet fort de AX (AH).
sMode = regs.ax AND &HFF ' Octet faible de AX (AL).

SELECT CASE sMode ' Fait correspondre numéros
CASE 3 ' de mode vidéo MS-DOS et
sMode = 0 ' modes affichage Basic.
CASE 16
sMode = 9
MouseInit
END SELECT

LOCATE v, h
COLOR blanc: PRINT "["; : COLOR jaune: PRINT "O"; : COLOR blanc: PRINT "]ui ou ["; : COLOR jaune: PRINT "N"; : COLOR blanc: PRINT "]on ?"

MouseShow

DO
r$ = ""
DO
r$ = INKEY$
' Obtient l'emplacement de la souris et l'état des boutons.
MousePoll v_mouse, h_mouse, lButton, rButton
IF sMode = 9 THEN
'matrice 14 x 8 = transforme en coord écran
v_mouse = INT(v_mouse / 14) + 1
h_mouse = INT(h_mouse / 8) + 1
END IF
IF lButton THEN
IF v_mouse = v AND (h_mouse >= h AND h_mouse <= h + 5) THEN
r$ = "o"
CALL attendre(.3)
ELSEIF v_mouse = v AND (h_mouse >= h + 10 AND h_mouse <= h + 14) THEN
r$ = "n"
CALL attendre(.3)
ELSE
BEEP
END IF
END IF
LOOP WHILE r$ = ""

r$ = UCASE$(r$)
LOOP UNTIL r$ = "O" OR r$ = "N" OR r$ = CHR$(27) OR r$ = CHR$(13)

END SUB

DEFINT A-Z
SUB quitter ()
'25/2/96
DIM c(80), xx$(80)
x = noir: y = noir
F = 0
'on mémorise la zone quitter
LOCATE 23, 1, 0
COLOR blanc, x
FOR i = 1 TO 80
xx$(i) = CHR$(SCREEN(23, i))
c(i) = SCREEN(23, i, 1): IF c(i) > 15 THEN F = 1 'erreur à cause du fond
NEXT

LOCATE 23, 1: PRINT SPACE$(80)

LOCATE 23, 28
BEEP: PRINT "Quitter ";
CALL ouinon(r$)
IF UCASE$(r$) = "O" THEN COLOR , 0: CLS : RUN "exo_ge" '===

'on restitue la zone quitter
LOCATE 23, 1
FOR i = 1 TO 80
IF F = 0 THEN
COLOR c(i)
END IF
PRINT xx$(i);
NEXT
PRINT
COLOR 15, y
END SUB

DEFINT A-Z
SUB resultats (re%, ni%)
SCREEN 0
MouseInit
MouseShow
tit$ = titr$
titr$ = "resultats"
CALL titre(titr$)

w! = LEN(tit$) / 2
IF w! = INT(LEN(tit$) / 2) THEN n = 4 ELSE n = 2
CALL cadre(5, 38 - INT(LEN(tit$) / 2), INT(LEN(tit$)) + n, 2, blanc)
COLOR , blanc
CALL centre(6, noir, tit$)
COLOR , bleu

IF re > 8 THEN
cc = vertclair: z$ = "Acquis"
ELSEIF re > 4 AND re < 9 THEN
cc = jaune: z$ = "En cours d'acquisition"
ELSE
cc = rougeclair: z$ = "Non acquis"
END IF

IF nbniv <> 1 THEN
s$ = " au niveau" + RTRIM$(STR$(ni))
ELSE
s$ = ""
END IF

CALL centre(10, cc, z$ + s$)
CALL cadre(12, 20, 40, 2, rouge)
LOCATE 13
i2 = 0
FOR i = 1 TO re
LOCATE , 21 + i2: PRINT "████"; '219
i2 = i2 + 4
NEXT
COLOR noir, noir
FOR i = re + 1 TO 10
LOCATE , 21 + i2: PRINT " ";
i2 = i2 + 4
NEXT
PRINT
COLOR , bleu
CALL centre(16, 15, "Pourcentage de réussite :" + STR$(re * 10) + " %")
CALL centre(18, 15, "(" + LTRIM$(STR$(re)) + " sur 10)")

COLOR blancbrill
END SUB

DEFINT A-Z
SUB tableauexo (p$())

'tableau des exercices
CALL cadre(5, 2, 75, 16, rouge)
COLOR , bleu
LOCATE 22, 3: PRINT "["; : COLOR jaune: PRINT "Echap"; : COLOR blancbrill: PRINT "] = Fin"
CALL centre(22, blanc, gg2$)
IF eleve <> 0 THEN
COLOR blancbrill
LOCATE 22, 68: PRINT "["; : COLOR jaune: PRINT "*"; : COLOR blancbrill: PRINT "] = Bilan"
END IF


l3$ = SPACE$(24) + "│" + SPACE$(25) + "│" + SPACE$(23)
l4$ = STRING$(24, "─") + "┼" + STRING$(25, "─") + "┼" + STRING$(23, "─")
l5$ = STRING$(24, "─") + "┬" + STRING$(25, "─") + "┬" + STRING$(23, "─")
l6$ = STRING$(24, "─") + "┴" + STRING$(25, "─") + "┴" + STRING$(23, "─")

COLOR blanc, rouge
LOCATE 6
LOCATE , 3: PRINT l5$
'LOCATE , 3: PRINT l3$
FOR i = 1 TO 6
LOCATE , 3: PRINT l3$
LOCATE , 3: PRINT l4$
NEXT
LOCATE , 3: PRINT l3$
LOCATE , 3: PRINT l6$

'affiche liste exo
h1 = 6: h2 = 32: h3 = 58
COLOR blancbrill
LOCATE 7
FOR i = 1 TO 7
LOCATE , h1: PRINT p$(i): PRINT
NEXT
LOCATE 7
FOR i = 8 TO 14
LOCATE , h2: PRINT p$(i): PRINT
NEXT
LOCATE 7
FOR i = 15 TO 21
LOCATE , h3: PRINT p$(i): PRINT
NEXT


END SUB

DEFINT A-Z
SUB titre (titr$)
w$ = titr$
COLOR , noir, noir: CLS
FOR i = 1 TO LEN(w$)
IF MID$(w$, i, 1) = "é" OR MID$(w$, i, 1) = "è" THEN
w$ = MID$(w$, 1, i - 1) + "E" + MID$(w$, i + 1)
END IF
NEXT
FOR i = 1 TO LEN(w$)
IF MID$(w$, i, 1) = "à" THEN
w$ = MID$(w$, 1, i - 1) + "A" + MID$(w$, i + 1)
END IF
NEXT

COLOR , vert
LOCATE 2, 1: PRINT SPACE$(80)
CALL centre(2, noir, UCASE$(w$))
LOCATE 21, 1: PRINT SPACE$(80)
VIEW PRINT 3 TO 20: COLOR blancbrill, bleu: CLS 2: VIEW PRINT

END SUB

DEFINT A-Z
SUB titre2 (titr$)
COLOR , noir: CLS
w$ = titr$
FOR i = 1 TO LEN(w$)
IF MID$(w$, i, 1) = "é" OR MID$(w$, i, 1) = "è" THEN
w$ = MID$(w$, 1, i - 1) + "E" + MID$(w$, i + 1)
END IF
NEXT
LINE (0, 14)-(640, 27), vert, BF
CALL centre(2, jaune, " " + UCASE$(w$) + " ")
LINE (0, 28)-(639, 279), bleu, BF
LINE (0, 279)-(640, 292), vert, BF
COLOR blancbrill
END SUB

DEFINT A-Z
SUB titre3 (titr$)
COLOR , noir: CLS
w$ = titr$
FOR i = 1 TO LEN(w$)
IF MID$(w$, i, 1) = "é" OR MID$(w$, i, 1) = "è" THEN
w$ = MID$(w$, 1, i - 1) + "E" + MID$(w$, i + 1)
END IF
NEXT

LINE (0, 14)-(640, 27), vert, BF
CALL centre(2, jaune, " " + UCASE$(w$) + " ")

LINE (0, 28)-(639, 279), bleu, BF
LINE (430, 38)-(630, 269), noir, BF
LINE (430, 38)-(630, 269), rouge, B
LINE (0, 279)-(640, 292), vert, BF
COLOR blancbrill
END SUB
 

 

DECLARE SUB MouseBorder (row1%, col1%, row2%, col2%)
DECLARE SUB MouseHide ()
DECLARE SUB MousePoll (row%, col%, lButton%, rButton%)
DECLARE SUB MouseShow ()
DECLARE SUB getinvimouse (rr%)
DECLARE SUB claviernumerique (z$)
DECLARE SUB consigne (nl%, w$, z$, xx$)
DECLARE SUB centre (v%, coul%, ph$)
DECLARE SUB quitter ()
DECLARE SUB getinvi (rr%)
DECLARE SUB niveau (r%, np%, titr$)
DECLARE SUB titre (titr$)
DECLARE SUB attendre (tx!)
DECLARE SUB entree ()
DECLARE SUB erreur (tx!)
DECLARE SUB exact (tx!)
DECLARE SUB resultats (re%, ni%)
DECLARE SUB titre2 (titr$)
'exo 2 géométrie
'Daniel Clerc 7/4/96
'version 3.0


DEFINT A-Z
SUB agrand (re, ni, rt$, gg$, pre$, titr$, noir, bleu, vert, rouge, marron, blanc, vertclair, cyanclair, rougeclair, jaune, blancbrill, couleur, coef1!, coef2!)
DIM dessin$(10), dessin2$(10), solution$(10), x(10), y(10), z(5), fois(10)
DIM cercle(1 TO 50) AS INTEGER
titr$ = "agrandir-reduire"
CONST gauche = 75, droite = 77
CONST haut = 72, bas = 80, hautgauche = 71, hautdroite = 73, basgauche = 79, basdroite = 81

re = 0

'niveau 1
dessin$(1) = "u20 r10 u10 r10 u20 l10 u10 r30 d10 l10 d20 r10 d10 r10 d20 l30"
dessin2$(1) = "u60 r30 u30 r30 u60 l30 u30 r90 d30 l30 d60 r30 d30 r30 d60 l90"
solution$(1) = "hhhhhhdddhhhdddhhhhhhggghhhdddddddddbbbgggbbbbbbdddbbbdddbbbbbbggggggggg"
fois(1) = 3
dessin$(2) = "u60 r30 u30 r30 u30 l30 u60 r90 d30 r30 d60 r60 d90 l90"
dessin2$(2) = "u20 r10 u10 r10 u10 l10 u20 r30 d10 r10 d20 r20 d30 l30"
solution$(2) = "hhdhdhghhdddbdbbddbbbggg"
fois(2) = -3
dessin$(3) = "u30 r20 u20 l10 u20 r20 u20 r30 d30 r10 d20 l20 d40 r30"
dessin2$(3) = "u60 r40 u40 l20 u40 r40 u40 r60 d60 r20 d40 l40 d80 r60"
solution$(3) = "hhhhhhddddhhhhgghhhhddddhhhhddddddbbbbbbddbbbbggggbbbbbbbbdddddd"
fois(3) = 2
dessin$(4) = "u80 r20 d40 r20 u60 r20 d40 r40 u100 l20 u40 r60 d80 r20 d120 l60"
dessin2$(4) = "u40 r10 d20 r10 u30 r10 d20 r20 u50 l10 u20 r30 d40 r10 d60 l30"
solution$(4) = "hhhhdbbdhhhdbbddhhhhhghhdddbbbbdbbbbbbggg"
fois(4) = -2
dessin$(5) = "u30 r10 u10 l10 u10 r20 d20 r10 u10 r10 d20 l10 d10 l10 d10 r20"
dessin2$(5) = "u120 r40 u40 l40 u40 r80 d80 r40 u40 r40 d80 l40 d40 l40 d40 r80"
solution$(5) = "hhhhhhhhhhhhddddhhhhgggghhhhddddddddbbbbbbbbddddhhhhddddbbbbbbbbggggbbbbggggbbbbdddddddd"
fois(5) = 4


'niveau 2 angle 45
dessin$(6) = "m+10,-10 u10 m+10,-10 u10 m-10,-10 m+10,-10 r10 m+10,+10 m-10,+10 d10 m+10,+10 d10 m+10,+10"
dessin2$(6) = "m+30,-30 u30 m+30,-30 u30 m-30,-30 m+30,-30 r30 m+30,+30 m-30,+30 d30 m+30,+30 d30 m+30,+30"
solution$(6) = "kkkhhhkkkhhhjjjkkkdddlllmmmbbblllbbblll"
fois(6) = 3
dessin$(7) = "u30 r30 m+30,-30 l30 m+30,-30 l30 u60 r60 d30 m+30,+30 m+30,-30 d30 m-30,+30 d30 m+30,+30 u30 r30 d30"
dessin2$(7) = "u10 r10 m+10,-10 l10 m+10,-10 l10 u20 r20 d10 m+10,+10 m+10,-10 d10 m-10,+10 d10 m+10,+10 u10 r10 d10"
solution$(7) = "hdkgkghhddblkbmblhdb"
fois(7) = -3
dessin$(8) = "u20 r30 m-10,-10 m+20,-20 m-10,-10 u10 l10 m+20,-20 u10 r10 m+20,+20 d20 m-30,+30 r20 d10 r10 d10 r20 u30 r10 u20 r10 u30"
dessin2$(8) = "u40 r60 m-20,-20 m+40,-40 m-20,-20 u20 l20 m+40,-40 u20 r20 m+40,+40 d40 m-60,+60 r40 d20 r20 d20 r40 u60 r20 u40 r20 u60"
solution$(8) = "hhhhddddddjjkkkkjjhhggkkkkhhddllllbbbbmmmmmmddddbbddbbddddhhhhhhddhhhhddhhhhhh"
fois(8) = 2
dessin$(9) = "m+60,-60 m-40,-40 m+80,-80 r40 d60 l20 d40 r60 m+20,+20 d20 m+20,+20 r20 d20"
dessin2$(9) = "m+30,-30 m-20,-20 m+40,-40 r20 d30 l10 d20 r30 m+10,+10 d10 m+10,+10 r10 d10"
solution$(9) = "kkkjjkkkkddbbbgbbdddlbldb"
fois(9) = -2
dessin$(10) = "m+10,-10 u20 m+10,+10 u20 m+10,+10 u20 r10 d20 m+10,-10 d20 m+10,-10 d30 l20"
dessin2$(10) = "m+40,-40 u80 m+40,+40 u80 m+40,+40 u80 r40 d80 m+40,-40 d80 m+40,-40 d120 l80"
solution$(10) = "kkkkhhhhhhhhllllhhhhhhhhllllhhhhhhhhddddbbbbbbbbkkkkbbbbbbbbkkkkbbbbbbbbbbbbgggggggg"
fois(10) = 4
DEF SEG = 0
POKE &H417, (PEEK(&H417) AND &H9F)'non numérique
DEF SEG
CALL niveau(ni, 2, titr$)

SELECT CASE ni
CASE 1
nombre = 0
CASE 2
nombre = 5
END SELECT
GOSUB agra40 'présentation

SCREEN 9
x = 635: y = 35
CIRCLE (x, y), 4, jaune, , , coef2!
GET (x - 4, y - 4)-(x + 4, y + 4), cercle

FOR jj = 1 TO 5
x = 10: y = 200: erreurs = 0
GOSUB agra6 'tirage

LOCATE 1: PRINT SPACE$(80)
IF SGN(fois(choix)) = 1 THEN
ag$ = "Agrandir": ag2$ = "Agrandissement"
ELSE
ag$ = "Réduire": ag2$ = "Reduction"
END IF

CALL titre2(ag2$)
LINE (320, 35)-(320, 275), blancbrill
DRAW "TA0 B m30,250"
DRAW "c=" + VARPTR$(jaune) + dessin$(choix)

'fenetre gauche
VIEW (20, 50)-(300, 260)
coul = rougeclair: GOSUB agra1
GOSUB agra2
'fenetre droite
VIEW (340, 50)-(630, 270)
agra13:
x = 10: y = 200
coul = vertclair: GOSUB agra1
GOSUB agra2
GOSUB agra14

IF ni = 1 THEN COLOR vertclair: LOCATE 22: PRINT "Niveau"; ni: LOCATE 22, 77: PRINT 6 - jj
CALL centre(22, jaune, ag$ + " :" + STR$(ABS(fois(choix))) + " fois")

flag = 0: reponse$ = ""

IF ni = 1 THEN
GOSUB agraniveau1
ELSE
GOSUB agraniveau2
END IF

LOCATE 22: PRINT SPACE$(80): PRINT SPACE$(80)

IF solution$(choix) = reponse$ THEN
CALL exact(.7)
IF erreurs = 0 THEN re = re + 2
ELSE
CALL erreur(.8)
erreurs = erreurs + 1
DRAW "TA0 B m350,250"
DRAW "c=" + VARPTR$(rougeclair) + dessin2$(choix)
CALL centre(23, rougeclair, "Regarde")
CALL getinvimouse(r): IF r = 27 THEN CALL quitter
LOCATE 23: PRINT SPACE$(80)
VIEW (335, 45)-(635, 275)
LINE (0, 0)-(290, 220), bleu, BF
VIEW (340, 50)-(630, 270)

IF erreurs >= 2 AND couleur = 1 THEN DRAW "TA0 B m350,250 c=" + VARPTR$(rougeclair) + dessin2$(choix)

GOTO agra13
END IF
VIEW
NEXT jj

'résultats
CALL resultats(re, ni)

EXIT SUB
'++++++++++++++++++++++++


agra14:
IF ni = 1 THEN
CALL centre(23, blanc, CHR$(27) + " " + CHR$(26) + " " + CHR$(24) + " " + CHR$(25) + " = tracer <-- = corriger " + rt$ + " = valider")
ELSE
COLOR blanc
LOCATE 23, 23: PRINT "= tracer <-- = corriger " + rt$ + " = valider"
LOCATE 21, 10: PRINT "[7] [8] [9]"
LOCATE 22, 10: PRINT "[4] [6]"
LOCATE 23, 10: PRINT "[1] [2] [3]"
END IF
RETURN

agra1:
FOR j = 0 TO 280 STEP 10
FOR k = 0 TO 210 STEP 10
PSET (j, k), coul
NEXT k
NEXT j
RETURN

agra2:
PUT (x - 4, y - 4), cercle, XOR
PSET (x, y), rougeclair
RETURN

agra5:
flag = flag - 1
r$ = RIGHT$(reponse$, 1)
reponse$ = MID$(reponse$, 1, LEN(reponse$) - 1)
GOSUB agra2
IF r$ = "g" THEN
xx = x + 10: yy = y
ELSEIF r$ = "d" THEN
xx = x - 10: yy = y
ELSEIF r$ = "h" THEN
xx = x: yy = yy + 10
ELSEIF r$ = "b" THEN
xx = x: yy = yy - 10
END IF
LINE (x, y)-(xx, yy), bleu
RETURN

agra6:
'tirage
DO
f = 0
z(jj) = INT(RND * 5) + 1
FOR j = 1 TO jj - 1
IF z(jj) = z(j) THEN f = 1: EXIT FOR
NEXT
LOOP WHILE f = 1
choix = z(jj) + nombre
RETURN

agraniveau1:
DO
agra11:

MouseBorder 308, 10, 320, 630
MouseShow
souris = 0
DEF SEG = 0
POKE 1050, PEEK(1052)
DEF SEG
DO
r$ = INKEY$
' Obtient l'emplacement de la souris et l'état des boutons.
MousePoll v_mouse, h_mouse, lButton, rButton
' LOCATE 21, 1: PRINT v_mouse, h_mouse'===
IF lButton THEN
IF v_mouse >= 308 AND v_mouse <= 320 THEN
'fleches
IF h_mouse >= 100 AND h_mouse <= 112 THEN
'gauche
valtouche = gauche
CALL attendre(.2)
souris = 1
EXIT DO
ELSEIF h_mouse >= 116 AND h_mouse <= 128 THEN
'droite
valtouche = droite
CALL attendre(.2)
souris = 1
EXIT DO
ELSEIF h_mouse >= 133 AND h_mouse <= 145 THEN
'haut
valtouche = haut
CALL attendre(.2)
souris = 1
EXIT DO
ELSEIF h_mouse >= 150 AND h_mouse <= 160 THEN
'bas
valtouche = bas
CALL attendre(.2)
souris = 1
EXIT DO
ELSEIF h_mouse >= 270 AND h_mouse <= 380 THEN
'del
valtouche = 8
CALL attendre(.2)
souris = 1
EXIT DO
ELSEIF h_mouse >= 420 AND h_mouse <= 528 THEN
'return
valtouche = 13
CALL attendre(.2)
souris = 1
EXIT DO
ELSE
BEEP
END IF
ELSE
BEEP
END IF
END IF
LOOP WHILE r$ = ""

MouseHide

IF souris = 0 THEN
IF LEN(r$) < 2 THEN valtouche = ASC(r$) ELSE valtouche = ASC(RIGHT$(r$, 1))
END IF


IF (valtouche = 8 OR valtouche = 83) AND flag = 0 THEN BEEP: GOTO agra11
IF valtouche = 50 THEN valtouche = bas
IF valtouche = 52 THEN valtouche = gauche
IF valtouche = 54 THEN valtouche = droite
IF valtouche = 56 THEN valtouche = haut

SELECT CASE valtouche
CASE gauche
IF RIGHT$(reponse$, 1) = "d" THEN GOSUB agra5: GOTO agra12
xx = x - 10: yy = y
GOSUB agra2
IF xx < 0 THEN
xx = 0: BEEP
ELSE
reponse$ = reponse$ + "g"
LINE (x, y)-(xx, yy)
flag = flag + 1
END IF

CASE droite
IF RIGHT$(reponse$, 1) = "g" THEN GOSUB agra5: GOTO agra12
xx = x + 10: yy = y
GOSUB agra2
IF xx > 280 THEN
xx = 280: BEEP
ELSE
reponse$ = reponse$ + "d"
LINE (x, y)-(xx, yy)
flag = flag + 1
END IF

CASE haut
IF RIGHT$(reponse$, 1) = "b" THEN GOSUB agra5: GOTO agra12
xx = x: yy = y - 10
GOSUB agra2
IF yy < 0 THEN
yy = 0: BEEP
ELSE
reponse$ = reponse$ + "h"
LINE (x, y)-(xx, yy)
flag = flag + 1
END IF

CASE bas
IF RIGHT$(reponse$, 1) = "h" THEN GOSUB agra5: GOTO agra12
xx = x: yy = y + 10
GOSUB agra2
IF yy > 210 THEN
yy = 210: BEEP
ELSE
reponse$ = reponse$ + "b"
LINE (x, y)-(xx, yy)
flag = flag + 1
END IF

CASE 8, 83 'correction
GOSUB agra5

CASE 27
CALL quitter: GOSUB agra14: GOTO agra11
CASE 13
IF reponse$ = "" THEN GOTO agra11
EXIT DO
CASE ELSE
BEEP

END SELECT
agra12:
IF valtouche = 8 OR valtouche = 83 OR valtouche = gauche OR valtouche = droite OR valtouche = haut OR valtouche = bas THEN
PSET (x, y), rougeclair
x = xx: y = yy
GOSUB agra2
END IF

LOOP

RETURN

agraniveau2:
DO
agra31:
MouseBorder 282, 75, 320, 630
MouseShow
souris = 0
DEF SEG = 0
POKE 1050, PEEK(1052)
DEF SEG
DO
r$ = INKEY$
' Obtient l'emplacement de la souris et l'état des boutons.
MousePoll v_mouse, h_mouse, lButton, rButton
'LOCATE 21, 40: PRINT v_mouse, h_mouse'===
IF lButton THEN
IF (v_mouse >= 282 AND v_mouse <= 292) AND (h_mouse >= 73 AND h_mouse <= 93) THEN
valtouche = hautgauche
CALL attendre(.2)
souris = 1
EXIT DO
ELSEIF (v_mouse >= 282 AND v_mouse <= 292) AND (h_mouse >= 106 AND h_mouse <= 126) THEN
valtouche = haut
CALL attendre(.2)
souris = 1
EXIT DO
ELSEIF (v_mouse >= 282 AND v_mouse <= 292) AND (h_mouse >= 136 AND h_mouse <= 156) THEN
valtouche = hautdroite
CALL attendre(.2)
souris = 1
EXIT DO
ELSEIF (v_mouse >= 296 AND v_mouse <= 306) AND (h_mouse >= 73 AND h_mouse <= 93) THEN
valtouche = gauche
CALL attendre(.2)
souris = 1
EXIT DO
ELSEIF (v_mouse >= 296 AND v_mouse <= 306) AND (h_mouse >= 136 AND h_mouse <= 156) THEN
valtouche = droite
CALL attendre(.2)
souris = 1
EXIT DO
ELSEIF (v_mouse >= 310 AND v_mouse <= 320) AND (h_mouse >= 73 AND h_mouse <= 93) THEN
valtouche = basgauche
CALL attendre(.2)
souris = 1
EXIT DO
ELSEIF (v_mouse >= 310 AND v_mouse <= 320) AND (h_mouse >= 106 AND h_mouse <= 126) THEN
valtouche = bas
CALL attendre(.2)
souris = 1
EXIT DO
ELSEIF (v_mouse >= 310 AND v_mouse <= 320) AND (h_mouse >= 136 AND h_mouse <= 156) THEN
valtouche = basdroite
CALL attendre(.2)
souris = 1
EXIT DO
END IF
'ok
IF v_mouse >= 308 AND v_mouse <= 320 THEN
IF h_mouse >= 280 AND h_mouse <= 390 THEN
'del
valtouche = 8
CALL attendre(.2)
souris = 1
EXIT DO
ELSEIF h_mouse >= 440 AND h_mouse <= 540 THEN
'return
valtouche = 13
CALL attendre(.2)
souris = 1
EXIT DO
ELSE
BEEP
END IF
END IF
END IF

LOOP WHILE r$ = ""

MouseHide

IF souris = 0 THEN
IF LEN(r$) < 2 THEN valtouche = ASC(r$) ELSE valtouche = ASC(RIGHT$(r$, 1))
END IF

IF (valtouche = 8 OR valtouche = 83) AND flag = 0 THEN BEEP: GOTO agra31
IF valtouche = 49 THEN valtouche = basgauche
IF valtouche = 50 THEN valtouche = bas
IF valtouche = 51 THEN valtouche = basdroite
IF valtouche = 52 THEN valtouche = gauche
IF valtouche = 54 THEN valtouche = droite
IF valtouche = 55 THEN valtouche = hautgauche
IF valtouche = 56 THEN valtouche = haut
IF valtouche = 57 THEN valtouche = hautdroite

SELECT CASE valtouche

CASE gauche
IF RIGHT$(reponse$, 1) = "d" THEN GOSUB agra5: GOTO agra32
xx = x - 10: yy = y
GOSUB agra2
IF xx < 0 THEN
xx = 0: BEEP
ELSE
reponse$ = reponse$ + "g"
LINE (x, y)-(xx, yy)
flag = flag + 1
END IF

CASE droite
IF RIGHT$(reponse$, 1) = "g" THEN GOSUB agra5: GOTO agra32
xx = x + 10: yy = y
GOSUB agra2
IF xx > 280 THEN
xx = 280: BEEP
ELSE
reponse$ = reponse$ + "d"
LINE (x, y)-(xx, yy)
flag = flag + 1
END IF

CASE haut
IF RIGHT$(reponse$, 1) = "b" THEN GOSUB agra5: GOTO agra32
xx = x: yy = y - 10
GOSUB agra2
IF yy < 0 THEN
yy = 0: BEEP
ELSE
reponse$ = reponse$ + "h"
LINE (x, y)-(xx, yy)
flag = flag + 1
END IF

CASE bas
IF RIGHT$(reponse$, 1) = "h" THEN GOSUB agra5: GOTO agra32
xx = x: yy = y + 10
GOSUB agra2
IF yy > 210 THEN
yy = 210: BEEP
ELSE
reponse$ = reponse$ + "b"
LINE (x, y)-(xx, yy)
flag = flag + 1
END IF

CASE hautgauche
IF RIGHT$(reponse$, 1) = "l" THEN GOSUB agra35: GOTO agra32
xx = x - 10: yy = y - 10
GOSUB agra2
IF yy < 0 OR xx < 0 THEN
IF yy < 0 THEN
yy = 0: xx = xx + 10: BEEP
ELSEIF xx < 0 THEN
xx = 0: yy = yy + 10: BEEP
END IF
ELSE
reponse$ = reponse$ + "j"
LINE (x, y)-(xx, yy)
flag = flag + 1
END IF

CASE hautdroite
IF RIGHT$(reponse$, 1) = "m" THEN GOSUB agra35: GOTO agra32
xx = x + 10: yy = y - 10
GOSUB agra2
IF yy < 0 OR xx > 280 THEN
IF yy < 0 THEN
yy = 0: xx = xx - 10: BEEP
ELSEIF xx > 280 THEN
xx = 280: yy = yy + 10: BEEP
END IF
ELSE
reponse$ = reponse$ + "k"
LINE (x, y)-(xx, yy)
flag = flag + 1
END IF

CASE basgauche
IF RIGHT$(reponse$, 1) = "k" THEN GOSUB agra35: GOTO agra32
xx = x - 10: yy = y + 10
GOSUB agra2
IF yy > 210 OR xx < 0 THEN
IF yy > 210 THEN
yy = 210: xx = xx + 10: BEEP
ELSEIF xx < 0 THEN
xx = 0: yy = yy - 10: BEEP
END IF
ELSE
reponse$ = reponse$ + "m"
LINE (x, y)-(xx, yy)
flag = flag + 1
END IF

CASE basdroite
IF RIGHT$(reponse$, 1) = "j" THEN GOSUB agra35: GOTO agra32
xx = x + 10: yy = y + 10
GOSUB agra2
IF yy > 210 OR xx > 280 THEN
IF yy > 210 THEN
yy = 210: xx = xx - 10: BEEP
ELSEIF xx > 280 THEN
xx = 280: yy = yy - 10: BEEP
END IF
ELSE
reponse$ = reponse$ + "l"
LINE (x, y)-(xx, yy)
flag = flag + 1
END IF

CASE 8, 83 'correction
r$ = RIGHT$(reponse$, 1)
IF r$ = "h" OR r$ = "b" OR r$ = "g" OR r$ = "d" THEN
GOSUB agra5
ELSE
GOSUB agra35
END IF

CASE 27
CALL quitter: GOSUB agra14: GOTO agra31
CASE 13
IF reponse$ = "" THEN GOTO agra31
EXIT DO
CASE ELSE
BEEP

END SELECT

agra32:
IF valtouche = 71 OR valtouche = 73 OR valtouche = 79 OR valtouche = 81 OR valtouche = 8 OR valtouche = 83 OR valtouche = gauche OR valtouche = droite OR valtouche = haut OR valtouche = bas THEN
PSET (x, y), rougeclair
x = xx: y = yy
GOSUB agra2
END IF

LOOP

RETURN

agra35:
flag = flag - 1
r$ = RIGHT$(reponse$, 1)
reponse$ = MID$(reponse$, 1, LEN(reponse$) - 1)
GOSUB agra2
IF r$ = "j" THEN
xx = x + 10: yy = y + 10
ELSEIF r$ = "k" THEN
xx = x - 10: yy = y + 10
ELSEIF r$ = "m" THEN
xx = x + 10: yy = yy - 10
ELSEIF r$ = "l" THEN
xx = x - 10: yy = yy - 10
END IF
LINE (x, y)-(xx, yy), bleu
RETURN

agra40:


IF ni = 1 THEN
w$ = "Avec les flèches " + CHR$(27) + " " + CHR$(26) + " " + CHR$(24) + " " + CHR$(25) + ", tu vas devoir agrandir ou réduire"
z$ = "un certain nombre de fois un chemin."
xx$ = "Tu peux corriger tes erreurs avec la touche " + CHR$(27) + "- ou la touche suppr."
CALL consigne(3, w$, z$, xx$)

ELSE

z$ = "agrandir ou réduire la taille d'un chemin."
CALL claviernumerique(z$)
END IF

RETURN


END SUB

DEFINT A-Z
SUB frise (re, ni, rt$, gg$, pre$, titr$, noir, bleu, vert, rouge, marron, blanc, vertclair, cyanclair, rougeclair, jaune, blancbrill, couleur, coef1!, coef2!)
DIM dessin$(10), solution$(10), x(10), y(10), x2(10), z(5), lo(10)
DIM cercle(1 TO 50) AS INTEGER
'pour niveau 3 et 4
'3/12/96 souris

CONST gauche = 75, droite = 77
CONST haut = 72, bas = 80, hautgauche = 71, hautdroite = 73, basgauche = 79, basdroite = 81

DEF SEG = 0
POKE &H417, (PEEK(&H417) AND &H9F)'non numérique
DEF SEG

dessin$(1) = "r50 d25 m-25,+25 d50 r25 u25 m+25,-25 r25 u50"
solution$(1) = "ddbmbbdhkdhh"
x(1) = 50: y(1) = 75: x2(1) = 250: lo(1) = 100
dessin$(2) = "d50 m+25,+25 d25 r25 u50 m+25,-25 u25 r25"
solution$(2) = "bblbdhhkhd"
x(2) = 50: y(2) = 50: x2(2) = 250: lo(2) = 100
dessin$(3) = "m+25,-25 m-25,-25 u25 r25 m+25,-25 d50 r25 d75 m+25,-25"
solution$(3) = "kjhdkbbdbbbk"
x(3) = 50: y(3) = 150: x2(3) = 250: lo(3) = 100
dessin$(4) = "m+25,+25 d25 m+25,+25 u50 m-25,-25 m+25,-25 u25 m+50,+50"
solution$(4) = "lblhhjkhll"
x(4) = 50: y(4) = 100: x2(4) = 250: lo(4) = 100
dessin$(5) = "m+25,-25 m-25,-25 u25 m+50,-50 r25 d25 m-25,+25 m+25,+25 d25 m+25,+25"
solution$(5) = "kjhkkdbmlbl"
x(5) = 50: y(5) = 175: x2(5) = 250: lo(5) = 100

dessin$(6) = "r25 d25 l25 m+25,+25 d25 m-25,+25 m+25,+25 d25 r25 u50 m+25,-25 m-25,-25 u25 r25 m+25,-25"
solution$(6) = "dbglbmlbdhhkjhdk"
x(6) = 50: y(6) = 25: x2(6) = 250: lo(6) = 100
dessin$(7) = "d25 m+25,+25 l25 m+25,+25 d25 m+25,-25 r25 m+25,+25 u25 m-75,-75 u25 r25 u25 m+25,+25 d25 r25"
solution$(7) = "blglbkdlhjjjhdhlbd"
x(7) = 50: y(7) = 75: x2(7) = 250: lo(7) = 100
dessin$(8) = "m+25,-25 u75 r25 d75 m+25,-25 u50 m-75,-75 m+25,-25 m+75,+75 d125"
solution$(8) = "khhhdbbbkhhjjjklllbbbbb"
x(8) = 50: y(8) = 200: x2(8) = 250: lo(8) = 100
dessin$(9) = "r25 u50 r25 d50 m-50,+50 d75 m+25,+25 m+25,-25 m-25,-25 m+25,-25 m+25,+25 u25 m-25,-25 m+50,-50"
solution$(9) = "dhhdbbmmbbblkjklhjkk"
x(9) = 50: y(9) = 50: x2(9) = 250: lo(9) = 100
dessin$(10) = "u75 m+25,+25 d50 m+50,-50 d25 m-50,+50 r25 m+25,-25 d25 m-50,+50 d25 m-25,+25 r25 m+25,-25 m+25,+25 m+25,-25 m-25,-25 m+25,-25 u50"
solution$(10) = "hhhlbbkkbmmdkbmmbmdklkjkhh"
x(10) = 50: y(10) = 75: x2(10) = 250: lo(10) = 100

IF ni = 3 THEN nombre = 0 ELSE nombre = 5
re = 0

GOSUB frise40 'présentation

SCREEN 9
x = 635: y = 35
CIRCLE (x, y), 4, jaune, , , coef2!
GET (x - 4, y - 4)-(x + 4, y + 4), cercle

FOR jj = 1 TO 5
erreurs = 0
GOSUB frise6 'tirage

frise13:
CALL titre2(titr$)
'COLOR vertclair: LOCATE 22: PRINT "Niveau"; ni
'LOCATE 22, 77: PRINT 6 - jj
x = x(choix) + 20: y = y(choix) + 55
FOR i = 1 TO 5
DRAW "TA0 B m=" + VARPTR$(x) + ",=" + VARPTR$(y)
IF i = 3 THEN cc = bleu ELSE cc = cyanclair
IF i = 3 AND erreurs > 2 AND couleur = 1 THEN cc = rougeclair
DRAW "c=" + VARPTR$(cc) + dessin$(choix)
x = x + lo(choix)
NEXT

'fenetre
VIEW (20, 55)-(630, 260)
IF ni = 3 OR erreurs > 0 THEN GOSUB frise1
x = x2(choix): y = y(choix)
GOSUB frise2

GOSUB frise14
flag = 0: reponse$ = ""

GOSUB friseprog

VIEW

LOCATE 22: PRINT SPACE$(80): PRINT SPACE$(80)

IF solution$(choix) = reponse$ THEN
CALL exact(.7)
IF erreurs = 0 THEN re = re + 2
ELSE
erreurs = erreurs + 1
IF erreurs > 1 THEN
CALL centre(23, rougeclair, "Regarde...")
x = x(choix) + 20 + (2 * lo(choix)): y = y(choix) + 55
DRAW "TA0 B m=" + VARPTR$(x) + ",=" + VARPTR$(y)
DRAW "c=" + VARPTR$(rougeclair) + dessin$(choix)
CALL getinvimouse(r): IF r = 27 THEN CALL quitter
ELSE
CALL erreur(4)
END IF
LOCATE 23: PRINT SPACE$(80)
GOTO frise13
END IF

NEXT jj

'résultats
CALL resultats(re, ni)

EXIT SUB

'++++++++++++++++++++++++

frise1:
FOR x = 0 TO 600 STEP 25
FOR y = 0 TO 200 STEP 25
PSET (x, y), rougeclair
NEXT y
NEXT x
RETURN

frise14:
COLOR blanc
LOCATE 23, 23: PRINT "= tracer <-- = corriger " + rt$ + " = valider"
LOCATE 21, 10: PRINT "[7] [8] [9]"
LOCATE 22, 10: PRINT "[4] [6]"
LOCATE 23, 10: PRINT "[1] [2] [3]"
RETURN

frise2:
PUT (x - 4, y - 4), cercle, XOR
IF ni = 3 OR erreurs > 0 THEN PSET (x, y), rougeclair
RETURN

frise5:
flag = flag - 1
r$ = RIGHT$(reponse$, 1)
reponse$ = MID$(reponse$, 1, LEN(reponse$) - 1)
GOSUB frise2
IF r$ = "g" THEN
xx = x + 25: yy = y
ELSEIF r$ = "d" THEN
xx = x - 25: yy = y
ELSEIF r$ = "h" THEN
xx = x: yy = yy + 25
ELSEIF r$ = "b" THEN
xx = x: yy = yy - 25
END IF
LINE (x, y)-(xx, yy), bleu
RETURN

frise6:
'tirage
DO
f = 0
z(jj) = INT(RND * 5) + 1
FOR j = 1 TO jj - 1
IF z(jj) = z(j) THEN f = 1: EXIT FOR
NEXT
LOOP WHILE f = 1
choix = z(jj) + nombre
RETURN

friseprog:
DO
frise31:
MouseBorder 282, 75, 320, 630
MouseShow
souris = 0
DEF SEG = 0
POKE 1050, PEEK(1052)
DEF SEG
DO
r$ = INKEY$
' Obtient l'emplacement de la souris et l'état des boutons.
MousePoll v_mouse, h_mouse, lButton, rButton
' LOCATE 21, 40: PRINT v_mouse, h_mouse'===
IF lButton THEN
IF (v_mouse >= 282 AND v_mouse <= 292) AND (h_mouse >= 73 AND h_mouse <= 93) THEN
valtouche = hautgauche
CALL attendre(.2)
souris = 1
EXIT DO
ELSEIF (v_mouse >= 282 AND v_mouse <= 292) AND (h_mouse >= 106 AND h_mouse <= 126) THEN
valtouche = haut
CALL attendre(.2)
souris = 1
EXIT DO
ELSEIF (v_mouse >= 282 AND v_mouse <= 292) AND (h_mouse >= 136 AND h_mouse <= 156) THEN
valtouche = hautdroite
CALL attendre(.2)
souris = 1
EXIT DO
ELSEIF (v_mouse >= 296 AND v_mouse <= 306) AND (h_mouse >= 73 AND h_mouse <= 93) THEN
valtouche = gauche
CALL attendre(.2)
souris = 1
EXIT DO
ELSEIF (v_mouse >= 296 AND v_mouse <= 306) AND (h_mouse >= 136 AND h_mouse <= 156) THEN
valtouche = droite
CALL attendre(.2)
souris = 1
EXIT DO
ELSEIF (v_mouse >= 310 AND v_mouse <= 320) AND (h_mouse >= 73 AND h_mouse <= 93) THEN
valtouche = basgauche
CALL attendre(.2)
souris = 1
EXIT DO
ELSEIF (v_mouse >= 310 AND v_mouse <= 320) AND (h_mouse >= 106 AND h_mouse <= 126) THEN
valtouche = bas
CALL attendre(.2)
souris = 1
EXIT DO
ELSEIF (v_mouse >= 310 AND v_mouse <= 320) AND (h_mouse >= 136 AND h_mouse <= 156) THEN
valtouche = basdroite
CALL attendre(.2)
souris = 1
EXIT DO
END IF
'ok
IF v_mouse >= 308 AND v_mouse <= 320 THEN
IF h_mouse >= 280 AND h_mouse <= 390 THEN
'del
valtouche = 8
CALL attendre(.2)
souris = 1
EXIT DO
ELSEIF h_mouse >= 440 AND h_mouse <= 540 THEN
'return
valtouche = 13
CALL attendre(.2)
souris = 1
EXIT DO
ELSE
BEEP
END IF
END IF
END IF

LOOP WHILE r$ = ""

MouseHide

IF souris = 0 THEN
IF LEN(r$) < 2 THEN valtouche = ASC(r$) ELSE valtouche = ASC(RIGHT$(r$, 1))
END IF

IF (valtouche = 8 OR valtouche = 83) AND flag = 0 THEN BEEP: GOTO frise31

IF valtouche = 49 OR valtouche = 38 THEN valtouche = basgauche
IF valtouche = 50 OR valtouche = 130 THEN valtouche = bas
IF valtouche = 51 OR valtouche = 34 THEN valtouche = basdroite
IF valtouche = 52 OR valtouche = 39 THEN valtouche = gauche
IF valtouche = 54 OR valtouche = 45 THEN valtouche = droite
IF valtouche = 55 OR valtouche = 138 THEN valtouche = hautgauche
IF valtouche = 56 OR valtouche = 95 THEN valtouche = haut
IF valtouche = 57 OR valtouche = 135 THEN valtouche = hautdroite

SELECT CASE valtouche

CASE gauche
IF RIGHT$(reponse$, 1) = "d" THEN GOSUB frise5: GOTO frise32
xx = x - 25: yy = y
GOSUB frise2
IF xx < 0 THEN
xx = 0: BEEP
ELSE
reponse$ = reponse$ + "g"
LINE (x, y)-(xx, yy)
flag = flag + 1
END IF

CASE droite
IF RIGHT$(reponse$, 1) = "g" THEN GOSUB frise5: GOTO frise32
xx = x + 25: yy = y
GOSUB frise2
IF xx > 600 THEN
xx = 600: BEEP
ELSE
reponse$ = reponse$ + "d"
LINE (x, y)-(xx, yy)
flag = flag + 1
END IF

CASE haut
IF RIGHT$(reponse$, 1) = "b" THEN GOSUB frise5: GOTO frise32
xx = x: yy = y - 25
GOSUB frise2
IF yy < 0 THEN
yy = 0: BEEP
ELSE
reponse$ = reponse$ + "h"
LINE (x, y)-(xx, yy)
flag = flag + 1
END IF

CASE bas
IF RIGHT$(reponse$, 1) = "h" THEN GOSUB frise5: GOTO frise32
xx = x: yy = y + 25
GOSUB frise2
IF yy > 200 THEN
yy = 200: BEEP
ELSE
reponse$ = reponse$ + "b"
LINE (x, y)-(xx, yy)
flag = flag + 1
END IF

CASE hautgauche
IF RIGHT$(reponse$, 1) = "l" THEN GOSUB frise35: GOTO frise32
xx = x - 25: yy = y - 25
GOSUB frise2
IF yy < 0 OR xx < 0 THEN
IF yy < 0 THEN
yy = 0: xx = xx + 25: BEEP
ELSEIF xx < 0 THEN
xx = 0: yy = yy + 25: BEEP
END IF
ELSE
reponse$ = reponse$ + "j"
LINE (x, y)-(xx, yy)
flag = flag + 1
END IF

CASE hautdroite
IF RIGHT$(reponse$, 1) = "m" THEN GOSUB frise35: GOTO frise32
xx = x + 25: yy = y - 25
GOSUB frise2
IF yy < 0 OR xx > 600 THEN
IF yy < 0 THEN
yy = 0: xx = xx - 25: BEEP
ELSEIF xx > 600 THEN
xx = 600: yy = yy + 25: BEEP
END IF
ELSE
reponse$ = reponse$ + "k"
LINE (x, y)-(xx, yy)
flag = flag + 1
END IF

CASE basgauche
IF RIGHT$(reponse$, 1) = "k" THEN GOSUB frise35: GOTO frise32
xx = x - 25: yy = y + 25
GOSUB frise2
IF yy > 200 OR xx < 0 THEN
IF yy > 200 THEN
yy = 200: xx = xx + 25: BEEP
ELSEIF xx < 0 THEN
xx = 0: yy = yy - 25: BEEP
END IF
ELSE
reponse$ = reponse$ + "m"
LINE (x, y)-(xx, yy)
flag = flag + 1
END IF

CASE basdroite
IF RIGHT$(reponse$, 1) = "j" THEN GOSUB frise35: GOTO frise32
xx = x + 25: yy = y + 25
GOSUB frise2
IF yy > 200 OR xx > 600 THEN
IF yy > 200 THEN
yy = 200: xx = xx - 25: BEEP
ELSEIF xx > 600 THEN
xx = 600: yy = yy - 25: BEEP
END IF
ELSE
reponse$ = reponse$ + "l"
LINE (x, y)-(xx, yy)
flag = flag + 1
END IF

CASE 8, 83 'correction
r$ = RIGHT$(reponse$, 1)
IF r$ = "h" OR r$ = "b" OR r$ = "g" OR r$ = "d" THEN
GOSUB frise5
ELSE
GOSUB frise35
END IF

CASE 27
CALL quitter: GOSUB frise14: GOTO frise31
CASE 13
IF reponse$ = "" THEN GOTO frise31
EXIT DO
CASE ELSE
BEEP

END SELECT

frise32:
IF valtouche = 71 OR valtouche = 73 OR valtouche = 79 OR valtouche = 81 OR valtouche = 8 OR valtouche = 83 OR valtouche = gauche OR valtouche = droite OR valtouche = haut OR valtouche = bas THEN
IF ni = 3 OR erreurs > 0 THEN PSET (x, y), rougeclair
x = xx: y = yy
GOSUB frise2
END IF

LOOP

RETURN

frise35:
flag = flag - 1
r$ = RIGHT$(reponse$, 1)
reponse$ = MID$(reponse$, 1, LEN(reponse$) - 1)
GOSUB frise2
IF r$ = "j" THEN
xx = x + 25: yy = y + 25
ELSEIF r$ = "k" THEN
xx = x - 25: yy = y + 25
ELSEIF r$ = "m" THEN
xx = x + 25: yy = yy - 25
ELSEIF r$ = "l" THEN
xx = x - 25: yy = yy - 25
END IF
LINE (x, y)-(xx, yy), bleu
RETURN

frise40:
z$ = "compléter une frise en partie effacée."
CALL claviernumerique(z$)
RETURN

END SUB

DEFINT A-Z
SUB symetrie (re, ni, rt$, gg$, pre$, titr$, noir, bleu, vert, rouge, marron, blanc, vertclair, cyanclair, rougeclair, jaune, blancbrill, couleur, coef1!, coef2!)
DIM dessin1$(10), dessin2$(10), sol2$(10), sol3$(10), sol4$(10), x(10), y(10), x2(10), y2(10), x3(10), y3(10), x4(10), y4(10), z(5)
DIM cercle(1 TO 50) AS INTEGER
'3/12/96 souris
'programme pour niveau 3 et 4

titr$ = "symetrie"
CONST gauche = 75, droite = 77
CONST haut = 72, bas = 80, hautgauche = 71, hautdroite = 73, basgauche = 79, basdroite = 81

re = 0

'niveau 1
dessin1$(1) = "u60 l20 d40 l20 u20 l20 d20 l60 u40 l20 d20 l20 u20 l20 d40 l20 d20 l40 u40 l20 u20 r20"
dessin2$(1) = "u60 r20 d40 r20 u20 r20 d20 r60 u40 r20 d20 r20 u20 r20 d40 r20 d20 r40 u40 r20 u20 l20"
sol2$(1) = "hhhdbbdhdbdddhhdbdhdbbdbddhhdhg"
sol3$(1) = "bbbghhgbghgggbbghgbghhghggbbgbd"
sol4$(1) = "bbbdhhdbdhdddbbdhdbdhhdhddbbdbg"
x(1) = 280: y(1) = 80
x2(1) = 0: y2(1) = 80
x3(1) = 280: y3(1) = 0
x4(1) = 0: y4(1) = 0
dessin1$(2) = "l20 d20 l20 u40 l40 d40 l20 d20 r40 d20 r60 u20 r20 d20 r20 u20 r20 u40 r20 d20 r20 u20 r20 d40"
dessin2$(2) = "r20 d20 r20 u40 r40 d40 r20 d20 l40 d20 l60 u20 l20 d20 l20 u20 l20 u40 l20 d20 l20 u20 l20 d40"
sol2$(2) = "dbdhhddbbdbggbggghgbghghhgbghgbb"
sol3$(2) = "ghgbbgghhghddhdddbdhdbdbbdhdbdhh"
sol4$(2) = "dhdbbddhhdhgghgggbghgbgbbghgbghh"
x(2) = 140: y(2) = 20
x2(2) = 140: y2(2) = 20
x3(2) = 140: y3(2) = 60
x4(2) = 140: y4(2) = 60
dessin1$(3) = "u20 l20 u20 r40 u20 r20 d40 r20 d40 r40 u20 r20 u40 r20 d20 r20 u40 r20 d80 r20 u40 r20 u20 r20 d40"
dessin2$(3) = "u20 r20 u20 l40 u20 l20 d40 l20 d40 l40 u20 l20 u40 l20 d20 l20 u40 l20 d80 l20 u40 l20 u20 l20 d40"
sol2$(3) = "hdhgghgbbgbbgghghhgbghhgbbbbghhghgbb"
sol3$(3) = "bgbddbdhhdhhddbdbbdhdbbdhhhhdbbdbdhh"
sol4$(3) = "bdbggbghhghhggbgbbghgbbghhhhgbbgbghh"
x(3) = 40: y(3) = 60
x2(3) = 240: y2(3) = 60
x3(3) = 40: y3(3) = 20
x4(3) = 240: y4(3) = 20
dessin1$(4) = "l60 d20 r40 d20 l60 d20 r20 d20 l60 u20 r20 u20 l60 u20 r40 u20 l60 d80 l40 u40 l20 u20"
dessin2$(4) = "r60 d20 l40 d20 r60 d20 l20 d20 r60 u20 l20 u20 r60 u20 l40 u20 r60 d80 r40 u40 r20 u20"
sol2$(4) = "dddbggbdddbgbdddhghdddhgghdddbbbbddhhdh"
sol3$(4) = "ggghddhggghdhgggbdbgggbddbggghhhhggbbgb"
sol4$(4) = "dddhgghdddhghdddbgbdddbggbdddhhhhddbbdb"
x(4) = 280: y(4) = 0
x2(4) = 0: y2(4) = 0
x3(4) = 280: y3(4) = 80
x4(4) = 0: y4(4) = 80
dessin1$(5) = "u20 l20 d20 l20 u20 l20 d20 l20 u60 r20 d20 r20 u20 r20 d20 r20 u20 r60 d40 r40 u20 r20 d20 r20 u60 r20 d20"
dessin2$(5) = "u20 r20 d20 r20 u20 r20 d20 r20 u60 l20 d20 l20 u20 l20 d20 l20 u20 l60 d40 l40 u20 l20 d20 l20 u60 l20 d20"
sol2$(5) = "hdbdhdbdhhhgbghgbghgggbbgghgbghhhgb"
sol3$(5) = "bghgbghgbbbdhdbdhdbdddhhddbdhdbbbdh"
sol4$(5) = "bdhdbdhdbbbghgbghgbggghhggbghgbbbgh"
x(5) = 100: y(5) = 80
x2(5) = 180: y2(5) = 80
x3(5) = 100: y3(5) = 0
x4(5) = 180: y4(5) = 0

'niveau 2 = angle 45
dessin1$(6) = "u20 m-20,-20 u20 l20 d20 m-20,-20 m-20,+20 d20 l20 u40 l20 d60 l40 u20 m-20,-20 m-40,+40 u40 m+20,-20 l60 d40"
dessin2$(6) = "u20 m+20,-20 u20 r20 d20 m+20,-20 m+20,+20 d20 r20 u40 r20 d60 r40 u20 m+20,-20 m+40,+40 u40 m-20,-20 r60 d40"
sol2$(6) = "hkhdbklbdhhdbbbddhkllhhjdddbb"
sol3$(6) = "bmbghmjhgbbghhhggbmjjbblggghh"
sol4$(6) = "blbdhlkhdbbdhhhddblkkbbmdddhh"
x(6) = 280: y(6) = 80
x2(6) = 0: y2(6) = 80
x3(6) = 280: y3(6) = 0
x4(6) = 0: y4(6) = 0
dessin1$(7) = "m-20,-20 m+20,-20 r20 m+20,+20 r20 m+20,-20 m+20,+20 d40 r40 u20 m+20,-20 r20 m+20,-20 m+20,+20 d40 l20"
dessin2$(7) = "m+20,-20 m-20,-20 l20 m-20,+20 l20 m-20,-20 m-20,+20 d40 l40 u20 m-20,-20 l20 m-20,-20 m-20,+20 d40 r20"
sol2$(7) = "kjgmgjmbbgghjgjmbbd"
sol3$(7) = "mldkdlkhhddbldlkhhg"
sol4$(7) = "lmgjgmjhhggbmgmjhhd"
x(7) = 60: y(7) = 60
x2(7) = 220: y2(7) = 60
x3(7) = 60: y3(7) = 20
x4(7) = 220: y4(7) = 20
dessin1$(8) = "m-20,+20 l60 m-20,+20 l20 m+20,-20 l60 d40 r60 m+20,+20 r60 m+20,-20 u20 r20 m+20,+20 r20 m-20,-20 r40 m+20,-20 u20"
dessin2$(8) = "m+20,+20 r60 m+20,+20 r20 m-20,-20 r60 d40 l60 m-20,+20 l60 m-20,-20 u20 l20 m-20,+20 l20 m+20,-20 l40 m-20,-20 u20"
sol2$(8) = "ldddldjdddbbgggmgggjhgmgkggjh"
sol3$(8) = "jgggjglggghhdddkdddlbdkdmddlb"
sol4$(8) = "kdddkdmdddhhgggjgggmbgjglggmb"
x(8) = 180: y(8) = 0
x2(8) = 100: y2(8) = 0
x3(8) = 180: y3(8) = 80
x4(8) = 100: y4(8) = 80
dessin1$(9) = "m-60,+60 m-20,-20 l20 m-40,+40 u40 l60 m-20,+20 m-20,-20 m+40,-40 m+20,+20 r20"
dessin2$(9) = "m+60,+60 m+20,-20 r20 m+40,+40 u40 r60 m+20,+20 m+20,-20 m-40,-40 m-20,+20 l20"
sol2$(9) = "lllkdllhhdddlkjjmg"
sol3$(9) = "jjjmgjjbbgggjmllkd"
sol4$(9) = "kkkldkkbbdddklmmjg"
x(9) = 280: y(9) = 0
x2(9) = 0: y2(9) = 0
x3(9) = 280: y3(9) = 80
x4(9) = 0: y4(9) = 80
dessin1$(10) = "m-60,-60 m+20,-20 m+80,+80 m+20,-20 m-40,-40 m+20,-20 m+80,+80 m+20,-20 m-20,-20 m+20,-20 r20 d60"
dessin2$(10) = "m+60,-60 m-20,-20 m-80,+80 m-20,-20 m+40,-40 m-20,-20 m-80,+80 m-20,-20 m+20,-20 m-20,-20 l20 d60"
sol2$(10) = "kkkjmmmmjkkjmmmmjkjgbbb"
sol3$(10) = "mmmlkkkklmmlkkkklmldhhh"
sol4$(10) = "lllmjjjjmllmjjjjmlmghhh"
x(10) = 120: y(10) = 80
x2(10) = 160: y2(10) = 80
x3(10) = 120: y3(10) = 0
x4(10) = 160: y4(10) = 0
DEF SEG = 0
POKE &H417, (PEEK(&H417) AND &H9F)'non numérique
DEF SEG

SELECT CASE ni
CASE 3
nombre = 0
CASE 4
nombre = 5
END SELECT

GOSUB sym40 'présentation

CLS
x = 635: y = 35
CIRCLE (x, y), 4, jaune, , , coef2!
GET (x - 4, y - 4)-(x + 4, y + 4), cercle

FOR jj = 1 TO 3
GOSUB sym6 'tirage
erreurs = 0
CALL titre2(titr$)
LINE (320, 35)-(320, 275), blancbrill
LINE (5, 155)-(635, 155), blancbrill
x = x(choix) + 20: y = y(choix) + 50
DRAW "TA0 B m=" + VARPTR$(x) + ",=" + VARPTR$(y)
DRAW "c=" + VARPTR$(jaune) + dessin1$(choix)
'fenetre gauchehaute
VIEW (20, 50)-(300 + 4, 130 + 4)
coul = rougeclair: GOSUB sym1
x = x(choix): y = y(choix)
GOSUB sym2

FOR jj2 = 1 TO 3
erreurs = 0
sym13:
IF ni = 3 THEN COLOR vertclair: LOCATE 22: PRINT "Niveau"; ni: LOCATE 22, 77: PRINT 4 - jj

SELECT CASE jj2
CASE 1
'fenetre droitehaute 1
VIEW (340, 50)-(625, 135)
coul = vertclair: GOSUB sym1
x = x2(choix): y = y2(choix): GOSUB sym2
sol$ = sol2$(choix)
CASE 2
'fenetre gauchebasse 2
VIEW (20, 180)-(305, 265)
coul = vertclair: GOSUB sym1
x = x3(choix): y = y3(choix): GOSUB sym2
sol$ = sol3$(choix)
CASE 3
'fenetre droitebasse 3
VIEW (340, 180)-(625, 265)
coul = vertclair: GOSUB sym1
x = x4(choix): y = y4(choix): GOSUB sym2
sol$ = sol4$(choix)
END SELECT

GOSUB sym14

flag = 0: reponse$ = ""
IF ni = 3 THEN
GOSUB symniveau1
ELSEIF ni = 4 THEN
GOSUB symniveau2
END IF
'VIEW
LOCATE 22: PRINT SPACE$(80): PRINT SPACE$(80)

IF sol$ = reponse$ THEN
CALL exact(.7): GOSUB sym2: IF erreurs = 0 THEN re = re + 1
ELSE
erreurs = erreurs + 1
CALL centre(23, rougeclair, "Les chemins ne sont pas symétriques.")
CALL attendre(1.5)
LOCATE 23: PRINT SPACE$(80)
CALL centre(23, rougeclair, "Regarde")

SELECT CASE jj2
CASE 1
x = x2(choix) + 340: y = y2(choix) + 50
dessin$ = dessin2$(choix)
CASE 2
x = x3(choix) + 20: y = y3(choix) + 180
dessin$ = "a2 " + dessin2$(choix)
CASE 3
x = x4(choix) + 340: y = y4(choix) + 180
dessin$ = "a2 " + dessin1$(choix)
END SELECT
DRAW "TA0 B m=" + VARPTR$(x) + ",=" + VARPTR$(y)
DRAW "c=" + VARPTR$(rougeclair) + dessin$
CALL getinvi(r): IF r = 27 THEN CALL quitter
LOCATE 23: PRINT SPACE$(80)

SELECT CASE jj2
CASE 1
VIEW (335, 45)-(625, 135)
LINE (0, 0)-(290, 90), bleu, BF
VIEW (340, 50)-(620 + 4, 130 + 4)
CASE 2
VIEW (15, 175)-(305, 265)
LINE (0, 0)-(290, 90), bleu, BF
VIEW (20, 180)-(305, 265)
CASE 3
VIEW (335, 175)-(625, 265)
LINE (0, 0)-(290, 90), bleu, BF
VIEW (340, 180)-(625, 265)
END SELECT
GOSUB sym1

IF erreurs > 1 AND couleur = 1 THEN DRAW "TA0 B m=" + VARPTR$(x) + ",=" + VARPTR$(y): DRAW "c=" + VARPTR$(rougeclair) + dessin$
GOTO sym13
END IF
VIEW
NEXT jj2

CALL entree

NEXT jj

'résultats
re = re + 1 'neuf essais
CALL resultats(re, ni)

EXIT SUB
'++++++++++++++++++++++++

sym14:
IF ni = 3 THEN
CALL centre(23, blanc, CHR$(27) + " " + CHR$(26) + " " + CHR$(24) + " " + CHR$(25) + " = tracer <-- = corriger " + rt$ + " = valider")
ELSE
COLOR blanc
LOCATE 23, 23: PRINT "= tracer <-- = corriger " + rt$ + " = valider"
LOCATE 21, 10: PRINT "[7] [8] [9]"
LOCATE 22, 10: PRINT "[4] [6]"
LOCATE 23, 10: PRINT "[1] [2] [3]"
END IF
RETURN

sym1:
FOR w = 0 TO 300 STEP 20
FOR z = 0 TO 130 STEP 20
PSET (w, z), coul
NEXT z
NEXT w
RETURN

sym2:
PUT (x - 4, y - 4), cercle, XOR
PSET (x, y), rougeclair
RETURN

sym5:
flag = flag - 1
r$ = RIGHT$(reponse$, 1)
reponse$ = MID$(reponse$, 1, LEN(reponse$) - 1)
GOSUB sym2
IF r$ = "g" THEN
xx = x + 20: yy = y
ELSEIF r$ = "d" THEN
xx = x - 20: yy = y
ELSEIF r$ = "h" THEN
xx = x: yy = yy + 20
ELSEIF r$ = "b" THEN
xx = x: yy = yy - 20
END IF
LINE (x, y)-(xx, yy), bleu
RETURN

sym6:
'tirage
DO
f = 0
z(jj) = INT(RND * 3) + 1
FOR j = 1 TO jj - 1
IF z(jj) = z(j) THEN f = 1: EXIT FOR
NEXT
LOOP WHILE f = 1
choix = z(jj) + nombre
RETURN

symniveau1:
DO
sym11:
MouseBorder 308, 10, 320, 630
MouseShow
souris = 0
DEF SEG = 0
POKE 1050, PEEK(1052)
DEF SEG
DO
r$ = INKEY$
' Obtient l'emplacement de la souris et l'état des boutons.
MousePoll v_mouse, h_mouse, lButton, rButton
' LOCATE 21, 1: PRINT v_mouse, h_mouse'===
IF lButton THEN
IF v_mouse >= 308 AND v_mouse <= 320 THEN
'fleches
IF h_mouse >= 100 AND h_mouse <= 112 THEN
'gauche
valtouche = gauche
CALL attendre(.2)
souris = 1
EXIT DO
ELSEIF h_mouse >= 116 AND h_mouse <= 128 THEN
'droite
valtouche = droite
CALL attendre(.2)
souris = 1
EXIT DO
ELSEIF h_mouse >= 133 AND h_mouse <= 145 THEN
'haut
valtouche = haut
CALL attendre(.2)
souris = 1
EXIT DO
ELSEIF h_mouse >= 150 AND h_mouse <= 160 THEN
'bas
valtouche = bas
CALL attendre(.2)
souris = 1
EXIT DO
ELSEIF h_mouse >= 270 AND h_mouse <= 380 THEN
'del
valtouche = 8
CALL attendre(.2)
souris = 1
EXIT DO
ELSEIF h_mouse >= 420 AND h_mouse <= 528 THEN
'return
valtouche = 13
CALL attendre(.2)
souris = 1
EXIT DO
ELSE
BEEP
END IF
ELSE
BEEP
END IF
END IF
LOOP WHILE r$ = ""

MouseHide

IF souris = 0 THEN
IF LEN(r$) < 2 THEN valtouche = ASC(r$) ELSE valtouche = ASC(RIGHT$(r$, 1))
END IF


IF (valtouche = 8 OR valtouche = 83) AND flag = 0 THEN BEEP: GOTO sym11
IF valtouche = 50 THEN valtouche = bas
IF valtouche = 52 THEN valtouche = gauche
IF valtouche = 54 THEN valtouche = droite
IF valtouche = 56 THEN valtouche = haut

SELECT CASE valtouche
CASE gauche
IF RIGHT$(reponse$, 1) = "d" THEN GOSUB sym5: GOTO sym12
xx = x - 20: yy = y
GOSUB sym2
IF xx < 0 THEN
xx = 0: BEEP
ELSE
reponse$ = reponse$ + "g"
LINE (x, y)-(xx, yy)
flag = flag + 1
END IF

CASE droite
IF RIGHT$(reponse$, 1) = "g" THEN GOSUB sym5: GOTO sym12
xx = x + 20: yy = y
GOSUB sym2
IF xx > 280 THEN
xx = 280: BEEP
ELSE
reponse$ = reponse$ + "d"
LINE (x, y)-(xx, yy)
flag = flag + 1
END IF

CASE haut
IF RIGHT$(reponse$, 1) = "b" THEN GOSUB sym5: GOTO sym12
xx = x: yy = y - 20
GOSUB sym2
IF yy < 0 THEN
yy = 0: BEEP
ELSE
reponse$ = reponse$ + "h"
LINE (x, y)-(xx, yy)
flag = flag + 1
END IF

CASE bas
IF RIGHT$(reponse$, 1) = "h" THEN GOSUB sym5: GOTO sym12
xx = x: yy = y + 20
GOSUB sym2
IF yy > 80 THEN
yy = 80: BEEP
ELSE
reponse$ = reponse$ + "b"
LINE (x, y)-(xx, yy)
flag = flag + 1
END IF

CASE 8, 83 'correction
GOSUB sym5

CASE 27
CALL quitter: GOSUB sym14: GOTO sym11
CASE 13
IF reponse$ = "" THEN GOTO sym11
EXIT DO
CASE ELSE
BEEP

END SELECT
sym12:
IF valtouche = 8 OR valtouche = 83 OR valtouche = gauche OR valtouche = droite OR valtouche = haut OR valtouche = bas THEN
PSET (x, y), rougeclair
x = xx: y = yy
GOSUB sym2
END IF

LOOP

RETURN

symniveau2:
DO
sym31:
MouseBorder 282, 75, 320, 630
MouseShow
souris = 0
DEF SEG = 0
POKE 1050, PEEK(1052)
DEF SEG
DO
r$ = INKEY$
' Obtient l'emplacement de la souris et l'état des boutons.
MousePoll v_mouse, h_mouse, lButton, rButton
' LOCATE 21, 40: PRINT v_mouse, h_mouse'===
IF lButton THEN
IF (v_mouse >= 282 AND v_mouse <= 292) AND (h_mouse >= 73 AND h_mouse <= 93) THEN
valtouche = hautgauche
CALL attendre(.2)
souris = 1
EXIT DO
ELSEIF (v_mouse >= 282 AND v_mouse <= 292) AND (h_mouse >= 106 AND h_mouse <= 126) THEN
valtouche = haut
CALL attendre(.2)
souris = 1
EXIT DO
ELSEIF (v_mouse >= 282 AND v_mouse <= 292) AND (h_mouse >= 136 AND h_mouse <= 156) THEN
valtouche = hautdroite
CALL attendre(.2)
souris = 1
EXIT DO
ELSEIF (v_mouse >= 296 AND v_mouse <= 306) AND (h_mouse >= 73 AND h_mouse <= 93) THEN
valtouche = gauche
CALL attendre(.2)
souris = 1
EXIT DO
ELSEIF (v_mouse >= 296 AND v_mouse <= 306) AND (h_mouse >= 136 AND h_mouse <= 156) THEN
valtouche = droite
CALL attendre(.2)
souris = 1
EXIT DO
ELSEIF (v_mouse >= 310 AND v_mouse <= 320) AND (h_mouse >= 73 AND h_mouse <= 93) THEN
valtouche = basgauche
CALL attendre(.2)
souris = 1
EXIT DO
ELSEIF (v_mouse >= 310 AND v_mouse <= 320) AND (h_mouse >= 106 AND h_mouse <= 126) THEN
valtouche = bas
CALL attendre(.2)
souris = 1
EXIT DO
ELSEIF (v_mouse >= 310 AND v_mouse <= 320) AND (h_mouse >= 136 AND h_mouse <= 156) THEN
valtouche = basdroite
CALL attendre(.2)
souris = 1
EXIT DO
END IF
'ok
IF v_mouse >= 308 AND v_mouse <= 320 THEN
IF h_mouse >= 280 AND h_mouse <= 390 THEN
'del
valtouche = 8
CALL attendre(.2)
souris = 1
EXIT DO
ELSEIF h_mouse >= 440 AND h_mouse <= 540 THEN
'return
valtouche = 13
CALL attendre(.2)
souris = 1
EXIT DO
ELSE
BEEP
END IF
END IF
END IF

LOOP WHILE r$ = ""

MouseHide

IF souris = 0 THEN
IF LEN(r$) < 2 THEN valtouche = ASC(r$) ELSE valtouche = ASC(RIGHT$(r$, 1))
END IF

IF (valtouche = 8 OR valtouche = 83) AND flag = 0 THEN BEEP: GOTO sym31

IF valtouche = 49 OR valtouche = 38 THEN valtouche = basgauche
IF valtouche = 50 OR valtouche = 130 THEN valtouche = bas
IF valtouche = 51 OR valtouche = 34 THEN valtouche = basdroite
IF valtouche = 52 OR valtouche = 39 THEN valtouche = gauche
IF valtouche = 54 OR valtouche = 45 THEN valtouche = droite
IF valtouche = 55 OR valtouche = 138 THEN valtouche = hautgauche
IF valtouche = 56 OR valtouche = 95 THEN valtouche = haut
IF valtouche = 57 OR valtouche = 135 THEN valtouche = hautdroite

SELECT CASE valtouche

CASE gauche
IF RIGHT$(reponse$, 1) = "d" THEN GOSUB sym5: GOTO sym32
xx = x - 20: yy = y
GOSUB sym2
IF xx < 0 THEN
xx = 0: BEEP
ELSE
reponse$ = reponse$ + "g"
LINE (x, y)-(xx, yy)
flag = flag + 1
END IF

CASE droite
IF RIGHT$(reponse$, 1) = "g" THEN GOSUB sym5: GOTO sym32
xx = x + 20: yy = y
GOSUB sym2
IF xx > 280 THEN
xx = 280: BEEP
ELSE
reponse$ = reponse$ + "d"
LINE (x, y)-(xx, yy)
flag = flag + 1
END IF

CASE haut
IF RIGHT$(reponse$, 1) = "b" THEN GOSUB sym5: GOTO sym32
xx = x: yy = y - 20
GOSUB sym2
IF yy < 0 THEN
yy = 0: BEEP
ELSE
reponse$ = reponse$ + "h"
LINE (x, y)-(xx, yy)
flag = flag + 1
END IF

CASE bas
IF RIGHT$(reponse$, 1) = "h" THEN GOSUB sym5: GOTO sym32
xx = x: yy = y + 20
GOSUB sym2
IF yy > 80 THEN
yy = 80: BEEP
ELSE
reponse$ = reponse$ + "b"
LINE (x, y)-(xx, yy)
flag = flag + 1
END IF

CASE hautgauche
IF RIGHT$(reponse$, 1) = "l" THEN GOSUB sym35: GOTO sym32
xx = x - 20: yy = y - 20
GOSUB sym2
IF yy < 0 OR xx < 0 THEN
IF yy < 0 THEN
yy = 0: xx = xx + 20: BEEP
ELSEIF xx < 0 THEN
xx = 0: yy = yy + 20: BEEP
END IF
ELSE
reponse$ = reponse$ + "j"
LINE (x, y)-(xx, yy)
flag = flag + 1
END IF

CASE hautdroite
IF RIGHT$(reponse$, 1) = "m" THEN GOSUB sym35: GOTO sym32
xx = x + 20: yy = y - 20
GOSUB sym2
IF yy < 0 OR xx > 280 THEN
IF yy < 0 THEN
yy = 0: xx = xx - 20: BEEP
ELSEIF xx > 280 THEN
xx = 280: yy = yy + 20: BEEP
END IF
ELSE
reponse$ = reponse$ + "k"
LINE (x, y)-(xx, yy)
flag = flag + 1
END IF

CASE basgauche
IF RIGHT$(reponse$, 1) = "k" THEN GOSUB sym35: GOTO sym32
xx = x - 20: yy = y + 20
GOSUB sym2
IF yy > 80 OR xx < 0 THEN
IF yy > 80 THEN
yy = 80: xx = xx + 20: BEEP
ELSEIF xx < 0 THEN
xx = 0: yy = yy - 20: BEEP
END IF
ELSE
reponse$ = reponse$ + "m"
LINE (x, y)-(xx, yy)
flag = flag + 1
END IF

CASE basdroite
IF RIGHT$(reponse$, 1) = "j" THEN GOSUB sym35: GOTO sym32
xx = x + 20: yy = y + 20
GOSUB sym2
IF yy > 80 OR xx > 280 THEN
IF yy > 80 THEN
yy = 80: xx = xx - 20: BEEP
ELSEIF xx > 280 THEN
xx = 280: yy = yy - 20: BEEP
END IF
ELSE
reponse$ = reponse$ + "l"
LINE (x, y)-(xx, yy)
flag = flag + 1
END IF

CASE 8, 83 'correction
r$ = RIGHT$(reponse$, 1)
IF r$ = "h" OR r$ = "b" OR r$ = "g" OR r$ = "d" THEN
GOSUB sym5
ELSE
GOSUB sym35
END IF

CASE 27
CALL quitter: GOSUB sym14: GOTO sym31
CASE 13
IF reponse$ = "" THEN GOTO sym31
EXIT DO
CASE ELSE
BEEP

END SELECT

sym32:
IF valtouche = 71 OR valtouche = 73 OR valtouche = 79 OR valtouche = 81 OR valtouche = 8 OR valtouche = 83 OR valtouche = gauche OR valtouche = droite OR valtouche = haut OR valtouche = bas THEN
PSET (x, y), rougeclair
x = xx: y = yy
GOSUB sym2
END IF

LOOP

RETURN

sym35:
flag = flag - 1
r$ = RIGHT$(reponse$, 1)
reponse$ = MID$(reponse$, 1, LEN(reponse$) - 1)
GOSUB sym2
IF r$ = "j" THEN
xx = x + 20: yy = y + 20
ELSEIF r$ = "k" THEN
xx = x - 20: yy = y + 20
ELSEIF r$ = "m" THEN
xx = x + 20: yy = yy - 20
ELSEIF r$ = "l" THEN
xx = x - 20: yy = yy - 20
END IF
LINE (x, y)-(xx, yy), bleu
RETURN

sym40:
IF ni = 3 THEN
w$ = "Avec les flèches " + CHR$(27) + " " + CHR$(26) + " " + CHR$(24) + " " + CHR$(25) + ", tu vas devoir"
z$ = "reproduire symétriquement un chemin."
xx$ = "Tu peux corriger tes erreurs avec la touche " + CHR$(27) + "- ou la touche suppr."
CALL consigne(3, w$, z$, xx$)

ELSEIF ni = 4 THEN
z$ = "reproduire symétriquement un chemin."
CALL claviernumerique(z$)
END IF

SCREEN 9

CALL titre2(titr$)
LINE (320, 35)-(320, 275), blancbrill
LINE (5, 155)-(635, 155), blancbrill
IF ni = 3 THEN c = 1 ELSE c = 6
dessin1$ = dessin1$(c)
dessin2$ = dessin2$(c)
x = 300: y = 130
DRAW "TA0 B m=" + VARPTR$(x) + ",=" + VARPTR$(y)
DRAW "c=" + VARPTR$(jaune) + dessin1$
x = 340: y = 130
DRAW "TA0 B m=" + VARPTR$(x) + ",=" + VARPTR$(y)
DRAW "c=" + VARPTR$(blancbrill) + dessin2$
x = 300: y = 180
DRAW "TA0 B m=" + VARPTR$(x) + ",=" + VARPTR$(y)
DRAW "c=" + VARPTR$(blancbrill) + "a2" + dessin2$
x = 300 + 40: y = 180
DRAW "TA0 B m=" + VARPTR$(x) + ",=" + VARPTR$(y)
DRAW "c=" + VARPTR$(blancbrill) + "a2" + dessin1$

CALL centre(23, jaune, "Un exemple")
CALL getinvimouse(r): IF r = 27 THEN CALL quitter

RETURN

END SUB
 

 

DECLARE SUB MouseBorder (row1%, col1%, row2%, col2%)
DECLARE SUB MouseInit ()
DECLARE SUB fleches (v%, h%, w$(), np%, r%, coul%, drap%, v2%, h2%)
DECLARE SUB MouseHide ()
DECLARE SUB MousePoll (row%, col%, lButton%, rButton%)
DECLARE SUB MouseShow ()
DECLARE SUB getinvimouse (rr%)
DECLARE SUB consigne (nl%, w$, z$, xx$)
DECLARE SUB cadre (v%, h%, l%, nli%, c%)
DECLARE SUB centre (v%, coul%, ph$)
DECLARE SUB quitter ()
DECLARE SUB getinvi (rr%)
DECLARE SUB niveau (r%, np%, titr$)
DECLARE SUB titre (titr$)
DECLARE SUB attendre (tx!)
DECLARE SUB cadre3 (v%, h%, nb%, coul%)
DECLARE SUB entree ()
DECLARE SUB erreur (tx!)
DECLARE SUB exact (tx!)
DECLARE SUB inputgen (nl%, r$, deb%, fin%)
DECLARE SUB resultats (re%, ni%)
DECLARE SUB titre2 (titr$)
DECLARE SUB titre3 (titr$)
DECLARE SUB flechesbis (v%, h%, p$(), np%, r%)
'exo 3 géométrie
'Daniel Clerc 7/4/96
'version 1.5


DEFINT A-Z
SUB aire (re, ni, rt$, gg$, pre$, titr$, noir, bleu, vert, rouge, marron, blanc, vertclair, cyanclair, rougeclair, jaune, blancbrill, couleur, coef1!, coef2!)
DIM z(10)
DIM a(1 TO 30) AS INTEGER
DIM B(1 TO 30) AS INTEGER
DIM c(1 TO 30) AS INTEGER
DIM d(1 TO 30) AS INTEGER

titr$ = "perimetre - aire"
DEF SEG = 0
POKE &H417, (PEEK(&H417) OR &H20)'numérique
POKE &H417, (PEEK(&H417) OR &H40) 'MAJ
DEF SEG
'présentation
w$ = "Des carrés ou des rectangles vont s'afficher à l'écran."
z$ = "Tu devras calculer le périmètre puis l'aire de ces figures."
CALL consigne(2, w$, z$, xx$)

SCREEN 9, , 0, 1
'mémorisation des lettres : matrice 8 x 14
x = 0: y = 0
PRINT "A B C D"
GET (x, y)-(x + 7, y + 13), a
x = x + 16
GET (x, y)-(x + 7, y + 13), B
x = x + 16
GET (x, y)-(x + 7, y + 13), c
x = x + 16
GET (x, y)-(x + 7, y + 13), d
LOCATE 1: PRINT SPACE$(10)

SCREEN 9, , 0, 0

FOR jj = 1 TO 5
CALL titre3(titr$)
erreurs = 0
'tirage
DO
f = 0
z(jj) = INT(RND * 5) + 1
FOR j = 1 TO jj - 1
IF z(jj) = z(j) THEN f = 1: EXIT FOR
NEXT
LOOP WHILE f = 1
choix = z(jj)

SELECT CASE choix
CASE 1
y! = coef1! * 100: x1 = 60: y1 = 105: x2 = 300: y2 = 100
CASE 2
y! = coef1! * 120: x1 = 160: y1 = 95: x2 = 120: y2 = 120'carre
CASE 3
y! = coef1! * 60: x1 = 100: y1 = 125: x2 = 240: y2 = 60
CASE 4
y! = coef1! * 20: x1 = 50: y1 = 145: x2 = 320: y2 = 20
CASE 5
y! = coef1! * 160: x1 = 140: y1 = 75: x2 = 160: y2 = 160'carré
END SELECT


LOCATE 23: PRINT SPACE$(80)
LOCATE 22, 77: COLOR vertclair: PRINT 6 - jj

GOSUB aire0bis
perimetre = (ab + bc) * 2
surface = ab * bc
COLOR blancbrill
LOCATE 7, 58: PRINT "Calcul du périmètre"
COLOR vertclair
LOCATE 10, 62: PRINT "AB ="; ab; "m"
LOCATE 12, 62: PRINT "BC ="; bc; "m"
'COLOR blanc
CALL cadre3(18, 67, 2, blancbrill)
aire10:
COLOR blanc
LOCATE 15, 59: PRINT "Tape la réponse : "
COLOR blancbrill
LOCATE 18, 71: PRINT "m "
LOCATE 18, 67: CALL inputgen(2, r$, 48, 57)
r = VAL(r$)
IF r = perimetre THEN
CALL exact(.7)
IF erreurs = 0 THEN re = re + 1
ELSE
erreurs = erreurs + 1
CALL erreur(.5)
LOCATE 23: PRINT SPACE$(80)
GOSUB aire1bis
IF r = perimetre / 2 THEN
CALL centre(23, rougeclair, "Tu as calculé le demi-périmètre !")
GOTO aire10
ELSEIF r = surface THEN
CALL centre(23, rougeclair, "Tu as calculé l'aire !")
GOTO aire10
END IF
SELECT CASE erreurs
CASE 1
IF ab = bc THEN
CALL centre(23, jaune, "Périmètre du carré = côté x 4")
ELSE
CALL centre(23, jaune, "Périmètre = (longueur + largeur) x 2")
END IF
CASE 2
IF ab = bc THEN
CALL centre(23, jaune, "Périmètre du carré = " + LTRIM$(STR$(ab)) + " x 4")
ELSE
CALL centre(23, jaune, "Périmètre = (" + LTRIM$(STR$(ab)) + " + " + LTRIM$(STR$(bc)) + ") x 2")
END IF
CASE ELSE
CALL centre(23, rougeclair, "solution :" + STR$(perimetre))
END SELECT
GOTO aire10
END IF
LOCATE 23: PRINT SPACE$(80)
IF erreurs <> 0 THEN
LINE (0, 28)-(426, 279), bleu, BF
GOSUB aire0bis
END IF
PAINT (210, 147), rouge, blancbrill
CALL cadre3(18, 67, 2, blancbrill)
erreurs = 0

aire11:
LOCATE 7, 58: PRINT "Calcul de l'aire "
COLOR blanc
LOCATE 15, 59: PRINT "Tape la réponse : "
COLOR blancbrill
LOCATE 18, 71: PRINT "m²"
LOCATE 18, 67: CALL inputgen(2, r$, 48, 57)

r = VAL(r$)
IF r = surface THEN
CALL exact(.7)
IF erreurs = 0 THEN re = re + 1
ELSE
erreurs = erreurs + 1
CALL erreur(.5)
LOCATE 23: PRINT SPACE$(80)
GOSUB aire2bis
IF r = perimetre / 2 THEN
CALL centre(23, rougeclair, "L'aire n'est pas une longueur !")
GOTO aire11
ELSEIF r = perimetre THEN
CALL centre(23, rougeclair, "Tu as confondu le périmètre et l'aire !")
GOTO aire11
END IF
SELECT CASE erreurs
CASE 1
IF ab = bc THEN
CALL centre(23, jaune, "Aire du carré = côté x côté")
ELSE
CALL centre(23, jaune, "Aire = longueur x largeur")
END IF
CASE 2
CALL centre(23, jaune, "Aire = " + LTRIM$(STR$(ab)) + " x " + LTRIM$(STR$(bc)))
CASE ELSE
CALL centre(23, rougeclair, "solution :" + STR$(surface))
END SELECT

GOTO aire11
END IF

NEXT jj

'++++++++++

'résultats
CALL resultats(re, ni)
EXIT SUB

aire0bis:
DRAW "b m=" + VARPTR$(x1) + ",=" + VARPTR$(y1) + " c15 d=" + VARPTR$(y!) + "r=" + VARPTR$(x2) + " u=" + VARPTR$(y!) + " l=" + VARPTR$(x2)
x = x1 - 17: y = y1 - 10: GOSUB lettrea
x = x1 + x2 + 10: y = y1 - 10: GOSUB lettreb
x = x1 + x2 + 10: y = y! + y1 - 2: GOSUB lettrec
x = x1 - 17: y = y! + y1 - 2: GOSUB lettred
ab = x2 / 20: bc = y2 / 20
RETURN

aire1bis:
FOR j = 0 TO x2 STEP 20
LINE (j + x1, y1 - 3)-(j + x1, 2 + y1), rougeclair
LINE (j + x1, y1 + y! - 2)-(j + x1, 3 + y1 + y!), rougeclair
NEXT
'
FOR j = 0 TO y! - 8 STEP 20 * coef1!
LINE (x1 - 3, j + y1)-(x1 + 2, j + y1), rougeclair
LINE (x1 + x2 - 2, j + y1)-(x1 + x2 + 3, j + y1), rougeclair
NEXT
'- 8 pour annuler la dernière ligne
LINE (x1 - 3, y1 + y!)-(x1 + 2, y! + y1), rougeclair
LINE (x1 + x2 - 2, y! + y1)-(x1 + x2 + 3, y! + y1), rougeclair
RETURN

aire2bis:
IF couleur = 1 THEN cc = blancbrill ELSE cc = 0
FOR j = 0 TO x2 STEP 20
LINE (j + x1, y1)-(j + x1, y! + y1), cc
NEXT
FOR j = 0 TO y! - 8 STEP 20 * coef1!
LINE (x1, j + y1)-(x1 + x2, j + y1), cc
NEXT
'- 8 pour annuler la dernière ligne
RETURN

lettrea:
PUT (x, y), a, XOR
RETURN

lettreb:
PUT (x, y), B, XOR
RETURN

lettrec:
PUT (x, y), c, XOR
RETURN

lettred:
PUT (x, y), d, XOR
RETURN

END SUB

DEFINT A-Z
SUB convexe (re, ni, rt$, gg$, pre$, titr$, noir, bleu, vert, rouge, marron, blanc, vertclair, cyanclair, rougeclair, jaune, blancbrill, couleur, coef1!, coef2!)
'3/12/96 souris
CONST pi = 3.141592653589#, x = 210, y = 170

DIM z(10), an$(2), x1(7), y1(7), x2(7), y2(7), x3(7), y3(7), x4(7), y4(7), dessin$(7), sol(7)
re = 0

an$(1) = "Forme convexe"
an$(2) = "Forme concave"

x1(1) = 80: y1(1) = 70: x2(1) = 220: y2(1) = 110
x3(1) = 380: y3(1) = 70: x4(1) = 230: y4(1) = 80
dessin$(1) = "b m80,70 c15 m220,110 m380,70 m380,240 m80,240 m80,70"
sol(1) = 2
x1(2) = 260: y1(2) = 90: x2(2) = 300: y2(2) = 170
x3(2) = 380: y3(2) = 210: x4(2) = 310: y4(2) = 150
dessin$(2) = "b m260,90 c15 m300,170 m380,210 m200,240 m70,220 m60,130 m120,70 m260,90"
sol(2) = 2
dessin$(3) = "b m70,150 c15 m200,70 m330,150 m200,230 m70,150"
sol(3) = 1
dessin$(4) = "b m260,90 c15 m350,160 m320,200 m200,230 m90,220 m60,130 m120,70 m260,90"
sol(4) = 1
x1(5) = 260: y1(5) = 170: x2(5) = 297: y2(5) = 134
x3(5) = 260: y3(5) = 235: x4(5) = 270: y4(5) = 170
'cercle
sol(5) = 2
x1(6) = 60: y1(6) = 240: x2(6) = 90: y2(6) = 170
x3(6) = 60: y3(6) = 70: x4(6) = 80: y4(6) = 170
dessin$(6) = "b m60,240 c15 m90,170 m60,70 m340,70 m380,170 m340,240 m60,240"
sol(6) = 2
dessin$(7) = "b m140,90 c15 m240,90 m360,240 m80,240 m140,90"
sol(7) = 1

'présentation
w$ = "Des formes vont s'afficher à l'écran."
z$ = "Tu devras choisir entre convexe ou concave."
CALL consigne(2, w$, z$, xx$)

SCREEN 9, , 0, 1
CALL titre2(titr$)
LINE (310, 30)-(310, 280), blancbrill
LOCATE 22, 15: PRINT an$(1)
LOCATE 22, 55: PRINT an$(2)
DRAW "b m50,130 c15 m110,60 m240,90 m270,180 m180,250 m80,230 m50,130"
PAINT (140, 170), rouge, blancbrill
DRAW "b m350,190 c15 m390,80 m510,70 m600,110 m580,230 m530,210 m440,250 m350,190"
PAINT (440, 170), rouge, blancbrill
SCREEN 9, , 0, 0
CALL attendre(1.5)
CIRCLE (530, 210), 20, jaune, , , coef2!
CALL entree
CLS
CALL titre3(titr$)

FOR jj = 1 TO 5
erreurs = 0
'tirage
DO
f = 0
z(jj) = INT(RND * 7) + 1
FOR j = 1 TO jj - 1
IF z(jj) = z(j) THEN f = 1: EXIT FOR
NEXT
LOOP WHILE f = 1
choix = z(jj)

conv10:
'SCREEN 9, , 1, 0 '===
CALL titre3(titr$)
LINE (0, 28)-(426, 270), bleu, BF
LINE (440, 70)-(620, 220), noir, BF
IF choix <> 5 THEN
DRAW dessin$(choix)
ELSE
CIRCLE (x, y), 100, blancbrill, 30 * (pi / 180), 300 * (pi / 180)'sans coef2!
LINE (297, 134)-(260, 170), blancbrill
LINE -(260, 235)
END IF
PAINT (x, y), rouge, blancbrill

'SCREEN 9, , 1, 1 '===
MouseInit
MouseShow
conv11:
LOCATE 23: PRINT SPACE$(80)
LOCATE 22, 77: COLOR vertclair: PRINT 6 - jj
COLOR blanc: LOCATE 18, 62: PRINT gg$

CALL flechesbis(11, 62, an$(), 2, r)

IF r = 0 THEN CALL quitter: GOTO conv11
IF r = sol(choix) THEN
CALL exact(.7)
IF erreurs = 0 THEN re = re + 2
ELSE
erreurs = erreurs + 1
CALL erreur(.5)
LOCATE 23: PRINT SPACE$(80)
IF sol(choix) = 2 THEN
CALL centre(23, rougeclair, "Regarde")
LINE (x1(choix), y1(choix))-(x2(choix), y2(choix)), rougeclair
LINE -(x3(choix), y3(choix)), rougeclair
LINE -(x1(choix), y1(choix)), rougeclair
IF couleur = 1 THEN cc = vert: cc2 = rougeclair ELSE cc = 7: cc2 = 0
PAINT (x4(choix), y4(choix)), cc, cc2
CALL attendre(4)
END IF
IF sol(choix) = 2 THEN GOTO conv10 ELSE GOTO conv11
END IF
LOCATE 23: PRINT SPACE$(80)
NEXT jj

'++++++++++

'résultats
CALL resultats(re, ni)

END SUB

DEFINT A-Z
SUB droitegauche (re, ni, rt$, gg$, pre$, titr$, noir, bleu, vert, rouge, marron, blanc, vertclair, cyanclair, rougeclair, jaune, blancbrill, couleur, coef1!, coef2!)
'1/12/96
DIM tortue1(1 TO 140) AS INTEGER
DIM tortue2(1 TO 200) AS INTEGER
DIM tortue3(1 TO 140) AS INTEGER
DIM tortue4(1 TO 200) AS INTEGER
z = 15
DIM pa(20), pa$(20), dessin$(z), parcours$(z), z(3), x(z), y(z)
titr$ = "droite - gauche"
'dessin de la tortue
tortue$ = "c15 m-10,+0 m+10,-20 m+10,+20 m-10,+0 b m+2,-1 p12,15 c0 m-4,+0 m+0,+1 m+4,0 m-2,0"

'tracés niveau 1 (idem à math CE niv 1)
dessin$(1) = "u40 r80 u40 r80 u40 l40 u40 r120 u40 r40"
parcours$(1) = "adagadagagadadagada"
x(1) = 200: y(1) = 260
dessin$(2) = "u40 l80 u40 r40 u40 l80 u40 r120 u40 r80"
parcours$(2) = "agadadagagadadagada"
x(2) = 320: y(2) = 260
dessin$(3) = "u40 l80 u40 l40 u40 l80 u40 r120 u40 l40"
parcours$(3) = "agadagadagadadagaga"
x(3) = 440: y(3) = 260
dessin$(4) = "u40 r200 u40 l200 u40 r200 u40 l160 u40 r80"
parcours$(4) = "adagagadadagagadada"
x(4) = 200: y(4) = 260
dessin$(5) = "u40 r40 u40 l120 u40 l80 u40 r40 u40 l120"
parcours$(5) = "adagagadagadadagaga"
x(5) = 440: y(5) = 260

'tracés niveau 2
dessin$(6) = "u120 r130 u50 r120 d90 r80 d80"
parcours$(6) = "adagadadagada"
x(6) = 170: y(6) = 240
dessin$(7) = "u150 r70 d50 r60 u50 r80 d150 r100"
parcours$(7) = "adadagagadadaga"
x(7) = 170: y(7) = 230
dessin$(8) = "u90 l60 u70 r140 d70 r90 d90 l90"
parcours$(8) = "agadadadagadada"
x(8) = 250: y(8) = 240
dessin$(9) = "u70 r120 d70 r130 d100 l130 u50 l120"
parcours$(9) = "adadagadadadaga"
x(9) = 200: y(9) = 140
dessin$(10) = "u120 l100 u50 l110 d100 l80 d70"
parcours$(10) = "agadagagadaga"
x(10) = 450: y(10) = 240

'tracés difficiles NIV 3
dessin$(11) = "u90 l80 d160 r190 u160 r80 d90 r80 d70"
parcours$(11) = "agagagagadadagada"
x(11) = 220: y(11) = 170
dessin$(12) = "u60 r130 d60 r60 u160 l60 d60 l190 d100 l70"
parcours$(12) = "adadagagagagadagada"
x(12) = 290: y(12) = 230
dessin$(13) = "u60 l60 d120 r120 u180 l180 d180 l60 u60 l60 d60"
parcours$(13) = "agagagagagagadadagaga"
x(13) = 390: y(13) = 180
dessin$(14) = "u60 l60 u60 l60 u60 l60 d60 l60 d60 l60 d60 r180"
parcours$(14) = "agadagadagagadagadagaga"
x(14) = 470: y(14) = 240
dessin$(15) = "u120 r60 d60 r60 d60 r60 u60 r60 u60 r60 d120"
parcours$(15) = "adadagadagagadagadada"
x(15) = 170: y(15) = 240

'choix de la difficulté
CALL niveau(ni, 3, titr$)

SELECT CASE ni
CASE 1
nombre = 0
CASE 2
nombre = 5
CASE 3
nombre = 10
END SELECT

'présentation
CALL titre(titr$)
CALL cadre(5, 5, 70, 14, marron)
COLOR , marron
IF pre$ <> "" THEN
CALL centre(7, blancbrill, pre$ + ",")
LOCATE 9, 7
PRINT "à l'aide des touches ";
ELSE
LOCATE 9, 7
PRINT "A l'aide des touches ";
END IF
COLOR vertclair: PRINT "A D G"; : COLOR blancbrill
PRINT ", tu vas faire "; : COLOR vertclair: PRINT "A"; : COLOR blancbrill: PRINT "vancer, tourner à "; : COLOR vertclair: PRINT "D"; : COLOR blancbrill: PRINT "roite ou"
PRINT
LOCATE 11, 10: PRINT "tourner à "; : COLOR vertclair: PRINT "G": COLOR blancbrill
LOCATE 11, 21: PRINT "auche un petit triangle sur un itinéraire tracé."
LOCATE 14, 13
COLOR noir: PRINT "Attention"; : COLOR blancbrill: PRINT " : c'est la droite ou la gauche du triangle."
CALL centre(17, jaune, "Un conseil : imagine que le triangle, c'est ton nez vu de dessus !")
CALL entree

GOSUB drga2 'mémorise les tortues

SCREEN 9, , 0, 0

'programme

FOR jj = 1 TO 3 ' 3 essais
flag = 1: points = 0
CALL titre2(titr$)
LOCATE 22: PRINT SPACE$(79): COLOR vertclair: LOCATE 22, 1: PRINT "Niveau"; ni
LOCATE 22, 77: PRINT 4 - jj

'tirage
DO
f = 0
z(jj) = INT(RND * 5) + 1
FOR j = 1 TO jj - 1
IF z(jj) = z(j) THEN f = 1: EXIT FOR
NEXT
LOOP WHILE f = 1
choix = z(jj) + nombre

GOSUB drga1

'affichage parcours
x = x(choix): y = y(choix) 'points de départ
DRAW "TA0 B m=" + VARPTR$(x) + ",=" + VARPTR$(y)
DRAW "c=" + VARPTR$(jaune) + dessin$(choix)
DRAW "TA0 B m=" + VARPTR$(x) + ",=" + VARPTR$(y)
GOSUB drga11


'tests et affichages
boucle = 1: boucle2 = 1
DO
dg1:
LOCATE 23, 27
COLOR blanc: PRINT "<"; : COLOR vertclair: PRINT "A"; : COLOR blanc: PRINT ">vance <";
COLOR vertclair: PRINT "D"; : COLOR blanc: PRINT ">roite <"; : COLOR vertclair: PRINT "G";
COLOR blanc: PRINT ">auche"

MouseBorder 308, 10, 320, 630
MouseShow
DEF SEG = 0
POKE 1050, PEEK(1052)
DEF SEG
souris = 0
DO
r$ = INKEY$
' Obtient l'emplacement de la souris et l'état des boutons.
MousePoll v_mouse, h_mouse, lButton, rButton
'LOCATE 22, 1: PRINT v_mouse, h_mouse '===
'réso EGA
IF lButton THEN
IF v_mouse >= 308 AND v_mouse <= 320 THEN
IF h_mouse >= 208 AND h_mouse <= 270 THEN
'lettre A
rr = 65
CALL attendre(.2)
souris = 1
EXIT DO
ELSEIF h_mouse >= 288 AND h_mouse <= 350 THEN
'lettre D
rr = 68
CALL attendre(.2)
souris = 1
EXIT DO
ELSEIF h_mouse >= 368 AND h_mouse <= 430 THEN
'lettre G
rr = 71
CALL attendre(.2)
souris = 1
EXIT DO
ELSE
BEEP
END IF
ELSE
BEEP
END IF
END IF
LOOP WHILE r$ = ""

IF souris = 0 THEN
IF LEN(r$) < 2 THEN rr = ASC(r$) ELSE rr = ASC(RIGHT$(r$, 1))
END IF

IF rr = 27 THEN CALL quitter: GOTO dg1

MouseHide

ON flag GOSUB drga11, drga12, drga13, drga14
SELECT CASE rr

CASE 65, 97 'avance
IF MID$(parcours$(choix), boucle, 1) = "a" THEN

dire$ = LEFT$(pa$(boucle2), 1)
CALL exact(0)
DRAW "TA0 B m=" + VARPTR$(x) + ",=" + VARPTR$(y) + "c=" + VARPTR$(cyanclair) + pa$(boucle2)
IF dire$ = "u" THEN
GOSUB drgaup
ELSEIF dire$ = "d" THEN
GOSUB drgadown
ELSEIF dire$ = "r" THEN
GOSUB drgaright
ELSEIF dire$ = "l" THEN
GOSUB drgaleft
END IF
boucle = boucle + 1: boucle2 = boucle2 + 1
ELSE
CALL erreur(.5): points = points + 1
ON flag GOSUB drga11, drga12, drga13, drga14
END IF

CASE 68, 100 'droite
IF MID$(parcours$(choix), boucle, 1) = "d" THEN
ON flag GOSUB drga12, drga13, drga14, drga11
flag = flag + 1: IF flag > 4 THEN flag = 1
CALL exact(.3)
boucle = boucle + 1
ELSE
ON flag GOSUB drga12, drga13, drga14, drga11
CALL erreur(.6): points = points + 1
ON flag GOSUB drga12, drga13, drga14, drga11
ON flag GOSUB drga11, drga12, drga13, drga14
END IF

CASE 71, 103 'gauche
IF MID$(parcours$(choix), boucle, 1) = "g" THEN
ON flag GOSUB drga14, drga11, drga12, drga13
flag = flag - 1: IF flag < 1 THEN flag = 4
CALL exact(.3)
boucle = boucle + 1
ELSE
ON flag GOSUB drga14, drga11, drga12, drga13
CALL erreur(.6): points = points + 1
ON flag GOSUB drga14, drga11, drga12, drga13
ON flag GOSUB drga11, drga12, drga13, drga14
END IF

CASE ELSE
BEEP
ON flag GOSUB drga11, drga12, drga13, drga14

END SELECT

LOOP WHILE boucle < LEN(parcours$(choix)) + 1
LOCATE 23: PRINT SPACE$(80)
IF points > 1 THEN
s$ = "Tu as fait" + STR$(points) + " erreurs."
ELSEIF points = 0 THEN
s$ = "Aucune erreur !"
ELSE
s$ = "Tu as fait une erreur."
END IF
CALL centre(23, jaune, s$)
CALL attendre(3)
LOCATE 23: PRINT SPACE$(80)
fautes = fautes + points
NEXT jj

'fin programme

'résultats
re = 10 - fautes: IF re < 0 THEN re = 0
CALL resultats(re, ni)
EXIT SUB

drga1:
'les distances
nbe = 1: x = 1
dessin$(choix) = LCASE$(dessin$(choix))
dessin$(choix) = LTRIM$(dessin$(choix)): dessin$(choix) = RTRIM$(dessin$(choix)): dessin$(choix) = dessin$(choix) + " "
DO
espace = INSTR(x, dessin$(choix), " ")
IF espace <> 0 THEN
pa$(nbe) = MID$(dessin$(choix), x, espace - x)
pa(nbe) = VAL(MID$(dessin$(choix), x + 1, espace - x))
nbe = nbe + 1: x = espace + 1
END IF
LOOP WHILE espace
nbe = nbe - 1
RETURN

drga2:
SCREEN 9, , 1, 0
x = 320: y = 175
CLS 1
DRAW "m320,175 " + tortue$
GET (x - 10, y)-(x + 10, y - 20), tortue1
CLS 1
DRAW "m320,175 ta270" + tortue$
GET (x, y - 10)-(x + 27, y + 10), tortue2
CLS 1
DRAW "m320,175 ta180" + tortue$
GET (x - 10, y)-(x + 10, y + 20), tortue3
CLS 1
DRAW "m320,175 ta90" + tortue$
GET (x, y - 10)-(x - 27, y + 10), tortue4
RETURN

drga11:
PUT (x - 10, y - 20), tortue1, XOR
RETURN
drga12:
PUT (x, y - 10), tortue2, XOR
RETURN
drga13:
PUT (x - 10, y), tortue3, XOR
RETURN
drga14:
PUT (x - 27, y - 10), tortue4, XOR
RETURN

drgaup:
FOR i = 1 TO pa(boucle2) / 10
GOSUB drga11
CALL attendre(.05)
GOSUB drga11
y = y - 10
NEXT
GOSUB drga11
flag = 1
RETURN

drgadown:
FOR i = 1 TO pa(boucle2) / 10
GOSUB drga13
CALL attendre(.05)
GOSUB drga13
y = y + 10
NEXT
GOSUB drga13
flag = 3
RETURN

drgaright:
FOR i = 1 TO pa(boucle2) / 10
GOSUB drga12
CALL attendre(.05)
GOSUB drga12
x = x + 10
NEXT
GOSUB drga12
flag = 2
RETURN

drgaleft:
FOR i = 1 TO pa(boucle2) / 10
GOSUB drga14
CALL attendre(.05)
GOSUB drga14
x = x - 10
NEXT
GOSUB drga14
flag = 4
RETURN
END SUB

DEFINT A-Z
SUB intrus (re, ni, motintrus$(), rt$, gg$, pre$, titr$, noir, bleu, vert, rouge, marron, blanc, vertclair, cyanclair, rougeclair, jaune, blancbrill, couleur, coef1!, coef2!)
nbeliste = 10
nbeserie = nbeliste / 2

DIM mot$(10, 10), mot2$(10), z(10), sol(10), nbe(10)
DIM p4$(2)

p4$(1) = "Niveau 1": p4$(2) = "Niveau 2"
re = 0: q = 1

k = 0
FOR i = 1 TO nbeliste
j = 0
DO
j = j + 1: k = k + 1
mot$(i, j) = motintrus$(k)
IF RIGHT$(mot$(i, j), 1) = "*" THEN
mot$(i, j) = MID$(mot$(i, j), 1, LEN(mot$(i, j)) - 1)
sol(i) = j
END IF
LOOP WHILE mot$(i, j) <> "="
nbe(i) = j - 1
NEXT i


'i = nbe de listes
'nbe(i) = nbe de mots dans la liste i
'mot$(i,j) = mots j dans la liste i
'* repère pour l'intrus
'= repère pour la fin de la liste
'la solution est avant l'=
'sol(i) indique le numéro de l'intrus

CALL niveau(ni, 2, titr$)

IF ni = 1 THEN niv2 = 1 ELSE niv2 = nbeserie + 1

'présentation
w$ = "Tu vas devoir trouver le mot 'pirate'"
z$ = "dans une liste de propositions."
CALL consigne(2, w$, z$, xx$)

'affectation
bb = 1
FOR boucle = 1 TO nbeserie

'tirage aléatoire des séries
DO
f = 0
z(boucle) = INT(RND * nbeserie) + niv2
FOR j = 1 TO boucle - 1
IF z(boucle) = z(j) THEN f = 1: EXIT FOR
NEXT
LOOP WHILE f = 1
numeroboucle = z(boucle)

FOR i = 1 TO nbe(numeroboucle)
mot2$(i) = mot$(numeroboucle, i)
NEXT
nbemot = nbe(numeroboucle) - 1


'demande réponse
CALL titre(titr$)
CALL cadre(4, 20, 40, 2, marron)
COLOR , marron
CALL centre(5, blancbrill, "Sélectionne l'intrus")
COLOR , bleu

erreurs = 0
DO
intrus5:

COLOR vertclair, noir
LOCATE 22, 1: PRINT p4$(ni)
LOCATE 22, 78: PRINT (nbeserie + 1) - boucle

'détermine v
SELECT CASE nbemot
CASE 1 TO 3
v = 11
CASE 4 TO 6
v = 10
CASE 7 TO 9
v = 8
CASE 10 TO 12
v = 6
CASE 13 TO 15
v = 5
END SELECT
'trouver longueur mot max
l2 = 0
FOR i = 1 TO nbemot
l1 = LEN(mot2$(i)): IF l2 < l1 THEN l2 = l1
NEXT
h = INT(41 - (l2 / 2))
'CALL cadre(v - 2, h - 3, l2 + 4, nbemot + 3, rouge)

CALL fleches(v, h, mot2$(), nbemot, r, rouge, 1, 23, 35)

COLOR , noir

LOCATE 22, 1: PRINT SPACE$(80): PRINT SPACE$(80)
IF r = 0 THEN
CALL quitter: GOTO intrus5
ELSEIF r <> sol(numeroboucle) THEN
erreurs = erreurs + 1
IF erreurs < 3 THEN
CALL erreur(.6)
ELSE
CALL centre(23, rougeclair, "Solution : " + mot2$(sol(numeroboucle)))
CALL attendre(2)
LOCATE 23, 1: PRINT SPACE$(80)
COLOR , bleu

END IF
END IF
LOOP WHILE r <> sol(numeroboucle)
CALL exact(.5): IF erreurs = 0 THEN re = re + 2
LOCATE 22: PRINT SPACE$(80)
CALL centre(23, vertclair, mot2$(nbemot + 1))
CALL attendre(3)
bb = bb + 1: IF bb > 3 THEN bb = 1
NEXT boucle

CALL resultats(re, ni)
END SUB

DEFINT A-Z
SUB orth (prog, re, ni, mo$(), rt$, gg$, pre$, titr$, noir, bleu, vert, rouge, marron, blanc, vertclair, cyanclair, rougeclair, jaune, blancbrill, couleur, coef1!, coef2!)
DIM p2$(4), z(10)
'12/4/96
nbmots = 39: re = 0
p2$(1) = "lente": p2$(2) = "moyenne"
p2$(3) = "rapide": p2$(4) = "très rapide"
lp$ = STRING$(22, ".")
'debut
c = 0

CALL niveau(ni, 3, titr$)

vit = 2
IF ni = 1 THEN
nombre = 1
ELSEIF ni = 2 THEN
nombre = 14
ELSE
nombre = 27
END IF


CALL titre(titr$)

'affichage des mots
CALL cadre(4, 30, 20, 14, marron)
COLOR blancbrill, marron

LOCATE 5
FOR i = 0 TO 12
LOCATE , 35
PRINT mo$(i + nombre)
NEXT
COLOR , noir
CALL centre(23, blanc, "Mémorise l'orthographe des mots")
CALL getinvimouse(r)

'prg principal_

FOR ii = 1 TO 10
CALL titre(titr$)
LOCATE 22, 3: COLOR vertclair, noir: PRINT "Niveau"; ni;
LOCATE , 77: PRINT STR$(11 - ii); " "
CALL cadre(10, 28, 24, 4, blanc)
MouseHide

DO
f = 0
z(ii) = INT(RND * 13) + nombre
FOR j = 1 TO ii - 1
IF z(ii) = z(j) THEN f = 1: EXIT FOR
NEXT
LOOP WHILE f = 1
nn = z(ii)

s$ = mo$(nn)

DO

CALL cadre(6, 28, 24, 2, vert)
COLOR , vert
CALL centre(7, blancbrill, "Vitesse " + p2$(vit))
COLOR , blanc
TR = 0
p$ = MID$(lp$, 1, LEN(s$))
FOR x = 2 TO LEN(s$)
IF ASC(MID$(s$, x, 1)) = 32 THEN TR = x
NEXT
IF TR <> 0 THEN p$ = MID$(p$, 1, TR - 1) + " " + MID$(p$, TR + 1)

CALL attendre(.5)
IF ct = 0 THEN
SELECT CASE ii
CASE 1, 4, 7, 10, 13, 16, 19
CALL centre(12, noir, s$)
CALL attendre(.4 * (2 / vit))

CASE 2, 5, 8, 11, 14, 17, 20
'lettre par lettre
CALL centre(12, noir, p$): COLOR noir, blanc
h = INT(41 - LEN(s$) / 2)
FOR x = 1 TO LEN(s$)
LOCATE 12, h
PRINT MID$(s$, x, 1)
CALL attendre(.4 * (2 / vit))
LOCATE 12, h
PRINT "."
h = h + 1
NEXT

CASE 3, 6, 9, 12, 15, 18
'flash
FOR x = 1 TO 3
CALL centre(12, noir, s$)
CALL attendre(.09)
CALL centre(12, noir, SPACE$(LEN(s$)))
CALL attendre(.15)
NEXT
END SELECT

ELSE
CALL centre(12, noir, s$)
CALL attendre(.4 * (2 / vit))

END IF

COLOR , blanc: CALL centre(12, noir, p$)
COLOR , noir
CALL centre(23, blanc, "Tape le mot")
COLOR blancbrill

DEF SEG = 0
POKE &H417, (PEEK(&H417) AND &HBF)'minus
DEF SEG

nl = LEN(s$): LOCATE 12, INT(41 - (LEN(s$) / 2))
COLOR noir, blanc
CALL inputgen(nl, r$, 32, 165)

LOCATE 13, 32: COLOR , blanc: PRINT SPACE$(18)
COLOR , noir
IF r$ = s$ THEN
cc = cc + 1
CALL exact(.7)
IF ct = 0 THEN re = re + 1
ct = 0
EXIT DO
ELSE
cc = 0: ct = 1
vit = vit - 1: IF vit < 1 THEN vit = 1
CALL erreur(.7)
'mettre en rouge là où c'est faux
COLOR , blanc
LOCATE 12, INT(41 - (LEN(s$) / 2))
FOR i = 1 TO LEN(r$)
IF MID$(s$, i, 1) = MID$(r$, i, 1) THEN
COLOR noir
ELSE
COLOR rouge
END IF
PRINT MID$(r$, i, 1);
NEXT
PRINT
LOCATE 13, INT(41 - (LEN(s$) / 2))
'on compte les erreurs
flag = 0
FOR i = 1 TO LEN(r$)
IF MID$(s$, i, 1) <> MID$(r$, i, 1) THEN
flag = flag + 1
END IF
NEXT

IF flag < 3 THEN
FOR i = 1 TO LEN(r$)
IF MID$(s$, i, 1) = MID$(r$, i, 1) THEN
PRINT " ";
ELSE
COLOR rouge
PRINT CHR$(24);
END IF
NEXT
ELSE
CALL centre(13, noir, SPACE$(LEN(s$)))
END IF
CALL attendre(1)
END IF
LOOP
COLOR , noir
LOCATE 23, 1: PRINT SPACE$(80)
IF vit = 1 AND cc = 2 THEN vit = 2: cc = 0
IF vit = 2 AND cc = 3 THEN vit = 3: cc = 0
IF vit = 3 AND cc = 4 THEN vit = 4: cc = 0
NEXT ii

CALL resultats(re, ni)

END SUB

DEFINT A-Z
SUB trouve (re, ni, rt$, gg$, pre$, titr$, noir, bleu, vert, rouge, marron, blanc, vertclair, cyanclair, rougeclair, jaune, blancbrill, couleur, coef1!, coef2!)
'4/12/96 souris
CONST gauche = 75, droite = 77, haut = 72, bas = 80
DIM cas(4, 2), z(10), zz(15), dessin$(15), des$(15)
DIM envers(1 TO 330) AS INTEGER

dessin$(1) = "r10 d10 r10 u10 r10 d30 r10 u10 r10 d20 r10 d10 l10 d10 l10 u10 l10 u10 l10 d20 l10 u30 l10 u30"
dessin$(2) = "b d10 r30 u 10 r20 d10 l10 d20 r10 u10 r10 d30 l20 d10 l10 u30 l10 d20 l20 u20 r10 u10 l10 u10"
dessin$(3) = "r10 d30 r10 u10 r10 u10 r10 u10 r20 d10 l10 d10 r10 d10 l20 d10 r10 d10 l20 u10 l10 d20 l10 u20 l10 u40"
dessin$(4) = "b r20 r10 d20 r10 u20 r20 d10 l10 d30 r10 d20 l10 u10 l10 u20 l10 d20 l10 d10 l10 u20 r10 u10 l20 u10 r10 u10 r10 u10"
dessin$(5) = "r30 d10 l20 d10 r30 u20 r20 d10 l10 d20 r10 d10 l20 d10 r10 d10 l20 u30 l10 d20 l10 d10 l10 u20 r10 u10 l10 u30"
dessin$(6) = "b r30 r30 d10 l10 d10 r10 d10 l20 d10 r10 d10 r10 d10 l20 u10 l10 u20 l10 d10 l10 d20 l10 u30 r10 u10 r10 u10 r10 u10"
dessin$(7) = "r10 d10 r10 u10 r10 d10 r10 u10 r20 d10 l10 d10 l20 d10 r20 d10 r10 d20 l10 u10 l10 u10 l10 d10 l10 d10 l10 u20 l10 u10 r10 u10 l10 u20"
dessin$(8) = "b r10 r10 d20 r10 u20 r10 d10 r10 u10 r10 d40 l10 u10 l10 d20 r20 d10 l30 u30 l10 d10 l10 d20 l10 u40 r10 u20"
dessin$(9) = "r10 d10 r10 d10 r10 u10 r10 d10 r10 d10 r10 d10 l10 d10 l10 u10 l10 d20 l30 u10 r20 u10 l10 u20 l10 u20"
dessin$(10) = "r10 d30 r20 u10 l10 u20 r10 d10 r10 u10 r20 d10 l10 d10 l10 d10 r20 d30 l10 u10 l10 u10 l10 d10 l10 d10 l20 u10 r10 u10 l10 u40"
dessin$(11) = "b r10 r30 d10 l10 d10 r20 d30 r10 d10 l20 u20 l10 d20 l10 u10 l10 d10 l10 u20 r10 u10 l10 u10 r20 u10 l10 u10"
dessin$(12) = "r20 d10 l10 d10 r40 u10 l20 u10 r30 d30 l20 d10 r20 d10 l20 d10 l10 u20 l10 d20 l20 u20 r10 u10 l10 u30"
dessin$(13) = "b r30 r10 d10 r10 d10 r10 d10 l20 d10 r20 d20 l10 u10 l10 d10 l10 u10 l20 d10 l10 u30 r10 u10 r10 u10 r10 u10"
dessin$(14) = "r20 d20 r10 u10 r20 u10 r10 d20 l10 d10 l10 d10 r10 d10 r10 d10 l20 u10 l10 u10 l20 d20 l10 u30 r10 u20 l10 u10"
dessin$(15) = "r10 d20 r10 u20 r20 d10 r10 u10 r10 d20 l30 d10 r10 d10 r10 d10 r10 d10 l20 u10 l20 d10 l10 u30 l10 u30"
re = 0
g$ = CHR$(27) + " " + CHR$(26) + " " + CHR$(24) + " " + CHR$(25) + " "

x = 1
FOR ligne = 0 TO 2
FOR colo = 0 TO 4
cas(colo, ligne) = x
x = x + 1
NEXT colo, ligne
DEF SEG = 0
POKE &H417, (PEEK(&H417) AND &H9F)'non numérique
DEF SEG
CALL niveau(ni, 3, titr$)

GOSUB trouve40 'présentation

SCREEN 9, , 0, 1
'mémorisation des lettres : matrice 8 x 14
x = 0: y = 0
PRINT "A l'envers"
GET (x, y)-(x + 8 * 10, y + 13), envers
LOCATE 1: PRINT SPACE$(11)
SCREEN 9, , 0, 0

CALL titre2(titr$)
LINE (15, 40)-(225, 270), blancbrill, B

'on mélange
FOR i = 1 TO 15
DO
f = 0
zz(i) = INT(RND * 15) + 1
FOR j = 1 TO i - 1
IF zz(i) = zz(j) THEN f = 1: EXIT FOR
NEXT
LOOP WHILE f = 1
des$(i) = dessin$(zz(i))
NEXT i
d = 1
FOR y = 45 TO 205 STEP 80
FOR x = 240 TO 560 STEP 80
DRAW "b m=" + VARPTR$(x) + ",=" + VARPTR$(y) + " c=" + VARPTR$(jaune) + des$(d) + "bm+2,+2 p=" + VARPTR$(cyanclair) + ",=" + VARPTR$(jaune)
d = d + 1
NEXT x, y
IF ni = 3 THEN PUT (80, 47), envers, XOR

'+++++++++++++++++
FOR jj = 1 TO 10
LINE (25, 59)-(215, 255), bleu, BF
erreurs = 0
COLOR vertclair: LOCATE 22, 31: PRINT "Niveau"; ni
LOCATE 22, 77: PRINT 11 - jj
GOSUB trouve14

'tirage
DO
f = 0
z(jj) = INT(RND * 15) + 1
FOR j = 1 TO jj - 1
IF z(jj) = z(j) THEN f = 1: EXIT FOR
NEXT
LOOP WHILE f = 1
choix = z(jj)

IF ni = 1 THEN
cc2 = vertclair
x = 95: y = 125
DRAW "b m=" + VARPTR$(x) + ",=" + VARPTR$(y) + " c=" + VARPTR$(blancbrill) + des$(choix) + "bm+2,+2 p=" + VARPTR$(cc2) + ",=" + VARPTR$(blancbrill)

ELSEIF ni = 2 THEN
cc2 = rougeclair
'agrandissement
scale = INT(RND * 2) + 1
IF scale = 1 THEN
x = 30: y = 65: s = 12
ELSE
x = 60: y = 95: s = 8
END IF
COLOR blancbrill
LOCATE 22, 10: PRINT "Echelle : x" + STR$(s / 4)
DRAW "b m=" + VARPTR$(x) + ",=" + VARPTR$(y) + " c=" + VARPTR$(blancbrill) + "s=" + VARPTR$(s) + des$(choix) + "bm+9,+9 p=" + VARPTR$(cc2) + ",=" + VARPTR$(blancbrill) + "ta0"

ELSE
'rotation et agrandissement
cc2 = vertclair
scale = INT(RND * 3) + 1
IF scale = 1 THEN
x = 95 + 60: y = 125 + 60: s = 4
ELSEIF scale = 2 THEN
x = 60 + 120: y = 95 + 120: s = 8
ELSE
x = 30 + 180: y = 65 + 180: s = 12
END IF
COLOR blancbrill
LOCATE 22, 10: PRINT "Echelle : x" + STR$(s / 4)
DRAW "b m=" + VARPTR$(x) + ",=" + VARPTR$(y) + "a2 c=" + VARPTR$(blancbrill) + "s=" + VARPTR$(s) + des$(choix) + "bm+9,+9 p=" + VARPTR$(cc2) + ",=" + VARPTR$(blancbrill) + "ta0"
END IF

VIEW (235, 40)-(635, 270)
colo = 0: ligne = 0
LINE (80 * colo, 80 * ligne)-(70 + 80 * colo, 70 + 80 * ligne), vertclair, B, &H7777
flag = 1

DO
col2 = colo: ligne2 = ligne

trouve11:
MouseBorder 45, 240, 320, 620
MouseShow
DEF SEG = 0
POKE 1050, PEEK(1052)
DEF SEG
souris = 0
DO
r$ = INKEY$
' Obtient l'emplacement de la souris et l'état des boutons.
MousePoll v_mouse, h_mouse, lButton, rButton
'LOCATE 22, 1: PRINT v_mouse, h_mouse '===
'réso EGA
IF lButton THEN
IF v_mouse >= 45 AND v_mouse <= 105 THEN
IF h_mouse >= 240 AND h_mouse <= 300 THEN
'1° carre
colo = 0: ligne = 0: souris = 2
CALL attendre(.2)
EXIT DO
ELSEIF h_mouse >= 320 AND h_mouse <= 380 THEN
'2° carre
colo = 1: ligne = 0: souris = 2
CALL attendre(.2)
EXIT DO
ELSEIF h_mouse >= 400 AND h_mouse <= 460 THEN
'3°
colo = 2: ligne = 0: souris = 2
CALL attendre(.2)
EXIT DO
ELSEIF h_mouse >= 480 AND h_mouse <= 560 THEN
'4°
colo = 3: ligne = 0: souris = 2
CALL attendre(.2)
EXIT DO
ELSEIF h_mouse >= 560 AND h_mouse <= 620 THEN
'5°
colo = 4: ligne = 0: souris = 2
CALL attendre(.2)
EXIT DO
ELSE
BEEP
END IF
ELSEIF v_mouse >= 125 AND v_mouse <= 185 THEN
IF h_mouse >= 240 AND h_mouse <= 300 THEN
'1° carre
colo = 0: ligne = 1: souris = 2
CALL attendre(.2)
EXIT DO
ELSEIF h_mouse >= 320 AND h_mouse <= 380 THEN
'2° carre
colo = 1: ligne = 1: souris = 2
CALL attendre(.2)
EXIT DO
ELSEIF h_mouse >= 400 AND h_mouse <= 460 THEN
'3°
colo = 2: ligne = 1: souris = 2
CALL attendre(.2)
EXIT DO
ELSEIF h_mouse >= 480 AND h_mouse <= 560 THEN
'4°
colo = 3: ligne = 1: souris = 2
CALL attendre(.2)
EXIT DO
ELSEIF h_mouse >= 560 AND h_mouse <= 620 THEN
'5°
colo = 4: ligne = 1: souris = 2
CALL attendre(.2)
EXIT DO
ELSE
BEEP
END IF
ELSEIF v_mouse >= 205 AND v_mouse <= 265 THEN
IF h_mouse >= 240 AND h_mouse <= 300 THEN
'1° carre
colo = 0: ligne = 2: souris = 2
CALL attendre(.2)
EXIT DO
ELSEIF h_mouse >= 320 AND h_mouse <= 380 THEN
'2° carre
colo = 1: ligne = 2: souris = 2
CALL attendre(.2)
EXIT DO
ELSEIF h_mouse >= 400 AND h_mouse <= 460 THEN
'3°
colo = 2: ligne = 2: souris = 2
CALL attendre(.2)
EXIT DO
ELSEIF h_mouse >= 480 AND h_mouse <= 560 THEN
'4°
colo = 3: ligne = 2: souris = 2
CALL attendre(.2)
EXIT DO
ELSEIF h_mouse >= 560 AND h_mouse <= 620 THEN
'5°
colo = 4: ligne = 2: souris = 2
CALL attendre(.2)
EXIT DO
ELSE
BEEP
END IF

ELSEIF v_mouse >= 308 AND v_mouse <= 320 THEN
'fleches
IF h_mouse >= 370 AND h_mouse <= 385 THEN
'gauche
valtouche = gauche
CALL attendre(.2)
souris = 1
EXIT DO
ELSEIF h_mouse >= 387 AND h_mouse <= 402 THEN
'droite
valtouche = droite
CALL attendre(.2)
souris = 1
EXIT DO
ELSEIF h_mouse >= 405 AND h_mouse <= 415 THEN
'haut
valtouche = haut
CALL attendre(.2)
souris = 1
EXIT DO
ELSEIF h_mouse >= 420 AND h_mouse <= 435 THEN
'bas
valtouche = bas
CALL attendre(.2)
souris = 1
EXIT DO
ELSEIF h_mouse >= 490 AND h_mouse <= 520 THEN
'return
valtouche = 13
CALL attendre(.2)
souris = 1
EXIT DO
ELSE
BEEP
END IF
ELSE
BEEP
END IF
END IF
LOOP WHILE r$ = ""

MouseHide

IF souris = 2 THEN
LINE (80 * col2, 80 * ligne2)-(70 + 80 * col2, 70 + 80 * ligne2), bleu, B
LINE (80 * colo, 80 * ligne)-(70 + 80 * colo, 70 + 80 * ligne), vertclair, B, &H7777
col2 = colo: ligne2 = ligne
EXIT DO
END IF

IF souris = 0 THEN
IF LEN(r$) < 2 THEN valtouche = ASC(r$) ELSE valtouche = ASC(RIGHT$(r$, 1))
END IF

IF valtouche = 50 THEN valtouche = bas
IF valtouche = 52 THEN valtouche = gauche
IF valtouche = 54 THEN valtouche = droite
IF valtouche = 56 THEN valtouche = haut

SELECT CASE valtouche
CASE gauche
colo = colo - 1
IF colo = -1 THEN colo = 4: ligne = ligne - 1
IF ligne = -1 THEN ligne = 2: colo = 4

CASE droite
colo = colo + 1
IF colo = 5 THEN colo = 0: ligne = ligne + 1
IF ligne = 3 THEN ligne = 0: colo = 0

CASE haut
ligne = ligne - 1
IF ligne = -1 THEN ligne = 2

CASE bas
ligne = ligne + 1
IF ligne = 3 THEN ligne = 0

CASE 27
CALL quitter: GOSUB trouve14: GOTO trouve11

CASE 13
EXIT DO

CASE ELSE
BEEP

END SELECT

LINE (80 * col2, 80 * ligne2)-(70 + 80 * col2, 70 + 80 * ligne2), bleu, B
LINE (80 * colo, 80 * ligne)-(70 + 80 * colo, 70 + 80 * ligne), vertclair, B, &H7777

LOOP

LOCATE 22: PRINT SPACE$(80): PRINT SPACE$(80)

reponse = cas(colo, ligne)

'tester la reponse
IF reponse = choix THEN
CALL exact(1.5)
IF erreurs = 0 THEN re = re + 1
ELSE
erreurs = erreurs + 1
IF erreurs > 1 THEN
BEEP: CALL centre(23, rougeclair, "Regarde"): CALL attendre(1)
IF choix < 6 THEN
c = choix
ELSEIF choix < 11 THEN
c = choix - 5
ELSE
c = choix - 10
END IF
x = 240 + 80 * (c - 1)

IF choix < 6 THEN
l = 0
ELSEIF choix < 11 THEN
l = 1
ELSE
l = 2
END IF
y = 45 + 80 * l
IF couleur = 1 THEN cc = rougeclair: cc2 = rouge ELSE cc2 = 0: cc = 7
DRAW "b m=" + VARPTR$(x) + ",=" + VARPTR$(y) + " c=" + VARPTR$(cc) + des$(choix) + "bm+2,+2 p=" + VARPTR$(cc2) + ",=" + VARPTR$(cc)
CALL entree
DRAW "b m=" + VARPTR$(x) + ",=" + VARPTR$(y) + " c=" + VARPTR$(jaune) + des$(choix) + "bm+2,+2 p=" + VARPTR$(cyanclair) + ",=" + VARPTR$(jaune)
ELSE
CALL erreur(.7)
END IF
GOSUB trouve14: GOTO trouve11
END IF

LINE (80 * colo, 80 * ligne)-(70 + 80 * colo, 70 + 80 * ligne), bleu, B
VIEW

NEXT jj

'résultats
CALL resultats(re, ni)

EXIT SUB
'++++++++++++++++++++++++

trouve14:
LOCATE 23: PRINT SPACE$(80)
COLOR blanc: LOCATE 23, 48: PRINT g$ + " puis " + rt$
RETURN

trouve40:
w$ = "Avec les flèches " + g$ + ", tu vas devoir retrouver une forme."
z$ = "La forme présentée va être agrandie 2 ou 3 fois."
xx$ = "La forme présentée sera à l'envers."

SELECT CASE ni
CASE 1
CALL consigne(1, w$, z$, xx$)
CASE 2
CALL consigne(2, w$, z$, xx$)
CASE 3
CALL consigne(3, w$, z$, xx$)
END SELECT
RETURN

END SUB
 

 

DECLARE SUB MouseBorder (row1%, col1%, row2%, col2%)
DECLARE SUB MouseHide ()
DECLARE SUB MouseShow ()
DECLARE SUB MousePoll (row%, col%, lButton%, rButton%)
DECLARE SUB getinvimouse (rr%)
DECLARE SUB consigne (nl%, w$, z$, xx$)
DECLARE SUB cadre (v%, h%, l%, nli%, c%)
DECLARE SUB centre (v%, coul%, ph$)
DECLARE SUB quitter ()
DECLARE SUB getinvi (rr%)
DECLARE SUB niveau (r%, np%, titr$)
DECLARE SUB titre (titr$)
DECLARE SUB attendre (tx!)
DECLARE SUB cadre3 (v%, h%, nb%, coul%)
DECLARE SUB entree ()
DECLARE SUB erreur (tx!)
DECLARE SUB exact (tx!)
DECLARE SUB resultats (re%, ni%)
DECLARE SUB titre2 (titr$)
DECLARE SUB titre3 (titr$)
DECLARE SUB flechesbis (v%, h%, p$(), np%, r%)
'exo 4 géométrie
'Daniel Clerc 7/4/96
'version 1.5


DEFINT A-Z
SUB angle1 (re, ni, rt$, gg$, pre$, titr$, noir, bleu, vert, rouge, marron, blanc, vertclair, cyanclair, rougeclair, jaune, blancbrill, couleur, coef1!, coef2!)
CONST pi = 3.141592653589#
DIM z(10), an$(5)
re = 0
an$(1) = "nul"
an$(2) = "aigu"
an$(3) = "droit"
an$(4) = "obtus"
an$(5) = "plat"
y = 200

SCREEN 9
'présentation
CALL titre2(titr$)
rayon = 20
x = 30: h = 4
FOR choix = 1 TO 5
GOSUB angl2: GOSUB angl4
LOCATE 8, h: PRINT " "; an$(choix); " "
x = x + 133: h = h + 16
NEXT
IF pre$ <> "" THEN
CALL centre(23, vertclair, pre$ + ", mémorise...")
ELSE
CALL centre(23, vertclair, "Mémorise...")
END IF
CALL getinvimouse(r): IF r = 27 THEN CALL quitter
CLS
'tirage
z$ = ""
FOR k = 1 TO 2

FOR jj = 1 TO 5
DO
f = 0
z(jj) = INT(RND * 5) + 1
FOR j = 1 TO jj - 1
IF z(jj) = z(j) THEN f = 1: EXIT FOR
NEXT
LOOP WHILE f = 1
z$ = z$ + LTRIM$(STR$(z(jj)))
NEXT jj

NEXT k

CALL titre3(titr$)

x = 213: y = 200: rayon = 90

'++++++++++++++++++
FOR jj = 1 TO 10
erreurs = 0
'tirage
choix = VAL(MID$(z$, jj, 1))
GOSUB angl2

LOCATE 22, 77: COLOR vertclair: PRINT 11 - jj

GOSUB angl4 'dessin de l'angle
angl10:
COLOR blanc: LOCATE 18, 62: PRINT gg$
CALL flechesbis(9, 65, an$(), 5, r)
IF r = 0 THEN CALL quitter: GOTO angl10
IF r = choix THEN
CALL exact(.7)
IF erreurs = 0 THEN re = re + 1
ELSE
erreurs = erreurs + 1
IF erreurs > 2 THEN
CALL centre(23, rougeclair, "Solution : " + an$(choix))
ELSE
CALL erreur(.7)
LOCATE 23: PRINT SPACE$(80)
END IF
GOTO angl10
END IF
LINE (0, 28)-(426, 270), bleu, BF
LINE (500, 100)-(580, 200), noir, BF
LOCATE 23: PRINT SPACE$(80)
NEXT

'++++++++++
'résultats
CALL resultats(re, ni)
EXIT SUB


angl1:
angle = INT(RND * anglemaxi) + 1
IF angle < anglemini THEN GOTO angl1
RETURN

angl2:
SELECT CASE choix
CASE 1 'nul
angle = 0

CASE 2 'aigu
anglemini = 10: anglemaxi = 80
GOSUB angl1

CASE 3 'droit
angle = 90

CASE 4 'obtus
anglemini = 100: anglemaxi = 170
GOSUB angl1

CASE 5 'plat
angle = 180

END SELECT

anglefin! = angle * (pi / 180)
RETURN

angl4:
longu = rayon + 30
CIRCLE (x, y), 3, vertclair, , , coef2!
LINE (x, y)-(x + longu, y), rougeclair
CIRCLE (x, y), rayon, jaune, 0, anglefin! 'sans coef2!
angl = angle - 90
DRAW "ta0 c=" + VARPTR$(rougeclair) + "ta=" + VARPTR$(angl) + "u=" + VARPTR$(longu)
RETURN

END SUB

DEFINT A-Z
SUB angle2 (re, ni, rt$, gg$, pre$, titr$, noir, bleu, vert, rouge, marron, blanc, vertclair, cyanclair, rougeclair, jaune, blancbrill, couleur, coef1!, coef2!)
CONST pi = 3.141592653589#, x = 320, y = 170
re = 0

rayon = 30
anglefin! = 90 * (pi / 180)
DIM ang(12), z(5), rep(12), an(12)
'choix de la difficulté
CALL niveau(ni, 2, titr$)

'présentation
GOSUB ang3

IF ni = 1 THEN
GOSUB ang4
ELSE
GOSUB ang5
END IF

'début programme

FOR jj = 1 TO 5
erreurs = 0: flag = 0: flag2 = 0
'tirage
DO
f = 0
z(jj) = INT(RND * max) + 1
FOR j = 1 TO jj - 1
IF z(jj) = z(j) THEN f = 1: EXIT FOR
NEXT
LOOP WHILE f = 1
choix = z(jj)
reponse = rep(choix)
CALL titre2(titr$)
LOCATE 22: PRINT SPACE$(80)
DO
GOSUB ang6

LOCATE 22, 77: COLOR vertclair: PRINT 6 - jj

angleorigine! = ang(flag2) * (pi / 180)
IF flag2 = 0 THEN
'rien
ELSEIF flag2 = max THEN
IF couleur = 1 THEN PAINT (x + 2, y - 5), bleu, blancbrill
CIRCLE (x, y), rayon, bleu
ELSE
IF couleur = 1 THEN PAINT (x + 2, y - 5), bleu, blancbrill
CIRCLE (x, y), rayon, bleu, -angleorigine!, -anglefin!
END IF
angle = an(flag2)
DRAW "b m320,170 ta=" + VARPTR$(angle) + "c=" + VARPTR$(bleu) + " u100"

LINE (x, y)-(x, y - 100), blancbrill

angleorigine! = ang(flag) * (pi / 180)
IF flag = 0 THEN
'rien
ELSEIF flag = max THEN
CIRCLE (x, y), rayon, blancbrill
IF couleur = 1 THEN PAINT (x + 2, y - 5), vert, blancbrill
ELSE
CIRCLE (x, y), rayon, blancbrill, -angleorigine!, -anglefin!
IF couleur = 1 THEN PAINT (x + 2, y - 5), vert, blancbrill
END IF
angle = an(flag)
DRAW "b m320,170 ta=" + VARPTR$(angle) + "c=" + VARPTR$(blancbrill) + "u100"
LINE (x, y)-(x, y - 100), blancbrill
GOSUB ang6

flag2 = flag

ang2:
MouseBorder 308, 10, 320, 630
MouseShow
souris = 0
DEF SEG = 0
POKE 1050, PEEK(1052)
DEF SEG
DO
r$ = INKEY$
' Obtient l'emplacement de la souris et l'état des boutons.
MousePoll v_mouse, h_mouse, lButton, rButton
'matrice 14 x 8 = transforme en coord écran
v_mouse = INT(v_mouse / 14) + 1
h_mouse = INT(h_mouse / 8) + 1
'LOCATE 21, 1: PRINT v_mouse, h_mouse'===

IF lButton THEN
IF v_mouse = 23 THEN
IF h_mouse >= 19 AND h_mouse <= 31 THEN
valtouche = 72 'fleche haut
souris = 1
CALL attendre(.2)
EXIT DO
ELSEIF h_mouse >= 33 AND h_mouse <= 46 THEN
valtouche = 80 'fleche bas
souris = 1
CALL attendre(.2)
EXIT DO
ELSEIF h_mouse >= 49 AND h_mouse <= 61 THEN
valtouche = 13
souris = 1
CALL attendre(.3)
EXIT DO
ELSE
BEEP
END IF
END IF
END IF
LOOP WHILE r$ = ""

MouseHide

IF souris = 0 THEN
IF LEN(r$) < 2 THEN valtouche = ASC(r$) ELSE valtouche = ASC(RIGHT$(r$, 1))
END IF

SELECT CASE valtouche
CASE 27
CALL quitter

CASE 72 'haut
flag = flag - 1: IF flag < 0 THEN flag = 0: BEEP: GOTO ang2

CASE 80 'bas
flag = flag + 1: IF flag > max THEN flag = max: BEEP: GOTO ang2

CASE 73, 71 'home & pghaut
flag = 0

CASE 81, 79 'end & pgbas
flag = max

CASE 13
LOCATE 22: PRINT SPACE$(80): PRINT SPACE$(80)

IF flag = choix THEN
CALL exact(.7): LOCATE 23: PRINT SPACE$(80)
IF erreurs = 0 THEN re = re + 2
ELSE
erreurs = erreurs + 1
IF erreurs > 2 THEN
SCREEN 9, , 0, 1
CALL getinvimouse(r): IF r = 27 THEN CALL quitter
SCREEN 9, , 0, 0
ELSE
CALL erreur(.5)
CALL centre(23, rougeclair, "Ton angle est égal à" + STR$(rep(flag)) + " degrés.")
CALL getinvimouse(r): IF r = 0 THEN CALL quitter
END IF
LOCATE 23: PRINT SPACE$(80)
GOSUB ang6
GOTO ang2
END IF
EXIT DO

CASE ELSE
BEEP: GOTO ang2

END SELECT

LOOP

NEXT jj

'fin programme

'résultats
CALL resultats(re, ni)
EXIT SUB

ang3:
SCREEN 9
IF pre$ <> "" THEN
CALL centre(11, jaune, pre$ + ",")
CALL centre(13, jaune, "tu vas observer la valeur des angles.")
ELSE
CALL centre(13, jaune, "Tu vas observer la valeur des angles.")
END IF
CALL centre(16, blancbrill, "Un instant...")
SCREEN 9, , 1, 0
CALL centre(1, jaune, UCASE$(titr$))
LOCATE 2: COLOR rouge: PRINT STRING$(80, 196)
LOCATE 21: COLOR rouge: PRINT STRING$(80, 196)
GOSUB ang4
CIRCLE (160, 160), 73, jaune, , , coef2!
PAINT (160, 160), bleu, jaune
FOR i = 1 TO max - 1
CIRCLE (160, 160), 73, jaune, -ang(i) * (pi / 180), -90 * (pi / 180), coef2!
NEXT
GOSUB ang5
CIRCLE (480, 160), 73, jaune, , , coef2!
PAINT (480, 160), bleu, jaune
FOR i = 1 TO max - 1
CIRCLE (480, 160), 73, jaune, -ang(i) * (pi / 180), -90 * (pi / 180), coef2!
NEXT

FOR i = 1 TO 2
IF i = 1 THEN h = 17 ELSE h = 57
COLOR jaune: LOCATE 4, h: PRINT "Niveau"; i
COLOR blancbrill
LOCATE 6, h + 2: PRINT "0-360"
LOCATE 12, h - 9: PRINT "270"
LOCATE 12, h + 14: PRINT "90"
LOCATE 18, h + 3: PRINT "180"
NEXT
h = 21: COLOR vert
LOCATE 8, h + 7: PRINT "45"
LOCATE 8, h - 10: PRINT "315"
LOCATE 16, h + 7: PRINT "135"
LOCATE 16, h - 10: PRINT "225"
h = 63: COLOR vert
LOCATE 7, h + 3: PRINT "30"
LOCATE 7, h - 10: PRINT "330"
LOCATE 9, h + 7: PRINT "60"
LOCATE 9, h - 14: PRINT "300"
LOCATE 15, h + 7: PRINT "120"
LOCATE 15, h - 14: PRINT "240"
LOCATE 17, h + 3: PRINT "150"
LOCATE 17, h - 10: PRINT "210"
CALL centre(23, blanc, rt$)
SCREEN 9, , 0, 1
CLS
CALL getinvimouse(r): IF r = 27 THEN CALL quitter
SCREEN 9, , 0, 0

RETURN

ang4:
max = 8
ang(1) = 45: ang(2) = 360: ang(3) = 315: ang(4) = 270
ang(5) = 225: ang(6) = 180: ang(7) = 135

rep(1) = 45: rep(2) = 90: rep(3) = 135: rep(4) = 180
rep(5) = 225: rep(6) = 270: rep(7) = 315: rep(8) = 360

an(1) = 315: an(2) = 270: an(3) = 225: an(4) = 180
an(5) = 135: an(6) = 90: an(7) = 45: an(8) = 0

RETURN

ang5:
max = 12
ang(1) = 60: ang(2) = 30: ang(3) = 360: ang(4) = 330
ang(5) = 300: ang(6) = 270: ang(7) = 240: ang(8) = 210
ang(9) = 180: ang(10) = 150: ang(11) = 120

rep(1) = 30: rep(2) = 60: rep(3) = 90: rep(4) = 120
rep(5) = 150: rep(6) = 180: rep(7) = 210: rep(8) = 240
rep(9) = 270: rep(10) = 300: rep(11) = 330: rep(12) = 360

an(1) = 330: an(2) = 300: an(3) = 270: an(4) = 240
an(5) = 210: an(6) = 180: an(7) = 150: an(8) = 120
an(9) = 90: an(10) = 60: an(11) = 30: an(12) = 0
RETURN

ang6:
CALL centre(22, jaune, "Angle à trouver :" + STR$(reponse) + " degrés")
CALL centre(23, blanc, CHR$(24) + " = diminuer " + CHR$(25) + " = augmenter " + rt$ + " = valider")
RETURN

END SUB

DEFINT A-Z
SUB paraperpen (re, ni, rt$, gg$, pre$, titr$, noir, bleu, vert, rouge, marron, blanc, vertclair, cyanclair, rougeclair, jaune, blancbrill, couleur, coef1!, coef2!)
'3/12/96
CONST haut = 72, bas = 80

DIM a(1 TO 30) AS INTEGER
DIM B(1 TO 30) AS INTEGER
DIM c(1 TO 30) AS INTEGER
DIM d(1 TO 30) AS INTEGER
DIM e(1 TO 30) AS INTEGER
DIM f(1 TO 30) AS INTEGER

DIM z(10), an$(2)
titr$ = "Parallele - perpendiculaire"

an$(1) = "parallèle"
an$(2) = "perpendiculaire"

CALL niveau(ni, 2, titr$)

SELECT CASE ni
CASE 1
GOSUB paraniveau1
CASE 2
GOSUB paraniveau2
END SELECT

'résultats
CALL resultats(re, ni)

EXIT SUB


paraniveau1:
re = 0
'présentation
w$ = "Avec les flèches, tu vas devoir orienter une ligne parallèlement"
z$ = "ou perpendiculairement par rapport à une droite."
CALL consigne(2, w$, z$, xx$)

COLOR , bleu: CLS
LOCATE 4, 4: COLOR jaune: PRINT "Rappel"
CALL cadre(5, 4, 72, 14, rouge)
COLOR blancbrill, rouge
CALL centre(8, blancbrill, "Les droites perpendiculaires se croisent en formant un angle droit.")
h = 38: LOCATE 10
LOCATE , h: PRINT " │"
LOCATE , h - 3: PRINT "─────┼─────"
LOCATE , h: PRINT " │"
CALL centre(14, blancbrill, "Les droites parallèles ne se croisent pas.")
CALL centre(16, blancbrill, STRING$(14, 196))
CALL centre(17, blancbrill, STRING$(14, 196))
COLOR , bleu
LOCATE 23, 38: PRINT rt$
CALL getinvimouse(w)

SCREEN 9, , 0, 0

FOR jj = 1 TO 10 '+++++++++
erreurs = 0
IF jj / 2 = INT(jj / 2) THEN choix = 1 ELSE choix = 2

IF choix = 2 THEN
tit$ = "parallele"
l$ = "parallèlement"
x = 240: y = 135: xfixe = 360: yfixe = 150
IF jj = 1 THEN anglefixe = 35 ELSE anglefixe = 125
ELSE
tit$ = "perpendiculaire"
l$ = tit$ + "ment"
x = 360: y = 165: xfixe = 260: yfixe = 135
IF jj = 2 THEN anglefixe = 0 ELSE anglefixe = 90
END IF

LOCATE 1: PRINT SPACE$(80)
CALL titre2(tit$)
LOCATE 22, 77: COLOR vertclair: PRINT 11 - jj

GOSUB para100

DO
angle = (INT(RND * 16) + 2) * 10
LOOP WHILE angle = anglefixe

para110:
DO

ancienangle = angle
DRAW "b m=" + VARPTR$(xfixe) + ",=" + VARPTR$(yfixe) + "ta=" + VARPTR$(anglefixe) + "c=" + VARPTR$(jaune) + "u100 d200"
DRAW "b m=" + VARPTR$(x) + ",=" + VARPTR$(y) + "ta=" + VARPTR$(angle) + "c=" + VARPTR$(vertclair) + "u100 d200"

MouseBorder 308, 10, 320, 630
MouseShow
souris = 0
DEF SEG = 0
POKE 1050, PEEK(1052)
DEF SEG
v2 = 23: h2 = 13
DO
r$ = INKEY$
' Obtient l'emplacement de la souris et l'état des boutons.
MousePoll v_mouse, h_mouse, lButton, rButton
' LOCATE 21, 1: PRINT v_mouse, h_mouse'===
'matrice 14 x 8 = transforme en coord écran
v_mouse = INT(v_mouse / 14) + 1
h_mouse = INT(h_mouse / 8) + 1
IF lButton THEN
IF v_mouse = v2 AND h_mouse = h2 THEN
valtouche = haut ' 72 'fleche haut
souris = 1
CALL attendre(.1)
EXIT DO
ELSEIF v_mouse = v2 AND h_mouse = h2 + 2 THEN
valtouche = bas '80 'fleche bas
souris = 1
CALL attendre(.1)
EXIT DO
ELSEIF v_mouse = v2 AND (h_mouse >= 60 AND h_mouse <= 72) THEN
valtouche = 13
souris = 1
CALL attendre(.3)
EXIT DO
ELSE
BEEP
END IF
END IF

LOOP WHILE r$ = ""

MouseHide

IF souris = 0 THEN
IF LEN(r$) < 2 THEN valtouche = ASC(r$) ELSE valtouche = ASC(RIGHT$(r$, 1))
END IF

SELECT CASE valtouche
CASE haut
angle = angle - 5: IF angle < 0 THEN angle = 355
CASE bas
angle = angle + 5: IF angle > 360 THEN angle = 5
CASE 27
CALL quitter: GOSUB para100
CASE 13
EXIT DO
CASE ELSE
BEEP

END SELECT
IF angle = 360 THEN angle = 0

DRAW "b m=" + VARPTR$(x) + ",=" + VARPTR$(y) + "ta=" + VARPTR$(ancienangle) + "c=" + VARPTR$(bleu) + "u100 d200"
LOOP
LOCATE 23: PRINT SPACE$(80)

IF choix = 2 THEN 'para
IF angle = anglefixe OR angle = anglefixe + 180 THEN rep = 1 ELSE rep = 0
reponse = anglefixe
ELSE 'perpen
IF angle = anglefixe - 90 OR angle = anglefixe + 90 OR angle = anglefixe + 270 THEN rep = 1 ELSE rep = 0
reponse = anglefixe + 90
END IF

IF rep = 1 THEN
CALL exact(.7)
IF erreurs = 0 THEN re = re + 1
ELSE
erreurs = erreurs + 1
IF erreurs > 2 THEN
DRAW "b m=" + VARPTR$(x) + ",=" + VARPTR$(y) + "ta=" + VARPTR$(reponse) + "c=" + VARPTR$(rougeclair) + "u100 d200"
CALL centre(23, rougeclair, "Regarde")
CALL getinvimouse(r): IF r = 27 THEN CALL quitter
DRAW "b m=" + VARPTR$(x) + ",=" + VARPTR$(y) + "ta=" + VARPTR$(reponse) + "c=" + VARPTR$(bleu) + "u100 d200"
ELSE
CALL erreur(.7)
END IF
GOSUB para100
GOTO para110
END IF

NEXT jj

RETURN '+++++++++++++++++++++++++++++++

paraniveau2:
'présentation
w$ = "Des figures vont s'afficher à l'écran."
z$ = "Des droites vont être sélectionnées."
xx$ = "Tu devras choisir entre parallèle ou perpendiculaire."
CALL consigne(3, w$, z$, xx$)

SCREEN 9, , 0, 1
'mémorisation des lettres : matrice 8 x 14
x = 0: y = 0
PRINT "A B C D E F"
GET (x, y)-(x + 7, y + 13), a
x = x + 16
GET (x, y)-(x + 7, y + 13), B
x = x + 16
GET (x, y)-(x + 7, y + 13), c
x = x + 16
GET (x, y)-(x + 7, y + 13), d
x = x + 16
GET (x, y)-(x + 7, y + 13), e
x = x + 16
GET (x, y)-(x + 7, y + 13), f
LOCATE 1: PRINT SPACE$(11)
SCREEN 9, , 0, 0

CALL titre3(titr$)
DRAW "ta0"

FOR jj = 1 TO 10
erreurs = 0
'tirage
DO
f = 0
z(jj) = INT(RND * 10) + 1
FOR j = 1 TO jj - 1
IF z(jj) = z(j) THEN f = 1: EXIT FOR
NEXT
LOOP WHILE f = 1
choix = z(jj)

ON choix GOSUB par1, par2, par3, par4, par1, par2, par5, par6, par7, par8

LOCATE 22, 77: COLOR vertclair: PRINT 11 - jj
para10:
COLOR blanc: LOCATE 18, 60: PRINT gg$
CALL flechesbis(11, 60, an$(), 2, r)
IF r = 0 THEN CALL quitter: GOTO para10
IF r = sol THEN
CALL exact(.7)
IF erreurs = 0 THEN re = re + 1
ELSE
erreurs = erreurs + 1
CALL erreur(.7)
LOCATE 23: PRINT SPACE$(80)
GOTO para10
END IF
LINE (0, 28)-(426, 270), bleu, BF
LINE (440, 70)-(620, 220), noir, BF
LOCATE 23: PRINT SPACE$(80)

NEXT jj

RETURN
'++++++++++

par1:
'carré
x! = coef1! * 100
DRAW "b m160,100"
DRAW "c=" + VARPTR$(blancbrill)
DRAW "d=" + VARPTR$(x!)
DRAW "r100"
DRAW "u=" + VARPTR$(x!)
DRAW "l100"
x = 160 - 17: y = 90: GOSUB a
x = 260 + 10: y = 90: GOSUB B
x = 260 + 10: y = 100 + x!: GOSUB c
x = 160 - 17: y = 100 + x!: GOSUB d
IF choix = 1 THEN
COLOR vertclair: LOCATE 9, 58: PRINT "Le côté AB est"
LOCATE 14, 58: PRINT "au côté BC"
sol = 2
ELSE
COLOR vertclair: LOCATE 9, 58: PRINT "Le côté BC est"
LOCATE 14, 58: PRINT "au côté AD"
sol = 1
END IF
RETURN

par2:
'rect
LINE (70, 95)-(360, 195), blancbrill, B
x = 70 - 17: y = 95 - 10: GOSUB a
x = 360 + 10: y = 95 - 10: GOSUB B
x = 360 + 10: y = 195 - 2: GOSUB c
x = 70 - 17: y = 195 - 2: GOSUB d
IF choix = 6 THEN
COLOR vertclair: LOCATE 9, 58: PRINT "La longueur AB est"
LOCATE 14, 58: PRINT "à la largeur BC"
sol = 2
ELSE
COLOR vertclair: LOCATE 9, 58: PRINT "La largeur BC est"
LOCATE 14, 58: PRINT "à la largeur AD"
sol = 1
END IF
RETURN

par3: 'hauteur
'triang
LINE (80, 220)-(200, 90), blancbrill
LINE -(380, 220)
LINE -(80, 220)
LINE (200, 90)-(200, 220)
x = 80 - 17: y = 220 - 2: GOSUB a
x = 200 - 3: y = 90 - 18: GOSUB B
x = 380 + 10: y = 220 - 2: GOSUB c
x = 200 - 3: y = 220 + 8: GOSUB f
COLOR vertclair: LOCATE 9, 58: PRINT "La base AC est"
LOCATE 14, 58: PRINT "à la hauteur BF"
sol = 2

RETURN

par4: 'diagonale
x! = coef1! * 100
DRAW "b m160,100"
DRAW "c=" + VARPTR$(blancbrill)
DRAW "d=" + VARPTR$(x!)
DRAW "r100"
DRAW "u=" + VARPTR$(x!)
DRAW "l100"
DRAW "d=" + VARPTR$(x!)
DRAW "m260,100"
DRAW "d=" + VARPTR$(x!)
DRAW "m160,100"
x = 160 - 17: y = 90: GOSUB a
x = 260 + 10: y = 90: GOSUB B
x = 260 + 10: y = 100 + x!: GOSUB c
x = 160 - 17: y = 100 + x!: GOSUB d
COLOR vertclair: LOCATE 9, 58: PRINT "La diagonale AC est"
LOCATE 14, 58: PRINT "à la diagonale DB"
sol = 2
RETURN

par5:
'losange
LINE (50, 150)-(200, 80), blancbrill
LINE -(350, 150)
LINE -(200, 220)
LINE -(50, 150)
LINE (200, 80)-(200, 220)
LINE (50, 150)-(350, 150)
x = 50 - 17: y = 150 - 6: GOSUB a
x = 200 - 3: y = 80 - 18: GOSUB B
x = 350 + 10: y = 150 - 6: GOSUB c
x = 200 - 3: y = 220 + 8: GOSUB d
COLOR vertclair: LOCATE 9, 58: PRINT "La diagonale AC est"
LOCATE 14, 58: PRINT "à la diagonale BD"
sol = 2
RETURN


par6: 'médiatrice
'triang
LINE (80, 220)-(200, 90), blancbrill
LINE -(380, 220)
LINE -(80, 220)
LINE (160, 215)-(150, 225)
LINE (310, 215)-(300, 225)
LINE (230, 70)-(230, 240)
x = 80 - 17: y = 220 - 2: GOSUB a
x = 200 - 3: y = 90 - 18: GOSUB B
x = 380 + 10: y = 220 - 2: GOSUB c
x = 230 - 3: y = 70 - 18: GOSUB e
x = 230 - 3: y = 240 + 8: GOSUB f
COLOR vertclair: LOCATE 9, 58: PRINT "La médiatrice EF est"
LOCATE 14, 58: PRINT "à la base AC"
sol = 2
RETURN

par7: 'triangle rectangle
LINE (80, 210)-(80, 100)
LINE -(380, 210)
LINE -(80, 210)
x = 80 - 17: y = 220 - 2: GOSUB a
x = 80 - 17: y = 100 - 18: GOSUB B
x = 380 + 10: y = 220 - 2: GOSUB c
COLOR vertclair: LOCATE 9, 58: PRINT "Le côté AB est"
LOCATE 14, 58: PRINT "au côté AC"
sol = 2
RETURN

par8: 'parallèlogramme
LINE (60, 200)-(160, 120)
LINE -(380, 120)
LINE -(280, 200)
LINE -(60, 200)
x = 160 - 17: y = 120 - 10: GOSUB a
x = 380 + 10: y = 120 - 10: GOSUB B
x = 280 + 10: y = 200 - 2: GOSUB c
x = 60 - 17: y = 200 - 2: GOSUB d
COLOR vertclair: LOCATE 9, 58: PRINT "La droite AD est"
LOCATE 14, 58: PRINT "à la droite BC"
sol = 1
RETURN

a:
PUT (x, y), a, XOR
RETURN

B:
PUT (x, y), B, XOR
RETURN

c:
PUT (x, y), c, XOR
RETURN

d:
PUT (x, y), d, XOR
RETURN

e:
PUT (x, y), e, XOR
RETURN

f:
PUT (x, y), f, XOR
RETURN

para100:
LOCATE 23, 13: COLOR blanc
PRINT CHR$(24) + " " + CHR$(25); " = orienter la ligne "; : COLOR jaune: PRINT l$
LOCATE 23, 60: COLOR blanc: PRINT rt$; " = valider"
RETURN

END SUB

DEFINT A-Z
SUB recoformes (re, ni, s, n$(), rt$, gg$, pre$, titr$, noir, bleu, vert, rouge, marron, blanc, vertclair, cyanclair, rougeclair, jaune, blancbrill, couleur, coef1!, coef2!, programme1$)
'2/12/96
DIM v(21), a$(16)
CONST pi = 3.141592653589#

a$(1) = "FIGURES SIMPLES"
a$(6) = "TRIANGLES"
a$(11) = "QUADRILATERES"
a$(16) = "SOLIDES"
re = 0: q = 0

GOSUB presentation
IF s = 6 THEN
GOSUB triangleaide
ELSEIF s = 11 THEN
GOSUB quadriaide
END IF
jj = 0
FOR boucle = s TO s + 4
erreurs = 0: jj = jj + 1
geo1:
v(boucle) = INT(RND * (s + 4)) + 1
IF v(boucle) < s THEN GOTO geo1
sol = v(boucle)
IF boucle <> s THEN
FOR k = 1 TO boucle - 1
IF v(k) = sol THEN f = 1
NEXT k
END IF
IF f = 1 THEN f = 0: GOTO geo1

SCREEN 9

geo2:
LOCATE 23: PRINT SPACE$(80)
r = s - 1
CALL titre2(a$(s))
LOCATE 22, 77: COLOR vertclair: PRINT 6 - jj
GOSUB reco15

GOSUB attente
LOCATE 23: PRINT SPACE$(80)
CALL cadre3(23, INT(41 - l / 2), l, noir)
IF g = 1 THEN
g = 0
CALL titre2(a$(s))
BEEP
CALL centre(23, rougeclair, "Tu n'as pas appuyé sur la barre [Espace] !")
CALL attendre(1.5): GOTO geo2
END IF
IF sol = r THEN
CALL exact(.5)
IF erreurs = 0 THEN re = re + 2
ELSE
erreurs = 1 + erreurs:
IF erreurs > 2 THEN
CALL titre2(a$(s))
ON sol GOSUB rect, carre, cercle, losa, triq, triq, trir, trii, trie, triir, rect, carre, losa, trap, para, cube, paral, pyra, cone, cylindre
CALL centre(23, rougeclair, "Regarde la forme : " + n$(sol))
CALL getinvimouse(r): IF r = 27 THEN CALL quitter
GOTO geo2
ELSE
CALL erreur(.5)
IF n$(r) = "pyramide" THEN
CALL centre(23, rougeclair, "Tu as montré une " + n$(r) + ".")
ELSE
CALL centre(23, rougeclair, "Tu as montré un " + n$(r) + ".")
END IF
CALL attendre(2)
GOTO geo2
END IF
END IF
NEXT boucle

'résultats
CALL resultats(re, ni)
EXIT SUB

attente:
CALL attendre(.4)
r = r + 1
coul = blancbrill
ON r GOSUB rect, carre, cercle, losa, triq, triq, trir, trii, trie, triir, rect, carre, losa, trap, para, cube, paral, pyra, cone, cylindre
DEF SEG = 0
POKE 1050, PEEK(1052)
DEF SEG
w$ = ""
tx! = 2
debut! = TIMER
DO
w$ = INKEY$
MousePoll v_mouse, h_mouse, lButton, rButton
IF lButton THEN
w$ = CHR$(32)
CALL attendre(.1)
END IF
IF w$ = CHR$(32) THEN EXIT DO
IF w$ = CHR$(27) THEN CALL cadre3(23, INT(41 - l / 2), l, noir): CALL quitter: GOSUB reco15
fin! = TIMER
LOOP WHILE fin! - debut! < tx!

IF w$ <> CHR$(32) THEN
IF r < s + 4 THEN
coul = bleu: ON r GOSUB rect, carre, cercle, losa, triq, triq, trir, trii, trie, triir, rect, carre, losa, trap, para, cube, paral, pyra, cone, cylindre
GOTO attente
END IF
g = 1
RETURN
END IF
RETURN


'DESSINS : rapport avec screen 9 : 0,73 (rapport écran 4/3)
rect: 'rectangle
LINE (160, 100)-(480, 210), coul, B
RETURN

carre:
x! = coef1! * 160
DRAW "b m240,230 c=" + VARPTR$(coul) + "u=" + VARPTR$(x!) + "r160 d=" + VARPTR$(x!) + "l160"
RETURN

cercle:
CIRCLE (320, 155), 90, coul, , , coef2!
RETURN

losa: 'losange
COLOR coul
LINE (160, 155)-(320, 100)
LINE -(480, 155)
LINE -(320, 210)
LINE -(160, 155)
RETURN

triq: 'triangle quelconque
COLOR coul
LINE (160, 210)-(245, 100)
LINE -(480, 165)
LINE -(160, 210)
RETURN

trir: 'triangle rectangle
COLOR coul
LINE (180, 210)-(180, 100)
LINE -(480, 210)
LINE -(180, 210)
RETURN

trii: 'triangle isocele
COLOR coul
LINE (265, 210)-(320, 90)
LINE -(380, 210)
LINE -(265, 210)
RETURN

trie: 'triangle équilatéral
x! = 210 - (coef1! * 138)'hauteur du tri équi avec des longueurs de 160
DRAW "b m240,210 c=" + VARPTR$(coul) + " m320,=" + VARPTR$(x!)
DRAW "m400,210 m240,210"
RETURN

triir: 'tri isocèle rectangle
x! = 210 - (coef1! * 160)
DRAW "b m240,210 c=" + VARPTR$(coul) + "m240,=" + VARPTR$(x!)
DRAW "m400,210 m240,210"
RETURN

trap: 'trapèze
COLOR coul
LINE (160, 210)-(260, 100)
LINE -(380, 100)
LINE -(460, 210)
LINE -(160, 210)
RETURN

para: 'parallèlogramme
COLOR coul
LINE (160, 200)-(260, 120)
LINE -(480, 120)
LINE -(380, 200)
LINE -(160, 200)
RETURN

cube:
x! = coef1! * 120
DRAW "b m220,230 c=" + VARPTR$(coul) + "u=" + VARPTR$(x!)
DRAW "r120 d=" + VARPTR$(x!) + "l120"
DRAW "u=" + VARPTR$(x!)
DRAW "ta40 r80 ta0 r120 d=" + VARPTR$(x!) + "ta40 l80 ta0"
DRAW "u=" + VARPTR$(x!) + "ta40 r80 ta0"
RETURN

paral:
x! = coef1! * 80
DRAW "b m140,210 c=" + VARPTR$(coul) + "u=" + VARPTR$(x!)
DRAW "r320 d=" + VARPTR$(x!) + "l320"
DRAW "u=" + VARPTR$(x!)
DRAW "ta40 r80 ta0 r320 d=" + VARPTR$(x!) + "ta40 l80 ta0"
DRAW "u=" + VARPTR$(x!) + "ta40 r80 ta0"
RETURN

pyra:
DRAW "b m220,210 c=" + VARPTR$(coul) + "ta330 r120"
DRAW "ta30 r100 ta0 m310,80 b m220,210 m310,80"
DRAW "b m220,210 ta330 r120 m310,80 ta0"
RETURN

cone:
CIRCLE (320, 220), 90, coul, pi, pi * 2, 3 / 10
LINE (320 - 90, 220)-(320, 90), coul
LINE -(320 + 90, 220), coul
RETURN

cylindre:
CIRCLE (320, 90), 90, coul, , , 3 / 10
CIRCLE (320, 220), 90, coul, pi, pi * 2, 3 / 10
LINE (320 - 90, 90)-(320 - 90, 220), coul
LINE (320 + 90, 90)-(320 + 90, 220), coul
RETURN

presentation:
CALL titre(a$(s))
CALL cadre(4, 10, 60, 15, marron)
COLOR , marron
IF pre$ <> "" THEN
CALL centre(5, blancbrill, pre$ + ",")
CALL centre(7, blancbrill, "l'ordinateur va afficher, en bas de l'écran,")
ELSE
CALL centre(7, blancbrill, "L'ordinateur va afficher, en bas de l'écran,")
END IF
CALL centre(9, blancbrill, "des noms de " + a$(s) + ".")
CALL centre(12, blancbrill, "Puis il va dessiner des formes.")
CALL centre(15, blancbrill, "A chaque fois que le nom correspondra à la forme,")
CALL centre(17, blancbrill, "tu devras appuyer [Espace]")
COLOR , noir
CALL centre(23, jaune, "Appuie sur la barre [Espace]")
DO
w$ = INKEY$
MousePoll v_mouse, h_mouse, lButton, rButton
IF lButton THEN
w$ = CHR$(32)
CALL attendre(.2)
END IF
IF w$ = CHR$(27) THEN CLS : RUN programme1$
LOOP WHILE w$ <> CHR$(32)
RETURN

quadriaide:
'CALL titre(a$(s))
COLOR , bleu: CLS
LOCATE 3, 4: COLOR jaune: PRINT "Rappel"
CALL cadre(4, 4, 70, 16, rouge)
COLOR , rouge
h = 7
LOCATE 6
COLOR jaune: LOCATE , h: PRINT " Les quadrilatères sont des polygones à 4 côtés."
LOCATE 8
COLOR rougeclair: LOCATE , h: PRINT " Caractéristiques :"
h2 = 24
LOCATE 10
COLOR vertclair: LOCATE , h: PRINT " Trapèze"; : COLOR blancbrill: LOCATE , h2: PRINT ": 2 côtés parallèles"
PRINT
COLOR vertclair: LOCATE , h: PRINT " Parallélogramme"; : COLOR blancbrill: LOCATE , h2: PRINT ": côtés parallèles et égaux 2 à 2"
PRINT
COLOR vertclair: LOCATE , h: PRINT " Rectangle"; : COLOR blancbrill: LOCATE , h2: PRINT ": côtés parallèles et égaux 2 à 2, angles droits"
PRINT
COLOR vertclair: LOCATE , h: PRINT " Losange"; : COLOR blancbrill: LOCATE , h2: PRINT ": 4 côtés égaux et parallèles 2 à 2"
PRINT
COLOR vertclair: LOCATE , h: PRINT " Carré"; : COLOR blancbrill: LOCATE , h2: PRINT ": 4 côtés égaux et parallèles 2 à 2, angles droits"
CALL getinvimouse(w)
RETURN

triangleaide:
'CALL titre(a$(s))
COLOR , bleu: CLS
LOCATE 3, 4: COLOR jaune: PRINT "Rappel"
CALL cadre(4, 4, 70, 16, rouge)
COLOR , rouge
h = 8
LOCATE 6
COLOR jaune: LOCATE , h: PRINT " Les triangles sont des polygones à 3 côtés."
LOCATE 9
COLOR rougeclair: LOCATE , h: PRINT " Caractéristiques :"
LOCATE 11
h2 = 36
COLOR vertclair: LOCATE , h: PRINT " Triangle isocèle"; : COLOR blancbrill: LOCATE , h2: PRINT ": 2 côtés et 2 angles égaux"
PRINT
COLOR vertclair: LOCATE , h: PRINT " Triangle équilatéral"; : COLOR blancbrill: LOCATE , h2: PRINT ": 3 côtés et 3 angles égaux"
PRINT
COLOR vertclair: LOCATE , h: PRINT " Triangle rectangle"; : COLOR blancbrill: LOCATE , h2: PRINT ": 1 angle droit"
PRINT
COLOR vertclair: LOCATE , h: PRINT " Triangle rectangle isocèle"; : COLOR blancbrill: LOCATE , h2: PRINT ": 2 côtés égaux et 1 angle droit"
CALL getinvimouse(w)
RETURN

reco15:
CALL centre(23, jaune, n$(sol))
l = LEN(n$(sol)) + 2
CALL cadre3(23, INT(41 - l / 2), l, blancbrill)
RETURN

END SUB

DEFINT A-Z
SUB solide2 (re, ni, rt$, gg$, pre$, titr$, noir, bleu, vert, rouge, marron, blanc, vertclair, cyanclair, rougeclair, jaune, blancbrill, couleur, coef1!, coef2!)
'4/12/96 souris
CONST pi = 3.141592653589#
CONST gauche = 75, droite = 77, haut = 72, bas = 80
DIM cas(1, 1), z(4)
re = 2 'car 4 essais
coul2 = noir

x = 1
FOR ligne = 0 TO 1
FOR col = 0 TO 1
cas(col, ligne) = x
x = x + 1
NEXT col, ligne
DEF SEG = 0
POKE &H417, (PEEK(&H417) AND &H9F)'non numérique
DEF SEG

'présentation
w$ = "Un solide va être présenté en vue 'dépliée'."
z$ = "Avec les flèches, tu vas devoir le retrouver."
CALL consigne(2, w$, z$, xx$)

SCREEN 9

FOR jj = 1 TO 4
erreurs = 0
CALL titre2(titr$)
LINE (20, 45)-(300, 265), rouge, BF
'
LINE (320, 45)-(470, 145), vert, BF
LINE (490, 45)-(630, 145), vert, BF
LINE (320, 165)-(470, 265), vert, BF
LINE (490, 165)-(630, 265), vert, BF
'
LINE (320, 45)-(470, 145), jaune, B, &H8888
LINE (490, 45)-(630, 145), jaune, B, &H8888
LINE (320, 165)-(470, 265), jaune, B, &H8888
LINE (490, 165)-(630, 265), jaune, B, &H8888

coul = blancbrill
GOSUB volcube
GOSUB volparal
GOSUB volpyra
GOSUB volcylindre

COLOR vertclair: LOCATE 22, 1: PRINT "Niveau"; ni
LOCATE 22, 77: PRINT 5 - jj
GOSUB vol14

sol:
'tirage
DO
f = 0
z(jj) = INT(RND * 4) + 1
FOR j = 1 TO jj - 1
IF z(jj) = z(j) THEN f = 1: EXIT FOR
NEXT
LOOP WHILE f = 1
IF z(jj) = 1 AND jj = 1 THEN GOTO sol
choix = z(jj)

ON choix GOSUB solcube, solpara, solpyra, solcyl

VIEW (320, 45)-(635, 270)
col = 0: ligne = 0
LINE (0, 0)-(150, 100), coul2, B
flag = 1

DO
col2 = col: ligne2 = ligne
vol11:
MouseBorder 45, 320, 265, 630
MouseShow
DEF SEG = 0
POKE 1050, PEEK(1052)
DEF SEG
souris = 0
DO
r$ = INKEY$
' Obtient l'emplacement de la souris et l'état des boutons.
MousePoll v_mouse, h_mouse, lButton, rButton
' LOCATE 22, 1: PRINT v_mouse, h_mouse '===
'réso EGA
IF lButton THEN
IF v_mouse >= 45 AND v_mouse <= 145 THEN
IF h_mouse >= 320 AND h_mouse <= 470 THEN
'1° carre
col = 0: ligne = 0: souris = 2
CALL attendre(.2)
EXIT DO
ELSEIF h_mouse >= 490 AND h_mouse <= 630 THEN
'2° carre
col = 1: ligne = 0: souris = 2
CALL attendre(.2)
EXIT DO
END IF
ELSEIF v_mouse >= 165 AND v_mouse <= 265 THEN
IF h_mouse >= 320 AND h_mouse <= 470 THEN
'3° carre
col = 0: ligne = 1: souris = 2
CALL attendre(.2)
EXIT DO
ELSEIF h_mouse >= 490 AND h_mouse <= 630 THEN
'4° carre
col = 1: ligne = 1: souris = 2
CALL attendre(.2)
EXIT DO
ELSE
BEEP
END IF
END IF
END IF
LOOP WHILE r$ = ""

MouseHide

IF souris = 2 THEN
LINE (170 * col2, 120 * ligne2)-(150 + 160 * col2, 100 + 120 * ligne2), bleu, B
LINE (170 * col2, 120 * ligne2)-(150 + 160 * col2, 100 + 120 * ligne2), jaune, B, &H8888
LINE (170 * col, 120 * ligne)-(150 + 160 * col, 100 + 120 * ligne), coul2, B
col2 = col: ligne2 = ligne
EXIT DO
END IF

IF souris = 0 THEN
IF LEN(r$) < 2 THEN valtouche = ASC(r$) ELSE valtouche = ASC(RIGHT$(r$, 1))
END IF

IF valtouche = 50 THEN valtouche = bas
IF valtouche = 52 THEN valtouche = gauche
IF valtouche = 54 THEN valtouche = droite
IF valtouche = 56 THEN valtouche = haut

SELECT CASE valtouche
CASE gauche
col = col - 1
IF col = -1 THEN col = 1: ligne = ligne - 1
IF ligne = -1 THEN ligne = 1: col = 1

CASE droite
col = col + 1
IF col = 2 THEN col = 0: ligne = ligne + 1
IF ligne = 2 THEN ligne = 0: col = 0

CASE haut
ligne = ligne - 1
IF ligne = -1 THEN ligne = 1

CASE bas
ligne = ligne + 1
IF ligne = 2 THEN ligne = 0

CASE 27
CALL quitter: GOSUB vol14: GOTO vol11

CASE 13
EXIT DO

CASE ELSE
BEEP

END SELECT
LINE (170 * col2, 120 * ligne2)-(150 + 160 * col2, 100 + 120 * ligne2), bleu, B
LINE (170 * col2, 120 * ligne2)-(150 + 160 * col2, 100 + 120 * ligne2), jaune, B, &H8888
LINE (170 * col, 120 * ligne)-(150 + 160 * col, 100 + 120 * ligne), coul2, B

LOOP

LOCATE 22: PRINT SPACE$(80): PRINT SPACE$(80)
reponse = cas(col, ligne)

'tester la reponse
IF reponse = choix THEN
CALL exact(1.3)
IF erreurs = 0 THEN re = re + 2
ELSE
erreurs = erreurs + 1
CALL erreur(1.2)
GOSUB vol14: GOTO vol11
END IF

VIEW
NEXT

'résultats
CALL resultats(re, ni)
EXIT SUB

volcube:
x! = coef1! * 52
DRAW "b m360,130 c=" + VARPTR$(coul) + "u=" + VARPTR$(x!)
DRAW "r52 d=" + VARPTR$(x!) + "l52"
DRAW "u=" + VARPTR$(x!)
DRAW "ta40 r35 ta0 r52 d=" + VARPTR$(x!) + "ta40 l35 ta0"
DRAW "u=" + VARPTR$(x!) + "ta40 r35 ta0"
RETURN

volparal:
x! = coef1! * 30
DRAW "b m515,120 c=" + VARPTR$(coul) + "u=" + VARPTR$(x!)
DRAW "r70 d=" + VARPTR$(x!) + "l70"
DRAW "u=" + VARPTR$(x!)
DRAW "ta40 r35 ta0 r70 d=" + VARPTR$(x!) + "ta40 l35 ta0"
DRAW "u=" + VARPTR$(x!) + "ta40 r35 ta0"
RETURN

volpyra:
DRAW "b m350,235 c=" + VARPTR$(coul) + "ta330 r60"
DRAW "ta30 r50 ta0 m395,175 b m350,235 m395,175"
DRAW "b m350,235 ta330 r60 m395,175 ta0"
RETURN

volcylindre:
CIRCLE (560, 190), 30, coul, , , 3 / 10
CIRCLE (560, 240), 30, coul, pi, pi * 2, 3 / 10
LINE (560 - 30, 190)-(560 - 30, 240), coul
LINE (560 + 30, 190)-(560 + 30, 240), coul
RETURN

solcube:
x! = coef1! * 52
DRAW "b m50,180 c=" + VARPTR$(vertclair) + "u=" + VARPTR$(x!)
DRAW "r208 d=" + VARPTR$(x!) + "l208"
DRAW "r52 u=" + VARPTR$(x!) + "u=" + VARPTR$(x!) + "r52"
FOR i = 1 TO 3: DRAW "d=" + VARPTR$(x!): NEXT
DRAW "l52" + "u=" + VARPTR$(x!)
DRAW "r104 u=" + VARPTR$(x!)
RETURN

solpara:
x! = coef1! * 30: x2! = coef1! * 52
DRAW "b m50,180 c=" + VARPTR$(vertclair) + "u=" + VARPTR$(x2!)
DRAW "r200 d=" + VARPTR$(x2!) + "l200"
DRAW "r30 u=" + VARPTR$(x2!) + "u=" + VARPTR$(x!) + "r70"
DRAW "d=" + VARPTR$(x!) + "d=" + VARPTR$(x2!) + "d=" + VARPTR$(x!) + "l70"
DRAW "u=" + VARPTR$(x!)
DRAW "r100 u=" + VARPTR$(x2!)
RETURN

solpyra:
x! = coef1! * 52: y! = 180 - (x! / 2)
DRAW "b m150,180 c=" + VARPTR$(vertclair) + "u=" + VARPTR$(x!)
DRAW "r52 d=" + VARPTR$(x!) + "l52"
DRAW "u=" + VARPTR$(x!) + "m70,=" + VARPTR$(y!) + "m150,180"
DRAW "r52 u=" + VARPTR$(x!) + "m282,=" + VARPTR$(y!) + "m202,180"
z! = (80 * coef1!) + 180
DRAW "m176,=" + VARPTR$(z!) + "m150,180"
z! = 180 - (x! + (80 * coef1!)): y! = 180 - x!
DRAW "u=" + VARPTR$(x!) + "m176,=" + VARPTR$(z!) + "m202,=" + VARPTR$(y!)
RETURN

solcyl:
DRAW "b m70,180 c=" + VARPTR$(vertclair) + "u50 r180 d50 l180"
CIRCLE (160, 100), 30, vertclair, , , coef2!
CIRCLE (160, 210), 30, vertclair, , , coef2!
RETURN


vol14:
LOCATE 23: PRINT SPACE$(80)
CALL centre(23, blanc, CHR$(27) + " " + CHR$(26) + " " + CHR$(24) + " " + CHR$(25) + " = sélectionner le solide " + rt$ + " = valider")
RETURN

END SUB

DEFINT A-Z
SUB verti (re, ni, rt$, gg$, pre$, titr$, noir, bleu, vert, rouge, marron, blanc, vertclair, cyanclair, rougeclair, jaune, blancbrill, couleur, coef1!, coef2!)
'3/12/96 souris
CONST gauche = 75, droite = 77
CONST haut = 72, bas = 80
DIM col(8), x(8), x1(8), t(8), z(5), y(5), y1(5), xx1(8), xx2(8), yy1(8), yy2(8)
DIM trian(1 TO 100) AS INTEGER
DIM trian2(1 TO 100) AS INTEGER
DIM cercle(1 TO 50) AS INTEGER
g$ = CHR$(27) + " " + CHR$(26) + " ou " + CHR$(24) + " " + CHR$(25)
titr$ = "Verticale - Horizontale"
x1(1) = 100: x1(2) = 180: x1(3) = 220: x1(4) = 300
x1(5) = 380: x1(6) = 420: x1(7) = 500: x1(8) = 540
y1(1) = 77: y1(2) = 119: y1(3) = 147: y1(4) = 189
y1(5) = 259


re = 0

CALL niveau(ni, 2, titr$)

GOSUB ver20 'présentation

'dessin des triangles + rond

SCREEN 9, , 1, 0
x = 320: y = 175
tria$ = "c15 m-5,+0 m+5,-10 m+5,+10 m-5,+0 b m+2,-1 p12,15 "
DRAW "m320,175 " + tria$
GET (x - 5, y)-(x + 5, y - 10), trian
CLS 1
tria$ = "c15 m+0,-5 m+10,+5 m-10,+5 m+0,-5 b m+2,+0 p12,15 "
DRAW "m320,175 " + tria$
GET (x, y - 5)-(x + 10, y + 10), trian2
CLS 1
CIRCLE (x, y), 4, jaune, , , coef2!
GET (x - 4, y - 4)-(x + 4, y + 4), cercle
SCREEN 9, , 0, 0

IF ni = 1 THEN GOSUB verniveau1 ELSE GOSUB verniveau2

'résultats
CALL resultats(re, ni)

EXIT SUB
'+++++++++++++++++++++++++++

verniveau1:
'verticale +++++++++++++++++++++++++++++++++++++++

FOR jj = 1 TO 3
erreurs = 0
tit$ = "Verticale"
CALL titre2(tit$)
LOCATE 22: COLOR vertclair: PRINT "Niveau"; ni
LOCATE 22, 77: PRINT 11 - jj
COLOR jaune
FOR i = 1 TO 8
LOCATE 19, INT(x1(i) / 8) + 1: PRINT CHR$(219) 'pavé blanc
NEXT

GOSUB ver21

flag = 1
FOR i = 1 TO 8
col(i) = vertclair
NEXT
col(1) = jaune

GOSUB ver3

DO
flag2 = flag
GOSUB ver1
ver12:
MouseShow
souris = 0
DEF SEG = 0
POKE 1050, PEEK(1052)
DEF SEG
v2 = 23: h2 = 13
DO
r$ = INKEY$
' Obtient l'emplacement de la souris et l'état des boutons.
MousePoll v_mouse, h_mouse, lButton, rButton
'matrice 14 x 8 = transforme en coord écran
'v_graph = v_mouse: h_graph = h_mouse
v_mouse = INT(v_mouse / 14) + 1
h_mouse = INT(h_mouse / 8) + 1
'LOCATE 21, 1: PRINT v_graph, h_graph'===
' LOCATE 21, 1: PRINT v_mouse, h_mouse'===
IF lButton THEN
IF v_mouse >= 5 AND v_mouse <= 20 THEN
f = 0
FOR i = 1 TO 8
'IF h_mouse = INT(x1(i) / 8) + 1 THEN
IF h_mouse >= INT(x1(i) / 8) AND h_mouse <= INT(x1(i) / 8) + 2 THEN
flag = i: f = 1
CALL attendre(.2)
souris = 2
EXIT FOR
END IF
NEXT
IF f = 1 THEN EXIT DO
END IF
IF v_mouse = v2 AND h_mouse = h2 THEN
valtouche = gauche
souris = 1
CALL attendre(.2)
EXIT DO
ELSEIF v_mouse = v2 AND h_mouse = h2 + 2 THEN
valtouche = droite
souris = 1
CALL attendre(.2)
EXIT DO
ELSEIF v_mouse = v2 AND (h_mouse >= 60 AND h_mouse <= 72) THEN
valtouche = 13
souris = 1
CALL attendre(.3)
EXIT DO
ELSE
BEEP
END IF
END IF

LOOP WHILE r$ = ""

MouseHide

IF souris = 2 THEN
FOR i = 1 TO 8
col(i) = vertclair
NEXT
col(flag) = jaune
GOSUB ver2
flag2 = flag
GOSUB ver1

valtouche = 13
END IF

IF souris = 0 THEN
IF LEN(r$) < 2 THEN valtouche = ASC(r$) ELSE valtouche = ASC(RIGHT$(r$, 1))
END IF

SELECT CASE valtouche
CASE gauche
flag = flag - 1: IF flag = 0 THEN flag = 8

CASE droite
flag = flag + 1: IF flag = 9 THEN flag = 1
CASE 27
CALL quitter: GOSUB ver21
CASE 13
EXIT DO
CASE ELSE
BEEP

END SELECT

FOR i = 1 TO 8
col(i) = vertclair
NEXT
col(flag) = jaune
GOSUB ver2

LOOP WHILE valtouche <> 13
LOCATE 22: PRINT SPACE$(80): PRINT SPACE$(80)
IF reponse = flag THEN
CALL exact(.6)
IF erreurs = 0 THEN re = re + 1
ELSE
CALL erreur(.9)
erreurs = erreurs + 1: LOCATE 23: PRINT SPACE$(80): GOSUB ver21: GOTO ver12
END IF
LOCATE 23: PRINT SPACE$(80)

NEXT jj

'horizontale +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

FOR i = 1 TO 3: z(i) = 0: NEXT

FOR jj = 1 TO 3
erreurs = 0
tit$ = "Horizontale"
CALL titre2(tit$)
LOCATE 22, 77: COLOR vertclair: PRINT 8 - jj: LOCATE 22, 1: PRINT "Niveau"; ni
COLOR jaune
FOR i = 1 TO 5
LOCATE INT(y1(i) / 14) + 1, 6: PRINT CHR$(219)'pavé blanc
NEXT

GOSUB ver21

flag = 1
FOR i = 1 TO 5
col(i) = vertclair
NEXT
col(1) = jaune

GOSUB hor3

DO
flag2 = flag
GOSUB hor1
hor12:
MouseShow
souris = 0
DEF SEG = 0
POKE 1050, PEEK(1052)
DEF SEG
v2 = 23: h2 = 13
DO
r$ = INKEY$
' Obtient l'emplacement de la souris et l'état des boutons.
MousePoll v_mouse, h_mouse, lButton, rButton
'matrice 14 x 8 = transforme en coord écran
v_mouse = INT(v_mouse / 14) + 1
h_mouse = INT(h_mouse / 8) + 1
'LOCATE 21, 1: PRINT v_mouse, h_mouse'===
IF lButton THEN
IF (v_mouse >= 5 AND v_mouse <= 20) AND (h_mouse >= 6 AND h_mouse <= 73) THEN
f = 0
FOR i = 1 TO 5
IF v_mouse >= INT(y1(i) / 14) AND v_mouse <= INT(y1(i) / 14) + 2 THEN
flag = i: f = 1
CALL attendre(.2)
souris = 2
EXIT FOR
END IF
NEXT
IF f = 1 THEN EXIT DO
END IF

IF v_mouse = v2 AND h_mouse = h2 THEN
valtouche = haut
souris = 1
CALL attendre(.2)
EXIT DO
ELSEIF v_mouse = v2 AND h_mouse = h2 + 2 THEN
valtouche = bas
souris = 1
CALL attendre(.2)
EXIT DO
ELSEIF v_mouse = v2 AND (h_mouse >= 60 AND h_mouse <= 72) THEN
valtouche = 13
souris = 1
CALL attendre(.3)
EXIT DO
ELSE
BEEP
END IF
END IF

LOOP WHILE r$ = ""

MouseHide

IF souris = 2 THEN
FOR i = 1 TO 5
col(i) = vertclair
NEXT
col(flag) = jaune
GOSUB hor2
flag2 = flag
GOSUB hor1

valtouche = 13
END IF

IF souris = 0 THEN
IF LEN(r$) < 2 THEN valtouche = ASC(r$) ELSE valtouche = ASC(RIGHT$(r$, 1))
END IF

SELECT CASE valtouche
CASE haut
flag = flag - 1: IF flag = 0 THEN flag = 5

CASE bas
flag = flag + 1: IF flag = 6 THEN flag = 1
CASE 27
CALL quitter: GOSUB ver21
CASE 13
EXIT DO
CASE ELSE
BEEP

END SELECT
FOR i = 1 TO 5
col(i) = vertclair
NEXT
col(flag) = jaune
GOSUB hor2

LOOP WHILE valtouche <> 13
LOCATE 22: PRINT SPACE$(80): PRINT SPACE$(80)

IF reponse = flag THEN
CALL exact(.6)
IF erreurs = 0 THEN re = re + 1
ELSE
CALL erreur(.9)
erreurs = erreurs + 1: LOCATE 23: PRINT SPACE$(80): GOSUB ver21: GOTO hor12
END IF
LOCATE 23: PRINT SPACE$(80)

NEXT jj

FOR jj = 1 TO 4
erreurs = 0
CALL titre2(titr$)
COLOR vertclair: LOCATE 22: PRINT "Niveau"; ni
LOCATE 22, 77: PRINT 5 - jj

GOSUB ver25 'init
GOSUB ver26 'tirage

GOSUB ver31

flag = 1
FOR i = 1 TO 8
col(i) = rougeclair
NEXT
col(1) = jaune

DO
flag2 = flag
GOSUB ver23 'affichage

ver22:
MouseBorder 308, 10, 320, 630
MouseShow
souris = 0
DEF SEG = 0
POKE 1050, PEEK(1052)
DEF SEG
v2 = 23
DO
r$ = INKEY$
' Obtient l'emplacement de la souris et l'état des boutons.
MousePoll v_mouse, h_mouse, lButton, rButton
'matrice 14 x 8 = transforme en coord écran
v_mouse = INT(v_mouse / 14) + 1
h_mouse = INT(h_mouse / 8) + 1
'LOCATE 21, 1: PRINT v_mouse, h_mouse'===
IF lButton THEN
IF v_mouse = v2 AND h_mouse = 10 THEN
valtouche = gauche
souris = 1
CALL attendre(.2)
EXIT DO
ELSEIF v_mouse = v2 AND h_mouse = 12 THEN
valtouche = droite
souris = 1
CALL attendre(.2)
EXIT DO
ELSEIF v_mouse = v2 AND h_mouse = 17 THEN
valtouche = haut
souris = 1
CALL attendre(.2)
EXIT DO
ELSEIF v_mouse = v2 AND h_mouse = 19 THEN
valtouche = bas
souris = 1
CALL attendre(.2)
EXIT DO
ELSEIF v_mouse = v2 AND (h_mouse >= 60 AND h_mouse <= 72) THEN
valtouche = 13
souris = 1
CALL attendre(.3)
EXIT DO
ELSE
BEEP
END IF
END IF

LOOP WHILE r$ = ""

MouseHide

IF souris = 0 THEN
IF LEN(r$) < 2 THEN valtouche = ASC(r$) ELSE valtouche = ASC(RIGHT$(r$, 1))
END IF

SELECT CASE valtouche
CASE gauche, haut
flag = flag - 1: IF flag = 0 THEN flag = 8

CASE droite, bas
flag = flag + 1: IF flag = 9 THEN flag = 1
CASE 27
CALL quitter: GOSUB ver31
CASE 13
EXIT DO
CASE ELSE
BEEP

END SELECT
FOR i = 1 TO 8
col(i) = rougeclair
NEXT
col(flag) = jaune
GOSUB ver23

LOOP WHILE valtouche <> 13
LOCATE 22: PRINT SPACE$(80): PRINT SPACE$(80)
IF reponse = flag THEN
CALL exact(.6)
IF erreurs = 0 THEN re = re + 1
ELSE
CALL erreur(.9)
erreurs = erreurs + 1: LOCATE 23: PRINT SPACE$(80): GOSUB ver31: GOTO ver22
END IF
LOCATE 23: PRINT SPACE$(80)

NEXT jj

RETURN
'++++++++++++++++++++
verniveau2:
FOR jj = 1 TO 5
erreurs = 0
IF jj / 2 = INT(jj / 2) THEN choix = 1 ELSE choix = 2

IF choix = 1 THEN
tit$ = "verticale"
l$ = "verticalement"
reponse = 0
ELSE
tit$ = "horizontale"
l$ = "horizontalement"
reponse = 90
END IF
LOCATE 1: PRINT SPACE$(80)
CALL titre2(tit$)
LOCATE 22, 77: COLOR vertclair: PRINT 6 - jj: LOCATE 22, 1: PRINT "Niveau"; ni


GOSUB ver100
x = INT(RND * 200) + 220: y = 155
angle = (INT(RND * 6) + 2) * 10

'LINE (50, 50)-(590, 260), jaune, B
x2 = INT(RND * 160) + 60
y2 = INT(RND * 150) + 100
y3 = INT(RND * 40) + 60
y4 = INT(RND * 100) + 100
y5 = INT(RND * 40) + 60
x3 = INT(RND * 200) + 100
x5 = INT(RND * 60) + 300
x4 = INT(RND * 100) + 400
x6 = INT(RND * 60) + 100
x7 = INT(RND * 100) + 250
x8 = INT(RND * 100) + 400
y6 = INT(RND * 100) + 130
y7 = INT(RND * 100) + 100
y8 = INT(RND * 110) + 130

ver110:
DO
LINE (50, y2)-(590, y3), jaune, , &H8888
LINE (x2, 260)-(590, y4), jaune, , &H8888
LINE (50, y5)-(x3, 50), jaune, , &H8888
LINE (x5, 50)-(x4, 260), jaune, , &H8888
LINE (x6, 50)-(x7, 260), jaune, , &H8888
LINE (x8, 50)-(590, y6), jaune, , &H8888
LINE (50, y7)-(590, y8), jaune, , &H8888

ancienangle = angle
DRAW "b m=" + VARPTR$(x) + ",=" + VARPTR$(y) + "ta=" + VARPTR$(angle) + "c=" + VARPTR$(vertclair) + "u100 d200"

MouseBorder 308, 10, 320, 630
MouseShow
souris = 0
DEF SEG = 0
POKE 1050, PEEK(1052)
DEF SEG
v2 = 23: h2 = 13
DO
r$ = INKEY$
' Obtient l'emplacement de la souris et l'état des boutons.
MousePoll v_mouse, h_mouse, lButton, rButton
' v_graph = v_mouse: h_graph = h_mouse
v_mouse = INT(v_mouse / 14) + 1
h_mouse = INT(h_mouse / 8) + 1
' LOCATE 21, 1: PRINT v_graph, h_graph'===
' LOCATE 21, 1: PRINT v_mouse, h_mouse'===
IF lButton THEN
IF v_mouse = v2 AND h_mouse = h2 THEN
valtouche = haut ' 72 'fleche haut
souris = 1
CALL attendre(.2)
EXIT DO
ELSEIF v_mouse = v2 AND h_mouse = h2 + 2 THEN
valtouche = bas '80 'fleche bas
souris = 1
CALL attendre(.2)
EXIT DO
ELSEIF v_mouse = v2 AND (h_mouse >= 60 AND h_mouse <= 72) THEN
valtouche = 13
souris = 1
CALL attendre(.3)
EXIT DO
ELSE
BEEP
END IF
END IF

LOOP WHILE r$ = ""

MouseHide

IF souris = 0 THEN
IF LEN(r$) < 2 THEN valtouche = ASC(r$) ELSE valtouche = ASC(RIGHT$(r$, 1))
END IF

SELECT CASE valtouche
CASE haut
angle = angle - 5: IF angle < 0 THEN angle = 355
CASE bas
angle = angle + 5: IF angle > 360 THEN angle = 5
CASE 27
CALL quitter: GOSUB ver100
CASE 13
EXIT DO
CASE ELSE
BEEP

END SELECT
DRAW "b m=" + VARPTR$(x) + ",=" + VARPTR$(y) + "ta=" + VARPTR$(ancienangle) + "c=" + VARPTR$(bleu) + "u100 d200"
IF angle = 360 THEN angle = 0
LOOP
LOCATE 23: PRINT SPACE$(80)

IF angle = reponse OR angle - 180 = reponse THEN
CALL exact(.7)
IF erreurs = 0 THEN re = re + 2
ELSE
erreurs = erreurs + 1
IF erreurs > 2 THEN
DRAW "b m=" + VARPTR$(x) + ",=" + VARPTR$(y) + "ta=" + VARPTR$(reponse) + "c=" + VARPTR$(rougeclair) + "u100 d200"
CALL centre(23, rougeclair, "Regarde")
CALL attendre(2)
DRAW "b m=" + VARPTR$(x) + ",=" + VARPTR$(y) + "ta=" + VARPTR$(reponse) + "c=" + VARPTR$(bleu) + "u100 d200"
ELSE
CALL erreur(.7)
END IF
GOSUB ver100
GOTO ver110
END IF

NEXT

RETURN
'+++++++++++++++++++++++++++

ver1:
y1 = 60: y2 = 240
FOR i = 1 TO 8
COLOR col(i): LINE (x1(i), y2)-(x(i), y1)
NEXT
GOSUB ver2
RETURN

ver2:
'dessiner tria
PUT (x1(flag2) - 5, y2 + 13), trian, XOR
RETURN

ver3:
'tirage
DO
f = 0
z(jj) = INT(RND * 6) + 2
FOR j = 1 TO jj - 1
IF z(jj) = z(j) THEN f = 1: EXIT FOR
NEXT
LOOP WHILE f = 1
reponse = z(jj)

FOR i = 1 TO 8
t(i) = INT(RND * 20) + 3
signe = INT(RND * 2)
IF signe = 0 THEN t(i) = -t(i)
x(i) = x1(i) + t(i)
NEXT
x(reponse) = x1(reponse)
RETURN


hor1:
x1 = 60: x2 = 580
FOR i = 1 TO 5
COLOR col(i): LINE (x1, y1(i))-(x2, y(i))
NEXT
GOSUB hor2
RETURN

hor2:
'dessiner tria
PUT (x1 - 20, y1(flag2) - 5), trian2, XOR
RETURN

hor3:
'tirage
DO
f = 0
z(jj) = INT(RND * 5) + 1
FOR j = 1 TO jj - 1
IF z(jj) = z(j) THEN f = 1: EXIT FOR
NEXT
LOOP WHILE f = 1
reponse = z(jj)

FOR i = 1 TO 5
t(i) = INT(RND * 20) + 3
signe = INT(RND * 2)
IF signe = 0 THEN t(i) = -t(i)
y(i) = y1(i) + t(i)
NEXT
y(reponse) = y1(reponse)
RETURN

ver23:
FOR i = 1 TO 8
COLOR col(i): LINE (xx1(i), yy1(i))-(xx2(i), yy2(i))
NEXT
GOSUB ver24
RETURN

ver24:
'dessiner ronds
PUT (xx1(flag2) - 4, yy1(flag2) - 4), cercle, XOR
PUT (xx2(flag2) - 4, yy2(flag2) - 4), cercle, XOR
RETURN

ver20:
IF ni = 1 THEN
w$ = "Avec les flèches " + g$ + ", tu vas devoir sélectionner"
z$ = "les verticales ou les horizontales."
CALL consigne(2, w$, z$, xx$)
ELSE
w$ = "Avec les flèches " + CHR$(24) + " " + CHR$(25) + ", tu vas devoir orienter une ligne"
z$ = "afin qu'elle soit horizontale ou verticale."
CALL consigne(2, w$, z$, xx$)
END IF

RETURN

ver25:
xx1(6) = 100: xx1(2) = 150: xx1(3) = 90: xx1(4) = 180
xx1(1) = 320: xx1(5) = 480: xx1(7) = 580: xx1(8) = 440
yy1(6) = 90: yy1(2) = 160: yy1(3) = 240: yy1(4) = 220
yy1(1) = 240: yy1(5) = 250: yy1(7) = 260: yy1(8) = 80
xx2(6) = 460: xx2(2) = 530: xx2(3) = 290: xx2(4) = 430
xx2(1) = 390: xx2(5) = 460: xx2(7) = 530: xx2(8) = 620
yy2(6) = 150: yy2(2) = 220: yy2(3) = 90: yy2(4) = 250
yy2(1) = 80: yy2(5) = 70: yy2(7) = 110: yy2(8) = 170
RETURN

ver26:
'tirage pour xx2,yy2
'2,4,6,8 = hori 1,3,5,7 = verti
DO
f = 0
z(jj) = INT(RND * 8) + 1
FOR j = 1 TO jj - 1
IF z(jj) = z(j) THEN f = 1: EXIT FOR
NEXT
LOOP WHILE f = 1
reponse = z(jj)

SELECT CASE reponse
CASE 2, 4, 6, 8
yy2(reponse) = yy1(reponse)
xx2(reponse - 1) = xx1(reponse - 1)
l$ = "horizontale"
CASE 1, 3, 5, 7
xx2(reponse) = xx1(reponse)
yy2(reponse + 1) = yy1(reponse + 1)
l$ = "verticale"
END SELECT
RETURN

ver21:
IF tit$ = "Verticale" THEN
f$ = CHR$(27) + " " + CHR$(26)
ELSE
f$ = CHR$(24) + " " + CHR$(25)
END IF
LOCATE 23, 13
COLOR blanc: PRINT f$; " = sélectionner la ligne "; : COLOR jaune: PRINT LCASE$(tit$)
COLOR blanc
LOCATE 23, 60: PRINT rt$ + " = valider"
RETURN

ver31:
LOCATE 23, 10: COLOR blanc
PRINT g$; " = sélectionner la ligne "; : COLOR jaune: PRINT l$
LOCATE 23, 60: COLOR blanc: PRINT rt$; " = valider"
RETURN

ver100:
LOCATE 23, 13: COLOR blanc
PRINT CHR$(24) + " " + CHR$(25); " = orienter la ligne "; : COLOR jaune: PRINT l$
LOCATE 23, 60: COLOR blanc: PRINT rt$; " = valider"
RETURN

END SUB

DEFINT A-Z
SUB vocabu (re, ni, rt$, gg$, pre$, titr$, noir, bleu, vert, rouge, marron, blanc, vertclair, cyanclair, rougeclair, jaune, blancbrill, couleur, coef1!, coef2!)
CONST pi = 3.141592653589#
DIM z(10), an$(10)
DIM trian(1 TO 100) AS INTEGER
DIM trian2(1 TO 100) AS INTEGER

re = 0

an$(1) = "largeur"
an$(2) = "longueur"
an$(3) = "hauteur"
an$(4) = "diagonale"
an$(5) = "diamètre"
an$(6) = "rayon"
an$(7) = "arc de cercle"
an$(8) = "médiatrice"
an$(9) = "médiane"
an$(10) = "bissectrice"

CALL niveau(ni, 2, titr$)

SELECT CASE ni
CASE 1
max = 5
CASE 2
max = 10
END SELECT

'présentation
w$ = "Des figures vont s'afficher à l'écran."
z$ = "Une ligne va être sélectionnée."
xx$ = "Tu devras choisir le nom de cette ligne dans une liste de mots."
CALL consigne(3, w$, z$, xx$)

SCREEN 9, , 1, 0
x = 320: y = 175
tria$ = "c15 m-5,+0 m+5,-10 m+5,+10 m-5,+0 b m+2,-1 p12,15 "
DRAW "m320,175 " + tria$
GET (x - 5, y)-(x + 5, y - 10), trian
CLS 1
tria$ = "c15 m+0,-5 m+10,+5 m-10,+5 m+0,-5 b m+2,+0 p12,15 "
DRAW "m320,175 " + tria$
GET (x, y - 5)-(x + 10, y + 10), trian2

SCREEN 9, , 0, 0

CALL titre3(titr$)

FOR jj = 1 TO max
erreurs = 0
'tirage
DO
f = 0
z(jj) = INT(RND * max) + 1
FOR j = 1 TO jj - 1
IF z(jj) = z(j) THEN f = 1: EXIT FOR
NEXT
LOOP WHILE f = 1
choix = z(jj)

ON choix GOSUB vo1, vo2, vo3, vo4, vo5, vo6, vo7, vo8, vo9, vo10
LOCATE 22: COLOR vertclair: PRINT "Niveau"; ni
LOCATE 22, 77: PRINT (max + 1) - jj
voca10:
LINE (440, 70)-(620, 220), noir, BF
COLOR blanc: LOCATE 18, 62: PRINT gg$
IF ni = 1 THEN v = 9: h = 63 ELSE v = 7: h = 62
CALL flechesbis(v, h, an$(), max, r)
IF r = 0 THEN CALL quitter: GOTO voca10
IF r = choix THEN
CALL exact(.7)
IF erreurs = 0 THEN
IF ni = 1 THEN re = re + 2 ELSE re = re + 1
END IF
ELSE
erreurs = erreurs + 1
IF erreurs > 2 THEN
CALL centre(23, rougeclair, "Solution : " + an$(choix))
ELSE
CALL erreur(.7)
LOCATE 23: PRINT SPACE$(80)
END IF
GOTO voca10
END IF
LINE (0, 28)-(426, 270), bleu, BF
LINE (440, 70)-(620, 220), noir, BF
LOCATE 23: PRINT SPACE$(80)

NEXT jj

'++++++++++

'résultats
CALL resultats(re, ni)

EXIT SUB

vocacercle:
coul = jaune
CIRCLE (x, y), 3, coul, , , coef2!
CIRCLE (x, y), 4, coul, , , coef2!
CIRCLE (x2, y2), 3, coul, , , coef2!
CIRCLE (x2, y2), 4, coul, , , coef2!
RETURN

vo1: 'largeur
ch = INT(RND * 2) + 1
SELECT CASE ch
CASE 1
x = 360: y = 80: x2 = 360: y2 = 210
CASE 2
x = 70: y = 80: x2 = 70: y2 = 210
END SELECT
GOSUB vocacercle
'rect
LINE (70, 80)-(360, 210), blancbrill, B
LINE (x, y)-(x2, y2), vertclair
PUT (x - 20, y + 60), trian2, XOR
RETURN

vo2: 'longueur
ch = INT(RND * 2) + 1
SELECT CASE ch
CASE 1
x = 70: y = 95: x2 = 360: y2 = 95
CASE 2
x = 70: y = 195: x2 = 360: y2 = 195
END SELECT
GOSUB vocacercle
'rect
LINE (70, 95)-(360, 195), blancbrill, B
LINE (x, y)-(x2, y2), vertclair
PUT (x + 145, y + 10), trian, XOR
RETURN

vo3: 'hauteur
x = 200: y = 90: x2 = 200: y2 = 220
GOSUB vocacercle
'triang
LINE (80, 220)-(200, 90), blancbrill
LINE -(380, 220)
LINE -(80, 220)
LINE (x2, y2 - 10 * coef1!)-(x2 + 10, y2), , B
LINE (x, y)-(x2, y2), vertclair
PUT (x - 20, y + 65), trian2, XOR
RETURN

vo4: 'diagonale
ch = INT(RND * 2) + 1
IF ni = 1 THEN
SELECT CASE ch
CASE 1
x = 70: y = 95: x2 = 360: y2 = 195
CASE 2
x = 70: y = 195: x2 = 360: y2 = 95
END SELECT
GOSUB vocacercle
'rect
LINE (70, 95)-(360, 195), blancbrill, B
LINE (x, y)-(x2, y2), vertclair
PUT (210, 155), trian, XOR
ELSE
SELECT CASE ch
CASE 1
x = 200: y = 80: x2 = 200: y2 = 220
CASE 2
x = 50: y = 150: x2 = 350: y2 = 150
END SELECT
GOSUB vocacercle
'losange
LINE (50, 150)-(200, 80), blancbrill
LINE -(350, 150)
LINE -(200, 220)
LINE -(50, 150)
LINE (x, y)-(x2, y2), vertclair
IF ch = 1 THEN
PUT (x - 20, y + 65), trian2, XOR
ELSE
PUT (x + 145, y + 10), trian, XOR
END IF
END IF
RETURN

vo5: 'diamètre
x = 140: y = 170: x2 = 300: y2 = 170
GOSUB vocacercle
'cercle
CIRCLE (220, 170), 80, blancbrill, , , coef2!
LINE (x, y)-(x2, y2), vertclair
PUT (215, y + 10), trian, XOR
RETURN

vo6: 'rayon
ch = INT(RND * 2) + 1
SELECT CASE ch
CASE 1
x = 220: y = 170: x2 = 300: y2 = 170
CASE 2
x = 140: y = 170: x2 = 220: y2 = 170
END SELECT
GOSUB vocacercle
'cercle
CIRCLE (220, 170), 80, blancbrill, , , coef2!
LINE (x, y)-(x2, y2), vertclair
IF ch = 1 THEN x = 255 ELSE x = 175
PUT (x, y + 10), trian, XOR
RETURN

vo7: 'arc de cercle
x = 220: y = 170 - (80 * coef2!): x2 = 300: y2 = 170
GOSUB vocacercle
'cercle
CIRCLE (220, 170), 80, blancbrill, , , coef2!
CIRCLE (220, 170), 80, vertclair, 0, pi / 2, coef2!
PUT (260, 130), trian2, XOR
RETURN

vo8: 'médiatrice
'triang
LINE (80, 220)-(200, 90), blancbrill
LINE -(380, 220)
LINE -(80, 220)
LINE (160, 215)-(150, 225)
LINE (310, 215)-(300, 225)
LINE (230, 220 - (10 * coef1!))-(240, 220), , B
LINE (230, 70)-(230, 240), vertclair
PUT (210, 155), trian2, XOR
RETURN

vo9: 'médiane
x = 200: y = 90: x2 = 230: y2 = 220
GOSUB vocacercle
'triang
LINE (80, 220)-(200, 90), blancbrill
LINE -(380, 220)
LINE -(80, 220)
LINE (160, 215)-(150, 225)
LINE (310, 215)-(300, 225)
LINE (200, 90)-(230, 220), vertclair
PUT (x, y + 65), trian2, XOR
RETURN

vo10: 'bissectrice
DRAW "b m80,220 ta60 c15 r170 m380,220 m80,220 ta30 c10 r188"
CIRCLE STEP(0, 0), 3, jaune, , , coef2!
CIRCLE STEP(0, 0), 4, jaune, , , coef2!
CIRCLE (80, 220), 3, jaune, , , coef2!
CIRCLE (80, 220), 4, jaune, , , coef2!
CIRCLE (80, 220), 35, jaune, 0, 30 * (pi / 180)
CIRCLE (80, 220), 30, jaune, 30 * (pi / 180), 60 * (pi / 180)
RETURN

END SUB
 

 

DECLARE SUB MouseBorder (row1%, col1%, row2%, col2%)
DECLARE SUB MouseHide ()
DECLARE SUB MousePoll (row%, col%, lButton%, rButton%)
DECLARE SUB MouseShow ()
DECLARE SUB getinvimouse (rr%)
DECLARE SUB claviernumerique (z$)
DECLARE SUB consigne (nl%, w$, z$, xx$)
DECLARE SUB centre (v%, coul%, ph$)
DECLARE SUB quitter ()
DECLARE SUB getinvi (rr%)
DECLARE SUB niveau (r%, np%, titr$)
DECLARE SUB titre (titr$)
DECLARE SUB attendre (tx!)
DECLARE SUB entree ()
DECLARE SUB erreur (tx!)
DECLARE SUB exact (tx!)
DECLARE SUB inputgen (nl%, r$, deb%, fin%)
DECLARE SUB resultats (re%, ni%)
DECLARE SUB titre2 (titr$)
'EXO 5 GEOMETRIE
'Daniel CLERC 7/4/96
'version 1.5


DEFINT A-Z
SUB coord (re, ni, rt$, gg$, pre$, titr$, noir, bleu, vert, rouge, marron, blanc, vertclair, cyanclair, rougeclair, jaune, blancbrill, couleur, coef1!, coef2!)
DIM z(5), z2(5), y(11, 5), x(11, 5), xx(11), yy(11)
DIM cercle(1 TO 100) AS INTEGER
titr$ = "coordonnees"
CONST gauche = 75, droite = 77
CONST haut = 72, bas = 80
er = 0: re = 0

x(0, 1) = 15: y(0, 1) = 6
x(1, 1) = 23: y(1, 1) = 0
x(2, 1) = 27: y(2, 1) = 1
x(3, 1) = 19: y(3, 1) = 6
x(4, 1) = 15: y(4, 1) = 12
x(5, 1) = 14: y(5, 1) = 12
x(6, 1) = 10: y(6, 1) = 6
x(7, 1) = 2: y(7, 1) = 1
x(8, 1) = 6: y(8, 1) = 0
x(9, 1) = 14: y(9, 1) = 6
x(10, 1) = 15: y(10, 1) = 6
x(11, 1) = 10

x(0, 2) = 2: y(0, 2) = 7
x(1, 2) = 8: y(1, 2) = 3
x(2, 2) = 12: y(2, 2) = 7
x(3, 2) = 26: y(3, 2) = 1
x(4, 2) = 28: y(4, 2) = 7
x(5, 2) = 26: y(5, 2) = 13
x(6, 2) = 12: y(6, 2) = 7
x(7, 2) = 8: y(7, 2) = 11
x(8, 2) = 2: y(8, 2) = 7
x(11, 2) = 8

x(0, 3) = 15: y(0, 3) = 7
x(1, 3) = 4: y(1, 3) = 1
x(2, 3) = 15: y(2, 3) = 3
x(3, 3) = 26: y(3, 3) = 1
x(4, 3) = 15: y(4, 3) = 7
x(5, 3) = 29: y(5, 3) = 13
x(6, 3) = 15: y(6, 3) = 10
x(7, 3) = 1: y(7, 3) = 13
x(8, 3) = 15: y(8, 3) = 7
x(11, 3) = 8

x(0, 4) = 28: y(0, 4) = 2
x(1, 4) = 19: y(1, 4) = 12
x(2, 4) = 15: y(2, 4) = 0
x(3, 4) = 11: y(3, 4) = 12
x(4, 4) = 2: y(4, 4) = 2
x(5, 4) = 1: y(5, 4) = 9
x(6, 4) = 29: y(6, 4) = 9
x(7, 4) = 28: y(7, 4) = 2
x(11, 4) = 7

x(0, 5) = 3: y(0, 5) = 2
x(1, 5) = 12: y(1, 5) = 4
x(2, 5) = 12: y(2, 5) = 7
x(3, 5) = 18: y(3, 5) = 7
x(4, 5) = 18: y(4, 5) = 4
x(5, 5) = 27: y(5, 5) = 2
x(6, 5) = 24: y(6, 5) = 13
x(7, 5) = 15: y(7, 5) = 10
x(8, 5) = 6: y(8, 5) = 13
x(9, 5) = 3: y(9, 5) = 2
x(11, 5) = 9
DEF SEG = 0
POKE &H417, (PEEK(&H417) AND &H9F)'non numérique
DEF SEG
CALL niveau(ni, 3, titr$)

SELECT CASE ni
CASE 1
GOSUB cooniveau1
CASE 2
GOSUB cooniveau2
CASE 3
GOSUB cooniveau3
END SELECT
VIEW

'résultats

CALL resultats(re, ni)

EXIT SUB

cooniveau1:
GOSUB coo40 'présentation

FOR jj = 1 TO 5
GOSUB coo50 'quadrillage
erreurs = 0
GOSUB coo6 'tirage

COLOR vertclair: LOCATE 22, 77: PRINT 6 - jj
x = 0: y = 0
GOSUB coo2
coo13:
GOSUB coo14
CALL centre(22, jaune, "Trouve les coordonnées correspondant au couple (" + LTRIM$(STR$(colonne)) + "," + CHR$(ligne + 65) + ")")
GOSUB coo0

LOCATE 22: PRINT SPACE$(80): PRINT SPACE$(80)

IF (colonne = x / 16) AND (ligne = y / 14) THEN
CALL exact(1.2): IF souris <> 2 THEN GOSUB coo2
IF erreurs = 0 THEN re = re + 2
ELSE
erreurs = erreurs + 1
IF erreurs > 2 THEN
GOSUB coo2
x2 = x: y2 = y
x = colonne * 16: y = ligne * 14
CALL centre(23, rougeclair, "Regarde la bonne réponse : (" + LTRIM$(STR$(colonne)) + "," + CHR$(ligne + 65) + ")")
GOSUB coo2
CALL getinvimouse(r): IF r = 27 THEN CALL quitter
GOSUB coo2
x = x2: y = y2: GOSUB coo2: GOTO coo13
ELSE
CALL erreur(.8)
CALL centre(23, rougeclair, "Tu as choisi le couple (" + LTRIM$(STR$(x / 16)) + "," + CHR$(y / 14 + 65) + ")")
CALL getinvimouse(r): IF r = 27 THEN CALL quitter
GOTO coo13
END IF
END IF

NEXT jj
RETURN '+++++++++++++++

cooniveau2:
GOSUB coo40
GOSUB coo50
FOR jj = 1 TO 5
erreurs = 0
GOSUB coo6 'tirage
x = colonne * 16: y = ligne * 14
GOSUB coo2
DEF SEG = 0
POKE &H417, (PEEK(&H417) OR &H20)'numérique
POKE &H417, (PEEK(&H417) OR &H40) 'MAJ
DEF SEG
coo20:
LOCATE 22: PRINT SPACE$(80): PRINT SPACE$(80)
COLOR vertclair: LOCATE 22, 77: PRINT 6 - jj: COLOR blancbrill
CALL centre(23, blanc, "Tape la réponse")
LOCATE 22, 20
COLOR jaune
PRINT "Colonne : "; : COLOR blancbrill
CALL inputgen(2, r$, 48, 57)
xx = VAL(r$)
IF xx = colonne THEN
CALL exact(.7)
IF erreurs = 0 THEN re = re + 1
ELSE
erreurs = erreurs + 1
IF erreurs > 2 THEN
LOCATE 23, 1: PRINT SPACE$(80)
CALL centre(23, rougeclair, "Solution :" + STR$(colonne))
CALL attendre(2)
GOTO coo20
ELSE
CALL erreur(.7): GOTO coo20
END IF
END IF
erreurs = 0
coo21:
LOCATE 23: PRINT SPACE$(80)
COLOR vertclair: LOCATE 22, 77: PRINT 6 - jj: COLOR blancbrill
CALL centre(23, blanc, "Tape la réponse")
LOCATE 22, 58: PRINT " "; : LOCATE , 50
COLOR jaune: PRINT "Ligne : "; : COLOR blancbrill
CALL inputgen(1, r$, 65, 122)
r$ = UCASE$(r$)
IF r$ = CHR$(ligne + 65) THEN
CALL exact(.7): GOSUB coo2
IF erreurs = 0 THEN re = re + 1
ELSE
erreurs = erreurs + 1
IF erreurs > 2 THEN
LOCATE 23, 1: PRINT SPACE$(80)
CALL centre(23, rougeclair, "Solution : " + CHR$(ligne + 65))
CALL attendre(2)
GOTO coo21
ELSE
CALL erreur(.7)
GOTO coo21
END IF
END IF
NEXT jj
VIEW
RETURN '++++++++++++++++++++++++

cooniveau3:
GOSUB coo40 'présentation

FOR boucle = 1 TO 3
GOSUB coo50 'quadrillage

DO
f = 0
z(boucle) = INT(RND * 5) + 1
FOR j = 1 TO boucle - 1
IF z(boucle) = z(j) THEN f = 1: EXIT FOR
NEXT
LOOP WHILE f = 1
tabl = z(boucle)
colonne = x(0, tabl): ligne = y(0, tabl)
x = colonne * 16: y = ligne * 14
xx(0) = colonne * 16: yy(0) = ligne * 14
GOSUB coo2: GOSUB coo31

erreurs = 0
h = 14
FOR jj = 1 TO x(11, tabl)
COLOR vertclair: LOCATE 22, 77: PRINT (x(11, tabl) + 1) - jj
colonne = x(jj, tabl): ligne = y(jj, tabl)

GOSUB coo14
LOCATE 22: COLOR blancbrill
PRINT "Coordonnées :"
cc = jaune: f = 0: GOSUB coo22: f = 1

coo51:
GOSUB coo0
IF xx(jj - 1) = x AND yy(jj - 1) = y THEN BEEP: GOTO coo51

xx(jj) = x: yy(jj) = y
IF (colonne = x / 16) AND (ligne = y / 14) THEN
cc = vertclair: GOSUB coo22
ELSE
erreurs = erreurs + 1
cc = rougeclair: GOSUB coo22
END IF
GOSUB coo2
LINE (xx(jj), yy(jj))-(xx(jj - 1), yy(jj - 1)), blancbrill
GOSUB coo31: GOSUB coo2
IF tabl = 1 THEN h = h + 6 ELSE h = h + 7
NEXT jj
GOSUB coo2

IF erreurs <> 0 THEN
LOCATE 23: PRINT SPACE$(80)
PSET (x(0, tabl) * 16, y(0, tabl) * 14)
FOR i = 1 TO x(11, tabl)
x = x(i, tabl) * 16: y = y(i, tabl) * 14
LINE -(x, y), rougeclair
IF couleur = 0 THEN GOSUB coo31
NEXT
er$ = " erreur": IF erreurs > 1 THEN er$ = er$ + "s"
CALL centre(23, rougeclair, "Tu as fait" + STR$(erreurs) + er$)
CALL attendre(2)
ELSE
CALL exact(1)
END IF
CALL entree
IF erreurs > 3 THEN erreurs = 3
er = er + erreurs
NEXT boucle
re = 10 - er: IF re < 0 THEN re = 0
RETURN '++++++++++

coo2:
PUT (x - 6, y - 6), cercle, XOR
RETURN

coo31:
CIRCLE (x, y), 3, jaune, , , coef2!
RETURN

coo6: 'tirage
DO
f = 0
z(jj) = INT(RND * 30) + 1 'tirage colonne
FOR j = 1 TO jj - 1
IF z(jj) = z(j) THEN f = 1: EXIT FOR
NEXT
LOOP WHILE f = 1
colonne = z(jj)

DO
f = 0
z2(jj) = INT(RND * 14) 'tirage ligne
FOR j = 1 TO jj - 1
IF z2(jj) = z2(j) THEN f = 1: EXIT FOR
NEXT
LOOP WHILE f = 1
ligne = z2(jj)
RETURN

coo14:
CALL centre(23, blanc, CHR$(27) + " " + CHR$(26) + " " + CHR$(24) + " " + CHR$(25) + " = déplacer " + rt$ + " = valider")
RETURN

coo0:
DO
coo11:
MouseBorder 50, 55, 320, 575
MouseShow
souris = 0
DEF SEG = 0
POKE 1050, PEEK(1052)
DEF SEG
DO
r$ = INKEY$
' Obtient l'emplacement de la souris et l'état des boutons.
MousePoll v_mouse, h_mouse, lButton, rButton
'matrice 14 x 8 = transforme en coord écran
v_mouse = INT(v_mouse / 14) + 1
h_mouse = INT(h_mouse / 8) + 1
'LOCATE 21, 1: PRINT v_mouse, h_mouse'===
IF lButton THEN
IF (v_mouse >= 6 AND v_mouse <= 19) AND (h_mouse >= 11 AND h_mouse <= 71) THEN
hh = 11: f1 = 0
FOR i = 1 TO 31
IF h_mouse = hh THEN
h_coord = hh: f1 = 1: EXIT FOR
END IF
hh = hh + 2
NEXT
IF f1 = 1 THEN
vv = 6: f2 = 0
FOR i = 1 TO 14
IF v_mouse = vv THEN
v_coord = vv: f2 = 1: EXIT FOR
END IF
vv = vv + 1
NEXT
END IF
IF f1 = 1 AND f2 = 1 THEN
CALL attendre(.3)
souris = 2
EXIT DO
ELSE
BEEP
END IF
END IF

IF v_mouse = 23 THEN
'fleches
IF h_mouse = 23 THEN
'gauche
valtouche = gauche
CALL attendre(.1)
souris = 1
EXIT DO
ELSEIF h_mouse = 25 THEN
'droite
valtouche = droite
CALL attendre(.1)
souris = 1
EXIT DO
ELSEIF h_mouse = 27 THEN
'haut
valtouche = haut
CALL attendre(.1)
souris = 1
EXIT DO
ELSEIF h_mouse = 29 THEN
'bas
valtouche = bas
CALL attendre(.1)
souris = 1
EXIT DO
ELSEIF h_mouse >= 46 AND h_mouse <= 58 THEN
'return
valtouche = 13
CALL attendre(.3)
souris = 1
EXIT DO
ELSE
BEEP
END IF
ELSE
BEEP
END IF
END IF
LOOP WHILE r$ = ""

MouseHide

IF souris = 2 THEN
GOSUB coo2
y = v_coord * 14: x = h_coord * 8
VIEW
PUT (x - 11, y - 12), cercle, XOR
VIEW (83, 77)-(563 + 6, 259 + 6)
y = v_coord - 6: x = (h_coord - 11) / 2
x = x * 16: y = y * 14 '===
valtouche = 13
END IF

IF souris = 0 THEN
IF LEN(r$) < 2 THEN valtouche = ASC(r$) ELSE valtouche = ASC(RIGHT$(r$, 1))
END IF

IF valtouche = 50 THEN valtouche = bas
IF valtouche = 52 THEN valtouche = gauche
IF valtouche = 54 THEN valtouche = droite
IF valtouche = 56 THEN valtouche = haut

SELECT CASE valtouche
CASE gauche
xx = x - 16: yy = y
GOSUB coo2
IF xx < 0 THEN xx = 480

CASE droite
xx = x + 16: yy = y
GOSUB coo2
IF xx > 480 THEN xx = 0

CASE haut
xx = x: yy = y - 14
GOSUB coo2
IF yy < 0 THEN yy = 182

CASE bas
xx = x: yy = y + 14
GOSUB coo2
IF yy > 182 THEN yy = 0

CASE 27
CALL quitter: GOSUB coo14: GOTO coo11

CASE 13
EXIT DO

CASE ELSE
BEEP

END SELECT

IF valtouche = gauche OR valtouche = droite OR valtouche = haut OR valtouche = bas THEN
x = xx: y = yy
GOSUB coo2
END IF

LOOP

RETURN

coo40:
IF ni = 1 THEN
w$ = "Un couple de coordonnées (colonne,ligne) va être affiché."
z$ = "Avec les flèches " + CHR$(27) + " " + CHR$(26) + " " + CHR$(24) + " " + CHR$(25) + ", tu vas devoir placer correctement"
xx$ = "un repère sur le quadrillage."
CALL consigne(3, w$, z$, xx$)
ELSEIF ni = 2 THEN
w$ = "Un repère s'affichera à l'intersection d'une colonne et d'une ligne."
z$ = "Tu taperas le nombre et la lettre correspondant à ces coordonnées."
CALL consigne(2, w$, z$, xx$)
ELSE
w$ = "Une suite de coordonnées (colonne,ligne) va être affichée."
z$ = "Avec les flèches " + CHR$(27) + " " + CHR$(26) + " " + CHR$(24) + " " + CHR$(25) + ", tu placereras correctement un repère"
xx$ = "sur le quadrillage. L'ordinateur tracera alors la ligne."
CALL consigne(3, w$, z$, xx$)
END IF
RETURN

coo50:
SCREEN 9 ', , 1, 0 ===
VIEW: CLS
x = 320: y = 170
CIRCLE (x, y), 6, cyanclair, , , coef2!
CIRCLE (x, y), 5, cyanclair, , , coef2!
GET (x - 6, y - 6)-(x + 6, y + 6), cercle

CALL titre2(titr$)
LINE (56, 38)-(575, 266), noir, BF
COLOR blancbrill
LOCATE 4, 8: PRINT SPACE$(23);
FOR i = 1 TO 10: PRINT "1 "; : NEXT
FOR i = 1 TO 10: PRINT "2 "; : NEXT
PRINT "3 "
LOCATE 5, 8: PRINT " "
LOCATE 5, 10: FOR i = 1 TO 3
FOR j = 0 TO 9: PRINT RTRIM$(STR$(j)); : NEXT j
NEXT i
PRINT " 0"
LOCATE 6
FOR i = 0 TO 13
LOCATE , 8: PRINT " "; CHR$(65 + i); " "
NEXT
COLOR vertclair
'LINE (83, 77)-(563, 259), , B
VIEW (78, 77)-(563, 259)
FOR y = 0 TO 182 STEP 14
LINE (0, y)-(484, y), vertclair, , &H8888
NEXT
VIEW (83, 72)-(563, 259)
FOR x = 0 TO 480 STEP 16
LINE (x, 0)-(x, 187), vertclair, , &H8888
NEXT
VIEW (83, 77)-(563 + 6, 259 + 6)
'SCREEN 9, , 1, 1
RETURN

coo22:
IF f = 0 THEN COLOR blancbrill ELSE COLOR noir
LOCATE 22, h: PRINT "(";
COLOR cc
PRINT LTRIM$(STR$(colonne)); ","; CHR$(ligne + 65);
IF f = 0 THEN COLOR blancbrill ELSE COLOR noir
PRINT ")"
RETURN

END SUB

DEFINT A-Z
SUB frise1 (re, ni, rt$, gg$, pre$, titr$, noir, bleu, vert, rouge, marron, blanc, vertclair, cyanclair, rougeclair, jaune, blancbrill, couleur, coef1!, coef2!)
'pour niveau 1 et 2
'3/12/96 souris

DIM dessin$(10), solution$(10), x(10), y(10), x2(10), z(5), lo(10)
DIM cercle(1 TO 50) AS INTEGER

CONST gauche = 75, droite = 77
CONST haut = 72, bas = 80, hautgauche = 71, hautdroite = 73, basgauche = 79, basdroite = 81

DEF SEG = 0
POKE &H417, (PEEK(&H417) AND &H9F)'non numérique
DEF SEG

dessin$(1) = "r25 u25 l25 u25 r25 u75 r25 u25 r25 d50 l25 d25 r25 d25 l25 d25 r25 d25 r25"
solution$(1) = "dhghdhhhdhdbbgbdbgbdbd"
x(1) = 50: y(1) = 175: x2(1) = 250: lo(1) = 100
dessin$(2) = "r25 d75 l25 d25 r50 u50 r25 u25 l25 u50 l25 u50 r25 d25 r25 d50 r25"
solution$(2) = "dbbbgbddhhdhghhghhdbdbbd"
x(2) = 50: y(2) = 75: x2(2) = 250: lo(2) = 100
dessin$(3) = "r25 d50 l25 d50 r25 d50 l25 d25 r25 d25 r25 u25 r25 u25 l25 u25 r25 u75 l25 u25 r25 u25 r25"
solution$(3) = "dbbgbbdbbgbdbdhdhghdhhhghdhd"
x(3) = 50: y(3) = 0: x2(3) = 250: lo(3) = 100
dessin$(4) = "r25 d75 r50 u50 l25 u50 l50 u50 r25 u25 r25 u25 r25 d50 l25 d25 r25 d50 r25"
solution$(4) = "dbbbddhhghhgghhdhdhdbbgbdbbd"
x(4) = 50: y(4) = 125: x2(4) = 250: lo(4) = 100
dessin$(5) = "r25 u25 r25 d50 l25 d50 l25 d25 r25 d75 r25 u50 r25 u25 l25 u50 r25 u50 r25"
solution$(5) = "dhdbbgbbgbdbbbdhhdhghhdhhd"
x(5) = 50: y(5) = 25: x2(5) = 250: lo(5) = 100

'niveau 2
dessin$(6) = "r50 d25 m-25,+25 d50 r25 u25 m+25,-25 r25 u50"
solution$(6) = "ddbmbbdhkdhh"
x(6) = 50: y(6) = 75: x2(6) = 250: lo(6) = 100
dessin$(7) = "d50 m+25,+25 d25 r25 u50 m+25,-25 u25 r25"
solution$(7) = "bblbdhhkhd"
x(7) = 50: y(7) = 50: x2(7) = 250: lo(7) = 100
dessin$(8) = "m+25,-25 m-25,-25 u25 r25 m+25,-25 d50 r25 d75 m+25,-25"
solution$(8) = "kjhdkbbdbbbk"
x(8) = 50: y(8) = 150: x2(8) = 250: lo(8) = 100
dessin$(9) = "m+25,+25 d25 m+25,+25 u50 m-25,-25 m+25,-25 u25 m+50,+50"
solution$(9) = "lblhhjkhll"
x(9) = 50: y(9) = 100: x2(9) = 250: lo(9) = 100
dessin$(10) = "m+25,-25 m-25,-25 u25 m+50,-50 r25 d25 m-25,+25 m+25,+25 d25 m+25,+25"
solution$(10) = "kjhkkdbmlbl"
x(10) = 50: y(10) = 175: x2(10) = 250: lo(10) = 100

IF ni = 1 THEN nombre = 0 ELSE nombre = 5
re = 0

GOSUB fris40 'présentation

SCREEN 9
x = 635: y = 35
CIRCLE (x, y), 4, jaune, , , coef2!
GET (x - 4, y - 4)-(x + 4, y + 4), cercle

FOR jj = 1 TO 3
erreurs = 0
GOSUB fris6 'tirage

fris13:
CALL titre2(titr$)
IF ni = 1 THEN COLOR vertclair: LOCATE 22: PRINT "Niveau"; ni: LOCATE 22, 77: PRINT 4 - jj
x = x(choix) + 20: y = y(choix) + 55
FOR i = 1 TO 5
DRAW "TA0 B m=" + VARPTR$(x) + ",=" + VARPTR$(y)
IF i = 3 THEN cc = bleu ELSE cc = cyanclair
IF i = 3 AND erreurs > 2 AND couleur = 1 THEN cc = rougeclair
DRAW "c=" + VARPTR$(cc) + dessin$(choix)
x = x + lo(choix)
NEXT

'fenetre
VIEW (20, 55)-(630, 260)
GOSUB fris1

IF ni = 1 OR erreurs > 0 THEN
flag2 = 1
LINE (50, 0)-(550, 200), blancbrill, B, &H8888
LINE (150, 0)-(150, 200), blancbrill, , &H8888
LINE (250, 0)-(350, 200), blancbrill, B, &H8888
LINE (450, 0)-(450, 200), blancbrill, , &H8888
END IF

x = x2(choix): y = y(choix)
GOSUB fris2

GOSUB fris14
flag = 0: reponse$ = ""

GOSUB frisprog

VIEW

LOCATE 22: PRINT SPACE$(80): PRINT SPACE$(80)

IF solution$(choix) = reponse$ THEN
CALL exact(1)
IF erreurs = 0 THEN re = re + 3
ELSE
erreurs = erreurs + 1
IF erreurs > 1 THEN
CALL centre(23, rougeclair, "Regarde...")
x = x(choix) + 20 + (2 * lo(choix)): y = y(choix) + 55
DRAW "TA0 B m=" + VARPTR$(x) + ",=" + VARPTR$(y)
DRAW "c=" + VARPTR$(rougeclair) + dessin$(choix)
CALL getinvimouse(r): IF r = 27 THEN CALL quitter
ELSE
CALL erreur(1)
END IF
LOCATE 23: PRINT SPACE$(80)
GOTO fris13
END IF

NEXT jj

'résultats
SCREEN 0
re = re + 1
CALL resultats(re, ni)

EXIT SUB

'++++++++++++++++++++++++

fris1:
FOR x = 50 TO 550 STEP 25
FOR y = 0 TO 200 STEP 25
PSET (x, y), rougeclair
NEXT y
NEXT x
RETURN

fris14:
IF ni = 1 THEN
CALL centre(23, blanc, CHR$(27) + " " + CHR$(26) + " " + CHR$(24) + " " + CHR$(25) + " = tracer <-- = corriger " + rt$ + " = valider")
ELSE
COLOR blanc
LOCATE 23, 23: PRINT "= tracer <-- = corriger " + rt$ + " = valider"
LOCATE 21, 10: PRINT "[7] [8] [9]"
LOCATE 22, 10: PRINT "[4] [6]"
LOCATE 23, 10: PRINT "[1] [2] [3]"
END IF
RETURN

fris2:
PUT (x - 4, y - 4), cercle, XOR
IF ni = 1 OR erreurs > 0 THEN PSET (x, y), rougeclair
RETURN

fris5:
flag = flag - 1
r$ = RIGHT$(reponse$, 1)
reponse$ = MID$(reponse$, 1, LEN(reponse$) - 1)
GOSUB fris2
IF r$ = "g" THEN
xx = x + 25: yy = y
ELSEIF r$ = "d" THEN
xx = x - 25: yy = y
ELSEIF r$ = "h" THEN
xx = x: yy = yy + 25
ELSEIF r$ = "b" THEN
xx = x: yy = yy - 25
END IF
LINE (x, y)-(xx, yy), bleu
RETURN

fris6:
'tirage
DO
f = 0
z(jj) = INT(RND * 5) + 1
FOR j = 1 TO jj - 1
IF z(jj) = z(j) THEN f = 1: EXIT FOR
NEXT
LOOP WHILE f = 1
choix = z(jj) + nombre
RETURN

frisprog:
DO
fris31:
IF ni = 1 THEN
MouseBorder 308, 10, 320, 630
MouseShow
souris = 0
DEF SEG = 0
POKE 1050, PEEK(1052)
DEF SEG
DO
r$ = INKEY$
' Obtient l'emplacement de la souris et l'état des boutons.
MousePoll v_mouse, h_mouse, lButton, rButton
' LOCATE 21, 1: PRINT v_mouse, h_mouse'===
IF lButton THEN
IF v_mouse >= 308 AND v_mouse <= 320 THEN
'fleches
IF h_mouse >= 100 AND h_mouse <= 112 THEN
'gauche
valtouche = gauche
CALL attendre(.2)
souris = 1
EXIT DO
ELSEIF h_mouse >= 116 AND h_mouse <= 128 THEN
'droite
valtouche = droite
CALL attendre(.2)
souris = 1
EXIT DO
ELSEIF h_mouse >= 133 AND h_mouse <= 145 THEN
'haut
valtouche = haut
CALL attendre(.2)
souris = 1
EXIT DO
ELSEIF h_mouse >= 150 AND h_mouse <= 160 THEN
'bas
valtouche = bas
CALL attendre(.2)
souris = 1
EXIT DO
ELSEIF h_mouse >= 270 AND h_mouse <= 380 THEN
'del
valtouche = 8
CALL attendre(.2)
souris = 1
EXIT DO
ELSEIF h_mouse >= 420 AND h_mouse <= 528 THEN
'return
valtouche = 13
CALL attendre(.2)
souris = 1
EXIT DO
ELSE
BEEP
END IF
ELSE
BEEP
END IF
END IF
LOOP WHILE r$ = ""

MouseHide

IF souris = 0 THEN
IF LEN(r$) < 2 THEN valtouche = ASC(r$) ELSE valtouche = ASC(RIGHT$(r$, 1))
END IF

ELSEIF ni = 2 THEN
MouseBorder 282, 75, 320, 630
MouseShow
souris = 0
DEF SEG = 0
POKE 1050, PEEK(1052)
DEF SEG
DO
r$ = INKEY$
' Obtient l'emplacement de la souris et l'état des boutons.
MousePoll v_mouse, h_mouse, lButton, rButton
' LOCATE 21, 40: PRINT v_mouse, h_mouse'===
IF lButton THEN
IF (v_mouse >= 282 AND v_mouse <= 292) AND (h_mouse >= 73 AND h_mouse <= 93) THEN
valtouche = hautgauche
CALL attendre(.2)
souris = 1
EXIT DO
ELSEIF (v_mouse >= 282 AND v_mouse <= 292) AND (h_mouse >= 106 AND h_mouse <= 126) THEN
valtouche = haut
CALL attendre(.2)
souris = 1
EXIT DO
ELSEIF (v_mouse >= 282 AND v_mouse <= 292) AND (h_mouse >= 136 AND h_mouse <= 156) THEN
valtouche = hautdroite
CALL attendre(.2)
souris = 1
EXIT DO
ELSEIF (v_mouse >= 296 AND v_mouse <= 306) AND (h_mouse >= 73 AND h_mouse <= 93) THEN
valtouche = gauche
CALL attendre(.2)
souris = 1
EXIT DO
ELSEIF (v_mouse >= 296 AND v_mouse <= 306) AND (h_mouse >= 136 AND h_mouse <= 156) THEN
valtouche = droite
CALL attendre(.2)
souris = 1
EXIT DO
ELSEIF (v_mouse >= 310 AND v_mouse <= 320) AND (h_mouse >= 73 AND h_mouse <= 93) THEN
valtouche = basgauche
CALL attendre(.2)
souris = 1
EXIT DO
ELSEIF (v_mouse >= 310 AND v_mouse <= 320) AND (h_mouse >= 106 AND h_mouse <= 126) THEN
valtouche = bas
CALL attendre(.2)
souris = 1
EXIT DO
ELSEIF (v_mouse >= 310 AND v_mouse <= 320) AND (h_mouse >= 136 AND h_mouse <= 156) THEN
valtouche = basdroite
CALL attendre(.2)
souris = 1
EXIT DO
END IF
'ok
IF v_mouse >= 308 AND v_mouse <= 320 THEN
IF h_mouse >= 280 AND h_mouse <= 390 THEN
'del
valtouche = 8
CALL attendre(.2)
souris = 1
EXIT DO
ELSEIF h_mouse >= 440 AND h_mouse <= 540 THEN
'return
valtouche = 13
CALL attendre(.2)
souris = 1
EXIT DO
ELSE
BEEP
END IF
END IF
END IF

LOOP WHILE r$ = ""

MouseHide

IF souris = 0 THEN
IF LEN(r$) < 2 THEN valtouche = ASC(r$) ELSE valtouche = ASC(RIGHT$(r$, 1))
END IF

END IF

IF (valtouche = 8 OR valtouche = 83) AND flag = 0 THEN BEEP: GOTO fris31

SELECT CASE ni
CASE 1
IF valtouche = 50 THEN valtouche = bas
IF valtouche = 52 THEN valtouche = gauche
IF valtouche = 54 THEN valtouche = droite
IF valtouche = 56 THEN valtouche = haut
CASE 2
IF valtouche = 49 OR valtouche = 38 THEN valtouche = basgauche
IF valtouche = 50 OR valtouche = 130 THEN valtouche = bas
IF valtouche = 51 OR valtouche = 34 THEN valtouche = basdroite
IF valtouche = 52 OR valtouche = 39 THEN valtouche = gauche
IF valtouche = 54 OR valtouche = 45 THEN valtouche = droite
IF valtouche = 55 OR valtouche = 138 THEN valtouche = hautgauche
IF valtouche = 56 OR valtouche = 95 THEN valtouche = haut
IF valtouche = 57 OR valtouche = 135 THEN valtouche = hautdroite
END SELECT

SELECT CASE valtouche

CASE gauche
IF flag2 = 1 THEN LINE (250, 0)-(350, 200), blancbrill, B, &H8888
IF RIGHT$(reponse$, 1) = "d" THEN GOSUB fris5: GOTO fris32
xx = x - 25: yy = y
GOSUB fris2
IF xx < 250 THEN
xx = 250: BEEP
ELSE
reponse$ = reponse$ + "g"
LINE (x, y)-(xx, yy)
flag = flag + 1
END IF

CASE droite
IF flag2 = 1 THEN LINE (250, 0)-(350, 200), blancbrill, B, &H8888
IF RIGHT$(reponse$, 1) = "g" THEN GOSUB fris5: GOTO fris32
xx = x + 25: yy = y
GOSUB fris2
IF xx > 350 THEN
xx = 350: BEEP
ELSE
reponse$ = reponse$ + "d"
LINE (x, y)-(xx, yy)
flag = flag + 1
END IF

CASE haut
IF flag2 = 1 THEN LINE (250, 0)-(350, 200), blancbrill, B, &H8888
IF RIGHT$(reponse$, 1) = "b" THEN GOSUB fris5: GOTO fris32
xx = x: yy = y - 25
GOSUB fris2
IF yy < 0 THEN
yy = 0: BEEP
ELSE
reponse$ = reponse$ + "h"
LINE (x, y)-(xx, yy)
flag = flag + 1
END IF

CASE bas
IF flag2 = 1 THEN LINE (250, 0)-(350, 200), blancbrill, B, &H8888
IF RIGHT$(reponse$, 1) = "h" THEN GOSUB fris5: GOTO fris32
xx = x: yy = y + 25
GOSUB fris2
IF yy > 200 THEN
yy = 200: BEEP
ELSE
reponse$ = reponse$ + "b"
LINE (x, y)-(xx, yy)
flag = flag + 1
END IF

CASE hautgauche
IF RIGHT$(reponse$, 1) = "l" THEN GOSUB fris35: GOTO fris32
xx = x - 25: yy = y - 25
GOSUB fris2
IF yy < 0 OR xx < 250 THEN
IF yy < 0 THEN
yy = 0: xx = xx + 25: BEEP
ELSEIF xx < 250 THEN
xx = 250: yy = yy + 25: BEEP
END IF
ELSE
reponse$ = reponse$ + "j"
LINE (x, y)-(xx, yy)
flag = flag + 1
END IF

CASE hautdroite
IF RIGHT$(reponse$, 1) = "m" THEN GOSUB fris35: GOTO fris32
xx = x + 25: yy = y - 25
GOSUB fris2
IF yy < 0 OR xx > 350 THEN
IF yy < 0 THEN
yy = 0: xx = xx - 25: BEEP
ELSEIF xx > 350 THEN
xx = 350: yy = yy + 25: BEEP
END IF
ELSE
reponse$ = reponse$ + "k"
LINE (x, y)-(xx, yy)
flag = flag + 1
END IF

CASE basgauche
IF RIGHT$(reponse$, 1) = "k" THEN GOSUB fris35: GOTO fris32
xx = x - 25: yy = y + 25
GOSUB fris2
IF yy > 200 OR xx < 250 THEN
IF yy > 200 THEN
yy = 200: xx = xx + 25: BEEP
ELSEIF xx < 250 THEN
xx = 250: yy = yy - 25: BEEP
END IF
ELSE
reponse$ = reponse$ + "m"
LINE (x, y)-(xx, yy)
flag = flag + 1
END IF

CASE basdroite
IF RIGHT$(reponse$, 1) = "j" THEN GOSUB fris35: GOTO fris32
xx = x + 25: yy = y + 25
GOSUB fris2
IF yy > 200 OR xx > 350 THEN
IF yy > 200 THEN
yy = 200: xx = xx - 25: BEEP
ELSEIF xx > 350 THEN
xx = 350: yy = yy - 25: BEEP
END IF
ELSE
reponse$ = reponse$ + "l"
LINE (x, y)-(xx, yy)
flag = flag + 1
END IF

CASE 8, 83 'correction
r$ = RIGHT$(reponse$, 1)
IF r$ = "h" OR r$ = "b" OR r$ = "g" OR r$ = "d" THEN
GOSUB fris5
ELSE
GOSUB fris35
END IF
IF flag2 = 1 THEN LINE (250, 0)-(350, 200), blancbrill, B, &H8888

CASE 27
CALL quitter: GOSUB fris14: GOTO fris31
CASE 13
IF reponse$ = "" THEN GOTO fris31
EXIT DO
CASE ELSE
BEEP

END SELECT

fris32:
IF valtouche = 71 OR valtouche = 73 OR valtouche = 79 OR valtouche = 81 OR valtouche = 8 OR valtouche = 83 OR valtouche = gauche OR valtouche = droite OR valtouche = haut OR valtouche = bas THEN
IF ni = 1 OR erreurs > 0 THEN PSET (x, y), rougeclair
x = xx: y = yy
GOSUB fris2
END IF

LOOP

RETURN

fris35:
flag = flag - 1
r$ = RIGHT$(reponse$, 1)
reponse$ = MID$(reponse$, 1, LEN(reponse$) - 1)
GOSUB fris2
IF r$ = "j" THEN
xx = x + 25: yy = y + 25
ELSEIF r$ = "k" THEN
xx = x - 25: yy = y + 25
ELSEIF r$ = "m" THEN
xx = x + 25: yy = yy - 25
ELSEIF r$ = "l" THEN
xx = x - 25: yy = yy - 25
END IF
LINE (x, y)-(xx, yy), bleu
RETURN

fris40:
IF ni = 1 THEN
w$ = "Avec les flèches " + CHR$(27) + " " + CHR$(26) + " " + CHR$(24) + " " + CHR$(25) + ", tu vas compléter une frise."
z$ = "Tu peux corriger tes erreurs avec la touche " + CHR$(27) + "- ou la touche suppr."
CALL consigne(2, w$, z$, xx$)

ELSE
z$ = "compléter une frise."
CALL claviernumerique(z$)
END IF

RETURN


END SUB

DEFINT A-Z
SUB reproduction (re, ni, rt$, gg$, pre$, titr$, noir, bleu, vert, rouge, marron, blanc, vertclair, cyanclair, rougeclair, jaune, blancbrill, couleur, coef1!, coef2!)
DIM dessin$(15), solution$(15), x(15), y(15), x2(15), y2(15), z(5)
DIM cercle(1 TO 50) AS INTEGER
'3/12/96 souris
'pour niveau 2 à 4

CONST gauche = 75, droite = 77
CONST haut = 72, bas = 80, hautgauche = 71, hautdroite = 73, basgauche = 79, basdroite = 81

re = 0

'niveau 2
dessin$(1) = "u25 l50 u50 r125 d50 l25 d25 r75 d50 l50 d25 r25 d25 l150 u50 r25"
solution$(1) = "hgghhdddddbbgbdddbbggbdbgggggghhd"
x(1) = 100: y(1) = 100: x2(1) = 0: y2(1) = 0
dessin$(2) = "l50 u75 r75 u50 l100 u50 l75 d25 l25 d25 r25 d25 r25 d25 r25 d25"
solution$(2) = "gghhhdddhhgggghhgggbgbdbdbdb"
x(2) = 225: y(2) = 175: x2(2) = 0: y2(2) = 0
dessin$(3) = "r50 u50 l25 u25 l25 u75 r50 d25 r50 d50 r50 u25 r25 d100 r25"
solution$(3) = "ddhhghghhhddbddbbddhdbbbbd"
x(3) = 50: y(3) = 175: x2(3) = 0: y2(3) = 0
dessin$(4) = "u25 l25 d50 r50 d25 l75 d25 l25 u125 r25 u25 r125 d50 r25 d75"
solution$(4) = "hgbbddbgggbghhhhhdhdddddbbdbbb"
x(4) = 125: y(4) = 100: x2(4) = 0: y2(4) = 0
dessin$(5) = "u25 l50 u25 r25 u25 l75 u50 r50 u25 r25 u25 r50 d25 r25 u25 r25 d25 r25 d25 l25 d25 r25 d25 l25 d50 l25 d25"
solution$(5) = "hgghdhggghhddhdhddbdhdbdbgbdbgbbgb"
x(5) = 150: y(5) = 175: x2(5) = 0: y2(5) = 0

'niveau 3 = translation
dessin$(6) = "d25 r50 u25 l25 u25 l25 u75 r25 d25 r25 u50 r50 d75 r25 d50 r25 d25 l50"
solution$(6) = "bddhghghhhdbdhhddbbbdbbdbgg"
x(6) = 25: y(6) = 150: x2(6) = 50: y2(6) = -25
dessin$(7) = "u25 l25 u75 l25 d50 l25 u25 l50 d25 r25 d75 l25 u25 l25 d25 l25 d25 r125 u25"
solution$(7) = "hghhhgbbghggbdbbbghgbgbdddddh"
x(7) = 250: y(7) = 150: x2(7) = -75: y2(7) = -50
dessin$(8) = "d25 r25 d25 l50 d50 r25 u25 r25 d50 l50 d25 r100 u25 l25 u25 r25 u25 l25 u25 r50 d25 r25 u50"
solution$(8) = "bdbggbbdhdbbggbddddhghdhghddbdhh"
x(8) = 50: y(8) = 0: x2(8) = 50: y2(8) = 50
dessin$(9) = "l100 u50 r75 u25 r25 d25 r25 u25 r25 u25 l25 u25 l25 d25 l25 u25 l75 d50 l25 d75"
solution$(9) = "gggghhdddhdbdhdhghgbghgggbbgbbb"
x(9) = 150: y(9) = 150: x2(9) = 25: y2(9) = 25
dessin$(10) = "l25 d25 r25 d25 l50 u25 l25 u25 l25 d50 r25 d50 r25 u25 r25 d50 l25 d25 l25 u25 l50 u25 l50 u25 r25 u50"
solution$(10) = "gbdbgghghgbbdbbdhdbbgbghgghgghdhh"
x(10) = 250: y(10) = 25: x2(10) = -50: y2(10) = 25

'niveau 4 angle 45
dessin$(11) = "u25 m+25,-25 u50 m+25,-25 r25 m+25,+25 m+25,+25 d25 m-25,-25 d50 r25 d25 l50 d25 r75 m+25,-25 u50 m+25,-25"
solution$(11) = "hkhhkdllbjbbdbggbdddkhhk"
x(11) = 25: y(11) = 150: x2(11) = 0: y2(11) = 0
dessin$(12) = "m+25,+25 d50 m+25,-25 m+25,+25 m-25,+25 m+25,+25 m+50,-50 m-25,-25 r25 u25 m+25,+25 m+25,-25 d25 r25 m-25,+25 d25 l25 d25"
solution$(12) = "lbbklmlkkjdhlkbdmbgb"
x(12) = 25: y(12) = 25: x2(12) = 0: y2(12) = 0
dessin$(13) = "m-25,+25 m-25,-25 m-25,+25 m-25,-25 m-25,+25 d25 m+25,+25 m+25,-25 m+25,+25 m+25,-25 m+25,+25 d25 m-25,+25 l50 m-25,-25 l25 d25 l75 m+50,-50 m-50,-50"
solution$(13) = "mjmjmblklklbmggjgbgggkkjj"
x(13) = 250: y(13) = 25: x2(13) = -25: y2(13) = 25
dessin$(14) = "l25 u25 m+25,-25 m-50,-50 m-25,+25 m+25,+25 m-25,+25 m-50,-50 m-25,+25 m+25,+25 d25 m-50,-50 m+25,-25 m-25,-25 m-25,+25 d50 m-25,+25"
solution$(14) = "ghkjjmlmjjmlbjjkjmbbm"
x(14) = 250: y(14) = 150: x2(14) = 25: y2(14) = -50
dessin$(15) = "m-25,+25 d25 m+50,-50 m-25,-25 m-50,+50 m-25,-25 u25 l25 m+50,-50 d25 m+25,-25 d25 m+25,-25 d25 m+25,-25 d25 r25 m+25,+25 u25 m+25,-25 d25 m+25,-25 d25 m+25,+25 m-25,+25 d25 m-25,+25 u25 l25 d25"
solution$(15) = "mbkkjmmjhgkkbkbkbkbdlhkbkblmbmhgb"
x(15) = 125: y(15) = 100: x2(15) = 0: y2(15) = 0
DEF SEG = 0
POKE &H417, (PEEK(&H417) AND &H9F)'non numérique
DEF SEG

SELECT CASE ni
CASE 2
nombre = 0
CASE 3
nombre = 5
CASE 4
nombre = 10
END SELECT
GOSUB repro40 'présentation

SCREEN 9
x = 635: y = 35
CIRCLE (x, y), 4, jaune, , , coef2!
GET (x - 4, y - 4)-(x + 4, y + 4), cercle

FOR jj = 1 TO 5
GOSUB repro6 'tirage
erreurs = 0
repro13:
x = x(choix) + 20: y = y(choix) + 55
IF x2(choix) = 0 AND y2(choix) = 0 THEN
titr$ = "Reproduction"
ELSE
titr$ = "Reproduction et translation"
END IF
LOCATE 1: PRINT SPACE$(80)
CALL titre2(titr$)
IF ni < 4 THEN COLOR vertclair: LOCATE 22: PRINT "Niveau"; ni: LOCATE 22, 77: PRINT 6 - jj
LINE (320, 35)-(320, 275), blancbrill
DRAW "TA0 B m=" + VARPTR$(x) + ",=" + VARPTR$(y)
DRAW "c=" + VARPTR$(jaune) + dessin$(choix)

'fenetre gauche
VIEW (20, 55)-(295, 255)
coul = rougeclair: GOSUB repro1
x = x(choix): y = y(choix)
GOSUB repro2

'fenetre droite
VIEW (345, 55)-(620 + 4, 255 + 4)
coul = vertclair: IF erreurs <> 0 THEN GOSUB repro1
x = x(choix) + x2(choix): y = y(choix) + y2(choix): GOSUB repro2
IF erreurs > 1 AND couleur = 1 THEN
tempx = x(choix) + 20 + 325 + x2(choix): tempy = y(choix) + 55 + y2(choix)
DRAW "TA0 B m=" + VARPTR$(tempx) + ",=" + VARPTR$(tempy)
DRAW "c=" + VARPTR$(rougeclair) + dessin$(choix)
END IF
GOSUB repro14
flag = 0: reponse$ = ""

IF ni = 2 OR ni = 3 THEN
GOSUB reproniveau1
ELSE
GOSUB reproniveau3
END IF

VIEW

LOCATE 22: PRINT SPACE$(80): PRINT SPACE$(80)

IF solution$(choix) = reponse$ THEN
CALL exact(.7)
IF erreurs = 0 THEN re = re + 2
ELSE
erreurs = erreurs + 1
CALL centre(23, rougeclair, "Les chemins ne sont pas identiques.")
CALL attendre(1.5)
LOCATE 23: PRINT SPACE$(80): CALL centre(23, rougeclair, "Regarde")
x = x(choix) + 20 + 325 + x2(choix): y = y(choix) + 55 + y2(choix)
DRAW "TA0 B m=" + VARPTR$(x) + ",=" + VARPTR$(y)
DRAW "c=" + VARPTR$(rougeclair) + dessin$(choix)
CALL getinvimouse(r): IF r = 27 THEN CALL quitter
LOCATE 23: PRINT SPACE$(80): GOTO repro13
END IF

NEXT jj

'résultats
CALL resultats(re, ni)

EXIT SUB
'++++++++++++++++++++++++


repro14:
IF ni = 2 OR ni = 3 THEN
CALL centre(23, blanc, CHR$(27) + " " + CHR$(26) + " " + CHR$(24) + " " + CHR$(25) + " = tracer <-- = corriger " + rt$ + " = valider")
ELSE
COLOR blanc
LOCATE 23, 23: PRINT "= tracer <-- = corriger " + rt$ + " = valider"
LOCATE 21, 10: PRINT "[7] [8] [9]"
LOCATE 22, 10: PRINT "[4] [6]"
LOCATE 23, 10: PRINT "[1] [2] [3]"
END IF

RETURN

repro1:
FOR x = 0 TO 295 STEP 25
FOR y = 0 TO 255 STEP 25
PSET (x, y), coul
NEXT y
NEXT x
RETURN

repro2:
PUT (x - 4, y - 4), cercle, XOR
PSET (x, y), rougeclair
RETURN

repro5:
flag = flag - 1
r$ = RIGHT$(reponse$, 1)
reponse$ = MID$(reponse$, 1, LEN(reponse$) - 1)
GOSUB repro2
IF r$ = "g" THEN
xx = x + 25: yy = y
ELSEIF r$ = "d" THEN
xx = x - 25: yy = y
ELSEIF r$ = "h" THEN
xx = x: yy = yy + 25
ELSEIF r$ = "b" THEN
xx = x: yy = yy - 25
END IF
LINE (x, y)-(xx, yy), bleu
RETURN

repro6:
'tirage
DO
f = 0
z(jj) = INT(RND * 5) + 1
FOR j = 1 TO jj - 1
IF z(jj) = z(j) THEN f = 1: EXIT FOR
NEXT
LOOP WHILE f = 1
choix = z(jj) + nombre
RETURN

reproniveau1:
DO
repro11:
MouseBorder 308, 10, 320, 630
MouseShow
souris = 0
DEF SEG = 0
POKE 1050, PEEK(1052)
DEF SEG
DO
r$ = INKEY$
' Obtient l'emplacement de la souris et l'état des boutons.
MousePoll v_mouse, h_mouse, lButton, rButton
' LOCATE 21, 1: PRINT v_mouse, h_mouse'===
IF lButton THEN
IF v_mouse >= 308 AND v_mouse <= 320 THEN
'fleches
IF h_mouse >= 100 AND h_mouse <= 112 THEN
'gauche
valtouche = gauche
CALL attendre(.2)
souris = 1
EXIT DO
ELSEIF h_mouse >= 116 AND h_mouse <= 128 THEN
'droite
valtouche = droite
CALL attendre(.2)
souris = 1
EXIT DO
ELSEIF h_mouse >= 133 AND h_mouse <= 145 THEN
'haut
valtouche = haut
CALL attendre(.2)
souris = 1
EXIT DO
ELSEIF h_mouse >= 150 AND h_mouse <= 160 THEN
'bas
valtouche = bas
CALL attendre(.2)
souris = 1
EXIT DO
ELSEIF h_mouse >= 270 AND h_mouse <= 380 THEN
'del
valtouche = 8
CALL attendre(.2)
souris = 1
EXIT DO
ELSEIF h_mouse >= 420 AND h_mouse <= 528 THEN
'return
valtouche = 13
CALL attendre(.2)
souris = 1
EXIT DO
ELSE
BEEP
END IF
ELSE
BEEP
END IF
END IF
LOOP WHILE r$ = ""

MouseHide

IF souris = 0 THEN
IF LEN(r$) < 2 THEN valtouche = ASC(r$) ELSE valtouche = ASC(RIGHT$(r$, 1))
END IF

IF (valtouche = 8 OR valtouche = 83) AND flag = 0 THEN BEEP: GOTO repro11
IF valtouche = 50 THEN valtouche = bas
IF valtouche = 52 THEN valtouche = gauche
IF valtouche = 54 THEN valtouche = droite
IF valtouche = 56 THEN valtouche = haut

SELECT CASE valtouche
CASE gauche
IF RIGHT$(reponse$, 1) = "d" THEN GOSUB repro5: GOTO repro12
xx = x - 25: yy = y
GOSUB repro2
IF xx < 0 THEN
xx = 0: BEEP
ELSE
reponse$ = reponse$ + "g"
LINE (x, y)-(xx, yy)
flag = flag + 1
END IF

CASE droite
IF RIGHT$(reponse$, 1) = "g" THEN GOSUB repro5: GOTO repro12
xx = x + 25: yy = y
GOSUB repro2
IF xx > 275 THEN
xx = 275: BEEP
ELSE
reponse$ = reponse$ + "d"
LINE (x, y)-(xx, yy)
flag = flag + 1
END IF

CASE haut
IF RIGHT$(reponse$, 1) = "b" THEN GOSUB repro5: GOTO repro12
xx = x: yy = y - 25
GOSUB repro2
IF yy < 0 THEN
yy = 0: BEEP
ELSE
reponse$ = reponse$ + "h"
LINE (x, y)-(xx, yy)
flag = flag + 1
END IF

CASE bas
IF RIGHT$(reponse$, 1) = "h" THEN GOSUB repro5: GOTO repro12
xx = x: yy = y + 25
GOSUB repro2
IF yy > 200 THEN
yy = 200: BEEP
ELSE
reponse$ = reponse$ + "b"
LINE (x, y)-(xx, yy)
flag = flag + 1
END IF

CASE 8, 83 'correction
GOSUB repro5

CASE 27
CALL quitter: GOSUB repro14: GOTO repro11
CASE 13
IF reponse$ = "" THEN GOTO repro11
EXIT DO
CASE ELSE
BEEP

END SELECT
repro12:
IF valtouche = 8 OR valtouche = 83 OR valtouche = gauche OR valtouche = droite OR valtouche = haut OR valtouche = bas THEN
PSET (x, y), rougeclair
x = xx: y = yy
GOSUB repro2
END IF

LOOP

RETURN

reproniveau3:
DO
repro31:
MouseBorder 282, 75, 320, 630
MouseShow
souris = 0
DEF SEG = 0
POKE 1050, PEEK(1052)
DEF SEG
DO
r$ = INKEY$
' Obtient l'emplacement de la souris et l'état des boutons.
MousePoll v_mouse, h_mouse, lButton, rButton
'LOCATE 21, 40: PRINT v_mouse, h_mouse'===
IF lButton THEN
IF (v_mouse >= 282 AND v_mouse <= 292) AND (h_mouse >= 73 AND h_mouse <= 93) THEN
valtouche = hautgauche
CALL attendre(.2)
souris = 1
EXIT DO
ELSEIF (v_mouse >= 282 AND v_mouse <= 292) AND (h_mouse >= 106 AND h_mouse <= 126) THEN
valtouche = haut
CALL attendre(.2)
souris = 1
EXIT DO
ELSEIF (v_mouse >= 282 AND v_mouse <= 292) AND (h_mouse >= 136 AND h_mouse <= 156) THEN
valtouche = hautdroite
CALL attendre(.2)
souris = 1
EXIT DO
ELSEIF (v_mouse >= 296 AND v_mouse <= 306) AND (h_mouse >= 73 AND h_mouse <= 93) THEN
valtouche = gauche
CALL attendre(.2)
souris = 1
EXIT DO
ELSEIF (v_mouse >= 296 AND v_mouse <= 306) AND (h_mouse >= 136 AND h_mouse <= 156) THEN
valtouche = droite
CALL attendre(.2)
souris = 1
EXIT DO
ELSEIF (v_mouse >= 310 AND v_mouse <= 320) AND (h_mouse >= 73 AND h_mouse <= 93) THEN
valtouche = basgauche
CALL attendre(.2)
souris = 1
EXIT DO
ELSEIF (v_mouse >= 310 AND v_mouse <= 320) AND (h_mouse >= 106 AND h_mouse <= 126) THEN
valtouche = bas
CALL attendre(.2)
souris = 1
EXIT DO
ELSEIF (v_mouse >= 310 AND v_mouse <= 320) AND (h_mouse >= 136 AND h_mouse <= 156) THEN
valtouche = basdroite
CALL attendre(.2)
souris = 1
EXIT DO
END IF
'ok
IF v_mouse >= 308 AND v_mouse <= 320 THEN
IF h_mouse >= 280 AND h_mouse <= 390 THEN
'del
valtouche = 8
CALL attendre(.2)
souris = 1
EXIT DO
ELSEIF h_mouse >= 440 AND h_mouse <= 540 THEN
'return
valtouche = 13
CALL attendre(.2)
souris = 1
EXIT DO
ELSE
BEEP
END IF
END IF
END IF

LOOP WHILE r$ = ""

MouseHide

IF souris = 0 THEN
IF LEN(r$) < 2 THEN valtouche = ASC(r$) ELSE valtouche = ASC(RIGHT$(r$, 1))
END IF

IF (valtouche = 8 OR valtouche = 83) AND flag = 0 THEN BEEP: GOTO repro31
IF valtouche = 49 OR valtouche = 38 THEN valtouche = basgauche
IF valtouche = 50 OR valtouche = 130 THEN valtouche = bas
IF valtouche = 51 OR valtouche = 34 THEN valtouche = basdroite
IF valtouche = 52 OR valtouche = 39 THEN valtouche = gauche
IF valtouche = 54 OR valtouche = 45 THEN valtouche = droite
IF valtouche = 55 OR valtouche = 138 THEN valtouche = hautgauche
IF valtouche = 56 OR valtouche = 95 THEN valtouche = haut
IF valtouche = 57 OR valtouche = 135 THEN valtouche = hautdroite

SELECT CASE valtouche

CASE gauche
IF RIGHT$(reponse$, 1) = "d" THEN GOSUB repro5: GOTO repro32
xx = x - 25: yy = y
GOSUB repro2
IF xx < 0 THEN
xx = 0: BEEP
ELSE
reponse$ = reponse$ + "g"
LINE (x, y)-(xx, yy)
flag = flag + 1
END IF

CASE droite
IF RIGHT$(reponse$, 1) = "g" THEN GOSUB repro5: GOTO repro32
xx = x + 25: yy = y
GOSUB repro2
IF xx > 275 THEN
xx = 275: BEEP
ELSE
reponse$ = reponse$ + "d"
LINE (x, y)-(xx, yy)
flag = flag + 1
END IF

CASE haut
IF RIGHT$(reponse$, 1) = "b" THEN GOSUB repro5: GOTO repro32
xx = x: yy = y - 25
GOSUB repro2
IF yy < 0 THEN
yy = 0: BEEP
ELSE
reponse$ = reponse$ + "h"
LINE (x, y)-(xx, yy)
flag = flag + 1
END IF

CASE bas
IF RIGHT$(reponse$, 1) = "h" THEN GOSUB repro5: GOTO repro32
xx = x: yy = y + 25
GOSUB repro2
IF yy > 200 THEN
yy = 200: BEEP
ELSE
reponse$ = reponse$ + "b"
LINE (x, y)-(xx, yy)
flag = flag + 1
END IF

CASE hautgauche
IF RIGHT$(reponse$, 1) = "l" THEN GOSUB repro35: GOTO repro32
xx = x - 25: yy = y - 25
GOSUB repro2
IF yy < 0 OR xx < 0 THEN
IF yy < 0 THEN
yy = 0: xx = xx + 25: BEEP
ELSEIF xx < 0 THEN
xx = 0: yy = yy + 25: BEEP
END IF
ELSE
reponse$ = reponse$ + "j"
LINE (x, y)-(xx, yy)
flag = flag + 1
END IF

CASE hautdroite
IF RIGHT$(reponse$, 1) = "m" THEN GOSUB repro35: GOTO repro32
xx = x + 25: yy = y - 25
GOSUB repro2
IF yy < 0 OR xx > 275 THEN
IF yy < 0 THEN
yy = 0: xx = xx - 25: BEEP
ELSEIF xx > 275 THEN
xx = 275: yy = yy + 25: BEEP
END IF
ELSE
reponse$ = reponse$ + "k"
LINE (x, y)-(xx, yy)
flag = flag + 1
END IF

CASE basgauche
IF RIGHT$(reponse$, 1) = "k" THEN GOSUB repro35: GOTO repro32
xx = x - 25: yy = y + 25
GOSUB repro2
IF yy > 200 OR xx < 0 THEN
IF yy > 200 THEN
yy = 200: xx = xx + 25: BEEP
ELSEIF xx < 0 THEN
xx = 0: yy = yy - 25: BEEP
END IF
ELSE
reponse$ = reponse$ + "m"
LINE (x, y)-(xx, yy)
flag = flag + 1
END IF

CASE basdroite
IF RIGHT$(reponse$, 1) = "j" THEN GOSUB repro35: GOTO repro32
xx = x + 25: yy = y + 25
GOSUB repro2
IF yy > 200 OR xx > 275 THEN
IF yy > 200 THEN
yy = 200: xx = xx - 25: BEEP
ELSEIF xx > 275 THEN
xx = 275: yy = yy - 25: BEEP
END IF
ELSE
reponse$ = reponse$ + "l"
LINE (x, y)-(xx, yy)
flag = flag + 1
END IF

CASE 8, 83 'correction
r$ = RIGHT$(reponse$, 1)
IF r$ = "h" OR r$ = "b" OR r$ = "g" OR r$ = "d" THEN
GOSUB repro5
ELSE
GOSUB repro35
END IF

CASE 27
CALL quitter: GOSUB repro14: GOTO repro31
CASE 13
IF reponse$ = "" THEN GOTO repro31
EXIT DO
CASE ELSE
BEEP

END SELECT

repro32:
IF valtouche = 71 OR valtouche = 73 OR valtouche = 79 OR valtouche = 81 OR valtouche = 8 OR valtouche = 83 OR valtouche = gauche OR valtouche = droite OR valtouche = haut OR valtouche = bas THEN
PSET (x, y), rougeclair
x = xx: y = yy
GOSUB repro2
END IF

LOOP

RETURN

repro35:
flag = flag - 1
r$ = RIGHT$(reponse$, 1)
reponse$ = MID$(reponse$, 1, LEN(reponse$) - 1)
GOSUB repro2
IF r$ = "j" THEN
xx = x + 25: yy = y + 25
ELSEIF r$ = "k" THEN
xx = x - 25: yy = y + 25
ELSEIF r$ = "m" THEN
xx = x + 25: yy = yy - 25
ELSEIF r$ = "l" THEN
xx = x - 25: yy = yy - 25
END IF
LINE (x, y)-(xx, yy), bleu
RETURN

repro40:

IF ni = 2 THEN
w$ = "Avec les flèches " + CHR$(27) + " " + CHR$(26) + " " + CHR$(24) + " " + CHR$(25) + ", tu vas devoir reproduire un chemin."
z$ = "Tu peux corriger tes erreurs avec la touche " + CHR$(27) + "- ou la touche suppr."
CALL consigne(2, w$, z$, xx$)
ELSEIF ni = 3 THEN
w$ = "Avec les flèches " + CHR$(27) + " " + CHR$(26) + " " + CHR$(24) + " " + CHR$(25) + ", tu vas devoir reproduire un chemin."
z$ = "Le point de départ va subir une translation (un glissement)."
xx$ = "Tu peux corriger tes erreurs avec la touche " + CHR$(27) + "- ou la touche suppr."
CALL consigne(3, w$, z$, xx$)

ELSE
z$ = "reproduire un chemin."
CALL claviernumerique(z$)
END IF

RETURN

END SUB

DEFINT A-Z
SUB reproduction1 (re, ni, rt$, gg$, pre$, titr$, noir, bleu, vert, rouge, marron, blanc, vertclair, cyanclair, rougeclair, jaune, blancbrill, couleur, coef1!, coef2!)
'3/12/96 pour niveau 1 _ souris
DIM dessin$(5), solut$(5), x(5), y(5), z(5)
DIM cercle(1 TO 50) AS INTEGER

CONST gauche = 75, droite = 77, haut = 72, bas = 80

re = 0

'niveau 1 6/3/94
dessin$(1) = "r100 u50 l50 u50 l100 d50 l50 u50 l50 d50 l50 d50 r50 d50 r50 d50 r150 u50 l50"
solut$(1) = "ddhghggbghgbgbdbdbdddhg"
x(1) = 200: y(1) = 100
dessin$(2) = "u50 r50 u50 r100 d100 r50 d100 l50 u50 l50 u50 l50 d50 l50 d50 l50 u50 l50 u150 r50 d100"
solut$(2) = "hdhddbbdbbghghgbgbghghhhdbb"
x(2) = 100: y(2) = 100
dessin$(3) = "l50 u150 r100 d50 l50 d50 r50 d100 r50 u100 r50 u100 r100 d50 l50 d150 r50 u100"
solut$(3) = "ghhhddbgbdbbdhhdhhddbgbbbdhh"
x(3) = 50: y(3) = 150
dessin$(4) = "r50 u100 l50 u50 l100 d50 r50 d50 l150 u50 l50 d150 r50 u50 r100 d50 r50"
solut$(4) = "dhhghggbdbggghgbbbdhddbd"
x(4) = 250: y(4) = 150
dessin$(5) = "u50 r50 d50 r50 u50 r50 d50 r100 u50 r50 d100 l50 d50 r50 d50 l150 u100 l50 d50 l50 u50 l50 d100 r50"
solut$(5) = "hdbdhdbddhdbbgbdbggghhgbghgbbd"
x(5) = 0: y(5) = 50

GOSUB reprodu40 'présentation

SCREEN 9
x = 635: y = 35
CIRCLE (x, y), 4, jaune, , , coef2!
GET (x - 4, y - 4)-(x + 4, y + 4), cercle

'++++++++++++++++++++++++++++++++++++++++++++++++
FOR jj = 1 TO 3

DEF SEG = 0
POKE &H417, (PEEK(&H417) AND &H9F)'non numérique
DEF SEG

GOSUB reprodu6
erreurs = 0
reprodu13:
x = x(choix) + 10: y = y(choix) + 55

titr$ = "Reproduction"

LOCATE 1: PRINT SPACE$(80)
CALL titre2(titr$)
COLOR vertclair: LOCATE 22: PRINT "Niveau"; ni
LOCATE 22, 77: PRINT 4 - jj
LINE (320, 35)-(320, 275), blancbrill
DRAW "TA0 B m=" + VARPTR$(x) + ",=" + VARPTR$(y)
DRAW "c=" + VARPTR$(jaune) + dessin$(choix)

'fenetre gauche
VIEW (10, 55)-(310, 255)
coul = rougeclair: GOSUB reprodu1
x = x(choix): y = y(choix)
GOSUB reprodu2

'fenetre droite
VIEW (330, 55)-(630 + 4, 255 + 4)
coul = vertclair: IF erreurs <> 0 THEN GOSUB reprodu1
x = x(choix): y = y(choix): GOSUB reprodu2
IF erreurs > 1 AND couleur = 1 THEN
tempx = x(choix) + 20 + 310: tempy = y(choix) + 55
DRAW "TA0 B m=" + VARPTR$(tempx) + ",=" + VARPTR$(tempy)
DRAW "c=" + VARPTR$(rougeclair) + dessin$(choix)
END IF

GOSUB reprodu14
flag = 0: reponse$ = ""

GOSUB reproduniveau1

VIEW

LOCATE 22: PRINT SPACE$(80): PRINT SPACE$(80)

IF solut$(choix) = reponse$ THEN
CALL exact(1)
IF erreurs = 0 THEN re = re + 3
ELSE
erreurs = erreurs + 1
CALL centre(23, rougeclair, "Les chemins ne sont pas identiques.")
CALL attendre(1.5)
LOCATE 23: PRINT SPACE$(80): CALL centre(23, rougeclair, "Regarde")
x = x(choix) + 20 + 310: y = y(choix) + 55
DRAW "TA0 B m=" + VARPTR$(x) + ",=" + VARPTR$(y)
DRAW "c=" + VARPTR$(rougeclair) + dessin$(choix)
CALL getinvimouse(r): IF r = 27 THEN CALL quitter
LOCATE 23: PRINT SPACE$(80): GOTO reprodu13
END IF

NEXT jj
'++++++++++++++++++++++++++++++++++++++

'résultats
SCREEN 0
re = re + 1
CALL resultats(re, ni)

EXIT SUB
'++++++++++++++++++++++++


reprodu14:
CALL centre(23, blanc, CHR$(27) + " " + CHR$(26) + " " + CHR$(24) + " " + CHR$(25) + " = tracer <-- = corriger " + rt$ + " = valider")
RETURN

reprodu1:
FOR x = 0 TO 300 STEP 50
FOR y = 0 TO 200 STEP 50
PSET (x, y), coul
NEXT y
NEXT x
RETURN

reprodu2:
PUT (x - 4, y - 4), cercle, XOR
PSET (x, y), rougeclair
RETURN

reprodu5:
flag = flag - 1
r$ = RIGHT$(reponse$, 1)
reponse$ = MID$(reponse$, 1, LEN(reponse$) - 1)
GOSUB reprodu2
IF r$ = "g" THEN
xx = x + 25: yy = y
ELSEIF r$ = "d" THEN
xx = x - 25: yy = y
ELSEIF r$ = "h" THEN
xx = x: yy = yy + 25
ELSEIF r$ = "b" THEN
xx = x: yy = yy - 25
END IF
LINE (x, y)-(xx, yy), bleu
RETURN

reprodu5bis:
flag = flag - 1
r$ = RIGHT$(reponse$, 1)
reponse$ = MID$(reponse$, 1, LEN(reponse$) - 1)
GOSUB reprodu2
IF r$ = "g" THEN
xx = x + 50: yy = y
ELSEIF r$ = "d" THEN
xx = x - 50: yy = y
ELSEIF r$ = "h" THEN
xx = x: yy = yy + 50
ELSEIF r$ = "b" THEN
xx = x: yy = yy - 50
END IF
LINE (x, y)-(xx, yy), bleu
RETURN

reprodu6:
'tirage
DO
f = 0
z(jj) = INT(RND * 5) + 1
FOR j = 1 TO jj - 1
IF z(jj) = z(j) THEN f = 1: EXIT FOR
NEXT
LOOP WHILE f = 1
choix = z(jj)

RETURN

reproduniveau1:
DO
reprodu11:
MouseBorder 308, 10, 320, 630
MouseShow
souris = 0
DEF SEG = 0
POKE 1050, PEEK(1052)
DEF SEG
DO
r$ = INKEY$
' Obtient l'emplacement de la souris et l'état des boutons.
MousePoll v_mouse, h_mouse, lButton, rButton
' LOCATE 21, 1: PRINT v_mouse, h_mouse'===
IF lButton THEN
IF v_mouse >= 308 AND v_mouse <= 320 THEN
'fleches
IF h_mouse >= 100 AND h_mouse <= 112 THEN
'gauche
valtouche = gauche
CALL attendre(.2)
souris = 1
EXIT DO
ELSEIF h_mouse >= 116 AND h_mouse <= 128 THEN
'droite
valtouche = droite
CALL attendre(.2)
souris = 1
EXIT DO
ELSEIF h_mouse >= 133 AND h_mouse <= 145 THEN
'haut
valtouche = haut
CALL attendre(.2)
souris = 1
EXIT DO
ELSEIF h_mouse >= 150 AND h_mouse <= 160 THEN
'bas
valtouche = bas
CALL attendre(.2)
souris = 1
EXIT DO
ELSEIF h_mouse >= 270 AND h_mouse <= 380 THEN
'del
valtouche = 8
CALL attendre(.2)
souris = 1
EXIT DO
ELSEIF h_mouse >= 420 AND h_mouse <= 528 THEN
'return
valtouche = 13
CALL attendre(.2)
souris = 1
EXIT DO
ELSE
BEEP
END IF
ELSE
BEEP
END IF
END IF
LOOP WHILE r$ = ""

MouseHide

IF souris = 0 THEN
IF LEN(r$) < 2 THEN valtouche = ASC(r$) ELSE valtouche = ASC(RIGHT$(r$, 1))
END IF

IF (valtouche = 8 OR valtouche = 83) AND flag = 0 THEN BEEP: GOTO reprodu11
IF valtouche = 50 THEN valtouche = bas
IF valtouche = 52 THEN valtouche = gauche
IF valtouche = 54 THEN valtouche = droite
IF valtouche = 56 THEN valtouche = haut

SELECT CASE valtouche
CASE gauche
IF RIGHT$(reponse$, 1) = "d" THEN GOSUB reprodu5bis: GOTO reprodu12
xx = x - 50: yy = y
GOSUB reprodu2
IF xx < 0 THEN
xx = 0: BEEP
ELSE
reponse$ = reponse$ + "g"
LINE (x, y)-(xx, yy)
flag = flag + 1
END IF

CASE droite
IF RIGHT$(reponse$, 1) = "g" THEN GOSUB reprodu5bis: GOTO reprodu12
xx = x + 50: yy = y
GOSUB reprodu2
IF xx > 300 THEN
xx = 300: BEEP
ELSE
reponse$ = reponse$ + "d"
LINE (x, y)-(xx, yy)
flag = flag + 1
END IF

CASE haut
IF RIGHT$(reponse$, 1) = "b" THEN GOSUB reprodu5bis: GOTO reprodu12
xx = x: yy = y - 50
GOSUB reprodu2
IF yy < 0 THEN
yy = 0: BEEP
ELSE
reponse$ = reponse$ + "h"
LINE (x, y)-(xx, yy)
flag = flag + 1
END IF

CASE bas
IF RIGHT$(reponse$, 1) = "h" THEN GOSUB reprodu5bis: GOTO reprodu12
xx = x: yy = y + 50
GOSUB reprodu2
IF yy > 200 THEN
yy = 200: BEEP
ELSE
reponse$ = reponse$ + "b"
LINE (x, y)-(xx, yy)
flag = flag + 1
END IF

CASE 8, 83 'correction
GOSUB reprodu5bis

CASE 27
CALL quitter: GOSUB reprodu14: GOTO reprodu11

CASE 13
IF reponse$ = "" THEN GOTO reprodu11
EXIT DO
CASE ELSE
BEEP

END SELECT
reprodu12:
IF valtouche = 8 OR valtouche = 83 OR valtouche = gauche OR valtouche = droite OR valtouche = haut OR valtouche = bas THEN
PSET (x, y), rougeclair
x = xx: y = yy
GOSUB reprodu2
END IF

LOOP

RETURN


reprodu40:
w$ = "Avec les flèches " + CHR$(27) + " " + CHR$(26) + " " + CHR$(24) + " " + CHR$(25) + ", tu vas reproduire un chemin."
z$ = "Tu peux corriger tes erreurs avec la touche " + CHR$(27) + "- ou la touche suppr."
CALL consigne(2, w$, z$, xx$)

RETURN

END SUB
 

 

DECLARE SUB claviernumerique (z$)
DECLARE SUB MouseBorder (row1%, col1%, row2%, col2%)
DECLARE SUB MouseHide ()
DECLARE SUB MouseShow ()
DECLARE SUB MousePoll (row%, col%, lButton%, rButton%)
DECLARE SUB getinvimouse (rr%)
DECLARE SUB consigne (nl%, w$, z$, xx$)
DECLARE SUB titre (titr$)
DECLARE SUB entree ()
DECLARE SUB exact3 (tx!)
DECLARE SUB erreur3 (tx!)
DECLARE SUB erreur (tx!)
DECLARE SUB exact (tx!)
DECLARE SUB centre (v%, coul%, ph$)
DECLARE SUB quitter ()
DECLARE SUB getinvi (rr%)
DECLARE SUB attendre (tx!)
DECLARE SUB cadre3 (v%, h%, nb%, coul%)
DECLARE SUB inputgen (nl%, r$, deb%, fin%)
DECLARE SUB resultats (re%, ni%)
DECLARE SUB titre2 (titr$)
'exo 6 GEOMETRIE
'Daniel CLERC
'5/5/96
'version 3.0


DEFINT A-Z
SUB heure (re, ni, rt$, gg$, pre$, titr$, noir, bleu, vert, rouge, marron, blanc, vertclair, cyanclair, rougeclair, jaune, blancbrill)
'3/12/96
'niveau 1 et 2
DIM cercle(1 TO 50) AS INTEGER

CONST pi = 3.141592653589# ' , x = 320, y = 170
re = 0
rayon = 30
anglefin! = 90 * (pi / 180)
DIM z(5), rep(12), an(12), ang(60)

rep(1) = 30: rep(2) = 60: rep(3) = 90: rep(4) = 120
rep(5) = 150: rep(6) = 180: rep(7) = 210: rep(8) = 240
rep(9) = 270: rep(10) = 300: rep(11) = 330: rep(12) = 360

an(1) = 330: an(2) = 300: an(3) = 270: an(4) = 240
an(5) = 210: an(6) = 180: an(7) = 150: an(8) = 120
an(9) = 90: an(10) = 60: an(11) = 30: an(12) = 0

FOR i = 0 TO 60
ang(i) = 360 - (6 * i)
NEXT

'presentation
IF ni = 1 THEN
w$ = "Avec les flèches tu vas faire avancer ou reculer les aiguilles"
z$ = "d'une montre pour obtenir l'heure demandée."
CALL consigne(2, w$, z$, xx$)

ELSEIF ni = 2 THEN
w$ = "Avec les chiffres, tu vas taper"
z$ = "les heures et les minutes indiquées."
CALL consigne(2, w$, z$, xx$)

END IF
'début programme
SCREEN 9
x = 635: y = 35
CIRCLE (x, y), 4, jaune
GET (x - 4, y - 4)-(x + 4, y + 4), cercle
'++++++++++++++++++++++++++++++++ niveau 1
IF ni = 1 THEN

FOR jj = 1 TO 5

erreurs = 0
var! = 0
flag = 0: flag2 = 0
'tirage
DO
f = 0
z(jj) = INT(RND * 11) + 1
FOR j = 1 TO jj - 1
IF z(jj) = z(j) THEN f = 1: EXIT FOR
NEXT
LOOP WHILE f = 1
choix = z(jj)
reponse = rep(choix)
CALL titre2(titr$)
GOSUB horloge

'les heures
LOCATE 22: PRINT SPACE$(80)
DO
GOSUB ang6

LOCATE 22, 77: COLOR vertclair: PRINT 6 - jj

angle = an(flag2)
DRAW "b m320,155 ta=" + VARPTR$(angle) + "c=" + VARPTR$(bleu) + " u67"

angle = an(flag)
DRAW "b m320,155 ta=" + VARPTR$(angle) + "c=" + VARPTR$(vertclair) + "u67"
PUT (320 - 4, 155 - 4), cercle, OR
GOSUB ang6

flag2 = flag

ang2:
DEF SEG = 0
POKE &H417, (PEEK(&H417) AND &H9F)'non numérique
DEF SEG
MouseBorder 44, 160, 320, 470
MouseShow

DEF SEG = 0
POKE 1050, PEEK(1052)
DEF SEG
souris = 0
DO
r$ = INKEY$
' Obtient l'emplacement de la souris et l'état des boutons.
MousePoll v_mouse, h_mouse, lButton, rButton
'LOCATE 21, 1: PRINT v_mouse, h_mouse'===
IF lButton THEN
IF v_mouse >= 50 AND v_mouse <= 75 THEN
IF h_mouse >= 310 AND h_mouse <= 330 THEN
flag = 12
souris = 2
CALL attendre(.3)
EXIT DO
ELSE
BEEP
END IF
END IF
IF v_mouse >= 60 AND v_mouse <= 80 THEN
IF h_mouse >= 375 AND h_mouse <= 390 THEN
flag = 1
souris = 2
CALL attendre(.3)
EXIT DO
ELSEIF h_mouse >= 250 AND h_mouse <= 260 THEN
flag = 11
souris = 2
CALL attendre(.3)
EXIT DO
ELSE
BEEP
END IF
END IF
IF v_mouse >= 100 AND v_mouse <= 115 THEN
IF h_mouse >= 425 AND h_mouse <= 445 THEN
flag = 2
souris = 2
CALL attendre(.3)
EXIT DO
ELSEIF h_mouse >= 195 AND h_mouse <= 215 THEN
flag = 10
souris = 2
CALL attendre(.3)
EXIT DO
ELSE
BEEP
END IF
END IF
IF v_mouse >= 150 AND v_mouse <= 160 THEN
IF h_mouse >= 430 AND h_mouse <= 460 THEN
flag = 3
souris = 2
CALL attendre(.3)
EXIT DO
ELSEIF h_mouse >= 180 AND h_mouse <= 205 THEN
flag = 9
souris = 2
CALL attendre(.3)
EXIT DO
ELSE
BEEP
END IF
END IF
IF v_mouse >= 195 AND v_mouse <= 210 THEN
IF h_mouse >= 425 AND h_mouse <= 445 THEN
flag = 4
souris = 2
CALL attendre(.3)
EXIT DO
ELSEIF h_mouse >= 195 AND h_mouse <= 215 THEN
flag = 8
souris = 2
CALL attendre(.3)
EXIT DO
ELSE
BEEP
END IF
END IF
IF v_mouse >= 230 AND v_mouse <= 250 THEN
IF h_mouse >= 375 AND h_mouse <= 390 THEN
flag = 5
souris = 2
CALL attendre(.3)
EXIT DO
ELSEIF h_mouse >= 250 AND h_mouse <= 260 THEN
flag = 7
souris = 2
CALL attendre(.3)
EXIT DO
ELSE
BEEP
END IF
END IF
IF v_mouse >= 235 AND v_mouse <= 255 THEN
IF h_mouse >= 310 AND h_mouse <= 330 THEN
flag = 6
souris = 2
CALL attendre(.3)
EXIT DO
ELSE
BEEP
END IF
END IF

IF v_mouse >= 308 AND v_mouse <= 320 THEN
'fleches
IF h_mouse >= 160 AND h_mouse <= 246 THEN
'haut
touche = 72
CALL attendre(.2)
souris = 1
EXIT DO
ELSEIF h_mouse >= 264 AND h_mouse <= 350 THEN
'bas
touche = 80
CALL attendre(.2)
souris = 1
EXIT DO
ELSEIF h_mouse >= 368 AND h_mouse <= 470 THEN
'return
touche = 13
CALL attendre(.2)
souris = 1
EXIT DO
ELSE
BEEP
END IF
ELSE
BEEP
END IF
END IF
LOOP WHILE r$ = ""

MouseHide

IF souris = 2 THEN
angle = an(flag2)
DRAW "b m320,155 ta=" + VARPTR$(angle) + "c=" + VARPTR$(bleu) + " u67"

angle = an(flag)
DRAW "b m320,155 ta=" + VARPTR$(angle) + "c=" + VARPTR$(vertclair) + "u67"
PUT (320 - 4, 155 - 4), cercle, OR
flag2 = flag

touche = 13
END IF

IF souris = 0 THEN
IF LEN(r$) < 2 THEN touche = ASC(r$) ELSE touche = ASC(RIGHT$(r$, 1))
END IF

SELECT CASE touche
CASE 27
CALL quitter

CASE 72 'haut
flag = flag - 1: IF flag < 0 THEN flag = 0: BEEP: GOTO ang2

CASE 80 'bas
flag = flag + 1: IF flag > 12 THEN flag = 12: BEEP: GOTO ang2

CASE 13
LOCATE 22: PRINT SPACE$(80)
IF flag = choix THEN
CALL exact(.7): LOCATE 23: PRINT SPACE$(80): fixe! = angle
IF erreurs = 0 THEN re = re + 1
EXIT DO
ELSE
erreurs = erreurs + 1
CALL erreur(.5)
IF rep(flag) = 30 OR rep(flag) = 0 THEN z$ = " heure." ELSE z$ = " heures."
CALL centre(23, rougeclair, "Tu as indiqué" + STR$(rep(flag) / 30) + z$)
CALL attendre(2)
END IF
LOCATE 23: PRINT SPACE$(80)
GOSUB ang6
GOTO ang2
EXIT DO

CASE ELSE
BEEP: GOTO ang2

END SELECT

LOOP WHILE valtouche$ <> CHR$(13)

'les minutes
flag = 0: flag2 = 0: var = 0
'tirage
DO
f = 0
z(jj) = INT(RND * 11) + 1
FOR j = 1 TO jj - 1
IF z(jj) = z(j) THEN f = 1: EXIT FOR
NEXT
LOOP WHILE f = 1
choix = z(jj)
reponse = rep(choix)
LOCATE 22: PRINT SPACE$(80)
GOSUB horloge2

DO
GOSUB ang10
GOSUB ang11 'dessin des heures
angle = an(flag2)
DRAW "b m320,155 ta=" + VARPTR$(angle) + "c=" + VARPTR$(bleu) + " u80"

angle = an(flag)
DRAW "b m320,155 ta=" + VARPTR$(angle) + "c=" + VARPTR$(jaune) + "u80"
GOSUB ang10
GOSUB ang11 'dessin des heures

flag2 = flag
ang7:
DEF SEG = 0
POKE &H417, (PEEK(&H417) AND &H9F)'non numérique
DEF SEG
MouseBorder 44, 160, 320, 470
MouseShow
souris = 0
DEF SEG = 0
POKE 1050, PEEK(1052)
DEF SEG
DO
r$ = INKEY$
' Obtient l'emplacement de la souris et l'état des boutons.
MousePoll v_mouse, h_mouse, lButton, rButton
' LOCATE 21, 1: PRINT v_mouse, h_mouse'===
IF lButton THEN
IF v_mouse >= 50 AND v_mouse <= 75 THEN
IF h_mouse >= 310 AND h_mouse <= 330 THEN
flag = 12
souris = 2
CALL attendre(.3)
EXIT DO
ELSE
BEEP
END IF
END IF
IF v_mouse >= 60 AND v_mouse <= 80 THEN
IF h_mouse >= 375 AND h_mouse <= 390 THEN
flag = 1
souris = 2
CALL attendre(.3)
EXIT DO
ELSEIF h_mouse >= 250 AND h_mouse <= 260 THEN
flag = 11
souris = 2
CALL attendre(.3)
EXIT DO
ELSE
BEEP
END IF
END IF
IF v_mouse >= 100 AND v_mouse <= 115 THEN
IF h_mouse >= 425 AND h_mouse <= 445 THEN
flag = 2
souris = 2
CALL attendre(.3)
EXIT DO
ELSEIF h_mouse >= 195 AND h_mouse <= 215 THEN
flag = 10
souris = 2
CALL attendre(.3)
EXIT DO
ELSE
BEEP
END IF
END IF
IF v_mouse >= 150 AND v_mouse <= 160 THEN
IF h_mouse >= 430 AND h_mouse <= 460 THEN
flag = 3
souris = 2
CALL attendre(.3)
EXIT DO
ELSEIF h_mouse >= 180 AND h_mouse <= 205 THEN
flag = 9
souris = 2
CALL attendre(.3)
EXIT DO
ELSE
BEEP
END IF
END IF
IF v_mouse >= 195 AND v_mouse <= 210 THEN
IF h_mouse >= 425 AND h_mouse <= 445 THEN
flag = 4
souris = 2
CALL attendre(.3)
EXIT DO
ELSEIF h_mouse >= 195 AND h_mouse <= 215 THEN
flag = 8
souris = 2
CALL attendre(.3)
EXIT DO
ELSE
BEEP
END IF
END IF
IF v_mouse >= 230 AND v_mouse <= 250 THEN
IF h_mouse >= 375 AND h_mouse <= 390 THEN
flag = 5
souris = 2
CALL attendre(.3)
EXIT DO
ELSEIF h_mouse >= 250 AND h_mouse <= 260 THEN
flag = 7
souris = 2
CALL attendre(.3)
EXIT DO
ELSE
BEEP
END IF
END IF
IF v_mouse >= 235 AND v_mouse <= 255 THEN
IF h_mouse >= 310 AND h_mouse <= 330 THEN
flag = 6
souris = 2
CALL attendre(.3)
EXIT DO
ELSE
BEEP
END IF
END IF

IF v_mouse >= 308 AND v_mouse <= 320 THEN
'fleches
IF h_mouse >= 160 AND h_mouse <= 246 THEN
'haut
touche = 72
CALL attendre(.2)
souris = 1
EXIT DO
ELSEIF h_mouse >= 264 AND h_mouse <= 350 THEN
'bas
touche = 80
CALL attendre(.2)
souris = 1
EXIT DO
ELSEIF h_mouse >= 368 AND h_mouse <= 470 THEN
'return
touche = 13
CALL attendre(.2)
souris = 1
EXIT DO
ELSE
BEEP
END IF
ELSE
BEEP
END IF
END IF
LOOP WHILE r$ = ""

MouseHide

IF souris = 2 THEN

'effacer l'aiguille des minutes
angle = an(flag2)
DRAW "b m320,155 ta=" + VARPTR$(angle) + "c=" + VARPTR$(bleu) + " u80"
'dessin aiguille minutes
angle = an(flag)
DRAW "b m320,155 ta=" + VARPTR$(angle) + "c=" + VARPTR$(jaune) + "u80"
'effacer aiguille heure
angle2! = fixe! + var!
DRAW "b m320,155 ta=" + VARPTR$(angle2!) + "c=" + VARPTR$(bleu) + "u67"
PUT (320 - 4, 155 - 4), cercle, OR
'dessin des heures
var! = 0
FOR i = 1 TO flag
var! = var! - 2.5
NEXT
GOSUB ang11 'dessin des heures

flag2 = flag
touche = 13
END IF

IF souris = 0 THEN
IF LEN(r$) < 2 THEN touche = ASC(r$) ELSE touche = ASC(RIGHT$(r$, 1))
END IF

SELECT CASE touche
CASE 27
CALL quitter

CASE 72 'haut
flag = flag - 1: IF flag < 0 THEN flag = 0: BEEP: GOTO ang7
GOSUB ang12: var! = var! + 2.5

CASE 80 'bas
flag = flag + 1: IF flag > 12 THEN flag = 12: BEEP: GOTO ang7
GOSUB ang12: var! = var! - 2.5

CASE 13
LOCATE 22: PRINT SPACE$(80)
IF flag = choix THEN
CALL exact(1): LOCATE 23: PRINT SPACE$(80)
IF erreurs = 0 THEN re = re + 1
EXIT DO
ELSE
erreurs = erreurs + 1
CALL erreur(.5)
IF rep(flag) = 0 THEN z$ = " minute." ELSE z$ = " minutes."
CALL centre(23, rougeclair, "Tu as indiqué" + STR$(rep(flag) / 6) + z$)
CALL attendre(2)
END IF
LOCATE 23: PRINT SPACE$(80)
GOSUB ang10
GOTO ang7
EXIT DO

CASE ELSE
BEEP: GOTO ang7

END SELECT

LOOP WHILE valtouche$ <> CHR$(13)

NEXT jj

'++++++++++++++++++++++++++++++++++ niveau 2
ELSE

FOR jj = 1 TO 5

erreurs = 0
'tirage
DO
f = 0
z(jj) = INT(RND * 11) + 1
FOR j = 1 TO jj - 1
IF z(jj) = z(j) THEN f = 1: EXIT FOR
NEXT
LOOP WHILE f = 1
choix = z(jj)
CALL titre2(titr$)

GOSUB horloge
LOCATE 22, 1: PRINT SPACE$(80)
LOCATE 22, 77: COLOR vertclair: PRINT 6 - jj
'dessin des minutes
choix2 = INT(RND * 11) + 1
angle = an(choix2)
DRAW "b m320,155 ta=" + VARPTR$(angle) + "c=" + VARPTR$(jaune) + " u80"
'dessin des heures
var! = 0
FOR i = 1 TO choix2
var! = var! - 2.5
NEXT
angle! = an(choix) + var!
DRAW "b m320,155 ta=" + VARPTR$(angle!) + "c=" + VARPTR$(vertclair) + " u67"

heure1:
COLOR blancbrill
IF choix > 1 THEN
LOCATE 22, 20: PRINT "Heures : "
ELSE
LOCATE 22, 21: PRINT "Heure : "
END IF
CALL cadre3(22, 29, 2, blancbrill)
COLOR blancbrill: LOCATE 22, 29

DEF SEG = 0
POKE &H417, (PEEK(&H417) OR &H40)'MAJ
POKE &H417, (PEEK(&H417) OR &H20)'numérique
DEF SEG

CALL inputgen(2, r$, 48, 57)
r = VAL(r$)
IF r = choix OR r = choix + 12 THEN
CALL exact3(1)
IF erreurs = 0 THEN re = re + 1
ELSE
erreurs = erreurs + 1
CALL erreur3(.5)
IF erreurs >= 2 THEN
CALL centre(23, rougeclair, "Solution :" + STR$(choix))
CALL attendre(1)
CALL centre(23, rougeclair, SPACE$(14))
END IF
GOTO heure1
END IF
CALL cadre3(22, 29, 2, blancbrill)
erreurs = 0
'les minutes
GOSUB horloge2
heure3:
COLOR blancbrill: LOCATE 22, 50: PRINT "Minutes : "
CALL cadre3(22, 60, 2, blancbrill)
LOCATE 22, 60
DEF SEG = 0
POKE &H417, (PEEK(&H417) OR &H40)'MAJ
POKE &H417, (PEEK(&H417) OR &H20)'numérique
DEF SEG

CALL inputgen(2, r$, 48, 57)

r = VAL(r$)
IF r = choix2 * 5 THEN
CALL exact3(1)
IF erreurs = 0 THEN re = re + 1
ELSE
erreurs = erreurs + 1
CALL erreur3(.5)
IF erreurs >= 2 THEN
CALL centre(23, rougeclair, "Solution :" + STR$(choix2 * 5))
CALL attendre(1)
CALL centre(23, rougeclair, SPACE$(14))
END IF

GOTO heure3
END IF
LOCATE 21: COLOR rouge: PRINT STRING$(80, 196): PRINT SPACE$(80): PRINT SPACE$(80)
NEXT jj

END IF
'++++++++++++++++++++++ fin programme

'résultats
SCREEN 0
CALL resultats(re, ni)
EXIT SUB


ang6:
IF reponse = 30 THEN z$ = " heure" ELSE z$ = " heures"
CALL centre(22, jaune, STR$(reponse / 30) + z$)
CALL centre(23, blanc, CHR$(24) + " = reculer " + CHR$(25) + " = avancer " + rt$ + " = valider")
RETURN

ang10:
IF reponse = 1 THEN z$ = " minute" ELSE z$ = " minutes"
CALL centre(22, jaune, STR$(reponse / 6) + z$)
CALL centre(23, blanc, CHR$(24) + " = reculer " + CHR$(25) + " = avancer " + rt$ + " = valider")
RETURN

horloge:
CIRCLE (320, 155), 150, vertclair
FOR a = 0 TO 360 STEP 90
DRAW "b m320,155 ta=" + VARPTR$(a) + "c=" + VARPTR$(blancbrill) + "b u85 u15"
NEXT
FOR a = 0 TO 360 STEP 30
DRAW "b m320,155 ta=" + VARPTR$(a) + "c=" + VARPTR$(blancbrill) + "b u90 u10"
NEXT
PUT (320 - 4, 155 - 4), cercle, OR
RETURN

horloge2:
CIRCLE (320, 155), 150, vertclair
FOR a = 0 TO 60
ang = ang(a)
DRAW "b m320,155 ta=" + VARPTR$(ang) + "c=" + VARPTR$(rougeclair) + "b u95 u4"
NEXT
FOR a = 0 TO 360 STEP 30
DRAW "b m320,155 ta=" + VARPTR$(a) + "c=" + VARPTR$(blancbrill) + "b u90 u10"
NEXT
PUT (320 - 4, 155 - 4), cercle, OR
RETURN

ang11:
angle2! = fixe! + var!
DRAW "b m320,155 ta=" + VARPTR$(angle2!) + "c=" + VARPTR$(vertclair) + "u67"
PUT (320 - 4, 155 - 4), cercle, OR
RETURN

ang12:
angle2! = fixe! + var!
DRAW "b m320,155 ta=" + VARPTR$(angle2!) + "c=" + VARPTR$(bleu) + "u67"
PUT (320 - 4, 155 - 4), cercle, OR
RETURN


END SUB

DEFINT A-Z
SUB mesureduree (re, ni, rt$, gg$, pre$, titr$, noir, bleu, vert, rouge, marron, blanc, vertclair, cyanclair, rougeclair, jaune, blancbrill)
'2/12/96

DIM cercle(1 TO 50) AS INTEGER
DIM zero(1 TO 30) AS INTEGER
DIM un(1 TO 30) AS INTEGER
DIM deux(1 TO 30) AS INTEGER
DIM trois(1 TO 30) AS INTEGER
DIM quatre(1 TO 30) AS INTEGER
DIM cinq(1 TO 30) AS INTEGER
DIM six(1 TO 30) AS INTEGER

DIM an(60)
titr$ = "secondes"
CONST pi = 3.141592653589# ' , x = 320, y = 170
re = 0

'présentation

IF ni = 3 THEN dur = 30 ELSE dur = 60
w$ = "Tu vas compter" + STR$(dur) + " secondes."
CALL consigne(1, w$, z$, xx$)

FOR i = 0 TO 60
an(i) = 360 - (6 * i)
NEXT

'début programme
SCREEN 9, , 0, 1

'mémorisation des lettres : matrice 8 x 14
x = 0: y = 0
PRINT "0 1 2 3 4 5 6"
GET (x, y)-(x + 7, y + 13), zero
x = x + 16
GET (x, y)-(x + 7, y + 13), un
x = x + 16
GET (x, y)-(x + 7, y + 13), deux
x = x + 16
GET (x, y)-(x + 7, y + 13), trois
x = x + 16
GET (x, y)-(x + 7, y + 13), quatre
x = x + 16
GET (x, y)-(x + 7, y + 13), cinq
x = x + 16
GET (x, y)-(x + 7, y + 13), six

LOCATE 1: PRINT SPACE$(15)

SCREEN 9, , 0, 0

'boucle principale ++++++++++++++++++
FOR ii = 1 TO 2
durees0:
CALL titre2(titr$)
CALL centre(22, blancbrill, "Entraînement :")
CALL centre(23, jaune, "Tu vas compter pendant 15 secondes.")

SCREEN 9, , 1, 0 'invisible
CALL titre2(titr$)

'dessin de l'horloge
FOR a = 0 TO 360 STEP 6
DRAW "b m320,155 ta=" + VARPTR$(a) + "c=" + VARPTR$(rougeclair) + "b u95 u4"
NEXT
FOR a = 0 TO 360 STEP 30
DRAW "b m320,155 ta=" + VARPTR$(a) + "c=" + VARPTR$(blancbrill) + "b u90 u10"
NEXT
x = 320: y = 155
CIRCLE (x, y), 4, jaune
GET (x - 4, y - 4)-(x + 4, y + 4), cercle
'PUT (320 - 4, 155 - 4), cercle, OR

'dessin des chiffres
PUT (390, 50), cinq, OR '

PUT (445, 95), un, OR '
PUT (453, 95), zero, OR
PUT (463, 147), un, OR '
PUT (471, 147), cinq, OR
PUT (445, 199), deux, OR '
PUT (453, 199), zero, OR
PUT (387, 247), deux, OR '
PUT (395, 247), cinq, OR

PUT (313, 259), trois, OR '
PUT (321, 259), zero, OR

PUT (241, 247), trois, OR '
PUT (249, 247), cinq, OR
PUT (181, 199), quatre, OR '
PUT (189, 199), zero, OR
PUT (163, 147), quatre, OR '
PUT (171, 147), cinq, OR

PUT (181, 95), cinq, OR '
PUT (189, 95), zero, OR
PUT (239, 50), cinq, OR '
PUT (247, 50), cinq, OR
'PUT (313, 38), six, OR '
PUT (317, 38), zero, OR

LOCATE 22: PRINT SPACE$(80): PRINT SPACE$(80)
SCREEN 9, , 1, 1 'visible

LOCATE 22, 77: COLOR vertclair: PRINT 3 - ii
CALL centre(22, blancbrill, "Entraînement :")
CALL centre(23, jaune, "Tu vas compter pendant 15 secondes.")
CALL attendre(1)
LOCATE 23: PRINT SPACE$(80)
CALL centre(23, jaune, "Regarde et compte en même temps.")
CALL attendre(2)
BEEP: nombrefois = 15: GOSUB durees3

angle = an(15)
DRAW "b m320,155 ta=" + VARPTR$(angle) + "c=" + VARPTR$(bleu) + " u85"
angle = an(0)
DRAW "b m320,155 ta=" + VARPTR$(angle) + "c=" + VARPTR$(vertclair) + " u85"
'LOCATE 22: PRINT space$(80)
CALL centre(22, blancbrill, "Durée =" + STR$(dur) + " secondes.")
CALL centre(23, jaune, "Tape la touche [Espace] pour commencer.")

DEF SEG = 0
POKE 1050, PEEK(1052)
DEF SEG

DO
w$ = INKEY$
MousePoll v_mouse, h_mouse, lButton, rButton
IF lButton THEN
w$ = CHR$(13)
END IF
IF w$ = CHR$(32) OR w$ = CHR$(13) THEN EXIT DO
IF w$ = CHR$(27) THEN CALL quitter: CALL centre(23, jaune, "Tape la touche [Espace] pour commencer.")
LOOP
LOCATE 23: PRINT SPACE$(80)
CALL centre(23, vertclair, "(Aiguille visible pendant 5 secondes)")

BEEP: nombrefois = 5: GOSUB durees3
CALL centre(23, jaune, "Tape la touche [Espace] pour terminer.")

duree = dur + 5: GOSUB durees2
te = temp + 6
IF te > 60 THEN te2 = te - 60 ELSE te2 = te
angle = an(te2)
'IF angle > 360 THEN angle = angle - 360
DRAW "b m320,155 ta=" + VARPTR$(angle) + "c=" + VARPTR$(vertclair) + " u85"
LOCATE 22: PRINT SPACE$(80): PRINT SPACE$(80)
IF flag = 0 THEN
BEEP: CALL centre(23, rougeclair, "Tu n'as pas appuyé sur la touche [Espace] !")
CALL attendre(3)
IF r = 27 THEN CALL quitter
GOTO durees0
END IF
CALL centre(22, jaune, "Durée trouvée :" + STR$(te) + " secondes.")

IF dur = te THEN
CALL exact(2): re = re + 5
ELSEIF dur > te THEN
IF dur - te < 3 THEN
z$ = "Tu as compté un tout petit peu trop vite."
re = re + 4
ELSEIF dur - te < 5 THEN
z$ = "Tu as compté un peu trop vite."
re = re + 3
ELSEIF dur - te < 10 THEN
z$ = "Tu as compté trop vite."
re = re + 2
ELSE
z$ = "Tu as compté beaucoup trop vite."
END IF
CALL centre(23, rougeclair, z$): CALL attendre(3)
IF r = 27 THEN CALL quitter
ELSEIF dur < te THEN
IF te - dur < 3 THEN
z$ = "Tu as compté un tout petit peu trop lentement."
re = re + 4
ELSEIF te - dur < 5 THEN
z$ = "Tu as compté un peu trop lentement."
re = re + 3
ELSEIF te - dur < 10 THEN
z$ = "Tu as compté trop lentement."
re = re + 2
ELSE
z$ = "Tu as compté beaucoup trop lentement."
END IF
CALL centre(23, rougeclair, z$): CALL attendre(3)
IF r = 27 THEN CALL quitter
END IF

NEXT ii
'résultats
SCREEN 0
CALL resultats(re, ni)

EXIT SUB

durees2:
DEF SEG = 0
POKE 1050, PEEK(1052)
DEF SEG

flag = 0
debut! = TIMER
DO
fin! = TIMER
temp = fin! - debut!
w$ = INKEY$
MousePoll v_mouse, h_mouse, lButton, rButton
IF lButton THEN
w$ = CHR$(13)
END IF
IF w$ = CHR$(13) OR w$ = CHR$(32) THEN flag = 1: EXIT DO
IF w$ = CHR$(27) THEN CALL quitter
LOOP WHILE temp < duree
RETURN

durees3:
'aiguille
FOR i = 0 TO nombrefois
angle = an(i)
DRAW "b m320,155 ta=" + VARPTR$(angle) + "c=" + VARPTR$(vertclair) + " u85"
debut! = TIMER
DO
fin! = TIMER
LOOP WHILE fin! - debut! < .9
DRAW "b m320,155 ta=" + VARPTR$(angle) + "c=" + VARPTR$(bleu) + " u85"
PUT (320 - 4, 155 - 4), cercle, OR
NEXT
RETURN


END SUB

DEFINT A-Z
SUB symetrie1 (re, ni, rt$, gg$, pre$, titr$, noir, bleu, vert, rouge, marron, blanc, vertclair, cyanclair, rougeclair, jaune, blancbrill, couleur, coef1!, coef2!)
'3/12/96 niv 1 & 2 souris

DIM dessin$(15), dessin2$(15), solution$(15), x(15), y(15), x2(15), y2(15), z(5)
DIM cercle(1 TO 50) AS INTEGER

CONST gauche = 75, droite = 77
CONST haut = 72, bas = 80, hautgauche = 71, hautdroite = 73, basgauche = 79, basdroite = 81
titr$ = "symetrie"
re = 0

'niveau 1
dessin$(1) = "l50 u50 l50 d50 l100 d50 l50 d50 r100 u50 r50 d100 r50 u100 r50"
dessin2$(1) = "r50 u50 r50 d50 r100 d50 r50 d50 l100 u50 l50 d100 l50 u100 l50"
solution$(1) = "dhdbddbdbgghgbbghhg"
x(1) = 300: y(1) = 50: x2(1) = 0: y2(1) = 50

dessin$(2) = "l50 d50 l50 d50 l100 d50 l100 d50 r150 u50 r100 u50 r50"
dessin2$(2) = "r50 d50 r50 d50 r100 d50 r100 d50 l150 u50 l100 u50 l50"
solution$(2) = "dbdbddbddbggghgghg"
x(2) = 300: y(2) = 0: x2(2) = 0: y2(2) = 0

dessin$(3) = "l50 d50 l100 u50 l50 u50 l50 d50 l50 u150 r50 d50 r100 u50 r50 d100 r50 u50"
dessin2$(3) = "r50 d50 r100 u50 r50 u50 r50 d50 r50 u150 l50 d50 l100 u50 l50 d100 l50 u50"
solution$(3) = "dbddhdhdbdhhhgbgghgbbgh"
x(3) = 300: y(3) = 150: x2(3) = 0: y2(3) = 150

dessin$(4) = "l50 u100 l150 d50 l100 u150 r100 d50 r150 u50 r50"
dessin2$(4) = "r50 u100 r150 d50 r100 u150 l100 d50 l150 u50 l50"
solution$(4) = "dhhdddbddhhhggbggghg"
x(4) = 300: y(4) = 200: x2(4) = 0: y2(4) = 200

dessin$(5) = "l50 d50 l50 u100 l50 d100 l50 d100 r50 u50 r150 d50 r50 u100 r50"
dessin2$(5) = "r50 d50 r50 u100 r50 d100 r50 d100 l50 u50 l150 d50 l50 u100 l50"
solution$(5) = "dbdhhdbbdbbghgggbghhg"
x(5) = 200: y(5) = 50: x2(5) = 100: y2(5) = 50

'niveau 2 angle 45
dessin$(11) = "m-50,+50 m-100,-100 m-50,+50 d50 l50 m+50,+50 r50 d50 m+50,-50 r50 m+50,-50"
dessin2$(11) = "m+50,+50 m+100,-100 m+50,+50 d50 r50 m-50,+50 l50 d50 m-50,-50 l50 m-50,-50"
solution$(11) = "lkklbdmgbjgj"
x(11) = 300: y(11) = 50: x2(11) = 0: y2(11) = 50

dessin$(12) = "m-50,+50 m-50,-50 m-50,+50 l50 m-50,+50 m-50,-50 d100 r100 m+50,-50 m+50,+50 m+50,-50 m+50,+50"
dessin2$(12) = "m+50,+50 m+50,-50 m+50,+50 r50 m+50,+50 m+50,-50 d100 l100 m-50,-50 m-50,+50 m-50,-50 m-50,+50"
solution$(12) = "lkldlkbbggjmjm"
x(12) = 300: y(12) = 50: x2(12) = 0: y2(12) = 50

dessin$(13) = "m-100,+100 m-50,-50 l50 m-50,+50 m+50,+50 r50 m+50,+50 m+50,-50"
dessin2$(13) = "m+100,+100 m+50,-50 r50 m+50,+50 m-50,+50 l50 m-50,+50 m-50,-50"
solution$(13) = "llkdlmgmj"
x(13) = 300: y(13) = 0: x2(13) = 0: y2(13) = 0

dessin$(14) = "m-50,-50 u50 l50 m-50,+50 l50 m-50,-50 d50 m-50,+50 m+100,+100 r50 u50 r50 u50 m+100,+100"
dessin2$(14) = "m+50,-50 u50 r50 m+50,+50 r50 m+50,-50 d50 m+50,+50 m-100,+100 l50 u50 l50 u50 m-100,+100"
solution$(14) = "khdldkblmmghghmm"
x(14) = 300: y(14) = 100: x2(14) = 0: y2(14) = 100

dessin$(15) = "m-50,+50 l50 m-100,-100 u100 m+50,+50 m+50,-50 m+50,+50 m+50,-50 m+50,+50"
dessin2$(15) = "m+50,+50 r50 m+100,-100 u100 m-50,+50 m-50,-50 m-50,+50 m-50,-50 m-50,+50"
solution$(15) = "ldkkhhmjmjm"
x(15) = 250: y(15) = 150: x2(15) = 50: y2(15) = 150

SELECT CASE ni
CASE 1
nombre = 0
CASE 2
nombre = 10
END SELECT

GOSUB syme40 'présentation

CLS
x = 635: y = 35
CIRCLE (x, y), 4, jaune, , , coef2!
GET (x - 4, y - 4)-(x + 4, y + 4), cercle

FOR jj = 1 TO 3

DEF SEG = 0
POKE &H417, (PEEK(&H417) AND &H9F)'non numérique
DEF SEG

GOSUB syme6 'tirage
erreurs = 0
syme13:
x = x(choix) + 20: y = y(choix) + 55

LOCATE 1: PRINT SPACE$(80)
CALL titre2(titr$)
IF ni = 1 THEN COLOR vertclair: LOCATE 22: PRINT "Niveau"; ni: LOCATE 22, 77: PRINT 4 - jj
LINE (320, 32)-(320, 278), blancbrill, , &HF0F0
DRAW "TA0 B m=" + VARPTR$(x) + ",=" + VARPTR$(y)
DRAW "c=" + VARPTR$(jaune) + dessin$(choix)

'fenetre gauche
VIEW (20, 55)-(320 + 4, 255 + 4)'300 de large et 200 de haut
coul = rougeclair: GOSUB syme1
x = x(choix): y = y(choix)
IF x2(choix) <> 0 THEN GOSUB syme2

'fenetre droite
VIEW (320, 55)-(620 + 4, 255 + 4) '300 de large et 200 de haut (+ 4 pour le rond)
coul = vertclair: IF erreurs <> 0 THEN GOSUB syme1
x = x2(choix): y = y2(choix): GOSUB syme2
IF erreurs > 1 AND couleur = 1 THEN
tempx = x2(choix) + 320: tempy = y2(choix) + 55
DRAW "TA0 B m=" + VARPTR$(tempx) + ",=" + VARPTR$(tempy)
DRAW "c=" + VARPTR$(rougeclair) + dessin2$(choix)
END IF
GOSUB syme14
flag = 0: reponse$ = ""

IF ni = 1 THEN
GOSUB symeniveau1
ELSE
GOSUB symeniveau2
END IF

VIEW

LOCATE 22: PRINT SPACE$(80): PRINT SPACE$(80)

IF solution$(choix) = reponse$ THEN
CALL exact(2)
IF erreurs = 0 THEN re = re + 3
ELSE
erreurs = erreurs + 1
CALL centre(23, rougeclair, "Les chemins ne sont pas symétriques.")
CALL attendre(1.5)
LOCATE 23: PRINT SPACE$(80): CALL centre(23, rougeclair, "Regarde")
x = x2(choix) + 320: y = y2(choix) + 55
DRAW "TA0 B m=" + VARPTR$(x) + ",=" + VARPTR$(y)
DRAW "c=" + VARPTR$(rougeclair) + dessin2$(choix)
CALL getinvimouse(r): IF r = 27 THEN CALL quitter
LOCATE 23: PRINT SPACE$(80): GOTO syme13
END IF

NEXT jj

'résultats
SCREEN 0
re = re + 1
CALL resultats(re, ni)

EXIT SUB
'++++++++++++++++++++++++


syme14:
IF ni = 1 THEN
CALL centre(23, blanc, CHR$(27) + " " + CHR$(26) + " " + CHR$(24) + " " + CHR$(25) + " = tracer <-- = corriger " + rt$ + " = valider")
ELSE
COLOR blanc
LOCATE 23, 23: PRINT "= tracer <-- = corriger " + rt$ + " = valider"
LOCATE 21, 10: PRINT "[7] [8] [9]"
LOCATE 22, 10: PRINT "[4] [6]"
LOCATE 23, 10: PRINT "[1] [2] [3]"
END IF
RETURN

syme1:
FOR x = 0 TO 300 STEP 50
FOR y = 0 TO 200 STEP 50
PSET (x, y), coul
NEXT y
NEXT x
RETURN

syme2:
PUT (x - 4, y - 4), cercle, XOR
PSET (x, y), rougeclair
RETURN

syme5:
flag = flag - 1
r$ = RIGHT$(reponse$, 1)
reponse$ = MID$(reponse$, 1, LEN(reponse$) - 1)
GOSUB syme2
IF r$ = "g" THEN
xx = x + 50: yy = y
ELSEIF r$ = "d" THEN
xx = x - 50: yy = y
ELSEIF r$ = "h" THEN
xx = x: yy = yy + 50
ELSEIF r$ = "b" THEN
xx = x: yy = yy - 50
END IF
LINE (x, y)-(xx, yy), bleu
RETURN

syme6:
'tirage
DO
f = 0
z(jj) = INT(RND * 5) + 1
FOR j = 1 TO jj - 1
IF z(jj) = z(j) THEN f = 1: EXIT FOR
NEXT
LOOP WHILE f = 1
choix = z(jj) + nombre

RETURN

symeniveau1:
DO
syme11:
LINE (0, 0)-(0, 300), blancbrill, , &HF0F0

MouseBorder 308, 10, 320, 630
MouseShow
souris = 0
DEF SEG = 0
POKE 1050, PEEK(1052)
DEF SEG
DO
r$ = INKEY$
' Obtient l'emplacement de la souris et l'état des boutons.
MousePoll v_mouse, h_mouse, lButton, rButton
' LOCATE 21, 1: PRINT v_mouse, h_mouse'===
IF lButton THEN
IF v_mouse >= 308 AND v_mouse <= 320 THEN
'fleches
IF h_mouse >= 100 AND h_mouse <= 112 THEN
'gauche
valtouche = gauche
CALL attendre(.2)
souris = 1
EXIT DO
ELSEIF h_mouse >= 116 AND h_mouse <= 128 THEN
'droite
valtouche = droite
CALL attendre(.2)
souris = 1
EXIT DO
ELSEIF h_mouse >= 133 AND h_mouse <= 145 THEN
'haut
valtouche = haut
CALL attendre(.2)
souris = 1
EXIT DO
ELSEIF h_mouse >= 150 AND h_mouse <= 160 THEN
'bas
valtouche = bas
CALL attendre(.2)
souris = 1
EXIT DO
ELSEIF h_mouse >= 270 AND h_mouse <= 380 THEN
'del
valtouche = 8
CALL attendre(.2)
souris = 1
EXIT DO
ELSEIF h_mouse >= 420 AND h_mouse <= 528 THEN
'return
valtouche = 13
CALL attendre(.2)
souris = 1
EXIT DO
ELSE
BEEP
END IF
ELSE
BEEP
END IF
END IF
LOOP WHILE r$ = ""

MouseHide

IF souris = 0 THEN
IF LEN(r$) < 2 THEN valtouche = ASC(r$) ELSE valtouche = ASC(RIGHT$(r$, 1))
END IF

IF (valtouche = 8 OR valtouche = 83) AND flag = 0 THEN BEEP: GOTO syme11
IF valtouche = 50 THEN valtouche = bas
IF valtouche = 52 THEN valtouche = gauche
IF valtouche = 54 THEN valtouche = droite
IF valtouche = 56 THEN valtouche = haut

SELECT CASE valtouche
CASE gauche
IF RIGHT$(reponse$, 1) = "d" THEN GOSUB syme5: GOTO syme12
xx = x - 50: yy = y
GOSUB syme2
IF xx < 0 THEN
xx = 0: BEEP
ELSE
reponse$ = reponse$ + "g"
LINE (x, y)-(xx, yy)
flag = flag + 1
END IF

CASE droite
IF RIGHT$(reponse$, 1) = "g" THEN GOSUB syme5: GOTO syme12
xx = x + 50: yy = y
GOSUB syme2
IF xx > 300 THEN
xx = 300: BEEP
ELSE
reponse$ = reponse$ + "d"
LINE (x, y)-(xx, yy)
flag = flag + 1
END IF

CASE haut
IF RIGHT$(reponse$, 1) = "b" THEN GOSUB syme5: GOTO syme12
xx = x: yy = y - 50
GOSUB syme2
IF yy < 0 THEN
yy = 0: BEEP
ELSE
reponse$ = reponse$ + "h"
LINE (x, y)-(xx, yy)
flag = flag + 1
END IF

CASE bas
IF RIGHT$(reponse$, 1) = "h" THEN GOSUB syme5: GOTO syme12
xx = x: yy = y + 50
GOSUB syme2
IF yy > 200 THEN
yy = 200: BEEP
ELSE
reponse$ = reponse$ + "b"
LINE (x, y)-(xx, yy)
flag = flag + 1
END IF

CASE 8, 83 'correction
GOSUB syme5

CASE 27
CALL quitter: GOSUB syme14: GOTO syme11
CASE 13
IF reponse$ = "" THEN GOTO syme11
EXIT DO
CASE ELSE
BEEP

END SELECT
syme12:
IF valtouche = 8 OR valtouche = 83 OR valtouche = gauche OR valtouche = droite OR valtouche = haut OR valtouche = bas THEN
PSET (x, y), rougeclair
x = xx: y = yy
GOSUB syme2
END IF

LOOP

RETURN

symeniveau2:
DO
syme31:
LINE (0, 0)-(0, 300), blancbrill, , &HF0F0

MouseBorder 282, 75, 320, 630
MouseShow
souris = 0
DEF SEG = 0
POKE 1050, PEEK(1052)
DEF SEG
DO
r$ = INKEY$
' Obtient l'emplacement de la souris et l'état des boutons.
MousePoll v_mouse, h_mouse, lButton, rButton
' LOCATE 21, 40: PRINT v_mouse, h_mouse'===
IF lButton THEN
IF (v_mouse >= 282 AND v_mouse <= 292) AND (h_mouse >= 73 AND h_mouse <= 93) THEN
valtouche = hautgauche
CALL attendre(.2)
souris = 1
EXIT DO
ELSEIF (v_mouse >= 282 AND v_mouse <= 292) AND (h_mouse >= 106 AND h_mouse <= 126) THEN
valtouche = haut
CALL attendre(.2)
souris = 1
EXIT DO
ELSEIF (v_mouse >= 282 AND v_mouse <= 292) AND (h_mouse >= 136 AND h_mouse <= 156) THEN
valtouche = hautdroite
CALL attendre(.2)
souris = 1
EXIT DO
ELSEIF (v_mouse >= 296 AND v_mouse <= 306) AND (h_mouse >= 73 AND h_mouse <= 93) THEN
valtouche = gauche
CALL attendre(.2)
souris = 1
EXIT DO
ELSEIF (v_mouse >= 296 AND v_mouse <= 306) AND (h_mouse >= 136 AND h_mouse <= 156) THEN
valtouche = droite
CALL attendre(.2)
souris = 1
EXIT DO
ELSEIF (v_mouse >= 310 AND v_mouse <= 320) AND (h_mouse >= 73 AND h_mouse <= 93) THEN
valtouche = basgauche
CALL attendre(.2)
souris = 1
EXIT DO
ELSEIF (v_mouse >= 310 AND v_mouse <= 320) AND (h_mouse >= 106 AND h_mouse <= 126) THEN
valtouche = bas
CALL attendre(.2)
souris = 1
EXIT DO
ELSEIF (v_mouse >= 310 AND v_mouse <= 320) AND (h_mouse >= 136 AND h_mouse <= 156) THEN
valtouche = basdroite
CALL attendre(.2)
souris = 1
EXIT DO
END IF
'ok
IF v_mouse >= 308 AND v_mouse <= 320 THEN
IF h_mouse >= 280 AND h_mouse <= 390 THEN
'del
valtouche = 8
CALL attendre(.2)
souris = 1
EXIT DO
ELSEIF h_mouse >= 440 AND h_mouse <= 540 THEN
'return
valtouche = 13
CALL attendre(.2)
souris = 1
EXIT DO
ELSE
BEEP
END IF
END IF
END IF

LOOP WHILE r$ = ""

MouseHide

IF souris = 0 THEN
IF LEN(r$) < 2 THEN valtouche = ASC(r$) ELSE valtouche = ASC(RIGHT$(r$, 1))
END IF

IF (valtouche = 8 OR valtouche = 83) AND flag = 0 THEN BEEP: GOTO syme31

IF valtouche = 49 OR valtouche = 38 THEN valtouche = basgauche
IF valtouche = 50 OR valtouche = 130 THEN valtouche = bas
IF valtouche = 51 OR valtouche = 34 THEN valtouche = basdroite
IF valtouche = 52 OR valtouche = 39 THEN valtouche = gauche
IF valtouche = 54 OR valtouche = 45 THEN valtouche = droite
IF valtouche = 55 OR valtouche = 138 THEN valtouche = hautgauche
IF valtouche = 56 OR valtouche = 95 THEN valtouche = haut
IF valtouche = 57 OR valtouche = 135 THEN valtouche = hautdroite

SELECT CASE valtouche

CASE gauche
IF RIGHT$(reponse$, 1) = "d" THEN GOSUB syme5: GOTO syme32
xx = x - 50: yy = y
GOSUB syme2
IF xx < 0 THEN
xx = 0: BEEP
ELSE
reponse$ = reponse$ + "g"
LINE (x, y)-(xx, yy)
flag = flag + 1
END IF

CASE droite
IF RIGHT$(reponse$, 1) = "g" THEN GOSUB syme5: GOTO syme32
xx = x + 50: yy = y
GOSUB syme2
IF xx > 300 THEN
xx = 300: BEEP
ELSE
reponse$ = reponse$ + "d"
LINE (x, y)-(xx, yy)
flag = flag + 1
END IF

CASE haut
IF RIGHT$(reponse$, 1) = "b" THEN GOSUB syme5: GOTO syme32
xx = x: yy = y - 50
GOSUB syme2
IF yy < 0 THEN
yy = 0: BEEP
ELSE
reponse$ = reponse$ + "h"
LINE (x, y)-(xx, yy)
flag = flag + 1
END IF

CASE bas
IF RIGHT$(reponse$, 1) = "h" THEN GOSUB syme5: GOTO syme32
xx = x: yy = y + 50
GOSUB syme2
IF yy > 200 THEN
yy = 200: BEEP
ELSE
reponse$ = reponse$ + "b"
LINE (x, y)-(xx, yy)
flag = flag + 1
END IF

CASE hautgauche
IF RIGHT$(reponse$, 1) = "l" THEN GOSUB syme35: GOTO syme32
xx = x - 50: yy = y - 50
GOSUB syme2
IF yy < 0 OR xx < 0 THEN
IF yy < 0 THEN
yy = 0: xx = xx + 50: BEEP
ELSEIF xx < 0 THEN
xx = 0: yy = yy + 50: BEEP
END IF
ELSE
reponse$ = reponse$ + "j"
LINE (x, y)-(xx, yy)
flag = flag + 1
END IF

CASE hautdroite
IF RIGHT$(reponse$, 1) = "m" THEN GOSUB syme35: GOTO syme32
xx = x + 50: yy = y - 50
GOSUB syme2
IF yy < 0 OR xx > 300 THEN
IF yy < 0 THEN
yy = 0: xx = xx - 50: BEEP
ELSEIF xx > 300 THEN
xx = 300: yy = yy + 50: BEEP
END IF
ELSE
reponse$ = reponse$ + "k"
LINE (x, y)-(xx, yy)
flag = flag + 1
END IF

CASE basgauche
IF RIGHT$(reponse$, 1) = "k" THEN GOSUB syme35: GOTO syme32
xx = x - 50: yy = y + 50
GOSUB syme2
IF yy > 200 OR xx < 0 THEN
IF yy > 200 THEN
yy = 200: xx = xx + 50: BEEP
ELSEIF xx < 0 THEN
xx = 0: yy = yy - 50: BEEP
END IF
ELSE
reponse$ = reponse$ + "m"
LINE (x, y)-(xx, yy)
flag = flag + 1
END IF

CASE basdroite
IF RIGHT$(reponse$, 1) = "j" THEN GOSUB syme35: GOTO syme32
xx = x + 50: yy = y + 50
GOSUB syme2
IF yy > 200 OR xx > 300 THEN
IF yy > 200 THEN
yy = 200: xx = xx - 50: BEEP
ELSEIF xx > 300 THEN
xx = 300: yy = yy - 50: BEEP
END IF
ELSE
reponse$ = reponse$ + "l"
LINE (x, y)-(xx, yy)
flag = flag + 1
END IF

CASE 8, 83 'correction
r$ = RIGHT$(reponse$, 1)
IF r$ = "h" OR r$ = "b" OR r$ = "g" OR r$ = "d" THEN
GOSUB syme5
ELSE
GOSUB syme35
END IF

CASE 27
CALL quitter: GOSUB syme14: GOTO syme31
CASE 13
IF reponse$ = "" THEN GOTO syme31
EXIT DO
CASE ELSE
BEEP

END SELECT

syme32:
IF valtouche = 71 OR valtouche = 73 OR valtouche = 79 OR valtouche = 81 OR valtouche = 8 OR valtouche = 83 OR valtouche = gauche OR valtouche = droite OR valtouche = haut OR valtouche = bas THEN
PSET (x, y), rougeclair
x = xx: y = yy
GOSUB syme2
END IF

LOOP

RETURN

syme35:
flag = flag - 1
r$ = RIGHT$(reponse$, 1)
reponse$ = MID$(reponse$, 1, LEN(reponse$) - 1)
GOSUB syme2
IF r$ = "j" THEN
xx = x + 50: yy = y + 50
ELSEIF r$ = "k" THEN
xx = x - 50: yy = y + 50
ELSEIF r$ = "m" THEN
xx = x + 50: yy = yy - 50
ELSEIF r$ = "l" THEN
xx = x - 50: yy = yy - 50
END IF
LINE (x, y)-(xx, yy), bleu
RETURN

syme40:

IF ni = 1 THEN
w$ = "Avec les flèches " + CHR$(27) + " " + CHR$(26) + " " + CHR$(24) + " " + CHR$(25) + ", tu vas reproduire un chemin symétriquement."
z$ = "Tu peux corriger tes erreurs avec la touche " + CHR$(27) + "- ou la touche suppr."
CALL consigne(2, w$, z$, xx$)

ELSE
z$ = "reproduire un chemin symétriquement."
CALL claviernumerique(z$)
END IF

'exemple suivant niveau
SCREEN 9
CALL titre2(titr$)
LINE (320, 32)-(320, 278), blancbrill, , &HF0F0
choix = INT(RND * 5) + 1 + nombre
x = x(choix) + 20: y = y(choix) + 55
DRAW "TA0 B m=" + VARPTR$(x) + ",=" + VARPTR$(y)
DRAW "c=" + VARPTR$(jaune) + dessin$(choix)
x = x2(choix) + 320: y = y2(choix) + 55
DRAW "TA0 B m=" + VARPTR$(x) + ",=" + VARPTR$(y)
DRAW "c=" + VARPTR$(vertclair) + dessin2$(choix)
CALL centre(23, jaune, "Regarde"): CALL getinvimouse(w)
RETURN


END SUB
 

 

Précédente Accueil Remonter Suivante