Précédente Accueil Remonter Suivante

FRANCAIS 1

Visual Basic for MS-DOS

 

 

DECLARE SUB ortho (re%, ni%, motorth$(), rt$, gg$, pre$, titr$, prog%, nom$, noir%, bleu%, vert%, rouge%, marron%, blanc%, vertclair%, cyanclair%, rougeclair%, jaune%, blancbrill%)
DECLARE SUB recolle (re%, ni%, rt$, motrecolle$(), gg$, pre$, titr$, prog%, nom$, noir%, bleu%, vert%, rouge%, marron%, blanc%, vertclair%, cyanclair%, rougeclair%, jaune%, blancbrill%)
DECLARE SUB attendre (tx!)
DECLARE SUB bilan (ma$(), niveaux%(), eleve%, VarEnreg AS ANY, rt$, noir%, bleu%, rouge%, vertclair%, cyanclair%, rougeclair%, jaune%, blancbrill%)
DECLARE SUB calmoy (t$(), moy$(), niveaux%())
DECLARE SUB centre (v%, cc%, ph$)
DECLARE SUB efface (v%, hk%)
DECLARE SUB entree (x%, y%)
DECLARE SUB fleches (v%, h%, w$(), np%, r%, coul%, drap%, v2%, h3%)
DECLARE SUB flechesmenu (w$(), r%, coul%)
DECLARE SUB lettres (fond%)
DECLARE SUB ligne23 (x%, y%)
DECLARE SUB quitter (fond%)
DECLARE SUB titre ()
DECLARE SUB cadre (v%, h%, l%, nli%, c%)
DECLARE SUB tableauexo (p$())
DECLARE SUB getinvimouse (rr%)
DECLARE SUB ouinon (r$)
DECLARE SUB alphabet (re%, ni%, rt$, gg$, pre$, titr$, prog%, nom$, noir%, bleu%, vert%, rouge%, marron%, blanc%, vertclair%, cyanclair%, rougeclair%, jaune%, blancbrill%)
DECLARE SUB classement (re%, ni%, mo2$(), rt$, gg$, pre$, titr$, prog%, nom$, noir%, bleu%, vert%, rouge%, marron%, blanc%, vertclair%, cyanclair%, rougeclair%, jaune%, blancbrill%)
DECLARE SUB copietexte (re%, ni%, te$(), ti$(), rt$, gg$, pre$, titr$, noir%, bleu%, vert%, rouge%, marron%, blanc%, vertclair%, cyanclair%, rougeclair%, jaune%, blancbrill%)
DECLARE SUB devine (re%, ni%, motdevine$(), rt$, gg$, pre$, titr$, prog%, nom$, noir%, bleu%, vert%, rouge%, marron%, blanc%, vertclair%, cyanclair%, rougeclair%, jaune%, blancbrill%)
DECLARE SUB lecrap (re%, ni%, mo2$(), rt$, gg$, pre$, titr$, prog%, nom$, noir%, bleu%, vert%, rouge%, marron%, blanc%, vertclair%, cyanclair%, rougeclair%, jaune%, blancbrill%)
DECLARE SUB trouvetemps (re%, ni%, tlt$(), tltv$(), rt$, gg$, pre$, titr$, prog%, nom$, noir%, bleu%, vert%, rouge%, marron%, blanc%, vertclair%, cyanclair%, rougeclair%, jaune%, blancbrill%)
DECLARE SUB ani (re%, ni%, rt$, gg$, pre$, titr$, noir%, bleu%, vert%, rouge%, marron%, blanc%, vertclair%, cyanclair%, rougeclair%, jaune%, blancbrill%)
DECLARE SUB intrus (re%, ni%, motintrus$(), rt$, gg$, pre$, titr$, noir%, bleu%, vert%, rouge%, marron%, blanc%, vertclair%, cyanclair%, rougeclair%, jaune%, blancbrill%)
DECLARE SUB passepresent (re%, ni%, ppf$(), rt$, gg$, pre$, titr$, prog%, nom$, noir%, bleu%, vert%, rouge%, marron%, blanc%, vertclair%, cyanclair%, rougeclair%, jaune%, blancbrill%)
DECLARE SUB trouvephrase (re%, ni%, rt$, gg$, gg2$, pre$, titr$, prog%, nom$, noir%, bleu%, vert%, rouge%, marron%, blanc%, vertclair%, cyanclair%, rougeclair%, jaune%, blancbrill%)
DECLARE SUB trouveverbe (re%, ni%, mottv$(), rt$, gg$, pre$, titr$, noir%, bleu%, vert%, rouge%, marron%, blanc%, vertclair%, cyanclair%, rougeclair%, jaune%, blancbrill%)
DECLARE SUB cherchemot (re%, ni%, rt$, gg$, gg2$, pre$, titr$, prog%, nom$, noir%, bleu%, vert%, rouge%, marron%, blanc%, vertclair%, cyanclair%, rougeclair%, jaune%, blancbrill%, couleur%)
DECLARE SUB conjugaison (re%, ni%, pp$(), etre$(), avoir$(), aller$(), marcher$(), finir$(), rt$, gg$, pre$, titr$, prog%, nom$, noir%, bleu%, vert%, rouge%, marron%, blanc%, vertclair%, cyanclair%, rougeclair%, jaune%, blancbrill%)
DECLARE SUB espace (re%, ni%, te$(), ti$(), rt$, gg$, pre$, titr$, prog%, nom$, noir%, bleu%, vert%, rouge%, marron%, blanc%, vertclair%, cyanclair%, rougeclair%, jaune%, blancbrill%)
DECLARE SUB femin (re%, ni%, ma$(), fe$(), rt$, gg$, pre$, titr$, prog%, nom$, noir%, bleu%, vert%, rouge%, marron%, blanc%, vertclair%, cyanclair%, rougeclair%, jaune%, blancbrill%)
DECLARE SUB infinitif (re%, ni%, inf$(), conj$(), rt$, gg$, pre$, titr$, prog%, nom$, noir%, bleu%, vert%, rouge%, marron%, blanc%, vertclair%, cyanclair%, rougeclair%, jaune%, blancbrill%)
DECLARE SUB nature (re%, ni%, m$(), rt$, gg$, pre$, titr$, prog%, nom$, noir%, bleu%, vert%, rouge%, marron%, blanc%, vertclair%, cyanclair%, rougeclair%, jaune%, blancbrill%)
DECLARE SUB noms (re%, ni%, a$(), rt$, gg$, pre$, titr$, prog%, nom$, noir%, bleu%, vert%, rouge%, marron%, blanc%, vertclair%, cyanclair%, rougeclair%, jaune%, blancbrill%)
DECLARE SUB pluriel (re%, ni%, n$(), rt$, gg$, pre$, titr$, prog%, nom$, noir%, bleu%, vert%, rouge%, marron%, blanc%, vertclair%, cyanclair%, rougeclair%, jaune%, blancbrill%)
'EXERCICES AAS FRANCAIS cycle 2
'Clerc Daniel
'4/12/2007
'version 1.4.5 (avec textes manuels cp-ce1)

DEFINT A-Z

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

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

SCREEN 9
SCREEN 0

CONST FALSE = 0
CONST TRUE = NOT FALSE

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$

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)
DIM moy$(30)
DIM t$(100), p$(ma), mo2$(102)
DIM motorth$(40) 'pour orth
DIM motrecolle$(20)
DIM motdevine$(16) 'pour devine
DIM motintrus$(200) 'pour intrus
DIM mottv$(250) 'pour trouve le verbe
DIM ppf$(20) 'pour présent passé futur
DIM mo3$(50), mo6$(50), mo7$(50), mo8$(33), mo9$(33), inf$(30), conj$(30)
DIM tlt$(10), tltv$(50)'trouve le temps
DIM pp$(6), etre$(6, 4), avoir$(6, 4), aller$(6, 4), marcher$(6, 4), finir$(6, 4)'conjugaison
DIM te$(7), ti$(7) 'copie texte et espace


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

COLOR , noir, noir: CLS : KEY OFF: LOCATE , , 0
GOSUB init
RANDOMIZE TIMER

IF sens = 1 AND eleve > 0 THEN
CALL bilan(p$(), niveaux(), eleve, VarEnreg, rt$, noir, bleu, rouge, vertclair, cyanclair, rougeclair, jaune, blancbrill)
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 FRANCAIS - Cycle 2")
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)
'francais niv 1 est en 1°
nbexo$ = LTRIM$(STR$(VAL(MID$(VarEnreg.nbexo, 1, 3))))
resultat$ = MID$(VarEnreg.notes, 1, 400)
CLOSE

j = 1
FOR i = 1 TO 200 STEP 2 '===
t$(j) = MID$(resultat$, i, 2)
j = j + 1
NEXT
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: h3 = 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 , h3: 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
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(), eleve, VarEnreg, rt$, noir, bleu, rouge, vertclair, cyanclair, rougeclair, jaune, blancbrill)
GOTO menuprincipal
END IF

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

COLOR , noir

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

SELECT CASE prog
CASE 1
CALL alphabet(re%, ni%, rt$, gg$, pre$, titr$, prog%, nom$, noir%, bleu%, vert%, rouge%, marron%, blanc%, vertclair%, cyanclair%, rougeclair%, jaune%, blancbrill%)

CASE 2
CALL ortho(re, ni, motorth$(), rt$, gg$, pre$, titr$, prog%, nom$, noir%, bleu%, vert%, rouge%, marron%, blanc%, vertclair%, cyanclair%, rougeclair%, jaune%, blancbrill%)

CASE 3
CALL recolle(re, ni, rt$, motrecolle$(), gg$, pre$, titr$, prog%, nom$, noir%, bleu%, vert%, rouge%, marron%, blanc%, vertclair%, cyanclair%, rougeclair%, jaune%, blancbrill%)

CASE 4
CALL devine(re, ni, motdevine$(), rt$, gg$, pre$, titr$, prog%, nom$, noir%, bleu%, vert%, rouge%, marron%, blanc%, vertclair%, cyanclair%, rougeclair%, jaune%, blancbrill%)

CASE 5
CALL classement(re%, ni%, mo2$(), rt$, gg$, pre$, titr$, prog%, nom$, noir%, bleu%, vert%, rouge%, marron%, blanc%, vertclair%, cyanclair%, rougeclair%, jaune%, blancbrill%)

CASE 6
CALL lecrap(re, ni, mo2$(), rt$, gg$, pre$, titr$, prog%, nom$, noir%, bleu%, vert%, rouge%, marron%, blanc%, vertclair%, cyanclair%, rougeclair%, jaune%, blancbrill%)

CASE 7
CALL cherchemot(re%, ni%, rt$, gg$, gg2$, pre$, titr$, prog%, nom$, noir%, bleu%, vert%, rouge%, marron%, blanc%, vertclair%, cyanclair%, rougeclair%, jaune%, blancbrill%, couleur%)

CASE 8
CALL intrus(re, ni, motintrus$(), rt$, gg$, pre$, titr$, noir, bleu, vert, rouge, marron, blanc, vertclair, cyanclair, rougeclair, jaune, blancbrill)

CASE 9
CALL copietexte(re, ni, te$(), ti$(), rt$, gg$, pre$, titr$, noir, bleu, vert, rouge, marron, blanc, vertclair, cyanclair, rougeclair, jaune, blancbrill)

CASE 10
CALL espace(re%, ni%, te$(), ti$(), rt$, gg$, pre$, titr$, prog%, nom$, noir%, bleu%, vert%, rouge%, marron%, blanc%, vertclair%, cyanclair%, rougeclair%, jaune%, blancbrill%)

CASE 11
CALL trouvephrase(re%, ni%, rt$, gg$, gg2$, pre$, titr$, prog%, nom$, noir%, bleu%, vert%, rouge%, marron%, blanc%, vertclair%, cyanclair%, rougeclair%, jaune%, blancbrill%)

CASE 12
CALL ani(re, ni, rt$, gg$, pre$, titr$, noir, bleu, vert, rouge, marron, blanc, vertclair, cyanclair, rougeclair, jaune, blancbrill)

CASE 13
CALL nature(re%, ni%, mo3$(), rt$, gg$, pre$, titr$, prog%, nom$, noir%, bleu%, vert%, rouge%, marron%, blanc%, vertclair%, cyanclair%, rougeclair%, jaune%, blancbrill%)

CASE 14
CALL noms(re%, ni%, mo6$(), rt$, gg$, pre$, titr$, prog%, nom$, noir%, bleu%, vert%, rouge%, marron%, blanc%, vertclair%, cyanclair%, rougeclair%, jaune%, blancbrill%)

CASE 15
CALL femin(re%, ni%, mo8$(), mo9$(), rt$, gg$, pre$, titr$, prog%, nom$, noir%, bleu%, vert%, rouge%, marron%, blanc%, vertclair%, cyanclair%, rougeclair%, jaune%, blancbrill%)

CASE 16
CALL pluriel(re%, ni%, mo7$(), rt$, gg$, pre$, titr$, prog%, nom$, noir%, bleu%, vert%, rouge%, marron%, blanc%, vertclair%, cyanclair%, rougeclair%, jaune%, blancbrill%)

CASE 17
CALL trouveverbe(re, ni, mottv$(), rt$, gg$, pre$, titr$, noir, bleu, vert, rouge, marron, blanc, vertclair, cyanclair, rougeclair, jaune, blancbrill)

CASE 18
CALL infinitif(re%, ni%, inf$(), conj$(), rt$, gg$, pre$, titr$, prog%, nom$, noir%, bleu%, vert%, rouge%, marron%, blanc%, vertclair%, cyanclair%, rougeclair%, jaune%, blancbrill%)

CASE 19
CALL passepresent(re%, ni%, ppf$(), rt$, gg$, pre$, titr$, prog%, nom$, noir%, bleu%, vert%, rouge%, marron%, blanc%, vertclair%, cyanclair%, rougeclair%, jaune%, blancbrill%)

CASE 20
CALL trouvetemps(re, ni, tlt$(), tltv$(), rt$, gg$, pre$, titr$, prog%, nom$, noir%, bleu%, vert%, rouge%, marron%, blanc%, vertclair%, cyanclair%, rougeclair%, jaune%, blancbrill%)

CASE 21
CALL conjugaison(re%, ni%, pp$(), etre$(), avoir$(), aller$(), marcher$(), finir$(), rt$, gg$, pre$, titr$, prog%, nom$, noir%, bleu%, vert%, rouge%, marron%, blanc%, vertclair%, cyanclair%, rougeclair%, jaune%, blancbrill%)

END SELECT

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

GOSUB enregistre
CALL ligne23(noir, noir)
CALL entree(noir, noir)
GOTO menuprincipal
END

fin:
COLOR , noir
IF eleve > 0 THEN
CALL bilan(p$(), niveaux(), eleve, VarEnreg, rt$, noir, bleu, rouge, vertclair, cyanclair, rougeclair, jaune, blancbrill)
END IF
CLS
RUN "menuexo"
END

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$, 1, 3)) + 1))
IF LEN(nombre$) = 1 THEN
nombre$ = "00" + nombre$
ELSEIF LEN(nombre$) = 2 THEN
nombre$ = "0" + nombre$
END IF

'=== franc ce est en 1° -> 1
IF VAL(nombre$) < 1000 THEN
VarEnreg.nbexo = nombre$ + MID$(nbexo$, 4)
END IF

notes$ = MID$(VarEnreg.notes, 1, 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 = notes$ + MID$(VarEnreg.notes, 401)
PUT #1, eleve, VarEnreg
CLOSE #1
CALL attendre(.5)
CALL centre(23, blancbrill, SPACE$(80))
RETURN


init:
DATA Alphabet,1
DATA Orthographe,4
DATA Recolle le mot,3
DATA Devine le mot,3
DATA Trie les mots,2
DATA Mémorise les mots,3
DATA Cherche le mot,4
DATA Trouve l'intrus,2
DATA Copie un texte,4
DATA Sépare les mots,4

DATA Fabrique la phrase,2
DATA Phrase transformée,2
DATA Classe des mots,2
DATA Groupe des noms,2
DATA Féminin des noms,3
DATA Pluriel des noms,2
DATA Trouve le verbe,2
DATA Infinitif,2
DATA Passé Présent Futur,2
DATA Trouve le temps,2
DATA Conjugaison,4

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

'data exo1 21/05/94
'lecture rapide et classement
DATA lapin,poule,vache,cheval,cochon,mouton

DATA cour,cantine,classe,gymnase,couloir,préau
DATA crayon,stylo,gomme,ardoise,trousse,compas
DATA cahier,livre,carnet,feuille,dictionnaire,revue
DATA bonnet,manteau,gant,chemise,pantalon,chaussure

DATA cuisine,cave,grenier,salon,chambre,toilettes
DATA jouer,travailler,dormir,classer,manger,corriger
DATA petit,grand,mince,gros,jeune,vieux
DATA jaune,rouge,vert,orange,bleu,marron

DATA table,tableau,chaise,bureau,armoire,porte
DATA orage,nuage,vent,pluie,soleil,neige
DATA clou,tournevis,marteau,vis,pince,scie
DATA tigre,lion,gazelle,girafe,puma,zèbre

DATA roue,selle,pneu,rayon,guidon,frein
DATA wagon,train,rail,quai,locomotive,gare
DATA plaine,campagne,montagne,mer,vallée,plage
DATA voiture,camion,bicyclette,avion,bateau,moto

FOR i = 1 TO 102: READ mo2$(i): NEXT

'pour ortho
DATA lundi,mardi,mercredi,jeudi,vendredi,samedi,dimanche
DATA janvier,février,mars,avril,mai,juin,juillet,août,septembre,octobre,novembre,décembre
DATA tableau,cahier,stylo,feutre,bureau,table,chaise,classeur,livre,feuille
DATA chat,chien,oiseau,coq,lapin,lion,tigre,canard,tortue,cerf
'DATA boulanger,épicier,électricien,plombier,professeur,charcutier,coiffeur,déménageur,pompier,menuisier
'DATA télévision,camescope,ordinateur,téléphone,voiture,magnétoscope,bicyclette,radio,scooter,revue
'DATA football,basket,tennis,rugby,lutte,judo,course,cyclisme,natation,volley
'DATA serpent,scorpion,tortue,araignée,canard,oie,dauphin,zèbre,cerf,hirondelle
FOR i = 1 TO 39
READ motorth$(i)
NEXT i

'pour recolle
DATA lundi,mardi,mercredi,jeudi,vendredi,samedi,dimanche
DATA janvier,février,mars,avril,mai,juin,juillet,août,septembre,octobre,novembre,décembre
FOR i = 1 TO 19
READ motrecolle$(i)
NEXT i

'pour devine
DATA lundi,mardi,mercredi,jeudi,vendredi,samedi,dimanche
DATA janvier,mars,avril,mai,juin,juillet,septembre,octobre,novembre
FOR i = 1 TO 16
READ motdevine$(i)
NEXT i

'data intrus CE1
DATA une chaise,un fauteuil,un banc,une table*,un tabouret,La table ne sert pas à s'asseoir.,"="
DATA un livre,une revue,un dictionnaire,un journal,une télévision*,une brochure,un mode d'emploi,On ne lit pas la télévision.,"="
DATA un frère,une nourrice*,une soeur,un père,une mère,un cousin,une grand-mère,un oncle,une tante,La nourrice ne fait pas partie de la famille.,"="
DATA le lait,le café,le verre*,le thé,le vin,la bière,l'eau,Le verre n'est pas une boisson.,"="
DATA la tête,le bras,le pied,le cou,la cuisse,la main,la montre*,La montre ne fait pas partie de ton corps.,"="
DATA un marteau,une hache,une scie,une pelle,un clou*,un tournevis,Le clou n'est pas un outil.,"="
DATA une voiture,un camion,une bicyclette,une moto,un train,un bateau*,Un bateau ne roule pas.,"="
DATA un lapin,un mouton,une vache,un bouton*,une poule,un canard,Un bouton n'est pas un animal.,"="
DATA un lit, une table,une étagère,un fauteuil,une chaise,une armoire,un garage*,Un garage n'est pas un meuble.,"="
DATA le boulanger,le médecin,le disque*,le chanteur,un instituteur,un peintre,Un disque n'est pas un métier.,"="
DATA le sapin,le chêne,la table*,le cerisier,le pin,l'abricotier,La table n'est pas un arbre.,"="
DATA un pigeon,un merle,une pie,une aile*,un aigle,un perroquet,un corbeau,Une aile n'est pas un oiseau.,"="
DATA une école,une chemise*,un hôpital,une église,une gare,un musée,un cinéma,Une chemise n'est pas un bâtiment.,"="
DATA un piano,une guitare,une trompette,une flûte,un tambour,un parachute*,un accordéon,Un parachute n'est pas un instrument de musique.,"="
DATA février,juillet,mai,printemps*,avril,janvier,mars,septembre,novembre,Le printemps n'est pas un mois.,"="
DATA un marteau,une cuillère*,une pince,des tenailles,un tournevis,une scie,une pioche,une pelle,Une cuillère n'est pas un outil.,"="
DATA un lion,une souris,un homme,un cheval,un chat,une fourmi*,un chien,Une fourmi n'est pas un mammifère. C'est un insecte.,"="
DATA rouge,vert,noir,marron,bleu,ciel*,violet,jaune,orange,blanc,Le ciel n'est pas une couleur.,"="
DATA un bonnet*,une chaussure,un soulier,une chaussette,une botte,une sandalette,Un bonnet ne se met pas aux pieds.,"="
DATA une lionne,un tigre,un puma,un éléphant,une girafe,un chien*,un chacal,Un chien n'est pas un animal sauvage.,"="
DATA ""

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

'data trouve le verbe CE1
DATA armoire,tableau,métier,rouge,nuage,tigre,casser*,clavier,mur,verre,Il casse une vitre avec son ballon.,"="
DATA livre,lire*,souris,écran,léger,pommade,ordinateur,flûte,Nous lisons un livre de bibliothèque.,"="
DATA camion,lapin,petit,rapide,garçon,trouver*,soeur,Je trouve la solution rapidement.,"="
DATA lait,café,verre,thé,vin,boire*,bière,eau,Il boit car il a très soif.,"="
DATA tête,pomme,salade,vendre*,lampe,ampoule,disque,chaussure,Vous vendez des champignons sur le marché.,"="
DATA sapin,toit,ongle,galette,croquer*,pont,blanche,chambre,Tu croques une pomme.,"="
DATA sortir*,rideau,livre,chanson,erreur,exact,gilet,panier,Il sort de son immeuble.,"="
DATA pommier,grand,flèche,parc,jaune,stylo,gagner*,pied,photo,Les enfants gagnent un lot à la tombola.,"="
DATA billet,voiture,bleu,prendre*,addition,large,calcul,télévision,Il prend une gomme.,"="
DATA boulanger,gros,médecin,élève,panier,chanter*,instituteur,peintre,Vous chantez dans la classe.,"="

DATA sapin,large,chêne,couper*,gorille,cerisier,vite,pin,abricot,Il coupe une feuille.,"="
DATA pigeon,aile,merle,rouge,pie,voler*,aigle,manche,perroquet,corbeau,Les oiseaux volent dans le ciel.,"="
DATA école,croire*,hôpital,guitare,fort,gare,gant,cinéma,Il ne croit pas à cette histoire.,"="
DATA piano,glace,théâtre,trompette,chien,pluie,poli,tambour,sortir*,Ils sortent de l'école à 4 h 30.,"="
DATA printemps,lettre,dormir*,dent,main,crayon,cartable,jaune,lourd,Tu dors la nuit.,"="
DATA marteau,rouler*,tenaille,épais,langue,tournevis,savon,chat,La voiture roule vite.,"="
DATA lion,film,mauvais,souris,homme,tuyau,cheval,brebis,fuir*,grue,Il fuit car il a peur.,"="
DATA rouge,policier,lent,cahier,ciel,vent,bleu,taper*,violet,mouton,orange,Nous tapons à la porte.,"="
DATA aller*,épicier,chaussure,girafe,long,pompier,élégant,pièce,salle,Nous allons dans la cour.,"="
DATA boulanger,pain,crier*,étoile,route,sel,bruit,cauchemar,trottoir,Vous criez trop souvent !,"="
DATA ""

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

'présent2 passé1 futur3
'niveau 1
DATA aujourd'hui2,hier1,demain3,maintenant2
DATA en ce moment2,avant-hier1,plus tard3,tout à l'heure3
DATA après-demain3,il était une fois1
'niveau 2
DATA l'année prochaine3,avant1,tout de suite2,dans quatre jours3
DATA autrefois1,il y a longtemps1,bientôt3
DATA il court2,il est parti1,nous lirons3

FOR i = 1 TO 20
READ ppf$(i)
NEXT

'nature 4/3/94
DATA chanter0,table1,ils4,une3,grand2
DATA ordinateur1,travailler0,elle4,les3,grosse2
DATA boire0,maison1,elles4,lourd2
DATA croire0,chanson1,vous4,noire2,clavier1,lourde2
DATA courir0,nous4,je4,un3,des3

FOR i = 1 TO 25: READ mo3$(i): NEXT

'noms '10/5/94
DATA 3un livre,4une pensée,2un chat,3un téléviseur,4le courage,3un ordinateur
DATA 3la Lune,3le film,4un rêve,1une fille,1l'instituteur,1un indien,2un tigre,2une limace
DATA 2l'hirondelle,4le rire,1un garçon,3un mur,2un loup,1un cycliste
DATA 2un poisson,2le thon,4la peur,2un oiseau,2un moustique,4le bonheur,2un crocodile,2une coccinelle
DATA 3un banc,4un calcul,3le téléphone,4un vol,3une vitre
DATA 1une femme,4la force,1un homme,1la championne,4un cauchemar,1un anglais,1le boulanger,2une grenouille
DATA 2une abeille,4une maladie,1un footballeur,4le malheur,2la girafe,3une craie,3le tableau

FOR i = 1 TO 48: READ mo6$(i): NEXT

'pluriel niveau 1 11/5/94
DATA une classe,un élève,une fille,une chaise,une lampe,un tigre,une fleur
DATA une table,une ardoise,une porte,un film,une salle,un ordinateur
DATA un mur,une douche,un carnet,une télévision,un homme,une vitre
'pluriel niveau 2
DATA un coeur,un bateau,un tableau,un clown,un poteau,un caillou,un travail,un cheval,un oeil
DATA un nez,un cheveu,un banc,un jeu,un tapis,un repas,une souris

FOR i = 1 TO 35: READ mo7$(i): NEXT

'féminin 4/3/94
'niveau 1
DATA cousin,chanteur,homme,lion,chien,coq,voisin,danseur,chat,marchand
'niveau 2
DATA directeur,voleur,garçon,monsieur,cheval,maître,loup,animateur,écolier,boulanger
'niveau 3
DATA ami,homme,singe,loup,cheval,lion,chien,coq,lapin,taureau,porc,cerf,tigre

FOR i = 1 TO 33: READ mo8$(i): NEXT

'niveau 1
DATA cousine,chanteuse,femme,lionne,chienne,poule,voisine,danseuse,chatte,marchande
'niveau 2
DATA directrice,voleuse,fille,dame,jument,maîtresse,louve,animatrice,écolière,boulangère
'niveau 3
DATA amie,femme,guenon,louve,jument,lionne,chienne,poule,lapine,vache,truie,biche,tigresse

FOR i = 1 TO 33: READ mo9$(i): NEXT

'infinitif 22/5/94
'niveau 1
DATA marcher,lire,regarder,sauter,travailler
DATA parler,courir,écrire,être,avoir,gagner,finir
DATA effacer,avoir,être
'niveau 2
DATA taper,grandir,salir,être,avoir,casser
DATA penser,dormir,voyager,sortir
DATA dessiner,classer,penser,aller,filmer

FOR i = 1 TO 30: READ inf$(i): NEXT

'niveau 1
DATA nous marchons,vous lisez,tu regardes,nous sautons,elle travaille
DATA je parle,ils courent,vous écrivez,je suis,elle a,tu gagnes,nous finissons
DATA vous effacez,vous avez,elles sont
'niveau 2
DATA nous taperons,il grandit,vous salissez,elle était,j'avais,ils casseront
DATA ils pensaient,elle dort,il voyageait,il sortira
DATA vous dessiniez,je classais,nous pensions,elle va,il filmera

FOR i = 1 TO 30: READ conj$(i): NEXT

'trouve le temps - remarque : 8 points
DATA "Il y a très longtemps, les dinosaures ........ sur la Terre."
DATA "Dans quelques jours, les élèves ........ en vacances."
DATA "En ce moment, l'enfant ........ son livre."
DATA "Bientôt, l'avion ........ sur l'aéroport."
DATA "Maintenant, le chat ........ son lait."
DATA "Dans cinq minutes, Florian ........ avec son ballon."
DATA "Hier soir, nous ........ du poisson."
DATA "L'année dernière, elle ........ à Paris."
DATA "La semaine prochaine, Camille ........ au cinéma."
DATA "Demain, il ne ........ pas beau."

FOR i = 1 TO 10: READ tlt$(i): NEXT

DATA vivent,vivront,vivaient,vont vivre,3
DATA partaient,partent,partiront,sont partis,3
DATA lira,va lire,a lu,lit,4
DATA atterrit,atterrira,atterrissait,a atterri,2
DATA boit,buvait,a bu,va boire,1
DATA joue,jouera,a joué,jouait,2
DATA mangerons,allons manger,avons mangé,mangeons,3
DATA habitera,habite,va habiter,habitait,4
DATA va,ira,est allé,allait,2
DATA fait,faisait,a fait,fera,4

FOR i = 1 TO 10 * 5: READ tltv$(i): NEXT

'conjugaison 12/5/94
DATA "je ","tu ","il ","nous ","vous ","ils "

FOR i = 1 TO 6: READ pp$(i): NEXT

'être présent imparfait passé composé futur
DATA suis,es,est,sommes,êtes,sont
DATA étais,étais,était,étions,étiez,étaient
DATA ai été,as été,a été,avons été,avez été,ont été
DATA serai,seras,sera,serons,serez,seront

FOR i = 1 TO 4
FOR j = 1 TO 6
READ etre$(j, i)
NEXT j
NEXT i

'avoir présent imparfait passé composé futur
DATA ai,as,a,avons,avez,ont
DATA avais,avais,avait,avions,aviez,avaient
DATA ai eu,as eu,a eu,avons eu,avez eu,ont eu
DATA aurai,auras,aura,aurons,aurez,auront

FOR i = 1 TO 4
FOR j = 1 TO 6
READ avoir$(j, i)
NEXT j
NEXT i

'aller présent imparfait passé composé futur
DATA vais,vas,va,allons,allez,vont
DATA allais,allais,allait,allions,alliez,allaient
DATA suis allé,es allé,est allé,sommes allés,êtes allés,sont allés
DATA irai,iras,ira,irons,irez,iront

FOR i = 1 TO 4
FOR j = 1 TO 6
READ aller$(j, i)
NEXT j
NEXT i

'marcher présent imparfait passé composé futur
DATA marche,marches,marche,marchons,marchez,marchent
DATA marchais,marchais,marchait,marchions,marchiez,marchaient
DATA ai marché,as marché,a marché,avons marché,avez marché,ont marché
DATA marcherai,marcheras,marchera,marcherons,marcherez,marcheront

FOR i = 1 TO 4
FOR j = 1 TO 6
READ marcher$(j, i)
NEXT j
NEXT i

'finir présent imparfait passé composé futur
DATA finis,finis,finit,finissons,finissez,finissent
DATA finissais,finissais,finissait,finissions,finissiez,finissaient
DATA ai fini,as fini,a fini,avons fini,avez fini,ont fini
DATA finirai,finiras,finira,finirons,finirez,finiront

FOR i = 1 TO 4
FOR j = 1 TO 6
READ finir$(j, i)
NEXT j
NEXT i

'copie texte et espace 'espace à la fin

te$(1) = "LE MULOT, LE PAPILLON, L'OISEAU, LE LAPIN CHERCHENT PIQUE LE HERISSON. "
te$(2) = "Lundi, quelle histoire, j'ai trouvé un ours velu dans mon placard. Il semblait fatigué. "
te$(3) = "Il était une fois un pingouin qui vivait sur une jolie banquise. Il se nommait Minable. "
te$(4) = "Il était une fois une pauvre veuve qui vivait avec son fils Jack. La mère dit à son fils d'aller vendre leur vache. "

ti$(1) = "PIQUE LE HERISSON"
ti$(2) = "Zoé"
ti$(3) = "Minable le pingouin"
ti$(4) = "Jack et le haricot magique"

RETURN

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

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 afficheformate (m$(), nm)
i = 1: l2 = 0

DO
l = LEN(m$(i))
l2 = l2 + l
IF l2 > 80 THEN
PRINT : i = i - 1: l2 = 0
ELSEIF l2 = 80 THEN
PRINT m$(i); : l2 = 0
ELSEIF l2 = 80 - 1 THEN
PRINT m$(i): l2 = 0
ELSE
PRINT m$(i); " "; : l2 = l2 + 1
END IF
i = i + 1
LOOP WHILE i <= nm
PRINT

END SUB

DEFINT A-Z
SUB afformate (m$(), nm)
LOCATE 9, 1, 0
i = 1: l2 = 0
DO
l = LEN(m$(i))
l2 = l2 + l
IF l2 > 80 THEN
PRINT : i = i - 1: l2 = 0
ELSEIF l2 = 80 THEN
PRINT m$(i); : l2 = 0
ELSEIF l2 = 80 - 1 THEN
PRINT m$(i): l2 = 0
ELSE
PRINT m$(i); " "; : l2 = l2 + 1
END IF
i = i + 1
LOOP WHILE i <= nm
PRINT


END SUB

DEFINT A-Z
SUB afformate2 (m$(), nm, v, h)
'il faut tester avant si les mots ne sont pas
'plus grand que col ===
co = 80
h3 = h
col = co - (h3 * 2)
IF h3 = 0 THEN h3 = 1
GOSUB nombreligne

IF h3 > 1 THEN
CALL cadre(v - 1, h3 - 2, col + 2, nl, blanc)
COLOR noir, blanc
ELSE
LOCATE v - 2
COLOR noir, blanc
FOR i = 1 TO nl + 1: PRINT SPACE$(co): NEXT
END IF

LOCATE v, h3, 0
i = 1: l2 = 0

DO
l = LEN(m$(i))
l2 = l2 + l
IF l2 > col THEN
PRINT : i = i - 1: l2 = 0
LOCATE , h3
ELSEIF l2 = col THEN
PRINT m$(i); : l2 = 0
IF h3 > 1 THEN PRINT : LOCATE , h3
ELSEIF l2 = col - 1 THEN
PRINT m$(i): l2 = 0
LOCATE , h3
ELSE
PRINT m$(i); " "; : l2 = l2 + 1
END IF
i = i + 1
LOOP WHILE i <= nm
PRINT
EXIT SUB

nombreligne:
COLOR bleu, bleu
LOCATE v, h3, 0
i = 1: l2 = 0

DO
l = LEN(m$(i))
l2 = l2 + l
IF l2 > col THEN
PRINT : i = i - 1: l2 = 0
LOCATE , h3
ELSEIF l2 = col THEN
PRINT m$(i); : l2 = 0
IF h3 > 1 THEN PRINT : LOCATE , h3
ELSEIF l2 = col - 1 THEN
PRINT m$(i): l2 = 0
LOCATE , h3
ELSE
PRINT m$(i); " "; : l2 = l2 + 1
END IF
i = i + 1
LOOP WHILE i <= nm
ligne = CSRLIN
nl = ligne - v + 2

RETURN

END SUB

DEFINT A-Z
SUB attendre (tx!)
tx! = tx! * 2
DEF SEG = 0
POKE 1050, PEEK(1052)
DEF SEG

debut! = TIMER
DO
fin! = TIMER
IF INKEY$ <> "" THEN EXIT DO
LOOP WHILE fin! - debut! < tx!
tx! = tx! / 2
END SUB

DEFINT A-Z
SUB bilan (ma$(), niveaux(), eleve, VarEnreg AS TypeEnreg, rt$, noir, bleu, rouge, vertclair, cyanclair, rougeclair, jaune, blancbrill)
'6/4/95
ma = 21
DIM t$(100), moy$(ma), bi$(21)
FOR i = 1 TO 21: bi$(i) = ma$(i): 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)
'francais niv 1 est en 1°
nbexo$ = LTRIM$(MID$(VarEnreg.nbexo, 1, 3))
resultat$ = MID$(VarEnreg.notes, 1, 400)

CLOSE

IF VAL(nbexo$) = 0 THEN EXIT SUB
titr$ = "BILAN"
CALL titre

j = 1
FOR i = 1 TO 200 STEP 2 '===
t$(j) = MID$(resultat$, i, 2)
j = j + 1
NEXT

CALL calmoy(t$(), moy$(), niveaux())

'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 français (niveau I)"
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 cadre2
v = 7: h = 42: debut = 8: fin = 17: GOSUB cadre2
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
moygen = INT(VAL(moygen$))
'CALL convertir(moygen$)
PRINT "Moyenne générale :"; moygen; "sur 10"
END IF
CALL entree(noir, noir)

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

cadre2:
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 , noir
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 cadre2 (v%, h%, l%, nli%, marron, blancbrill)
COLOR marron
LOCATE v, h: PRINT "╔"; STRING$(l, 205); "╗"
FOR i = 1 TO nli - 1: v = v + 1: LOCATE v, h: PRINT "║"; SPACE$(l); "║": NEXT
LOCATE v + 1, h: PRINT "╚"; STRING$(l, 205); "╝"
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())
'29/3/95
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, cc, ph$)
COLOR cc
LOCATE v, INT(41 - LEN(ph$) / 2)
PRINT ph$
COLOR 15

END SUB

DEFINT A-Z
SUB consigne (nl, w$, z$, y$)
CALL titre
l = LEN(w$)
IF LEN(z$) > l THEN l = LEN(z$)
IF LEN(y$) > l THEN l = LEN(y$)

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, y$)
ELSE
CALL centre(v + 3, blancbrill, w$)
CALL centre(v + 5, blancbrill, z$)
CALL centre(v + 7, blancbrill, y$)
END IF
CALL entree(noir, noir)
w$ = "": z$ = "": y$ = ""

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)

IF prog = 16 THEN '=== fois
z$ = LTRIM$(z$)
IF LEFT$(z$, 1) = "," THEN z$ = "0" + z$
END IF

END SUB

DEFINT A-Z
SUB efface (v, hk)
IF v = 23 THEN COLOR , noir
LOCATE v, 1: FOR i = 1 TO hk: PRINT SPACE$(80): NEXT: LOCATE v, 1

END SUB

DEFINT A-Z
SUB entree (x, y)
COLOR blanc, x
LOCATE 23, 1: PRINT SPACE$(37) + CHR$(17) + CHR$(196) + CHR$(217) + SPACE$(40)
COLOR 15
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))

COLOR 15, y
END SUB

DEFINT A-Z
SUB epuration (re$, re2$)
' re$ à l'entrée, re2$ à la sortie
'épuration à droite
IF RIGHT$(re$, 3) = "..." THEN
re2$ = MID$(re$, 1, LEN(re$) - 3)
ELSEIF RIGHT$(re$, 2) = ")," OR RIGHT$(re$, 2) = ")." THEN
re2$ = MID$(re$, 1, LEN(re$) - 2)
ELSEIF RIGHT$(re$, 1) = "," OR RIGHT$(re$, 1) = "." OR RIGHT$(re$, 1) = ")" OR RIGHT$(re$, 1) = "'" OR RIGHT$(re$, 1) = CHR$(34) THEN
re2$ = MID$(re$, 1, LEN(re$) - 1)
ELSE
re2$ = re$
END IF

'épuration à gauche de re2$
IF LEFT$(re2$, 1) = "(" OR LEFT$(re2$, 1) = "'" OR LEFT$(re2$, 1) = CHR$(34) THEN
re2$ = MID$(re2$, 2)
END IF

END SUB

DEFINT A-Z
SUB erreur2 (tx!)
LOCATE , , 0
CALL centre(23, noir, SPACE$(60))
CALL centre(23, rougeclair, "Erreur")
CALL attendre(tx!)
CALL centre(23, blancbrill, SPACE$(6))
END SUB

DEFINT A-Z
SUB exact2 (tx!)
CALL centre(23, noir, SPACE$(60))
CALL centre(23, jaune, "Exact")
CALL attendre(tx!)
CALL centre(23, blancbrill, SPACE$(5))
END SUB

DEFINT A-Z
SUB fleches (v, h, w$(), np, r, coul, drap, v2, h3)
'PRINT v2, h3
'v2 et h3 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 h3 > 0 THEN
COLOR blanc, noir
LOCATE v2, h3: 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 = h3 THEN
rr = 72 'fleche haut
souris = 1
CALL attendre(.2)
EXIT DO
ELSEIF v_mouse = v2 AND h_mouse = h3 + 2 THEN
rr = 80 'fleche bas
souris = 1
CALL attendre(.2)
EXIT DO
ELSEIF v_mouse = v2 AND (h_mouse >= h3 + 9 AND h_mouse <= h3 + 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(coul)
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 flechesmenu (w$(), r, coul)
nm = 21 '===
DIM p$(nm)
CONST gauche = 75, droite = 77, bas = 80, haut = 72
h1 = 6: h3 = 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 = h3: v = 7
ELSEIF h = h3 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 = h3: v = 19
ELSEIF h = h3 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 = h3 THEN
r = ((v - 7) / 2) + 8
ELSEIF h = h3 THEN
r = ((v - 7) / 2) + 15
END IF
RETURN

afficheliste:
'affiche liste exo
h1 = 5: h3 = 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 , h3: 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 flechestrouvephrase (v, h, w$(), np, r, coul, drap, v2, h3)
'pour trouvephrase
'PRINT v2, h3
'v2 et h3 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 h3 > 0 THEN
COLOR blanc, noir
LOCATE v2, h3: 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 = h3 THEN
rr = 72 'fleche haut
souris = 1
CALL attendre(.2)
EXIT DO
ELSEIF v_mouse = v2 AND h_mouse = h3 + 2 THEN
rr = 80 'fleche bas
souris = 1
CALL attendre(.2)
EXIT DO
ELSEIF v_mouse = v2 AND (h_mouse >= h3 + 9 AND h_mouse <= h3 + 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(coul)
END IF

IF rr = 8 THEN
r = 8
EXIT SUB
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 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%, coul, fond)
DIM re$(nl + 1)
inpdebut:
IF fond = blanc THEN
COLOR noir, blanc
ELSE
COLOR blancbrill
END IF

r$ = ".": xx = 0
DEF SEG = 0
POKE 1050, PEEK(1052)
DEF SEG
ligne = CSRLIN
colonne = POS(0)
LOCATE ligne, colonne, 1
IF (deb% = 65 OR deb% = 32) AND (prog <> 2 AND prog <> 3) THEN PRINT LEFT$(SPACE$(80), nl) '=== recolle orth
'pour orth

LOCATE ligne, colonne, 1
FOR ii = 1 TO nl + 1

input0:
IF ii <= 0 THEN ii = 1
DO
re$(ii) = INKEY$
IF prog = 3 THEN
'recolle
MousePoll v_mouse, h_mouse, lButton, rButton
IF lButton THEN
IF v_mouse = 23 AND (h_mouse >= 39 AND h_mouse <= 57) THEN
re$(ii) = "*"
CALL attendre(.5)
ELSE
BEEP
END IF
END IF
END IF

LOOP WHILE re$(ii) = ""
IF ASC(re$(ii)) = 27 THEN
CALL quitter(fond)
xx = 1: 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
END IF
GOTO input0
END IF

IF re$(ii) = "*" AND prog = 3 THEN
r$ = "*": LOCATE , , 0: EXIT SUB 'recolle ====
END IF

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
CALL lettres(fond): xx = 1: EXIT FOR
END IF

IF ii = nl + 1 THEN BEEP: GOTO input0

PRINT re$(ii);

NEXT ii

PRINT
r$ = "": FOR JJ = 1 TO ii - 1: r$ = r$ + re$(JJ): NEXT
r$ = LTRIM$(r$): r$ = RTRIM$(r$)
IF r$ = "" OR LEN(r$) = 1 THEN GOTO inp3
'épure
l = LEN(r$)
IK = 1
inp2:
IF ASC(MID$(r$, IK, 1)) = 32 THEN IF ASC(MID$(r$, IK + 1, 1)) = 32 THEN r$ = MID$(r$, 1, IK) + MID$(r$, IK + 2): l = l - 1: IK = IK - 1
IK = IK + 1: IF IK <> l THEN GOTO inp2

'guillemet
z = INSTR(1, r$, " '")
IF z <> 0 THEN
r$ = MID$(r$, 1, z - 1) + "'" + MID$(r$, z + 2)
END IF
z = INSTR(1, r$, "' ")
IF z <> 0 THEN
r$ = MID$(r$, 1, z - 1) + "'" + MID$(r$, z + 2)
END IF

inp3:
r$ = LCASE$(r$)
IF fin% = 125 AND r$ = "" AND xx <> 1 THEN LOCATE , , 0: EXIT SUB
IF r$ = "" OR xx = 1 THEN BEEP: LOCATE ligne, colonne, 1: GOTO inpdebut
LOCATE , , 0
END SUB

DEFINT A-Z
SUB lettres (fond)
'31/5/95
DIM c(80), x$(80)
F = 0
'on mémorise la zone quitter
LOCATE 23, 1, 0
COLOR rougeclair, noir
FOR i = 1 TO 80
x$(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)

DEF SEG = 0: POKE 1050, PEEK(1052): DEF SEG
BEEP

CALL centre(23, rougeclair, "Des lettres !")

CALL attendre(1)

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

DEFINT A-Z
SUB ligne23 (x, y)
COLOR , x
LOCATE 23, 1, 0: PRINT SPACE$(80): LOCATE 23
COLOR , y
END SUB

DEFINT A-Z
SUB niv (limit, xx)
COLOR noir, vert
LOCATE 21, 2: PRINT " Niveau"; ni
LOCATE 21, 76: PRINT " "
IF limit + 1 - xx > 9 THEN LOCATE 21, 76 ELSE LOCATE 21, 77
PRINT limit + 1 - xx
COLOR blancbrill, bleu
END SUB

DEFINT A-Z
SUB niveau (ni, np)
DIM p$(4)
p$(1) = "1": p$(2) = "2": p$(3) = "3": p$(4) = "4"
CALL titre
CALL cadre(7, 25, 30, 2, vert)
COLOR , vert
CALL centre(8, blancbrill, "Niveau de difficulté")

CALL fleches(13, 40, p$(), np, ni, rouge, 1, 23, 35)
END SUB

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

LOCATE v, h
COLOR blanc: PRINT "["; : COLOR jaune: PRINT "O"; : COLOR blanc: PRINT "]ui ou ["; : COLOR jaune: PRINT "N"; : COLOR blanc: PRINT "]on ?"
DO
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
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 place (v, h, p$, c)
COLOR c
LOCATE v, h: PRINT p$

END SUB

DEFINT A-Z
SUB pleinecran (r$, m$, co, v1, v2)
'pour sub espace
'20/11/96

m$ = RTRIM$(m$)
'_saisie plein ecran_
COLOR , noir

CALL centre(22, vertclair, "Avec les flèches, déplace le curseur là où tu veux insérer un espace.")
CALL centre(23, blanc, CHR$(24) + " " + CHR$(25) + " " + CHR$(27) + " " + CHR$(26) + " Espace Ret.Arr Suppr " + rt$ + " = valider")
COLOR noir, blanc
VIEW PRINT v1 - 1 TO v2
v = v1: h = 1

pl0:
CLS 2
pl1:
LOCATE v1, 1, 0: PRINT m$
pl2:
IF h < 1 THEN h = 1: BEEP
IF v < v1 THEN v = v1: BEEP
IF h > co THEN h = 1: v = v + 1

lc = h + (co * (v - v1))
IF lc > LEN(m$) THEN 'fin texte
lc = LEN(m$) + 1
v = INT(LEN(m$) / co)
h = (LEN(m$) - (co * v)) + 1
v = v + v1
END IF

IF v = v2 AND h > co - 2 THEN h = co - 2

LOCATE v, h, 1, 7 'curseur
souris = 0
DO
r$ = INKEY$
MousePoll v_mouse, h_mouse, lButton, rButton
'LOCATE 8: PRINT v_mouse, h_mouse, v1, v2'===
IF lButton THEN
IF v_mouse >= v1 AND v_mouse <= v2 THEN
v = v_mouse: h = h_mouse
CALL attendre(.2)
souris = 1
EXIT DO
ELSEIF v_mouse = 23 THEN
IF h_mouse >= 54 AND h_mouse <= 66 THEN
r$ = CHR$(13)
CALL attendre(.3)
ELSEIF h_mouse >= 25 AND h_mouse <= 30 THEN
'espace
r$ = CHR$(32)
CALL attendre(.2)
ELSEIF h_mouse >= 35 AND h_mouse <= 41 THEN
'del
r$ = CHR$(8)
CALL attendre(.2)
souris = 0
ELSEIF h_mouse = 14 THEN
'haut
r2 = 72
CALL attendre(.2)
souris = 2
EXIT DO
ELSEIF h_mouse = 16 THEN
'bas
r2 = 80
CALL attendre(.2)
souris = 2
EXIT DO
ELSEIF h_mouse = 18 THEN
'gauche
r2 = 75
CALL attendre(.2)
souris = 2
EXIT DO
ELSEIF h_mouse = 20 THEN
'droite
r2 = 77
CALL attendre(.2)
souris = 2
EXIT DO
ELSEIF h_mouse >= 45 AND h_mouse <= 49 THEN
'suppr
r2 = 83
CALL attendre(.2)
souris = 2
EXIT DO
ELSE
BEEP
END IF
ELSE
BEEP
END IF
END IF
LOOP WHILE r$ = ""

IF souris = 1 THEN GOTO pl2

IF r$ = CHR$(27) OR r$ = CHR$(13) THEN VIEW PRINT: LOCATE , , 0: EXIT SUB
IF LEN(r$) = 2 OR souris = 2 THEN GOTO pl3
r2 = ASC(r$)

max = 356

IF r2 = 32 THEN
IF LEN(m$) > max THEN
BEEP
ELSE
m$ = MID$(m$, 1, lc - 1) + r$ + MID$(m$, lc)
h = h + 1
END IF
GOTO pl1
END IF

IF r2 = 8 THEN 'delete doit concerner seulement les espaces
IF h = 1 AND v = v1 THEN GOTO pl0
esp$ = MID$(m$, lc - 1, 1)
IF esp$ <> CHR$(32) THEN
BEEP
ELSE
m$ = MID$(m$, 1, lc - 2) + MID$(m$, lc): h = h - 1
IF h < 1 AND v > v1 THEN h = co: v = v - 1
END IF
GOTO pl0
END IF

pl3:
'carac étendu
IF souris = 0 THEN r2 = ASC(RIGHT$(r$, 1))
IF r2 = 72 THEN v = v - 1 'haut
IF r2 = 80 THEN v = v + 1 'bas
IF r2 = 77 THEN h = h + 1 'droite
IF r2 = 71 THEN h = 1: GOTO pl2 'home
IF r2 = 79 THEN h = co: GOTO pl2 'end
IF r2 = 73 THEN v = v1: h = 1: GOTO pl2'pgup
IF r2 = 81 THEN v = v2: h = co: GOTO pl2'pgdown
IF r2 = 75 THEN h = h - 1: IF h < 1 AND v > v1 THEN h = co: v = v - 1: GOTO pl2 'gauche
IF r2 = 83 THEN 'suppr doit concerner seulement les espaces
esp$ = MID$(m$, lc, 1)
IF esp$ <> CHR$(32) THEN
BEEP
ELSE
m$ = MID$(m$, 1, lc - 1) + MID$(m$, lc + 1)
GOTO pl0
END IF
END IF
GOTO pl2

END SUB

DEFINT A-Z
SUB quitter (fond)
'27/10/95 ok
DIM c(80), x$(80)
F = 0
'on mémorise la zone quitter
LOCATE 23, 1, 0
COLOR blanc, x
FOR i = 1 TO 80
x$(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)
MouseShow
LOCATE 23, 40 + 1 - 13
BEEP: PRINT "Quitter ";
CALL ouinon(r$)
IF r$ = "O" THEN COLOR , 0: CLS : RUN "exo_fr1"

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

DEFINT A-Z
SUB recupere (m$)
'pour sub espace
'13/5/94
'recuperation texte
COLOR , noir: CALL efface(23, 1)
COLOR , bleu
m$ = ""
FOR y = 9 TO 16
FOR x = 1 TO 80
s = SCREEN(y, x)
m$ = m$ + CHR$(s)
NEXT x
NEXT y
FOR x = 1 TO 38
s = SCREEN(17, x)
m$ = m$ + CHR$(s)
NEXT

IF LEFT$(m$, 355) = SPACE$(355) THEN m$ = CHR$(255): EXIT SUB
m$ = RTRIM$(m$): m$ = LTRIM$(m$)
ASS = ASC(RIGHT$(m$, 1))
IF ASS = 33 OR ASS = 46 OR ASS = 58 OR ASS = 59 OR ASS = 63 THEN
m$ = m$ + " "
ELSE
m$ = m$ + ". "
END IF

END SUB

DEFINT A-Z
SUB resultats (re, ni, nbniv)

tit$ = titr$
titr$ = "Résultats"
CALL titre

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)")

END SUB

DEFINT A-Z
SUB Solution (sol$)
BEEP
COLOR , noir
LOCATE 23, 1: PRINT SPACE$(80)
CALL centre(23, rougeclair, "Solution : " + sol$)
CALL attendre(2)
LOCATE 23, 1: PRINT SPACE$(80)
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: h3 = 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 , h3: 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 ()
MouseShow
COLOR , noir, noir: CLS
LOCATE 2
COLOR , vert: PRINT SPACE$(80)
CALL centre(2, noir, titr$)

LOCATE 21, 1: PRINT SPACE$(80)
VIEW PRINT 3 TO 20: COLOR blancbrill, bleu: CLS 2: VIEW PRINT

END SUB

DEFINT A-Z
SUB tri (n$(), no)
FOR i = 1 TO no - 1
m = 0
FOR j = 1 TO no - i
IF n$(j + 1) < n$(j) THEN SWAP n$(j), n$(j + 1)
m = 1
NEXT j
IF m = 0 THEN EXIT FOR
NEXT i

END SUB

DEFINT A-Z
SUB trouvemot (m$, m$(), nm)

jl = 1: mm$ = ""
FOR il = 1 TO LEN(m$)
mm$ = mm$ + MID$(m$, il, 1)
IF ASC(MID$(m$, il, 1)) = 32 THEN m$(jl) = MID$(mm$, 1, LEN(mm$) - 1): mm$ = "": jl = jl + 1: IF LEN(m$(jl - 1)) = 0 THEN jl = jl - 1
NEXT
nm = jl - 1

END SUB
 

  

DECLARE SUB niv (limit%, xx%)
DECLARE SUB lettres (fond%)
DECLARE SUB quitter (fond%)
DECLARE SUB afficheformate (m$(), nm%)
DECLARE SUB attendre (tx!)
DECLARE SUB centre (v%, cc%, ph$)
DECLARE SUB entree (x%, y%)
DECLARE SUB erreur2 (tx!)
DECLARE SUB Exact ()
DECLARE SUB exact2 (tx!)
DECLARE SUB fleches (v%, h%, w$(), np%, r%, coul%, drap%, v2%, h3%)
DECLARE SUB getinvi (rr%)
DECLARE SUB inputgen (nl%, r$, deb%, fin%, x%, y%)
DECLARE SUB ligne23 (x%, y%)
DECLARE SUB niveau (r%, np%)
DECLARE SUB resultats (re%, ni%, nbniv%)
DECLARE SUB Solution (sol$)
DECLARE SUB titre ()
DECLARE SUB tri (n$(), no%)
DECLARE SUB trouvemot (m$, m$(), nm%)
DECLARE SUB cadre (v%, h%, l%, nli%, c%)
DECLARE SUB consigne (nl%, w$, z$, y$)
DECLARE SUB getinvimouse (rr%)
DECLARE SUB ouinon (r$)
DECLARE SUB MouseHide ()
'Français CE module 2
'Daniel CLERC
'7/2/94


DEFINT A-Z
SUB alphabet (re%, ni%, rt$, gg$, pre$, titr$, prog%, nom$, noir%, bleu%, vert%, rouge%, marron%, blanc%, vertclair%, cyanclair%, rougeclair%, jaune%, blancbrill%)
'16/3/94
alpha$ = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
er = 0: juste = 0: aide = 0


w$ = "Tu vas devoir taper les 26 lettres"
z$ = "de l'alphabet dans le bon ordre."
CALL consigne(2, w$, z$, y$)

MouseHide

CALL titre
'mémorisation
COLOR , noir
CALL centre(23, blanc, "Mémorise l'alphabet")
CALL cadre(9, 10, 60, 4, blanc)
COLOR , blanc
CALL centre(10, noir, "a b c d e f g h i j k l m n o p q r s t u v w x y z")
CALL centre(12, noir, UCASE$("a b c d e f g h i j k l m n o p q r s t u v w x y z"))
CALL getinvimouse(w)

CALL titre
CALL cadre(8, 2, 76, 6, blanc)
COLOR jaune, blanc
'points

colonne = 1
FOR i = 1 TO 26
LOCATE 10, 2 + colonne: PRINT "█"
LOCATE 12, 2 + colonne: PRINT "█"
colonne = colonne + 3
NEXT

colonne = 1
FOR ii = 1 TO 26
COLOR noir, vert
LOCATE 21, 77: PRINT 27 - ii
COLOR blancbrill, blanc

LOCATE 10, 2 + colonne
PRINT "■"
LOCATE 12, 2 + colonne
PRINT "■"
al1:
COLOR , noir: CALL centre(23, blanc, "Tape la lettre n°" + LTRIM$(STR$(ii)))

COLOR noir, blanc
DO
DEF SEG = 0
POKE 1050, PEEK(1052)
DEF SEG
DO
r$ = INKEY$
LOOP WHILE r$ = ""
IF LEN(r$) < 2 THEN r = ASC(r$) ELSE BEEP: r = 0

IF r = 27 THEN
CALL quitter(blanc): r = 0
END IF

LOOP WHILE r = 0

IF (r > 64 AND r < 91) OR (r > 96 AND r < 123) THEN
IF r > 96 THEN r = r - 32
COLOR noir
LOCATE 10, 2 + colonne
PRINT CHR$(r)
LOCATE 12, 2 + colonne
PRINT CHR$(r + 32)

COLOR , noir

'test si juste
IF r = ASC(MID$(alpha$, ii, 1)) THEN
CALL centre(23, jaune, " Exact ")
COLOR blancbrill
CALL attendre(.3)
IF er = 0 THEN juste = juste + 1
colonne = colonne + 3
ELSE
BEEP
CALL centre(23, rougeclair, " Erreur ")
CALL attendre(.8)
COLOR rouge, blanc
LOCATE 10, 2 + colonne
PRINT CHR$(r)
LOCATE 12, 2 + colonne
PRINT CHR$(r + 32)
LOCATE 13, 2 + colonne: PRINT CHR$(4)
er = er + 1
IF er > 1 THEN aide = 1
IF aide = 1 THEN GOSUB alphaaide
GOTO al1
END IF

ELSE
BEEP
COLOR , noir
CALL centre(23, rougeclair, " Des lettres ! ")
CALL attendre(2)
GOTO al1
END IF

er = 0
NEXT ii

LOCATE 23, 1: PRINT SPACE$(80): CALL entree(noir, noir)

re = juste - 16: IF re < 0 THEN re = 0

CALL resultats(re, 1, 1)

EXIT SUB

alphaaide:
COLOR , bleu
CALL centre(16, rougeclair, "Mémorise l'alphabet :")
LOCATE 18, 13: COLOR jaune: PRINT "a b c d e f g h i j k l m n o p q r s t u v w x y z"
COLOR vertclair: LOCATE 18, 11 + ii * 2: PRINT LCASE$(MID$(alpha$, ii, 1))
LOCATE 19, 11 + ii * 2: PRINT "-"
COLOR , noir: LOCATE 23, 1: PRINT SPACE$(80)
CALL entree(noir, bleu)
COLOR , bleu
LOCATE 16
FOR i = 1 TO 4
PRINT SPACE$(80)
NEXT
RETURN

END SUB

DEFINT A-Z
SUB classement (re%, ni%, mo2$(), rt$, gg$, pre$, titr$, prog%, nom$, noir%, bleu%, vert%, rouge%, marron%, blanc%, vertclair%, cyanclair%, rougeclair%, jaune%, blancbrill%)
'23/5/94
DIM mo$(6), z(6), r%(6), z$(6)
nm = 102: cc = 0: pt = 0

'presentation
w$ = "Tu vas trier 6 mots"
z$ = "en ordre alphabétique."
CALL consigne(2, w$, z$, y$)

'niveau
CALL niveau(ni, 2)
IF ni = 1 THEN le = 7 ELSE le = 9

CALL titre
MouseHide
'tirage
FOR ii = 1 TO 6
DO
DO
f = 0
z(ii) = INT(RND * nm) + 1
FOR j = 1 TO ii - 1
IF z(ii) = z(j) THEN f = 1: EXIT FOR
NEXT

IF ni = 1 THEN
z$(ii) = LEFT$(mo2$(z(ii)), 1)

f2 = 0
FOR k = 1 TO ii - 1
IF z$(ii) = z$(k) THEN f2 = 1: EXIT FOR
NEXT k
END IF
LOOP WHILE f = 1 OR f2 = 1

LOOP WHILE LEN(mo2$(z(ii))) > le

mo$(ii) = mo2$(z(ii))
r%(ii) = ii
NEXT ii

'affichage
CALL cadre(5, 20, 16, 14, rouge)
COLOR jaune, rouge
LOCATE 7
FOR i = 1 TO 6
LOCATE , 26: PRINT mo$(i): PRINT
NEXT

'tri
FOR i = 1 TO 5
m = 0
FOR j = 1 TO 6 - i
IF mo$(j + 1) < mo$(j) THEN SWAP mo$(j), mo$(j + 1): SWAP r%(j), r%(j + 1)
m = 1
NEXT j
IF m = 0 THEN EXIT FOR
NEXT i

CALL cadre(5, 44, 16, 14, blanc)
c = 7
LOCATE c: COLOR noir, blanc
FOR j = 1 TO 6
LOCATE , 45: PRINT RTRIM$(STR$(j)); "-": PRINT
NEXT

FOR ii = 1 TO 6 '++++++++++++++++
CALL niv(6, ii)

cla3:
COLOR , noir
LOCATE 23, 1: PRINT SPACE$(80)
CALL centre(23, blanc, "Tape le mot n°" + LTRIM$(STR$(ii)))

COLOR noir, blanc
LOCATE c, 49
DEF SEG = 0
POKE &H417, (PEEK(&H417) AND &HBF) 'minus
DEF SEG

CALL inputgen(12, r$, 65, 163, noir, blanc)
re$ = r$
er = 0
COLOR , noir: LOCATE 23, 1: PRINT SPACE$(80)
FOR x = 1 TO 6
IF mo$(x) <> re$ THEN er = er + 1
NEXT
IF er = 6 THEN BEEP: CALL centre(23, rougeclair, "Ce mot n'est pas dans la liste."): CALL attendre(2): LOCATE 23, 1: PRINT SPACE$(80): GOTO cla3

IF re$ <> mo$(ii) THEN
cc = cc + 1
IF cc >= 2 THEN
BEEP
CALL Solution(mo$(ii))
ELSE
CALL erreur2(1)
END IF
GOTO cla3
ELSE
CALL exact2(1)
COLOR , rouge
LOCATE ((r%(ii) - 1) * 2) + 7, 24
IF cc = 0 THEN COLOR vertclair ELSE COLOR rougeclair
PRINT CHR$(4): COLOR blancbrill
c = c + 2
IF cc = 0 THEN pt = pt + 2
cc = 0
END IF
NEXT ii
CALL ligne23(noir, noir)
CALL entree(noir, noir)

re = pt - 2: IF re < 0 THEN re = 0

CALL resultats(re, ni, 2)

END SUB

DEFINT A-Z
SUB copietexte (re, ni, te$(), ti$(), rt$, gg$, pre$, titr$, noir, bleu, vert, rouge, marron, blanc, vertclair, cyanclair, rougeclair, jaune, blancbrill)
'6/10/94
DIM m$(40), re$(200)

er = 0

CALL titre
CALL cadre(5, 25, 30, 2, vert)
COLOR , vert
CALL centre(6, blancbrill, "Choix du texte")
COLOR blancbrill, bleu
CALL fleches(10, 28, ti$(), 4, ni, rouge, 1, 23, 35)


m$ = te$(ni)
nbcar = LEN(m$)

CALL titre
CALL niv(1, 1)
CALL trouvemot(m$, m$(), nm)
LOCATE 7, , 0: COLOR jaune, bleu
CALL afficheformate(m$(), nm)
LOCATE 11
COLOR rouge
PRINT STRING$(80, "_")

copie0:
FOR nl = 1 TO 5
IF SCREEN(nl + 6, 1) = 32 THEN EXIT FOR
NEXT

COLOR , blanc: LOCATE 14, 1: FOR jj = 1 TO nl + 1: PRINT SPACE$(80): NEXT
LOCATE 15, 1
COLOR noir
FOR jx = 1 TO nl * 80
c = jx MOD 80

IF c = 0 THEN
c = 80
ELSE
v = INT(jx / 80) + 7
END IF

IF SCREEN(v, c) = 32 THEN
PRINT " ";
ELSE
PRINT ".";
END IF
NEXT jx

CALL ligne23(noir, bleu)
COLOR noir, blanc
vb = 8
'saisie
DEF SEG = 0
POKE 1050, PEEK(1052)
DEF SEG
LOCATE 14, 1, 1

FOR ii = 1 TO nbcar

ligne = CSRLIN
colonne = POS(0)

IF colonne < 80 THEN
IF SCREEN(ligne - vb, colonne) = 32 AND SCREEN(ligne - vb, colonne + 1) = 32 THEN
colonne = 1: ligne = ligne + 1
nbcar = nbcar - 1
END IF
END IF

IF colonne = 80 THEN
IF SCREEN(ligne - vb, 80) = 32 THEN
colonne = 1: ligne = ligne + 1
nbcar = nbcar - 1
ELSE
nbcar = nbcar - 1
END IF
END IF

IF ii > nbcar THEN EXIT FOR
copie1:
DEF SEG = 0
POKE &H417, (PEEK(&H417) AND &H9F)'non numérique
IF ni > 1 THEN
POKE &H417, (PEEK(&H417) AND &HBF) 'minus
ELSE
POKE &H417, (PEEK(&H417) OR &H40)'MAJ
END IF
DEF SEG

LOCATE ligne, colonne, 1
DO
re$(ii) = INKEY$
LOOP WHILE re$(ii) = ""

IF ASC(re$(ii)) = 27 THEN CALL quitter(blanc): COLOR noir: GOTO copie1
IF LEN(re$(ii)) = 2 THEN BEEP: GOTO copie1
IF ASC(re$(ii)) = 8 THEN BEEP: GOTO copie1
IF re$(ii) = "?" THEN re$(ii) = ","
IF re$(ii) = ";" THEN re$(ii) = "."
IF re$(ii) = "/" THEN re$(ii) = ":"
IF re$(ii) = "4" THEN re$(ii) = "'"


PRINT re$(ii);
'analyse
IF ii > 1 THEN
IF ASC(re$(ii - 1)) = 32 AND ASC(re$(ii)) = 32 THEN LOCATE , colonne: PRINT "."; : GOTO copie1
END IF
IF colonne = 1 AND ASC(re$(ii)) = 32 THEN
LOCATE , 1: PRINT "."; : GOTO copie1
END IF
'test

IF re$(ii) = LCASE$(CHR$(SCREEN(ligne - vb, colonne))) OR re$(ii) = CHR$(SCREEN(ligne - vb, colonne)) OR re$(ii) = UCASE$(CHR$(SCREEN(ligne - vb, colonne))) THEN
erreurs = 0
ELSE
erreurs = erreurs + 1
END IF

IF erreurs <> 0 THEN
COLOR rouge: LOCATE ligne, colonne: PRINT re$(ii)
COLOR , noir: BEEP: CALL erreur2(1)
IF SCREEN(ligne - vb, colonne) > 64 AND erreurs = 1 THEN
er = er + 1
END IF

COLOR noir, blanc
GOTO copie1
END IF
erreurs = 0

NEXT ii

PRINT
COLOR , noir: LOCATE 23, 1, 0: PRINT SPACE$(80): CALL entree(noir, noir)

re = 10 - INT(er): IF re < 0 THEN re = 0

CALL resultats(re, ni, 2)

END SUB

DEFINT A-Z
SUB devine (re%, ni%, motdevine$(), rt$, gg$, pre$, titr$, prog%, nom$, noir%, bleu%, vert%, rouge%, marron%, blanc%, vertclair%, cyanclair%, rougeclair%, jaune%, blancbrill%)
'23/2/97

DIM p$(3), mot$(550), z(10), lettre$(26)
lp$ = STRING$(10, ".")
p$(1) = "Les jours": p$(2) = "Les mois": p$(3) = "Les mots"

'présentation
w$ = "Tu vas deviner un mot."
z$ = "Conseil : cherche d'abord les voyelles."
CALL consigne(2, w$, z$, y$)

'niveau
CALL titre
CALL cadre(7, 25, 30, 2, vert)
COLOR , vert
CALL centre(8, blancbrill, "Niveau de difficulté")
CALL fleches(13, 40 - 4, p$(), 3, ni, rouge, 1, 23, 35)

'affectation des mots en fonction du niveau ++++++++
IF ni = 3 THEN
OPEN "mots1.dat" FOR INPUT AS #1
i = 1
DO UNTIL EOF(1)
INPUT #1, mot$(i)
i = i + 1
LOOP
CLOSE #1
nf = i - 1 'il y a 515 mots dans mots1.dat

FOR ii = 1 TO 10
DO
DO
DO
f = 0
z(ii) = INT(RND * nf) + 1
FOR j = 1 TO ii - 1
IF z(ii) = z(j) THEN f = 1: EXIT FOR
NEXT
LOOP WHILE f = 1
nn = z(ii)
LOOP WHILE LEN(mot$(nn)) < 4 OR LEN(mot$(nn)) > 8
mot$(ii) = LCASE$(LTRIM$(RTRIM$(mot$(nn))))

'accents, espace, tirets et guillemets
z = 0
FOR x = 1 TO LEN(mot$(ii))
z$ = MID$(mot$(ii), x, 1)
IF z$ = "ù" OR z$ = "à" OR z$ = "é" OR z$ = "è" OR z$ = "ç" OR z$ = "'" OR z$ = " " OR z$ = "-" OR z$ = "î" OR z$ = "ô" OR z$ = "â" OR z$ = "û" OR z$ = "ê" THEN z = 1: EXIT FOR
NEXT

LOOP WHILE z = 1

mot$(ii) = UCASE$(mot$(ii))
NEXT

nf = 10

ELSEIF ni = 1 THEN
titr$ = "Devine les jours"
FOR i = 1 TO 7: mot$(i) = UCASE$(motdevine$(i)): NEXT
nf = 7
ELSEIF ni = 2 THEN
titr$ = "Devine les mois"
j = 1
FOR i = 8 TO 16
mot$(j) = UCASE$(motdevine$(i))
j = j + 1
NEXT
nf = 8
END IF '+++++++++++++++++++

FOR i = 1 TO 10: z(i) = 0: NEXT
'prg principal
ct = 0


FOR ii = 1 TO 5 '++++++++++++++++++++++++++
CALL titre

IF ni = 3 THEN
GOSUB liste
CALL titre
END IF
CALL cadre(10, 28, 24, 4, blanc)
COLOR , blanc

CALL niv(5, ii)

CALL cadre(16, 28, 24, 2, vert)
compteur = 0: boucle = 1: boucle2 = 1

'tirage des mots
DO
f = 0
z(ii) = INT(RND * nf) + 1
FOR j = 1 TO ii - 1
IF z(ii) = z(j) THEN f = 1: EXIT FOR
NEXT
LOOP WHILE f = 1
nn = z(ii)
mot$ = mot$(nn)

limite = LEN(mot$) + 3: IF ni = 3 THEN limite = limite + 6

mot2$ = MID$(lp$, 1, LEN(mot$))

FOR x = 1 TO LEN(mot$)
IF MID$(mot$, x, 1) = "é" THEN mot$ = MID$(mot$, 1, x - 1) + "E" + MID$(mot$, x + 1)
IF MID$(mot$, x, 1) = "è" THEN mot$ = MID$(mot$, 1, x - 1) + "E" + MID$(mot$, x + 1)
IF MID$(mot$, x, 1) = "ç" THEN mot$ = MID$(mot$, 1, x - 1) + "C" + MID$(mot$, x + 1)
IF MID$(mot$, x, 1) = "ù" THEN mot$ = MID$(mot$, 1, x - 1) + "U" + MID$(mot$, x + 1)
IF MID$(mot$, x, 1) = "à" THEN mot$ = MID$(mot$, 1, x - 1) + "A" + MID$(mot$, x + 1)
NEXT

CALL ligne23(noir, noir)
COLOR , blanc: CALL centre(12, noir, mot2$): COLOR blancbrill
'saisie
DO
devine1:
CALL cadre(5, 28, 24, 2, rouge)
COLOR , rouge
IF limite - boucle2 > 1 THEN
CALL centre(6, blancbrill, LTRIM$(STR$(limite - boucle2)) + " essais")
ELSE
CALL centre(6, blancbrill, "Dernier essai")
END IF

DO
COLOR , noir: CALL centre(23, blanc, "Tape une lettre")
COLOR blancbrill
DEF SEG = 0
POKE 1050, PEEK(1052)
DEF SEG
DO
r$ = INKEY$
LOOP WHILE r$ = ""
IF LEN(r$) < 2 THEN r = ASC(r$) ELSE BEEP: r = 0
IF r = 27 THEN CALL quitter(blanc): COLOR , bleu: r = 0
LOOP WHILE r = 0

IF CHR$(r) = "é" THEN r = ASC("e")
IF CHR$(r) = "è" THEN r = ASC("e")
IF CHR$(r) = "ç" THEN r = ASC("c")
IF CHR$(r) = "ù" THEN r = ASC("u")
IF CHR$(r) = "à" THEN r = ASC("a")


IF (r > 64 AND r < 91) OR (r > 96 AND r < 123) THEN
IF r > 96 THEN r = r - 32

'tester si lettre pas encore proposée
f = 0
FOR j = 1 TO boucle - 1
IF lettre$(j) = CHR$(r) THEN f = 1: EXIT FOR
NEXT
IF f = 1 THEN
BEEP: COLOR , noir
CALL centre(23, rougeclair, "Lettre déjà proposée"): CALL attendre(.7)
LOCATE 23: PRINT SPACE$(80)
GOTO devine1
END IF

COLOR , noir
s2 = 1
DO
s = INSTR(s2, mot$, CHR$(r))
IF s <> 0 THEN
mot2$ = MID$(mot2$, 1, s - 1) + CHR$(r) + MID$(mot2$, s + 1)
COLOR , blanc: CALL centre(12, noir, mot2$): COLOR blancbrill
s2 = s + 1
compteur = compteur + 1
IF boucle + 1 >= limite THEN boucle2 = boucle2 - 1 'dernier essai juste
END IF
LOOP WHILE s <> 0

ELSE
CALL lettres(bleu)
GOTO devine1
END IF

lettre$(boucle) = CHR$(r)

'afficher les lettres utilisées
m$ = ""
FOR i = 1 TO boucle
m$ = m$ + " " + lettre$(i)
NEXT
m$ = RTRIM$(m$): m$ = LTRIM$(m$)
IF LEN(m$) > 24 THEN
CALL cadre(16, INT(41 - LEN(m$) / 2) - 2, LEN(m$) + 2, 2, vert)
END IF
COLOR , vert
CALL centre(17, blancbrill, m$)

boucle = boucle + 1
boucle2 = boucle2 + 1

IF boucle2 = limite THEN
BEEP
ct = ct + 2
COLOR , bleu
LOCATE 4, 1: FOR i = 1 TO 4: PRINT SPACE$(80): NEXT
CALL cadre(10, 28, 24, 4, rouge)
COLOR , rouge: CALL centre(12, blanc, mot$)
COLOR , noir
LOCATE 23: PRINT SPACE$(80)
CALL centre(23, rougeclair, "Solution")
COLOR , bleu
CALL getinvimouse(r)
EXIT DO
END IF

IF compteur = LEN(mot$) THEN
COLOR blancbrill, bleu
LOCATE 4, 1: FOR i = 1 TO 4: PRINT SPACE$(80): NEXT
LOCATE 16, 1: FOR i = 1 TO 4: PRINT SPACE$(80): NEXT
COLOR , noir
LOCATE 23: PRINT SPACE$(80)
CALL exact2(1)
CALL entree(noir, noir)
EXIT DO
END IF

LOOP

NEXT ii '+++++++++++++++++++++++++++

re = INT(10 - ct)

IF re < 0 THEN re = 0
CALL resultats(re, ni, 3)

EXIT SUB

liste:
CALL titre
CALL cadre(6, 33, 14, 11, marron)

LOCATE 7: COLOR blancbrill, marron
FOR i = 1 TO 10
LOCATE , 37: PRINT mot$(i)
NEXT

LOCATE 23: COLOR , noir
CALL centre(23, blanc, "Le mot à deviner est dans cette liste.")
CALL getinvimouse(z)
RETURN
END SUB

DEFINT A-Z
SUB lecrap (re%, ni%, mo2$(), rt$, gg$, pre$, titr$, prog%, nom$, noir%, bleu%, vert%, rouge%, marron%, blanc%, vertclair%, cyanclair%, rougeclair%, jaune%, blancbrill%)
'23/5/94
DIM v$(3), p$(6), a(6)
v$(3) = "rapide": v$(2) = "normale": v$(1) = "lente"
c = 0: b = 1: da = 1
lp$ = STRING$(30, ".")

GOSUB lecpres
flag = 0

'niveau

CALL titre
CALL cadre(7, 25, 30, 2, vert)
COLOR , vert
CALL centre(8, blancbrill, "Choix de la vitesse")
CALL fleches(12, 37, v$(), 3, rep, rouge, 1, 23, 35)
SELECT CASE rep
CASE 1
ni = 1
CASE 2
ni = 2
CASE 3
ni = 3
END SELECT


vit = ni
GOSUB lectx
xx = INT(RND * 2)
ct = 0
DO
IF xx = 1 THEN b = 7 ELSE b = 31
GOSUB lec1
GOSUB lecctrl1
LOOP WHILE c > 2

xx = INT(RND * 2)
DO
IF xx = 1 THEN b = 55 ELSE b = 79
GOSUB lec2
GOSUB lecctrl1
LOOP WHILE c > 2

re = 10 - ct: IF re < 0 THEN re = 0
CALL resultats(re, ni, 3)

EXIT SUB

lecpres:
w$ = "5 mots vont s'afficher à l'écran."
z$ = "Tu devras trouver celui que tu n'as"
y$ = "pas vu parmi une liste de 6 mots."
CALL consigne(3, w$, z$, y$)

DO
COLOR , noir
CALL centre(23, blanc, "Tape [E] pour un exemple sinon " + rt$)
CALL getinvi(rr): IF rr = 27 THEN CALL quitter(noir)
LOOP WHILE r = 27
IF UCASE$(CHR$(rr)) <> "E" THEN RETURN
flag = 1

CALL titre
CALL cadre(11, 30, 20, 2, marron)
COLOR , marron
CALL centre(12, blancbrill, "Un exemple")
CALL attendre(1.3)
COLOR blancbrill, bleu
tx! = .3
lec0:
FOR i = 1 TO 5
CALL cadre(10, 30, 20, 4, blanc)
COLOR , blanc
CALL centre(12, noir, LEFT$(lp$, LEN(mo2$(i))))
CALL attendre(.3)
CALL centre(12, noir, mo2$(i))
CALL attendre(tx!)
NEXT
CALL attendre(.7)
CALL titre
COLOR , noir: CALL centre(23, blanc, gg$): COLOR vertclair, bleu
CALL centre(5, blanc, "Parmi ces mots, il y en a un")
CALL centre(6, blanc, "que tu n'as pas lu. Lequel ?")

GOSUB lecchoiaf
CALL ligne23(noir, noir)
IF a(r) <> 5 THEN CALL centre(23, blanc, "On va recommencer plus doucement..."): tx! = tx! + .3: CALL attendre(2): CALL titre: GOTO lec0
CALL centre(23, jaune, "Tu as compris !")
CALL attendre(2)
RETURN

lec1:
c = 0
CALL titre
CALL cadre(11, 20, 40, 2, marron)
COLOR , marron

CALL centre(12, blancbrill, "Mots au milieu de l'écran"): COLOR blancbrill
CALL attendre(tx! * 2)
DO
CALL titre
COLOR , noir
CALL centre(23, blanc, "Vitesse " + v$(rep))
CALL niv(4, da)
CALL attendre(.3)
FOR i = b TO b + 4
CALL cadre(10, 30, 20, 4, blanc)
COLOR , blanc
CALL centre(12, noir, LEFT$(lp$, LEN(mo2$(i))))
CALL attendre(.3)
CALL centre(12, noir, mo2$(i))
CALL attendre(tx!)
NEXT
GOSUB lecresult
LOOP WHILE da < 5
RETURN

lec2:
c = 0
CALL titre
CALL cadre(11, 20, 40, 2, marron)
COLOR , marron
CALL centre(12, blancbrill, "Mots sur tout l'écran"): COLOR blancbrill
CALL attendre(tx! * 2)
DO
CALL titre
COLOR , noir
CALL centre(23, blanc, "Vitesse " + v$(rep))
CALL niv(4, da)
CALL attendre(.3)
FOR i = b TO b + 4
CALL cadre(5, 8, 64, 14, blanc)
COLOR , blanc
n = LEN(mo2$(i))
ht = INT(RND * (59 - n) + 10)
vt = INT(RND * 8) + 6
COLOR noir: LOCATE vt, ht: PRINT LEFT$(lp$, n)
CALL attendre(.3)
LOCATE vt, ht: PRINT mo2$(i)
CALL attendre(tx!)
NEXT i

GOSUB lecresult
LOOP WHILE da < 5
RETURN

lecctrl1:
da = 1
CALL titre
CALL cadre(11, 30, 20, 2, vert)
COLOR , vert
IF c = 0 AND vit = 3 THEN
CALL centre(12, 15, "Tout juste !")
ELSEIF c = 0 THEN
CALL centre(12, 15, "Tout juste !")
vit = vit + 1: GOSUB lectx
ELSEIF c = 1 THEN
CALL centre(12, 15, "Trois bonnes réponses")
ELSEIF c = 2 AND vit = 3 THEN
CALL centre(12, 15, "Deux bonnes réponses")
vit = 2: GOSUB lectx
ELSEIF c = 2 THEN
CALL centre(12, 15, "Deux bonnes réponses")
ELSE
CALL cadre(10, 20, 40, 4, rouge)
COLOR , rouge

CALL centre(11, 15, "Tu as fait trop d'erreurs...")
CALL centre(13, 15, "Tu vas recommencer la même série.")
vit = 1: GOSUB lectx
ct = ct - c
END IF
COLOR , noir: CALL entree(noir, noir)
RETURN

lecchoiaf:
CALL niv(4, da)
DEF SEG = 0
POKE 1050, PEEK(1052)
DEF SEG

z = INT(RND * 6) + 1
SELECT CASE z
CASE 1
a(1) = 1: a(2) = 5: a(3) = 3: a(4) = 4: a(5) = 2: a(6) = 0
CASE 2
a(1) = 2: a(2) = 0: a(3) = 4: a(4) = 5: a(5) = 3: a(6) = 1
CASE 3
a(1) = 3: a(2) = 1: a(3) = 5: a(4) = 0: a(5) = 4: a(6) = 2
CASE 4
a(1) = 4: a(2) = 2: a(3) = 0: a(4) = 1: a(5) = 5: a(6) = 3
CASE 5
a(1) = 5: a(2) = 3: a(3) = 1: a(4) = 2: a(5) = 0: a(6) = 4
CASE 6
a(1) = 0: a(2) = 4: a(3) = 2: a(4) = 3: a(5) = 1: a(6) = 5
END SELECT
FOR i = 1 TO 6: p$(i) = mo2$(b + a(i)): NEXT
IF flag = 0 THEN
CALL cadre(4, 20, 40, 2, marron)
COLOR , marron
CALL centre(5, blancbrill, "Choisis le mot que tu n'as pas vu.")
END IF

'trouver longueur mot max
l2 = 0
FOR i = 1 TO 6
l1 = LEN(p$(i)): IF l2 < l1 THEN l2 = l1
NEXT
h = INT(40 + 1 - (l2 / 2))

CALL fleches(9, h, p$(), 6, r, rouge, 1, 23, 35)
RETURN

lecresult:
CALL titre
GOSUB lecchoiaf
CALL ligne23(noir, noir)
IF a(r) = 5 THEN
CALL exact2(.7)
ELSE
'CALL Solution(mo2$(b + 5))
CALL erreur2(1)
c = c + 1
ct = ct + 1
END IF
b = b + 6: da = da + 1
RETURN

lectx:
IF vit = 1 THEN tx! = 1
IF vit = 2 THEN tx! = .75
IF vit = 3 THEN tx! = .5
RETURN

END SUB

DEFINT A-Z
SUB ortho (re%, ni%, motorth$(), rt$, gg$, pre$, titr$, prog%, nom$, noir%, bleu%, vert%, rouge%, marron%, blanc%, vertclair%, cyanclair%, rougeclair%, jaune%, blancbrill%)
'24/12/97
DIM p$(4), p2$(5), mot$(12), z(20)

p2$(1) = "très lente": p2$(2) = "lente": p2$(3) = "moyenne"
p2$(4) = "rapide": p2$(5) = "très rapide"
lp$ = STRING$(22, ".")
p$(1) = "Les jours": p$(2) = "Les mois"
p$(3) = "Les objets": p$(4) = "Les animaux"

'présentation
w$ = "L'ordinateur va afficher des mots."
z$ = "Tu les retaperas."
CALL consigne(2, w$, z$, y$)

'niveau

CALL titre
CALL cadre(7, 25, 30, 2, vert)
COLOR , vert
CALL centre(8, blancbrill, "Choix de la série")
CALL fleches(13, 40 - 4, p$(), 4, ni, rouge, 1, 23, 35)

vit = 3

'debut
c = 0: flag = 0: re = 10

CALL titre

IF ni = 1 THEN
dernier = 7
ELSEIF ni = 2 THEN
dernier = 12
ELSE
dernier = 10
END IF

IF ni = 1 THEN
FOR i = 1 TO 7 'jour
mot$(i) = motorth$(i)
NEXT
ELSEIF ni = 2 THEN
j = 1
FOR i = 8 TO 19 'mois
mot$(j) = motorth$(i)
j = j + 1
NEXT
ELSEIF ni = 3 THEN
j = 1
FOR i = 20 TO 29
mot$(j) = motorth$(i)
j = j + 1
NEXT
ELSEIF ni = 4 THEN
j = 1
FOR i = 30 TO 39
mot$(j) = motorth$(i)
j = j + 1
NEXT

END IF

'affichage des mots
CALL cadre(6, 33, 14, dernier + 1, marron)
COLOR blancbrill, marron
LOCATE 7
FOR i = 1 TO dernier
LOCATE , 35: PRINT mot$(i)
NEXT
COLOR , noir
CALL centre(23, blanc, "Mémorise l'orthographe des mots")
CALL getinvimouse(w)


FOR ii = 1 TO dernier '+++++++++++++++++++++++++++++
'prg principal
CALL titre
CALL cadre(10, 29, 22, 4, blanc)

s$ = mot$(ii)

COLOR , blanc
CALL centre(12, noir, SPACE$(20))
or0:
CALL niv(dernier, ii)
CALL cadre(6, 29, 22, 2, vert)
COLOR , vert
CALL centre(7, blancbrill, "Vitesse " + p2$(vit))
CALL attendre(.5)

COLOR , blanc

IF flag = 0 THEN
SELECT CASE ii
CASE 1, 3, 5, 7, 9, 11
CALL centre(12, noir, s$)
CALL attendre(4 / vit)

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

ELSE
CALL centre(12, noir, s$)
CALL attendre(5 / vit)

END IF

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)
COLOR , blanc
CALL centre(12, noir, p$)
COLOR , noir
CALL centre(23, blanc, "Tape le mot")
nl = LEN(s$)
LOCATE 12, INT(40 + 1 - (LEN(s$) / 2))
DEF SEG = 0
POKE &H417, (PEEK(&H417) AND &HBF) 'minus
DEF SEG
CALL inputgen(nl, r$, 32, 165, noir, blanc)
COLOR , noir
LOCATE 23, 1: PRINT SPACE$(80): LOCATE 23, 1

IF r$ = s$ THEN
cc = cc + 1
CALL exact2(.7)
IF flag = 1 THEN re = re - 1
flag = 0
ELSE
CALL erreur2(1)
cc = 0: c = c + 1: flag = 1
IF c = 2 THEN c = 0: vit = vit - 1: IF vit < 1 THEN vit = 1

IF r$ = "aout" AND s$ = "août" THEN
BEEP
CALL centre(23, rougeclair, "Tu dois taper l'accent circonflexe...")
CALL centre(22, jaune, "û -> touches ^ puis u")
CALL attendre(1.5)
END IF

'_________________
'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
flag2 = 0
FOR i = 1 TO LEN(r$)
IF MID$(s$, i, 1) <> MID$(r$, i, 1) THEN
flag2 = flag2 + 1
END IF
NEXT

IF flag2 < 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)
'________________

CALL ligne23(noir, noir): GOTO or0
END IF

IF vit = 1 AND cc = 2 THEN vit = 2: cc = 0
IF vit = 2 AND cc = 2 THEN vit = 3: cc = 0
IF vit = 3 AND cc = 3 THEN vit = 4: cc = 0
IF vit = 4 AND cc = 3 THEN vit = 5: cc = 0
NEXT

CALL resultats(re, ni, 4)

END SUB

DEFINT A-Z
SUB recolle (re, ni, rt$, motrecolle$(), gg$, pre$, titr$, prog%, nom$, noir%, bleu%, vert%, rouge%, marron%, blanc%, vertclair%, cyanclair%, rougeclair%, jaune%, blancbrill%)
'13/12/96
DIM p$(3), h(15), r$(31), mot$(550), m$(20), m2$(20), z(12), x(15, 60)

zz = 0: ct = 0: re = 0
lim = 1
p$(1) = "Les jours": p$(2) = "Les mois": p$(3) = "Les mots"

w$ = "L'ordinateur va mélanger les lettres"
z$ = "d'un mot."
CALL consigne(2, w$, z$, y$)

CALL titre
CALL cadre(7, 25, 30, 2, vert)
COLOR , vert
CALL centre(8, blancbrill, "Niveau de difficulté")
CALL fleches(13, 40 - 4, p$(), 3, ni, rouge, 1, 23, 35)

IF ni = 1 THEN
dernier = 7
ELSEIF ni = 2 THEN
dernier = 12
ELSE
dernier = 5
END IF

CALL titre

IF ni = 3 THEN
OPEN "mots1.dat" FOR INPUT AS #1
i = 1
DO UNTIL EOF(1)
INPUT #1, mot$(i)
i = i + 1
LOOP
CLOSE #1

nf = i - 1

z = INT(RND * (nf - 150)) + 1

i = 1: pt = 1
DO
IF LEN(mot$(z + i)) < 8 THEN r$(pt) = LTRIM$(RTRIM$(mot$(z + i))): pt = pt + 1
i = i + 1
LOOP WHILE pt < 31
n2 = 29
'affichage des mots
CALL cadre(8, 5, 70, 6, marron)
COLOR blancbrill, marron
debut = 1: fin = 5: h = 10

DO
LOCATE 9
FOR i = debut TO fin
LOCATE , h: PRINT r$(i)
NEXT
debut = fin + 1
fin = fin + 5
h = h + 11
LOOP WHILE fin < 35

COLOR , noir
CALL centre(23, blanc, "Mémorise")
CALL getinvimouse(w)

ELSEIF ni = 1 THEN
FOR i = 1 TO 7: r$(i) = motrecolle$(i): NEXT
n2 = 7
ELSE
j = 1
FOR i = 8 TO 19
r$(j) = motrecolle$(i)
j = j + 1
NEXT
n2 = 12
END IF


FOR ll = 1 TO dernier '+++++++++++++++++++++++
CALL titre
CALL cadre(6, 22, 36, 9, rouge)
DO
f = 0
z(ll) = INT(RND * n2) + 1
FOR j = 1 TO ll - 1
IF z(ll) = z(j) THEN f = 1: EXIT FOR
NEXT
LOOP WHILE f = 1
nt = z(ll)

c = 0
'efface cadre
COLOR , noir
FOR ku = 7 TO 14
LOCATE ku, 23: PRINT SPACE$(36)
NEXT

FOR v = 6 TO 15
FOR h = 23 TO 56
x(v, h) = 0
NEXT h, v
cc = 0

FOR k = 1 TO LEN(r$(nt))

DO
h = INT(RND * 30) + 25
v = INT(RND * 6) + 8
IF cc = 0 THEN cc = 1: EXIT DO
LOOP WHILE x(v, h) = 1

x(v, h) = 1: x(v, h + 1) = 1: x(v, h + 2) = 1: x(v, h - 1) = 1: x(v, h - 2) = 1
x(v - 1, h) = 1: x(v + 1, h) = 1: x(v - 2, h) = 1: x(v + 2, h) = 1
x(v - 1, h - 1) = 1: x(v + 1, h - 1) = 1: x(v - 1, h + 1) = 1: x(v + 1, h + 1) = 1

LOCATE v, h: PRINT MID$(r$(nt), k, 1)

NEXT k

rec1:
CALL niv(dernier, ll)
COLOR , noir
LOCATE 23, 1: PRINT SPACE$(80)
CALL centre(23, blanc, "Tape le mot [*] = liste entière")
COLOR , bleu
nl = LEN(r$(nt))
h = INT(40 + 1 - (nl / 2))
'LOCATE 18, 1: PRINT SPACE$(80)
CALL cadre(17, 22, 36, 2, blanc)
COLOR , blanc
CALL centre(18, noir, STRING$(nl, "."))
LOCATE 18, h
CALL inputgen(nl, r$, 32, 163, noir, blanc)

COLOR , bleu
IF r$ = "*" THEN
GOSUB recaf
GOTO rec1
END IF

LOCATE 20, 1: PRINT SPACE$(80)

COLOR , noir
IF r$ <> r$(nt) THEN
LOCATE 23, 1: PRINT SPACE$(80)

IF r$ = "aout" AND r$(nt) = "août" THEN
BEEP
CALL centre(23, rougeclair, "Tu dois taper l'accent circonflexe...")
COLOR , bleu
CALL centre(20, jaune, "û -> touches ^ puis u")
CALL attendre(2)
GOTO rec1
END IF

IF c > 1 THEN
BEEP
LOCATE 23, 1: PRINT SPACE$(80)
CALL centre(23, rougeclair, "Solution : " + r$(nt))
CALL attendre(2)
LOCATE 23, 1: PRINT SPACE$(80)
GOTO rec1
END IF
c = c + 1

IF LEN(r$) < LEN(r$(nt)) THEN
w$ = "Tu as utilisé seulement " + LTRIM$(STR$(LEN(r$))) + " lettre"
IF LEN(r$) > 1 THEN w$ = w$ + "s."
CALL centre(23, rougeclair, w$)
ELSEIF LEN(r$) > LEN(r$(nt)) THEN
longueur$ = LTRIM$(STR$(LEN(r$) - LEN(r$(nt))))
w$ = "Tu as utilisé " + longueur$ + " lettre"
IF VAL(longueur$) > 1 THEN w$ = w$ + "s"
w$ = w$ + " en trop."
CALL centre(23, rougeclair, w$)
ELSE
FOR j = 1 TO LEN(r$)
m$(j) = MID$(r$(nt), j, 1)
m2$(j) = MID$(r$, j, 1)
NEXT
CALL tri(m$(), LEN(r$))
CALL tri(m2$(), LEN(r$))
m$ = "": m2$ = ""
FOR j = 1 TO LEN(r$)
m$ = m$ + m$(j)
m2$ = m2$ + m2$(j)
NEXT
IF m$ <> m2$ THEN
CALL centre(23, rougeclair, "Tu as tapé des lettres non proposées.")
ELSE
CALL centre(23, rougeclair, "Ce mot ne fait pas partie de la liste.")
c = 0
END IF
END IF
CALL attendre(2): GOTO rec1
ELSE
LOCATE 23, 1: PRINT SPACE$(80)
CALL centre(23, jaune, "Exact")
CALL attendre(.7)
LOCATE 23, 1: PRINT SPACE$(80)
IF c = 0 THEN re = re + 1
END IF
FOR n = 1 TO LEN(r$(nt))
h(n) = 0
NEXT

NEXT ll '++++++++++++++++++++++++

VIEW PRINT
SELECT CASE ni
CASE 1
re = re + 3
CASE 2
re = re - 2
CASE 3
re = re * 2
END SELECT

CALL resultats(re, ni, 3)

EXIT SUB

recaf:
COLOR blancbrill, noir
LOCATE 23, 1: PRINT SPACE$(80)
COLOR , bleu
LOCATE 16
FOR i = 1 TO 5
PRINT SPACE$(80)
NEXT
SELECT CASE ni
CASE 1
LOCATE 16
FOR i = 1 TO 4
LOCATE , 30: PRINT r$(i)
NEXT
LOCATE 16
FOR i = 5 TO 7
LOCATE , 45: PRINT r$(i)
NEXT

CASE 2
LOCATE 16
FOR i = 1 TO 4
LOCATE , 26: PRINT r$(i)
NEXT
LOCATE 16
FOR i = 5 TO 8
LOCATE , 37: PRINT r$(i)
NEXT
LOCATE 16
FOR i = 9 TO 12
LOCATE , 47: PRINT r$(i)
NEXT

CASE 3

debut = 1: fin = 5: h = 4
DO
LOCATE 16
FOR i = debut TO fin
LOCATE , h: PRINT r$(i)
NEXT
debut = fin + 1
fin = fin + 5
h = h + 13
LOOP WHILE fin < 35
END SELECT

COLOR blanc, noir

LOCATE 23, 37: PRINT rt$
CALL getinvimouse(w)
COLOR , bleu
LOCATE 16
FOR i = 1 TO 5
PRINT SPACE$(80)
NEXT

RETURN

END SUB

DEFINT A-Z
SUB trouvetemps (re, ni, tlt$(), tltv$(), rt$, gg$, pre$, titr$, prog%, nom$, noir%, bleu%, vert%, rouge%, marron%, blanc%, vertclair%, cyanclair%, rougeclair%, jaune%, blancbrill%)
'17/2/96
re = 0

DIM z(5), ve$(5), pp$(2)

w$ = "Une phrase va s'afficher."
z$ = "Tu devras choisir le verbe correct."
CALL consigne(2, w$, z$, y$)

'niveau
CALL niveau(ni, 2)

FOR ii = 1 TO 5 '+++++++++++++++++++++++++++

'tirage
DO
f = 0
IF ni = 1 THEN
z(ii) = INT(RND * 5) + 1
ELSE
z(ii) = INT(RND * 5) + 6
END IF
FOR j = 1 TO ii - 1
IF z(ii) = z(j) THEN f = 1: EXIT FOR
NEXT
LOOP WHILE f = 1
b = z(ii)

FOR i = 1 TO 5
ve$(i) = tltv$(i + ((b - 1) * 5))
NEXT
er = 0

DO

tlt1:

CALL titre
CALL niv(5, ii)
CALL cadre(6, 8, 64, 4, blanc)
COLOR , blanc
CALL centre(8, noir, tlt$(b))

CALL fleches(14, 37, ve$(), 4, rep, rouge, 1, 23, 35)

CALL titre

'afficher la phrase avec le verbe
ph$ = tlt$(b)
s = INSTR(1, ph$, "........") '8 points
ph$ = MID$(ph$, 1, s - 1) + ve$(rep) + MID$(ph$, s + 8)
CALL cadre(9, 8, 64, 4, blanc)
COLOR , blanc
CALL centre(11, noir, ph$)

CALL cadre(5, 30, 20, 2, marron)
COLOR , marron
CALL centre(6, blancbrill, "Est-ce correct ?")

pp$(1) = "oui"
pp$(2) = "non"
COLOR , noir
CALL centre(23, blanc, gg$)
CALL fleches(17, 39, pp$(), 2, r, rouge, 1, 23, 35)

SELECT CASE r
CASE 1
flag = 1
CASE 2
flag = 0
END SELECT

IF flag = 0 THEN
' call titre
GOTO tlt1
END IF

COLOR , noir
IF rep = VAL(ve$(5)) THEN
CALL exact2(1)
IF er = 0 THEN re = re + 2
EXIT DO
ELSE
CALL erreur2(.7)
er = er + 1
IF er > 1 THEN
CALL titre
BEEP
ph$ = tlt$(b)
s = INSTR(1, ph$, "........") '8 points
ph$ = MID$(ph$, 1, s - 1) + ve$(VAL(ve$(5))) + MID$(ph$, s + 8)
COLOR , noir
CALL centre(23, rougeclair, "Solution")
CALL cadre(9, 8, 64, 4, rouge)
COLOR , rouge
CALL centre(11, blancbrill, ph$)
CALL getinvimouse(w)
EXIT DO
END IF
END IF
LOOP

NEXT ii

CALL resultats(re, ni, 2)

END SUB
 

 

DECLARE SUB flechestrouvephrase (v%, h%, w$(), np%, r%, coul%, drap%, v2%, h3%)
DECLARE SUB niv (limit%, xx%)
DECLARE SUB attendre (tx!)
DECLARE SUB centre (v%, cc%, ph$)
DECLARE SUB erreur2 (tx!)
DECLARE SUB exact2 (tx!)
DECLARE SUB fleches (v%, h%, w$(), np%, r%, coul%, drap%, v2%, h3%)
DECLARE SUB niveau (r%, np%)
DECLARE SUB quitter (fond%)
DECLARE SUB resultats (re%, ni%, nbniv%)
DECLARE SUB Solution (sol$)
DECLARE SUB titre ()
DECLARE SUB cadre (v%, h%, l%, nli%, c%)
DECLARE SUB consigne (nl%, w$, z$, y$)
DECLARE SUB getinvimouse (rr%)
DECLARE SUB ouinon (r$)
'Français AAS CE module 3
'Daniel CLERC
'7/1/97


DEFINT A-Z
SUB ani (re, ni, rt$, gg$, pre$, titr$, noir, bleu, vert, rouge, marron, blanc, vertclair, cyanclair, rougeclair, jaune, blancbrill)
DIM ph$(10, 3), p$(3), z(10), r%(3), q$(3)
'8/5/94
re = 0
rep = 0

q$(1) = "déclarative."
q$(2) = "interrogative."
q$(3) = "négative."

'niveau 1
ph$(1, 1) = "Demain, vous irez au cinéma."
ph$(1, 2) = "Demain, irez-vous au cinéma ?"
ph$(1, 3) = "Demain, vous n'irez pas au cinéma."
ph$(2, 1) = "Florian regarde souvent la télévision."
ph$(2, 2) = "Est-ce que Florian regarde souvent la télévision ?"
ph$(2, 3) = "Florian ne regarde pas souvent la télévision."
ph$(3, 1) = "Ce dessin animé est vraiment très mauvais."
ph$(3, 2) = "Ce dessin animé est-il vraiment très mauvais ?"
ph$(3, 3) = "Ce dessin animé n'est pas vraiment mauvais."
ph$(4, 1) = "Papa nous filme avec sa caméra vidéo."
ph$(4, 2) = "Est-ce que Papa nous filme avec sa caméra vidéo ?"
ph$(4, 3) = "Papa ne nous filme pas avec sa caméra vidéo."
ph$(5, 1) = "Maman tient son bébé dans les bras."
ph$(5, 2) = "Maman tient-elle son bébé dans les bras ?"
ph$(5, 3) = "Maman ne tient pas son bébé dans les bras."

'niveau 2
ph$(6, 1) = "L'avion va décoller dans trois minutes."
ph$(6, 2) = "Est-ce que l'avion va décoller dans trois minutes ?"
ph$(6, 3) = "L'avion ne va pas décoller dans trois minutes."
ph$(7, 1) = "Les joueurs ont gagné ce match difficile."
ph$(7, 2) = "Les joueurs ont-ils gagné ce match difficile ?"
ph$(7, 3) = "Les joueurs n'ont pas gagné ce match difficile."
ph$(8, 1) = "L'alpiniste gravit les pentes de la montagne."
ph$(8, 2) = "L'alpiniste gravit-il les pentes de la montagne ?"
ph$(8, 3) = "L'alpiniste ne gravit pas les pentes de la montagne."
ph$(9, 1) = "Il se passionne pour son jeu vidéo."
ph$(9, 2) = "Est-ce qu'il se passionne pour son jeu vidéo ?"
ph$(9, 3) = "Il ne se passionne pas pour son jeu vidéo."
ph$(10, 1) = "Elle écoute de la musique dans son casque."
ph$(10, 2) = "Ecoute-t-elle de la musique dans son casque ?"
ph$(10, 3) = "Elle n'écoute pas de la musique dans son casque."

'présentation


w$ = "Trois phrases vont être affichées."
z$ = "Une déclarative, une négative et"
y$ = "une interrogative."
CALL consigne(3, w$, z$, y$)

CALL niveau(ni, 2)

IF ni = 2 THEN
FOR i = 1 TO 5
ph$(i, 1) = ph$(i + 5, 1)
ph$(i, 2) = ph$(i + 5, 2)
ph$(i, 3) = ph$(i + 5, 3)
NEXT
END IF


FOR ii = 1 TO 5 '+++++++
CALL titre
CALL niv(5, ii)

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

'mélange A N I
FOR kk = 1 TO 3
DO
f = 0
r%(kk) = INT(RND * 3) + 1
FOR j = 1 TO kk - 1
IF r%(kk) = r%(j) THEN f = 1: EXIT FOR
NEXT
LOOP WHILE f = 1
p$(kk) = ph$(n, r%(kk))
'r%() est l'index
NEXT kk

'tirage question

DO
rep = INT(RND * 3) + 1
LOOP WHILE rep2 = rep

rep2 = rep

ani0:

CALL cadre(6, 15, 50, 2, blanc)
COLOR , blanc
CALL centre(7, noir, "Sélectionne la phrase " + q$(rep))

l = 0
FOR ij = 1 TO 3
l2 = LEN(p$(ij)): IF l2 > l THEN l = l2
NEXT
h = INT(41 - l / 2)
CALL fleches(12, h, p$(), 3, r, rouge, 1, 23, 35)

LOCATE 23: COLOR , noir

IF r%(r) = rep THEN
CALL exact2(.7): IF cc = 0 THEN re = re + 2
ELSE
cc = cc + 1
IF cc < 3 THEN
CALL erreur2(.7)
CALL centre(23, rougeclair, "Tu as montré la phrase " + q$(r%(r)))
CALL getinvimouse(w)
COLOR , noir: LOCATE 23, 1: PRINT SPACE$(80)
GOTO ani0
ELSE
CALL titre
COLOR , noir
CALL centre(23, rougeclair, " Solution ")
COLOR , bleu
CALL centre(7, vertclair, "Regarde la phrase " + q$(rep))
CALL centre(12, rougeclair, ph$(n, rep))
CALL getinvimouse(z)
END IF

END IF
cc = 0


NEXT ii

CALL resultats(re, ni, 2)

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)
'3/3/94

nbeliste = 20
nbeserie = nbeliste / 2

DIM mot$(30, 20), mot2$(20), z(20), sol(20), nbe(20)

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

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

'niveau
CALL niveau(ni, 2)
IF ni = 1 THEN niv2 = 1 ELSE niv2 = nbeserie + 1

'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

erreurs = 0
DO
intrus5:
CALL niv(nbeserie, boucle)

'trouver longueur mot max
l2 = 0
FOR i = 1 TO nbemot
l1 = LEN(mot2$(i)): IF l2 < l1 THEN l2 = l1
NEXT
h = INT(40 + 1 - (l2 / 2))
CALL cadre(4, 20, 40, 2, marron)
COLOR , marron
CALL centre(5, blancbrill, "Sélectionne l'intrus")
COLOR , bleu
CALL fleches(8, 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(bleu): GOTO intrus5
ELSEIF r <> sol(numeroboucle) THEN
erreurs = erreurs + 1
IF erreurs < 3 THEN
CALL erreur2(.5)
ELSE

CALL Solution(mot2$(sol(numeroboucle)))
COLOR , bleu

END IF
END IF
LOOP WHILE r <> sol(numeroboucle)
CALL exact2(.5): IF erreurs = 0 THEN re = re + 1'en fonction du nombre de série
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, 2)

END SUB

DEFINT A-Z
SUB passepresent (re%, ni%, ppf$(), rt$, gg$, pre$, titr$, prog%, nom$, noir%, bleu%, vert%, rouge%, marron%, blanc%, vertclair%, cyanclair%, rougeclair%, jaune%, blancbrill%)
'22/5/94
gg = 20: re = 0
DIM p$(3), z(19)
p$(1) = "Passé": p$(2) = "Présent": p$(3) = "Futur"

'présentation
w$ = "Tu vas choisir entre le présent,"
z$ = "le passé et le futur."
CALL consigne(2, w$, z$, y$)

CALL niveau(ni, 2)

FOR ii = 1 TO 10 '+++++++
CALL titre
CALL niv(10, ii)

DO
f = 0
IF ni = 1 THEN
z(ii) = INT(RND * 10) + 1
ELSE
z(ii) = INT(RND * 10) + 11
END IF
FOR j = 1 TO ii - 1
IF z(ii) = z(j) THEN f = 1: EXIT FOR
NEXT
LOOP WHILE f = 1
n = z(ii)

n$ = MID$(ppf$(n), 1, LEN(ppf$(n)) - 1): b = VAL(RIGHT$(ppf$(n), 1))
CALL cadre(7, 40 - 10, 20, 4, blanc)
COLOR , blanc
CALL centre(9, noir, n$)
de1:
CALL fleches(15, 40 - 2, p$(), 3, r, rouge, 1, 23, 35)

LOCATE 23: COLOR , noir
IF r = b THEN
CALL exact2(1)
IF cc = 0 THEN re = re + 1
ELSE
cc = cc + 1
IF cc < 3 THEN
CALL erreur2(1)
ELSE
CALL Solution(p$(b))
END IF
GOTO de1
END IF
cc = 0
NEXT ii '++++++++++

CALL resultats(re, ni, 2)

END SUB

DEFINT A-Z
SUB trouvephrase (re%, ni%, rt$, gg$, gg2$, pre$, titr$, prog%, nom$, noir%, bleu%, vert%, rouge%, marron%, blanc%, vertclair%, cyanclair%, rougeclair%, jaune%, blancbrill%)
'3/2/96
'attention : changer sub fleches en fonction de prog ===
DIM m$(13), m2$(13), m(13), mot$(13), ph$(20), z(5), pp$(2)
re = 0

'=== espace à la fin
'niveau 1
ph$(1) = "Olivier regarde la télévision. "
ph$(2) = "Un enfant écrit une phrase. "
ph$(3) = "Le petit chat boit son lait. "
ph$(4) = "Les pompiers éteignent le feu. "
ph$(5) = "Cette grande fille attrape un papillon. "
ph$(6) = "Il a vu son camarade. "
ph$(7) = "Elle est partie faire des courses. "
ph$(8) = "Vous avez effacé votre dessin. "
ph$(9) = "Florian joue avec ses jouets. "
ph$(10) = "Les boulangers vendent du pain. "

'niveau 2
ph$(11) = "Des oiseaux vivent au bord de la mer. "
ph$(12) = "Ce jeune chien a des poils foncés. "
ph$(13) = "Une lettre a été envoyée. "
ph$(14) = "Le mur du jardin a été démoli. "
ph$(15) = "Le berger donne à manger à ses moutons. "
ph$(16) = "Vous allez faire une grande randonnée. "
ph$(17) = "Michel est parti à la campagne. "
ph$(18) = "Mélanie est allée visiter Paris. "
ph$(19) = "On voit des enfants ramasser des champignons. "
ph$(20) = "Je suis content de vous voir. "

'présentation

w$ = "Tu vas remettre dans l'ordre"
z$ = "les mots d'une phrase."
CALL consigne(2, w$, z$, y$)

CALL niveau(ni, 2)


FOR ii = 1 TO 5 '+++++++++++++++++++++++++
flagerr = 0

'tirage suivant niveau
DO
f = 0
IF ni = 1 THEN
z(ii) = INT(RND * 10) + 1
ELSE
z(ii) = INT(RND * 10) + 11
END IF
FOR j = 1 TO ii - 1
IF z(ii) = z(j) THEN f = 1: EXIT FOR
NEXT
LOOP WHILE f = 1
n = z(ii)

ph$ = ph$(n)

'affecte
i = 0: l = 1
DO
z = INSTR(l, ph$, " "): IF z = 0 THEN EXIT DO
i = i + 1
m$(i) = MID$(ph$, l, z - l)
l = z + 1
LOOP

nm = i

debuttp:
jj = 0
nm2 = nm
ph3$ = ""

'mélange
FOR i = 1 TO nm
DO
f = 0
m(i) = INT(RND * nm) + 1
FOR j = 1 TO i - 1
IF m(i) = m(j) THEN f = 1: EXIT FOR
NEXT
LOOP WHILE f = 1
m2$(i) = m$(m(i))
NEXT

CALL titre

DO
COLOR , bleu
VIEW PRINT 3 TO 19: CLS 2: VIEW PRINT
CALL niv(5, ii)
CALL cadre(16, 2, 75, 2, blanc)
COLOR , blanc
CALL centre(17, noir, ph3$)

COLOR , noir
IF jj = 0 THEN
CALL centre(23, blanc, SPACE$(10) + gg$ + SPACE$(10))
ELSE
CALL centre(23, blanc, gg$ + " " + CHR$(27) + "- = Corriger")
END IF
COLOR blancbrill, bleu

v = INT(21 - nm2) / 2
CALL flechestrouvephrase(v - 1, 36, m2$(), nm2, r, rouge, 1, 23, 0)

IF r = 83 OR r = 8 THEN
IF nm2 = nm THEN
BEEP
ELSE
nm2 = nm2 + 1
m2$(nm2) = mot$(jj)
ph3$ = MID$(ph3$, 1, LEN(ph3$) - (LEN(mot$(jj)) + 1))
jj = jj - 1
END IF

ELSE
jj = jj + 1
mot$(jj) = m2$(r)
ph3$ = ph3$ + " " + mot$(jj)
IF r <> nm2 THEN
FOR i = r TO nm2 - 1
m2$(i) = m2$(i + 1)
NEXT
END IF
nm2 = nm2 - 1
END IF
LOOP WHILE nm2 <> 0

ph3$ = LTRIM$(ph3$) + " "
CALL titre
CALL cadre(10, 2, 75, 4, blanc)
COLOR , blanc
CALL centre(12, noir, ph3$)

CALL cadre(5, 30, 20, 2, marron)
COLOR , marron
CALL centre(6, blancbrill, "Est-ce correct ?")

pp$(1) = "oui"
pp$(2) = "non"
COLOR , noir
CALL centre(23, blanc, gg$)
CALL fleches(17, 39, pp$(), 2, r, rouge, 1, 23, 35)

SELECT CASE r
CASE 1
flag = 1
CASE 2
flag = 0
END SELECT
COLOR , noir
IF flag = 0 THEN GOTO debuttp

CALL centre(23, 15, SPACE$(80))

IF ph$ = ph3$ THEN
CALL exact2(1.5)
IF flagerr = 0 THEN
re = re + 2
ELSEIF flagerr = 1 THEN
re = re + 1
END IF
ELSE
CALL erreur2(1.2)
flagerr = flagerr + 1
IF flagerr > 1 THEN
CALL titre
CALL cadre(10, 2, 75, 4, blanc)
COLOR , blanc
CALL centre(12, rouge, ph$)
COLOR , noir
CALL centre(23, rougeclair, "Solution")
CALL getinvimouse(r)
ELSEIF LEFT$(ph$, 1) <> LEFT$(ph3$, 1) AND RIGHT$(ph3$, 2) <> ". " THEN
CALL centre(23, rougeclair, "Une phrase commence par une majuscule et finit par un point.")
CALL getinvimouse(r)
GOTO debuttp
ELSEIF LEFT$(ph$, 1) <> LEFT$(ph3$, 1) THEN
CALL centre(23, rougeclair, "Une phrase commence par une majuscule.")
CALL getinvimouse(r)
GOTO debuttp
ELSEIF RIGHT$(ph3$, 2) <> ". " THEN
CALL centre(23, rougeclair, "Une phrase finit par un point.")
CALL getinvimouse(r)
GOTO debuttp
ELSE
GOTO debuttp
END IF
END IF

NEXT ii '++++++++++++++++++++++

CALL resultats(re, ni, 2)

END SUB

DEFINT A-Z
SUB trouveverbe (re, ni, mottv$(), rt$, gg$, pre$, titr$, noir, bleu, vert, rouge, marron, blanc, vertclair, cyanclair, rougeclair, jaune, blancbrill)
'3/3/94

nbeliste = 20
nbeserie = nbeliste / 2

DIM mot$(30, 20), mot2$(20), z(20), sol(20), nbe(20)

re = 0: q = 1

k = 0
FOR i = 1 TO nbeliste
j = 0
DO
j = j + 1: k = k + 1
mot$(i, j) = mottv$(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

'présentation

w$ = "Tu vas devoir trouver le verbe"
z$ = "dans une liste de mots."
CALL consigne(2, w$, z$, y$)

CALL niveau(ni, 2)
IF ni = 1 THEN niv2 = 1 ELSE niv2 = nbeserie + 1

'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

erreurs = 0
DO
tv5:
CALL niv(nbeserie, boucle)
CALL cadre(4, 20, 40, 2, marron)
COLOR , marron
CALL centre(5, blancbrill, "Sélectionne le verbe")

'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 fleches(8, 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(bleu): GOTO tv5
ELSEIF r <> sol(numeroboucle) THEN
erreurs = erreurs + 1
IF erreurs < 3 THEN
CALL erreur2(.4)
CALL centre(23, rougeclair, "Tu ne peux pas " + mot2$(r) + "...")
CALL attendre(3)
LOCATE 23, 1: PRINT SPACE$(80)
ELSE
CALL Solution(mot2$(sol(numeroboucle)))
COLOR , bleu
END IF
END IF
LOOP WHILE r <> sol(numeroboucle)

CALL exact2(.5): IF erreurs = 0 THEN re = re + 1'en fonction du nombre de série
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, 2)


END SUB
 

 

DECLARE SUB niv (limit%, xx%)
DECLARE SUB afformate2 (m$(), nm%, v%, h%)
DECLARE SUB quitter (fond%)
DECLARE SUB pleinecran (r$, m$, co%, v1%, v2%)
DECLARE SUB epuration (re$, re2$)
DECLARE SUB afficheformate (m$(), nm%)
DECLARE SUB attendre (tx!)
DECLARE SUB centre (v%, cc%, ph$)
DECLARE SUB entree (x%, y%)
DECLARE SUB erreur2 (tx!)
DECLARE SUB exact2 (tx!)
DECLARE SUB fleches (v%, h%, w$(), np%, r%, coul%, drap%, v2%, h3%)
DECLARE SUB inputgen (nl%, r$, deb%, fin%, x%, y%)
DECLARE SUB ligne23 (x%, y%)
DECLARE SUB niveau (r%, np%)
DECLARE SUB recupere (m$)
DECLARE SUB resultats (re%, ni%, nbniv%)
DECLARE SUB Solution (sol$)
DECLARE SUB titre ()
DECLARE SUB trouvemot (m$, m$(), nm%)
DECLARE SUB cadre (v%, h%, l%, nli%, c%)
DECLARE SUB afformate (m$(), nm%)
DECLARE SUB consigne (nl%, w$, z$, y$)
DECLARE SUB getinvimouse (rr%)
DECLARE SUB ouinon (r$)
DECLARE SUB transforme (m$)
DECLARE SUB deplacemot1 (rr%, nm%, flag%, li%, place%, limax%, m$(), ligne%())
DECLARE SUB MousePoll (row%, col%, lButton%, rButton%)
'Module 4 exo francais CE
'7/5/96


DEFINT A-Z
SUB cherchemot (re%, ni%, rt$, gg$, gg2$, pre$, titr$, prog%, nom$, noir%, bleu%, vert%, rouge%, marron%, blanc%, vertclair%, cyanclair%, rougeclair%, jaune%, blancbrill%, couleur%)
'20/5/94
DIM m$(200), ligne(10), z(5), ph$(7), ti$(4)

re = 0: ct = 0

ti$(1) = "Le cirque"
ti$(2) = "Les métiers"
ti$(3) = "Le dessin"
ti$(4) = "Le caillou blanc"

ph$(1) = "Vous avez devant vous le cirque le plus grand du monde. Il y a chez nous les lions les plus méchants, les éléphants les plus savants et les singes les plus adroits. Nous avons aussi les numéros les plus nouveaux. "
ph$(1) = ph$(1) + "Nos places ont les prix les plus bas ! On a même quelques places à offrir ! "
ph$(2) = "L'institutrice demande aux enfants quels métiers ils aiment le mieux. Ils cherchent un peu, puis donnent leurs avis. Lisa pense devenir boulangère, Paul, aviateur et Rita, ministre. Enfin, Marie donne sa réponse. "
ph$(2) = ph$(2) + "Le métier qu'elle désire faire ? Celui de la maîtresse d'école. "
ph$(3) = "Je vais dessiner un homme. Il aura une grosse tête, des grands bras et de petites jambes. Il aura aussi des longues dents et un nez tout rond. Je me demande s'il aura des lunettes. Je vais aussi lui faire une barbe "
ph$(3) = ph$(3) + "et une moustache pour cacher un peu son visage. Il sera plus beau comme cela ! "
ph$(4) = "Mélanie avait un secret. Lorsque les choses n'allaient pas très bien à l'école ou chez elle, elle parlait à son caillou blanc et lui demandait de l'aide. Le caillou lui répondait toujours et elle l'écoutait. Quand "
ph$(4) = ph$(4) + "elle pleurait, elle lui expliquait pourquoi elle avait du chagrin et il la consolait. "
'espace à la fin des phrases ===

'présentation
w$ = "Un mot va être affiché."
z$ = "Tu devras le retrouver dans un texte"
y$ = "le plus rapidement possible."
CALL consigne(3, w$, z$, y$)

'niveau = texte (4)
CALL titre
CALL cadre(7, 25, 30, 2, vert)
COLOR , vert
CALL centre(8, blancbrill, "Choix du texte")

CALL fleches(12, 33, ti$(), 4, ni, rouge, 1, 23, 35)

'affect mots
m$ = ph$(ni)

CLS
re = 0: ct = 0

CALL trouvemot(m$, m$(), nm)
'on teste le nombre de mots dont la long est sup à 4
ll = 0
FOR i = 1 TO nm
IF LEN(m$(i)) > 4 THEN ll = ll + 1
NEXT

'on mémorise les mots à gauche
i = 1: l2 = 0: li = 0
DO
l = LEN(m$(i))
l2 = l2 + l

IF l2 > 80 THEN
i = i - 1: l2 = 0
ELSEIF l2 = 80 THEN
l2 = 0
ELSEIF l2 = 80 - 1 THEN
l2 = 0
ELSE
IF l2 = LEN(m$(i)) THEN li = li + 1: ligne(li) = i
l2 = l2 + 1

END IF
COLOR blancbrill
i = i + 1
LOOP WHILE i <= nm

limax = li

'affichage du texte
CALL titre
CALL afformate2(m$(), nm, 9, 10)
COLOR , noir
CALL centre(23, blanc, "Lis le texte")
CALL getinvimouse(w)

FOR ii = 1 TO 5 '++++++++++++++++++++++++++++++

'tirage
IF ll < 10 THEN
re$ = m$(INT(RND * nm) + 1)
ELSE
DO
DO
f = 0
z(ii) = INT(RND * nm) + 1
FOR j = 1 TO ii - 1
IF z(ii) = z(j) THEN f = 1: EXIT FOR
NEXT
LOOP WHILE f = 1

re$ = m$(z(ii))
LOOP WHILE LEN(re$) < 5
END IF

'épuration à droite
IF RIGHT$(re$, 3) = "..." THEN
re2$ = MID$(re$, 1, LEN(re$) - 3)
ELSEIF RIGHT$(re$, 2) = ")," OR RIGHT$(re$, 2) = ")." THEN
re2$ = MID$(re$, 1, LEN(re$) - 2)
ELSEIF RIGHT$(re$, 1) = "," OR RIGHT$(re$, 1) = "." OR RIGHT$(re$, 1) = ")" OR RIGHT$(re$, 1) = "'" OR RIGHT$(re$, 1) = CHR$(34) THEN
re2$ = MID$(re$, 1, LEN(re$) - 1)
ELSE
re2$ = re$
END IF

'épuration à gauche de re2$
IF LEFT$(re2$, 1) = "(" OR LEFT$(re2$, 1) = "'" OR LEFT$(re2$, 1) = CHR$(34) THEN
re2$ = MID$(re2$, 2)
END IF

chemot3:
'affichage du mot signal
CALL titre
CALL cadre(10, INT((80 / 2 + 1) - LEN(re2$) / 2) - 3, LEN(re2$) + 4, 4, rouge)
CALL niv(5, ii)
CALL attendre(.3)
COLOR , rouge
CALL centre(12, blancbrill, re2$)
COLOR , noir
IF ct = 0 THEN
CALL centre(23, blanc, "Lis le mot")
ELSE
CALL centre(23, blanc, "Relis le mot")
END IF
CALL attendre(2)

'affichage du texte
CALL titre
CALL niv(5, ii)
COLOR noir, blanc
VIEW PRINT 8 TO 13: CLS 2
VIEW PRINT
CALL afformate(m$(), nm)

IF ct <> 0 THEN
IF couleur = 1 THEN
COLOR , vertclair: CALL centre(5, blancbrill, " " + re2$ + " ")
ELSE
COLOR , blanc: CALL centre(5, noir, " " + re2$ + " ")
END IF
END IF
COLOR blancbrill, noir: CALL centre(23, blanc, gg2$)

li = 1
place = 1
rr = 0
flag = 1
GOSUB chemotat

DO
ki = 1: l2 = 0: h = 1: v = 9
IF couleur = 1 THEN COLOR noir, vert ELSE COLOR noir, blanc
DO

l = LEN(m$(ki))
l2 = l2 + l

IF l2 > 80 THEN
ki = ki - 1: l2 = 0
h = 1: v = v + 1
IF ki = flag THEN
LOCATE v, h
IF RIGHT$(m$(ki), 1) = "," OR RIGHT$(m$(ki), 1) = "." THEN
PRINT MID$(m$(ki), 1, LEN(m$(ki)) - 1)
ELSE
PRINT m$(ki)
END IF
v2 = v: h3 = h: m2$ = m$(ki)
EXIT DO
END IF

ELSEIF l2 = 80 THEN
l2 = 0
h = 80 - LEN(m$(ki)) + 1
IF ki = flag THEN
LOCATE v, h
IF RIGHT$(m$(ki), 1) = "," OR RIGHT$(m$(ki), 1) = "." THEN
PRINT MID$(m$(ki), 1, LEN(m$(ki)) - 1)
ELSE
PRINT m$(ki)
END IF
v2 = v: h3 = h: m2$ = m$(ki)
EXIT DO
END IF
v = v + 1

ELSEIF l2 = 80 - 1 THEN
h = 80 - LEN(m$(ki))
IF ki = flag THEN
LOCATE v, h
IF RIGHT$(m$(ki), 1) = "," OR RIGHT$(m$(ki), 1) = "." THEN
PRINT MID$(m$(ki), 1, LEN(m$(ki)) - 1)
ELSE
PRINT m$(ki)
END IF
v2 = v: h3 = h: m2$ = m$(ki)
EXIT DO
END IF

ELSE
l2 = l2 + 1
h = l2 - LEN(m$(ki))
IF ki = flag THEN
LOCATE v, h
IF RIGHT$(m$(ki), 1) = "," OR RIGHT$(m$(ki), 1) = "." THEN
PRINT MID$(m$(ki), 1, LEN(m$(ki)) - 1)
ELSE
PRINT m$(ki)
END IF
v2 = v: h3 = h: m2$ = m$(ki)
EXIT DO
END IF

END IF

ki = ki + 1

LOOP WHILE ki <= nm

GOSUB chemotat1
IF souris = 1 THEN EXIT DO

CALL deplacemot1(rr, nm, flag, li, place, limax, m$(), ligne())

IF rr = 13 THEN res$ = m$(flag): EXIT DO

COLOR noir, blanc '===
LOCATE v2, h3: PRINT m2$

LOOP

CALL ligne23(noir, noir)

IF temps >= 30 THEN
ct = ct + 1
BEEP
CALL centre(23, rougeclair, " Trop lent ! "): CALL attendre(1.5)
IF ct < 2 THEN GOTO chemot3
GOSUB cherchesol
GOTO chemot4
END IF

IF re$ <> res$ AND re2$ <> res$ THEN
ct = ct + 1
CALL ligne23(noir, noir)
CALL erreur2(.7)
IF ct < 2 THEN GOTO chemot3
GOSUB cherchesol
ELSE
IF temps >= 20 THEN
CALL centre(23, jaune, "Exact mais trop lent !"): CALL attendre(1.8)
IF ct = 0 THEN re = re + 1
ELSE
CALL exact2(.7)
IF ct = 0 THEN re = re + 2
IF ct = 1 THEN re = re + 1
END IF
END IF

chemot4:
ct = 0

NEXT ii '+++++++++++++++++++++++++++++

CALL resultats(re, ni, 4)

EXIT SUB

chemotat:
DEF SEG = 0
POKE 1050, PEEK(1052)
DEF SEG
duree = 30
depart = VAL(RIGHT$(TIME$, 2))
IF depart < 60 - duree THEN
fin = duree + depart
ELSE
fin = duree + depart - 60
END IF
RETURN

chemotat1:
DEF SEG = 0
POKE 1050, PEEK(1052)
DEF SEG
CALL cadre(4, 75, 2, 2, rouge)
COLOR blancbrill, rouge

souris = 0
DO
seconde = VAL(RIGHT$(TIME$, 2))
IF seconde >= depart THEN
temps = -(depart - seconde)
ELSE
temps = 60 - depart + seconde
END IF
IF temps < 10 THEN LOCATE 5, 77 ELSE LOCATE 5, 76

PRINT LTRIM$(STR$(temps))

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 >= 9 AND v_mouse <= 19 THEN
sc = SCREEN(v_mouse, h_mouse)
IF sc = 32 THEN
BEEP
ELSE
'on cherche les lettres à gauche jusqu'à espace ou h1=1
h1 = h_mouse
DO
sc = SCREEN(v_mouse, h1)
IF sc = 32 THEN EXIT DO
h1 = h1 - 1
LOOP WHILE h1 <> 0
h1 = h1 + 1
h3 = h1: mot$ = ""
DO
sc = SCREEN(v_mouse, h3)
IF sc = 32 THEN EXIT DO
mot$ = mot$ + CHR$(sc)
h3 = h3 + 1
LOOP WHILE h3 <> 81

souris = 1
COLOR noir, blanc
CALL epuration(mot$, res$)
CALL afformate(m$(), nm)
LOCATE v_mouse, h1
IF couleur = 1 THEN COLOR noir, vert ELSE COLOR noir, blanc
PRINT mot$
CALL attendre(.3)
EXIT DO
END IF
ELSEIF v_mouse = 23 THEN
IF h_mouse >= 46 AND h_mouse <= 48 THEN
r$ = CHR$(13)
CALL attendre(.3)
ELSEIF h_mouse = 33 THEN
'haut
rr = 72
CALL attendre(.2)
souris = 2
ELSEIF h_mouse = 35 THEN
'bas
rr = 80
CALL attendre(.2)
souris = 2
ELSEIF h_mouse = 37 THEN
'gauche
rr = 75
CALL attendre(.2)
souris = 2
ELSEIF h_mouse = 39 THEN
'droite
rr = 77
CALL attendre(.2)
souris = 2
ELSE
BEEP
END IF
ELSE
BEEP
END IF
END IF

IF r$ = CHR$(13) OR r$ = CHR$(27) THEN EXIT DO
IF LEN(r$) = 2 OR souris = 2 THEN EXIT DO
LOOP WHILE seconde <> fin

IF souris = 1 OR souris = 2 THEN RETURN

IF temps >= 30 THEN
rr = 13
RETURN
END IF

IF LEN(r$) < 2 THEN
IF ASC(r$) = 13 THEN
rr = 13
RETURN
ELSEIF ASC(r$) = 27 THEN
rr = 27
RETURN
ELSE
GOTO chemotat1
END IF
END IF

rr = ASC(RIGHT$(r$, 1))
RETURN

cherchesol:
LOCATE 23, 1: PRINT SPACE$(80)
BEEP
CALL centre(23, rougeclair, "Solution")
IF souris = 0 THEN
COLOR noir, blanc: LOCATE v2, h3: PRINT m2$
END IF
ki = 1: l2 = 0: h = 1: v = 9

IF couleur = 1 THEN COLOR blancbrill, rouge ELSE COLOR noir, blanc

DO
l = LEN(m$(ki))
l2 = l2 + l

IF l2 > 80 THEN
ki = ki - 1: l2 = 0
h = 1: v = v + 1
IF m$(ki) = m$(z(ii)) THEN
LOCATE v, h
IF RIGHT$(m$(ki), 1) = "," OR RIGHT$(m$(ki), 1) = "." THEN
PRINT MID$(m$(ki), 1, LEN(m$(ki)) - 1)
ELSE
PRINT m$(ki)
END IF
EXIT DO
END IF

ELSEIF l2 = 80 THEN
l2 = 0
h = 80 - LEN(m$(ki)) + 1
IF m$(ki) = m$(z(ii)) THEN
LOCATE v, h
IF RIGHT$(m$(ki), 1) = "," OR RIGHT$(m$(ki), 1) = "." THEN
PRINT MID$(m$(ki), 1, LEN(m$(ki)) - 1)
ELSE
PRINT m$(ki)
END IF
EXIT DO
END IF
v = v + 1

ELSEIF l2 = 80 - 1 THEN
h = 80 - LEN(m$(ki))
IF m$(ki) = m$(z(ii)) THEN
LOCATE v, h
IF RIGHT$(m$(ki), 1) = "," OR RIGHT$(m$(ki), 1) = "." THEN
PRINT MID$(m$(ki), 1, LEN(m$(ki)) - 1)
ELSE
PRINT m$(ki)
END IF
EXIT DO
END IF

ELSE
l2 = l2 + 1
h = l2 - LEN(m$(ki))
IF m$(ki) = m$(z(ii)) THEN
LOCATE v, h
IF RIGHT$(m$(ki), 1) = "," OR RIGHT$(m$(ki), 1) = "." THEN
PRINT MID$(m$(ki), 1, LEN(m$(ki)) - 1)
ELSE
PRINT m$(ki)
END IF
EXIT DO
END IF
END IF

ki = ki + 1

LOOP WHILE ki <= nm
CALL getinvimouse(w)
RETURN
END SUB

DEFINT A-Z
SUB conjugaison (re%, ni%, pp$(), etre$(), avoir$(), aller$(), marcher$(), finir$(), rt$, gg$, pre$, titr$, prog%, nom$, noir%, bleu%, vert%, rouge%, marron%, blanc%, vertclair%, cyanclair%, rougeclair%, jaune%, blancbrill%)
'28/1/96
DIM verbe$(5), temps$(4), rep$(6)
res! = 1

verbe$(1) = "être"
verbe$(2) = "avoir"
verbe$(3) = "aller"
verbe$(4) = "marcher"
verbe$(5) = "finir"

temps$(1) = "présent"
temps$(2) = "imparfait"
temps$(3) = "passé composé"
temps$(4) = "futur"

'choix du verbe

CALL titre
CALL cadre(7, 25, 30, 2, vert)
COLOR , vert
CALL centre(8, blancbrill, "Choix du verbe")
CALL fleches(12, 37, verbe$(), 5, verbe, rouge, 1, 23, 35)

'choix du temps
CALL titre
CALL cadre(7, 25, 30, 2, vert)
COLOR , vert
CALL centre(8, blancbrill, "Choix du niveau")
CALL fleches(12, 34, temps$(), 4, temps, rouge, 1, 23, 35)

ni = temps

'exemple
CALL titre
IF temps = 2 THEN w$ = " à l'" ELSE w$ = " au "
CALL cadre(4, 20, 40, 2, vert)
COLOR , vert
CALL centre(5, blancbrill, "Verbe " + verbe$(verbe) + w$ + temps$(temps))

FOR i = 1 TO 6

SELECT CASE verbe

CASE 1
rep$(i) = etre$(i, temps)
CASE 2
rep$(i) = avoir$(i, temps)
CASE 3
rep$(i) = aller$(i, temps)
CASE 4
rep$(i) = marcher$(i, temps)
CASE 5
rep$(i) = finir$(i, temps)

END SELECT
NEXT i

'tester si j'
IF LEFT$(rep$(1), 1) = "a" OR LEFT$(rep$(1), 1) = "é" OR LEFT$(rep$(1), 1) = "i" THEN
pp$(1) = "j'"
ELSE
pp$(1) = "je "
END IF

'changer pour elles si pas passé composé
IF temps <> 3 THEN
pp$(6) = "elles "
END IF

CALL cadre(7, 25, 30, 12, blanc)
COLOR noir, blanc
LOCATE 8, , 0
FOR i = 1 TO 6
LOCATE , 33: PRINT pp$(i); rep$(i)
PRINT
NEXT i
COLOR , noir
CALL centre(23, blanc, "Mémorise")
CALL getinvimouse(w)

CALL cadre(7, 25, 30, 12, blanc)
COLOR noir, blanc
LOCATE 8
FOR i = 1 TO 6
LOCATE , 33: PRINT pp$(i); SPACE$(12)
PRINT
NEXT i

v = 8
FOR ii = 1 TO 6
CALL niv(6, ii)

cts1:
COLOR , noir
LOCATE 23: PRINT SPACE$(80)
CALL centre(23, blanc, "Tape la réponse")
COLOR noir, blanc
LOCATE v, 33: PRINT pp$(ii);
DEF SEG = 0
POKE &H417, (PEEK(&H417) AND &HBF) 'minus
DEF SEG

CALL inputgen(17, r$, 32, 151, noir, blanc)

'attention au féminin pour le passé composé
'verbe 3 (aller) temps 3

IF verbe = 3 AND temps = 3 THEN
IF ii = 1 AND r$ = "suis allée" THEN
r$ = rep$(1)
ELSEIF ii = 2 AND r$ = "es allée" THEN
r$ = rep$(2)
ELSEIF ii = 4 AND r$ = "sommes allées" THEN
r$ = rep$(4)
ELSEIF ii = 5 AND r$ = "êtes allées" THEN
r$ = rep$(5)
END IF
END IF

LOCATE 23: COLOR , noir
IF r$ = rep$(ii) THEN
CALL exact2(.7)
IF cc = 0 THEN res! = res! + 1.5
ELSE
IF LEFT$(rep$(ii), 4) = "êtes" AND (LEFT$(r$, 4) = "etes" OR LEFT$(r$, 4) = "ètes" OR LEFT$(r$, 4) = "étes") THEN
BEEP
CALL centre(23, rougeclair, "Tu dois taper l'accent circonflexe...")
CALL centre(22, jaune, "ê -> touches ^ puis e")

CALL attendre(1.5)
GOTO cts1
END IF
cc = cc + 1
IF cc < 2 THEN
CALL erreur2(.7)
GOTO cts1
ELSE
CALL Solution(rep$(ii))
GOTO cts1
END IF
END IF
cc = 0
v = v + 2
NEXT ii

re = INT(res!)
CALL resultats(re, ni, 4)

END SUB

DEFINT A-Z
SUB deplacemot1 (rr, nm, flag, li, place, limax, m$(), ligne())
'25/2/96
'saisie déplacement mot dans texte en restant dans même colonne
'flag indique la position du mot dans le texte
'place indique la position du mot dans la ligne
'li indique la ligne
'ligne(li) indique le nombre du 1° mot de la ligne li
'ligne(li+1) - ligne(li) donne le nombre de mot pour la ligne li
'sauf pour la dernière : nm -ligne(li) +1

SELECT CASE rr

CASE 27
CALL quitter(noir)

CASE 77 'droite
flag = flag + 1
IF flag > nm THEN
flag = nm: BEEP
ELSEIF flag = ligne(li + 1) THEN
li = li + 1: IF li > limax THEN li = limax
END IF
place = flag - ligne(li) + 1

CASE 75 'gauche
flag = flag - 1
IF flag = 0 THEN
flag = 1: BEEP
ELSEIF flag < ligne(li) THEN
li = li - 1: IF li < 1 THEN li = 1
END IF
place = flag - ligne(li) + 1

CASE 72 'haut
IF li = 1 THEN
BEEP
ELSE
li = li - 1
'si place est sup aux nombres de mots de la ligne de dessus
IF place > ligne(li + 1) - ligne(li) THEN
place = ligne(li + 1) - ligne(li)
END IF
flag = ligne(li) + place - 1
IF flag < 1 THEN flag = 1
END IF

CASE 80 'bas
IF li = limax THEN
BEEP
ELSE
li = li + 1
'si place est sup aux nombres de mots de la ligne de dessous
IF ligne(li + 1) <> 0 THEN
IF place > ligne(li + 1) - ligne(li) THEN
place = ligne(li + 1) - ligne(li)
END IF
ELSE
'calcul sur la dernière ligne
IF place > nm - ligne(li) + 1 THEN
place = (nm - ligne(li)) + 1
END IF
END IF
flag = ligne(li) + place - 1
IF flag > nm THEN flag = nm
END IF

CASE 13
EXIT SUB

CASE ELSE
BEEP

END SELECT
END SUB

DEFINT A-Z
SUB espace (re%, ni%, te$(), tit$(), rt$, gg$, pre$, titr$, prog%, nom$, noir%, bleu%, vert%, rouge%, marron%, blanc%, vertclair%, cyanclair%, rougeclair%, jaune%, blancbrill%)
'10/2/97
DIM m$(160), m2$(160), pp$(2)
er = 0
tit$(1) = "PIERRE" '===

'présentation
w$ = "Dans un texte, les espaces entre les"
z$ = "mots vont être supprimés."
CALL consigne(2, w$, z$, y$)

'choix du texte
CALL titre
CALL cadre(7, 25, 30, 2, vert)
COLOR , vert
CALL centre(8, blancbrill, "Choix du texte")

COLOR blancbrill, bleu
CALL fleches(12, 34, tit$(), 4, ni, rouge, 1, 23, 35)

m$ = te$(ni)
m2$ = m$

CALL titre
CALL trouvemot(m$, m$(), nm)
CALL afformate2(m$(), nm, 11, 10)
COLOR , noir
CALL centre(23, blanc, "Lis ce texte")

m$ = ""
FOR i = 1 TO nm
m$ = m$ + m$(i)
NEXT
CALL getinvimouse(w)

debespace:
CALL titre
CALL niv(1, 1)
DO
CALL pleinecran(r$, m$, 80, 11, 15)
IF r$ = CHR$(27) THEN CALL quitter(noir)
LOOP WHILE r$ = CHR$(27)

CALL recupere(m$)
CALL titre
COLOR , bleu
CALL transforme(m$)
CALL trouvemot(m$, m$(), nm)

FOR i = 1 TO nm
l = LEN(m$(i))
IF l > 39 THEN
BEEP: LOCATE , , 0: COLOR , noir
CALL centre(23, rougeclair, "Tu n'as pas fait assez d'espaces !")
CALL getinvimouse(r)
GOTO debespace
END IF
NEXT i

'LOCATE 11
CALL afformate2(m$(), nm, 11, 10)

CALL cadre(5, 30, 20, 2, marron)
COLOR , marron
CALL centre(6, blancbrill, "Est-ce correct ?")

pp$(1) = "oui"
pp$(2) = "non"
COLOR , noir
CALL centre(23, blanc, gg$)
CALL fleches(17, 39, pp$(), 2, r, rouge, 1, 23, 35)

SELECT CASE r
CASE 1
flag = 1
CASE 2
flag = 0
END SELECT
COLOR , noir
LOCATE 23, 1: PRINT SPACE$(80): LOCATE 23, 1

IF flag = 0 THEN GOTO debespace

IF m$ = m2$ THEN
CALL exact2(1)
IF er = 0 THEN
re = 10
ELSEIF er = 1 THEN
re = 9
END IF
ELSE
CALL erreur2(1)
er = er + 1
IF er > 1 THEN
'solution
CALL titre
CALL trouvemot(m2$, m2$(), nm)

COLOR , bleu
CALL centre(5, rougeclair, "Compare les textes")
COLOR noir, blanc: VIEW PRINT 8 TO 11: CLS 2: VIEW PRINT
LOCATE 9, , 0: CALL afficheformate(m2$(), nm)
COLOR rouge, bleu: LOCATE 13: PRINT STRING$(80, CHR$(196))
CALL trouvemot(m$, m$(), nm)
COLOR blancbrill, rouge: VIEW PRINT 15 TO 18: CLS 2: VIEW PRINT
LOCATE 16, , 0
CALL afficheformate(m$(), nm)
COLOR rougeclair, noir
'calcul de la note sur la longueur et les mots juste à partir du début
ecart = ABS(LEN(m$) - LEN(m2$))
FOR i = 1 TO nm
IF m2$(i) <> m$(i) THEN note = (i / nm) * 10: EXIT FOR
NEXT

IF note >= 7 AND ecart <= 2 THEN
re = 7
ELSEIF note >= 5 AND ecart <= 3 THEN
re = 6
ELSE
re = 4
END IF

CALL entree(noir, noir)

ELSE
CALL titre
CALL trouvemot(m2$, m$(), nm)
CALL afformate2(m$(), nm, 11, 10)
COLOR , noir
CALL centre(23, blanc, "Relis le texte")
CALL getinvimouse(w)
GOTO debespace
END IF
END IF

tit$(1) = "PIERRE (en majuscules)" '===

CALL resultats(re, ni, 4)

END SUB

DEFINT A-Z
SUB femin (re%, ni%, ma$(), fe$(), rt$, gg$, pre$, titr$, prog%, nom$, noir%, bleu%, vert%, rouge%, marron%, blanc%, vertclair%, cyanclair%, rougeclair%, jaune%, blancbrill%)
'22/1/97
DIM z(5)
re = 0: cc = 0

'présentation
w$ = "Tu vas taper des noms au féminin."
CALL consigne(1, w$, z$, y$)

'niveau
CALL niveau(ni, 3)

IF ni = 1 THEN
debut = 1: fin = 10
ELSEIF ni = 2 THEN
debut = 11: fin = 20
ELSE
debut = 21: fin = 33
END IF

CALL titre
IF ni = 3 THEN
CALL cadre(5, 22, 34, 14, rouge)
COLOR , rouge
LOCATE 6
ELSE
CALL cadre(7, 22, 34, 11, rouge)
COLOR , rouge
LOCATE 8
END IF

FOR i = debut TO fin
COLOR blancbrill
LOCATE , 26: PRINT ma$(i); " "; CHR$(26);
LOCATE , 45: COLOR jaune: PRINT fe$(i)
NEXT
COLOR , noir
CALL centre(23, blanc, "Mémorise")
CALL getinvimouse(r)

FOR ii = 1 TO 5 '++++++++++++
DO
f = 0
IF ni = 1 THEN
z(ii) = INT(RND * 10) + 1
ELSEIF ni = 2 THEN
z(ii) = INT(RND * 10) + 11
ELSE
z(ii) = INT(RND * 13) + 21
END IF

FOR j = 1 TO ii - 1
IF z(ii) = z(j) THEN f = 1: EXIT FOR
NEXT
LOOP WHILE f = 1
k = z(ii)

CALL titre
CALL niv(5, ii)

CALL cadre(8, 15, 18, 2, vert)
CALL cadre(8, 47, 18, 2, vert)
COLOR blancbrill, vert
LOCATE 9, 17: PRINT "Masculin"
LOCATE 9, 49: PRINT "Féminin"
CALL cadre(11, 15, 18, 4, rouge)
CALL cadre(11, 47, 18, 4, blanc)
LOCATE 13, 17

COLOR blancbrill, rouge: PRINT "un "; ma$(k)
fe0:
COLOR , noir
LOCATE 23, 1: PRINT SPACE$(80)
CALL centre(23, blanc, "Tape le mot")
COLOR noir, blanc
LOCATE 13, 49
PRINT "une ";
DEF SEG = 0
POKE &H417, (PEEK(&H417) AND &HBF) 'minus
DEF SEG

CALL inputgen(11, r$, 65, 165, noir, blanc)
COLOR , noir
LOCATE 23: PRINT SPACE$(80)
IF r$ = fe$(k) THEN
CALL exact2(1)
IF cc = 0 THEN re = re + 2
ELSE
IF r$ = "maitresse" AND fe$(k) = "maîtresse" THEN
BEEP
CALL centre(23, rougeclair, "Tu dois taper l'accent circonflexe...")
CALL centre(22, jaune, "î -> touches ^ puis i")
CALL attendre(1.5)
GOTO fe0
END IF
cc = cc + 1
IF cc < 2 THEN
CALL erreur2(1)
ELSE
CALL Solution(fe$(k))
END IF
GOTO fe0
END IF
cc = 0
NEXT ii '++++++++++++++

CALL resultats(re, ni, 3)

END SUB

DEFINT A-Z
SUB infinitif (re%, ni%, inf$(), conj$(), rt$, gg$, pre$, titr$, prog%, nom$, noir%, bleu%, vert%, rouge%, marron%, blanc%, vertclair%, cyanclair%, rougeclair%, jaune%, blancbrill%)
'28/1/96
DIM k(20), z(5)
nf = 15: re = 0

'présentation
w$ = "Tu vas taper l'infinitif d'un verbe."
CALL consigne(1, w$, z$, y$)

'niveau
CALL niveau(ni, 2)

IF ni = 1 THEN
debut = 1: fin = 15
ELSE
debut = 16: fin = 30
END IF

CALL titre
CALL cadre(4, 22, 34, 16, rouge)
COLOR , rouge
LOCATE 5
FOR i = debut TO fin
COLOR blancbrill
LOCATE , 26: PRINT conj$(i); " "; CHR$(26);
LOCATE , 45: COLOR jaune: PRINT inf$(i)
NEXT
COLOR , noir
CALL centre(23, blanc, "Mémorise")
CALL getinvimouse(r)

FOR ii = 1 TO 5 '+++++++++
DO
f = 0
IF ni = 1 THEN
z(ii) = INT(RND * nf) + 1
ELSE
z(ii) = INT(RND * nf) + 16
END IF
FOR j = 1 TO ii - 1
IF z(ii) = z(j) THEN f = 1: EXIT FOR
NEXT
LOOP WHILE f = 1
k = z(ii)

CALL titre
CALL niv(5, ii)
CALL cadre(8, 15, 18, 2, vert)
CALL cadre(8, 47, 18, 2, vert)
COLOR blancbrill, vert
LOCATE 9, 17: PRINT "Verbe conjugué"
LOCATE 9, 49: PRINT "Infinitif"
CALL cadre(11, 15, 18, 4, rouge)
CALL cadre(11, 47, 18, 4, blanc)

LOCATE 13, 17
COLOR blancbrill, rouge: PRINT conj$(k)

inf0:
CALL ligne23(noir, noir)
CALL centre(23, blanc, "Tape le verbe")
COLOR noir, blanc

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

CALL inputgen(11, r$, 65, 165, noir, blanc)

CALL ligne23(noir, noir)
IF r$ = inf$(k) THEN
CALL exact2(1)
IF cc = 0 THEN re = re + 2
ELSE
IF (r$ = "etre" OR r$ = "ètre" OR r$ = "étre") AND inf$(k) = "être" THEN
BEEP
CALL centre(23, rougeclair, "Tu dois taper l'accent circonflexe...")
COLOR , bleu
CALL centre(18, jaune, "ê -> touches ^ puis e")
CALL attendre(2)
GOTO inf0
END IF
cc = cc + 1
IF cc < 3 THEN
IF cc = 1 THEN
CALL erreur2(1)
ELSE
CALL centre(23, rougeclair, "Aide : " + MID$(inf$(k), 1, LEN(inf$(k)) - 2) + "..")
CALL attendre(1.5)
END IF
ELSE
CALL Solution(inf$(k))
END IF
GOTO inf0
END IF
cc = 0
NEXT ii '++++++++++++

CALL resultats(re, ni, 2)

END SUB

DEFINT A-Z
SUB nature (re%, ni%, m$(), rt$, gg$, pre$, titr$, prog%, nom$, noir%, bleu%, vert%, rouge%, marron%, blanc%, vertclair%, cyanclair%, rougeclair%, jaune%, blancbrill%)
'4/5/94
DIM p$(5), z(10), mot$(20)
p$(1) = "verbe"
p$(2) = "nom": p$(3) = "adjectif qualificatif": p$(4) = "déterminant"
p$(5) = "pronom personnel"
nf = 25


'+++++++++++++++
DIM s(20), ph$(10), m2$(20), z2(5), ph3$(10)
ph$(1) = "Un gros avion vole dans le ciel. " 'espace à la fin
ph3$(1) = "4321042"
ph$(2) = "Il lit un livre amusant. "
ph3$(2) = "51423"
ph$(3) = "La poule blanche couve ses oeufs. "
ph3$(3) = "423142"
ph$(4) = "Dans la cour, le petit enfant joue. "
ph3$(4) = "0424321"
ph$(5) = "Elle chante une jolie chanson. "
ph3$(5) = "51432"
ph$(6) = "Le gros chien aboie dans sa niche. "
ph3$(6) = "4321042"
ph$(7) = "Ce matin, tu bois ton lait chaud. "
ph3$(7) = "4251423"
ph$(8) = "Il attrape son meilleur camarade. "
ph3$(8) = "51432"
ph$(9) = "Cet enfant a les yeux bleus. "
ph3$(9) = "421423"
ph$(10) = "Nous dessinons un magnifique dessin. "
ph3$(10) = "51432"

'l$ = STRING$( 238)
l$ = STRING$(196, 80)
CALL niveau(ni, 2)

IF ni = 1 THEN
GOSUB nature1
ELSE
GOSUB nature2
END IF

CALL resultats(re, ni, 2)
EXIT SUB


nature1:

w$ = "L'ordinateur va afficher une phrase."
z$ = "Avec les flèches, tu devras"
y$ = "sélectionner le mot demandé."
CALL consigne(3, w$, z$, y$)


re = 1 'car 9 essais...
FOR ii = 1 TO 3

CALL titre
CALL niv(3, ii)
'tirage de la phrase
DO
f = 0
z(ii) = INT(RND * 10) + 1
FOR j = 1 TO ii - 1
IF z(ii) = z(j) THEN f = 1: EXIT FOR
NEXT
LOOP WHILE f = 1
n = z(ii)

ph$ = ph$(n)
ph3$ = ph3$(n)

'affecte
i = 0: l = 1
DO
z = INSTR(l, ph$, " "): IF z = 0 THEN EXIT DO
i = i + 1
m2$(i) = MID$(ph$, l, z - l)
l = z + 1
LOOP

'on mémorise l'emplacement du début des mots
h = INT(40 + 1 - (LEN(ph$) / 2))

place = 1
i = 1
s(i) = h
DO
i = i + 1
s = INSTR(place, ph$, " ")
s(i) = s + h
place = s + 1
LOOP WHILE s <> 0
nbmots = i - 2

FOR jj = 1 TO 3 '++++++++++++++++++ 3 essais par phrases
c = 0

'tirage nature
s = INSTR(1, ph3$, "5")
IF s = 0 THEN nb = 4 ELSE nb = 5 'pas de pronom personnel

DO
f = 0
z2(jj) = INT(RND * nb) + 1
FOR j = 1 TO jj - 1
IF z2(jj) = z2(j) THEN f = 1: EXIT FOR
NEXT
LOOP WHILE f = 1
nat = z2(jj)

'affichage de la phrase et du curseur
CALL cadre(6, 15, 50, 2, blanc)
COLOR , blanc
CALL centre(7, noir, "Sélectionne un " + p$(nat))
i = 1
DO
COLOR , noir
CALL centre(23, blanc, CHR$(27) + " " + CHR$(26) + " puis " + rt$)

CALL cadre(10, 15, 50, 4, blanc)
COLOR , blanc
CALL centre(12, noir, ph$)
CALL centre(13, noir, SPACE$(38))
COLOR blancbrill, rouge
LOCATE 12, s(i)
IF RIGHT$(m2$(i), 1) = "." OR RIGHT$(m2$(i), 1) = "," THEN
PRINT MID$(m2$(i), 1, LEN(m2$(i)) - 1)
ELSE
PRINT m2$(i)
END IF
COLOR blancbrill, noir

nat2:
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 = 12 THEN
sc = SCREEN(v_mouse, h_mouse)
IF sc = 32 OR sc = 219 THEN
BEEP
ELSE
'on cherche les lettres à gauche jusqu'à espace ou h1=1
h1 = h_mouse
DO
sc = SCREEN(v_mouse, h1)
IF sc = 32 OR sc = 219 THEN EXIT DO
h1 = h1 - 1
LOOP WHILE h1 <> 0
h1 = h1 + 1
h3 = h1: mot$ = ""
DO
sc = SCREEN(v_mouse, h3)
IF sc = 32 OR sc = 219 THEN EXIT DO
mot$ = mot$ + CHR$(sc)
h3 = h3 + 1
LOOP WHILE h3 <> 81

souris = 1
COLOR , blanc: CALL centre(12, noir, ph$)
LOCATE v_mouse, h1
COLOR blancbrill, rouge
PRINT mot$
CALL attendre(.3)
COLOR , noir
EXIT DO
END IF
ELSEIF v_mouse = 23 THEN
IF h_mouse >= 44 AND h_mouse <= 46 THEN
rr = 13
CALL attendre(.3)
souris = 2
EXIT DO
ELSEIF h_mouse = 35 THEN
'gauche
rr = 75
CALL attendre(.2)
souris = 2
EXIT DO
ELSEIF h_mouse = 37 THEN
'droite
rr = 77
CALL attendre(.2)
souris = 2
EXIT DO
ELSE
BEEP
END IF
ELSE
BEEP
END IF
END IF

LOOP WHILE r$ = ""

IF souris = 1 THEN
CALL trouvemot(ph$, mot$(), nm)
FOR i = 1 TO nm
IF mot$ = mot$(i) THEN EXIT FOR
NEXT

rep = VAL(MID$(ph3$, i, 1))

IF rep = nat THEN
CALL exact2(1)
IF c = 0 THEN re = re + 1
EXIT DO

ELSE
c = c + 1
CALL erreur2(1)
IF rep <> 0 THEN
CALL centre(23, rougeclair, "Tu as montré un " + p$(rep))
CALL attendre(2)
LOCATE 23, 1: PRINT SPACE$(80)
GOTO nat2
END IF
END IF
END IF

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


SELECT CASE rr

CASE 75 'gauche
i = i - 1
IF i < 1 THEN i = nbmots

CASE 77 'droite
i = i + 1
IF i > nbmots THEN i = 1

CASE 27
CALL quitter(noir)

CASE 13
'voir le mot selectionné
LOCATE 23: PRINT SPACE$(80)
rep = VAL(MID$(ph3$, i, 1))
IF rep = nat THEN
LOCATE 23, 18: CALL exact2(1)
IF c = 0 THEN re = re + 1
EXIT DO

ELSE
c = c + 1
LOCATE 23, 18: CALL erreur2(1)
IF rep <> 0 THEN
COLOR rougeclair
CALL centre(23, rougeclair, "Tu as montré un " + p$(rep))
CALL getinvimouse(w)
LOCATE 23, 1: PRINT SPACE$(80)
COLOR blancbrill
END IF
END IF

CASE ELSE
BEEP

END SELECT

LOOP

NEXT jj

NEXT ii

RETURN


'++++++++++++++
nature2:

w$ = "L'ordinateur va afficher des mots."
z$ = "Avec les flèches, tu devras trouver"
y$ = "la classe de ce mot."
CALL consigne(3, w$, z$, y$)

c = 0: TT = 10
re = 0

FOR ii = 1 TO 10
CALL titre
CALL niv(10, ii)
cc = 0
DO
f = 0
z(ii) = INT(RND * nf) + 1
FOR j = 1 TO ii - 1
IF z(ii) = z(j) THEN f = 1: EXIT FOR
NEXT
LOOP WHILE f = 1
n = z(ii)

n$ = MID$(m$(n), 1, LEN(m$(n)) - 1): ret = VAL(RIGHT$(m$(n), 1))

CALL cadre(5, 40 - 12, 25, 4, blanc)
COLOR , blanc
CALL centre(7, noir, n$)
nat1:
COLOR , noir
LOCATE 23: PRINT SPACE$(80)

CALL centre(23, blanc, gg$)
COLOR blancbrill, bleu
CALL fleches(13, 31, p$(), 5, r, rouge, 1, 23, 35)
r = r - 1

COLOR , noir: LOCATE 23, 1: PRINT SPACE$(80)
IF r = ret THEN
CALL exact2(1)
IF cc = 0 THEN re = re + 1
ELSE
cc = cc + 1
IF cc < 3 THEN
CALL erreur2(1)
ELSE
CALL Solution(p$(ret + 1))
END IF
GOTO nat1
END IF
cc = 0
NEXT ii

RETURN


END SUB

DEFINT A-Z
SUB noms (re%, ni%, a$(), rt$, gg$, pre$, titr$, prog%, nom$, noir%, bleu%, vert%, rouge%, marron%, blanc%, vertclair%, cyanclair%, rougeclair%, jaune%, blancbrill%)
'10/5/94
DIM p$(4), z(10)
p$(1) = "personne": p$(2) = "animal": p$(3) = "chose": p$(4) = "autre"
gg = 48: c = 0

'présentation
w$ = "L'ordinateur va afficher des mots."
z$ = "Avec les flèches, tu devras trouver"
y$ = "le groupe du nom."
CALL consigne(3, w$, z$, y$)

'niveau
CALL niveau(ni, 2)


FOR ii = 1 TO 10 '+++++++++++++++
CALL titre
CALL niv(10, ii)

'LOCATE 9: FOR i = 1 TO 5: PRINT SPACE$(20): NEXT

DO
DO
f = 0
z(ii) = INT(RND * gg) + 1
FOR j = 1 TO ii - 1
IF z(ii) = z(j) THEN f = 1: EXIT FOR
NEXT
LOOP WHILE f = 1
n = z(ii)
n$ = MID$(a$(n), 2, LEN(a$(n)) - 1)
b = VAL(LEFT$(a$(n), 1))

LOOP WHILE b = 4 AND ni = 1
CALL cadre(7, 20, 16, 2, marron)
COLOR , marron
LOCATE 8, 22: PRINT "Nom"
CALL cadre(10, 20, 16, 4, blanc)
LOCATE 12, 22: COLOR noir, blanc: PRINT n$

no0:
COLOR blanc, noir

IF ni = 1 THEN
CALL fleches(11, 45, p$(), 3, r, rouge, 1, 23, 45)
ELSE
CALL fleches(10, 45, p$(), 4, r, rouge, 1, 23, 45)
END IF

COLOR , noir
LOCATE 23
IF r = b THEN
CALL exact2(1)
ELSE
cc = cc + 1: IF cc = 1 THEN c = c + 1
IF cc < 3 THEN
CALL erreur2(1)
ELSE
CALL Solution(p$(b))
END IF

GOTO no0
END IF
cc = 0
NEXT ii

re = 10 - c: IF re < 0 THEN re = 0

CALL resultats(re, ni, 2)

END SUB

DEFINT A-Z
SUB pluriel (re%, ni%, n$(), rt$, gg$, pre$, titr$, prog%, nom$, noir%, bleu%, vert%, rouge%, marron%, blanc%, vertclair%, cyanclair%, rougeclair%, jaune%, blancbrill%)
'22/5/94
DIM z(5)
re = 0
'présentation
w$ = "Tu vas taper des noms au pluriel."
CALL consigne(1, w$, z$, y$)


CALL titre
LOCATE 4, 10: PRINT "Rappel"
CALL cadre(5, 10, 60, 14, rouge)
COLOR , rouge
CALL centre(7, blancbrill, "Le nom s'accorde avec le déterminant.")
CALL centre(8, blancbrill, "(s, x ou rien)")
h = 28
LOCATE 11
LOCATE , h: PRINT "une bille -> des billes"
LOCATE , h + 9: PRINT CHR$(24); SPACE$(13); CHR$(24)
PRINT
LOCATE , h: PRINT "un jeu -> des jeux"
LOCATE , h + 6: PRINT CHR$(24); SPACE$(11); CHR$(24)
PRINT
LOCATE , h: PRINT "un nez -> des nez"
LOCATE , h + 6: PRINT CHR$(24); SPACE$(11); CHR$(24)

CALL entree(noir, noir)

'niveau
CALL niveau(ni, 2)


IF ni = 1 THEN nf = 19 ELSE nf = 35

FOR ii = 1 TO 5 '+++++++++++++
CALL titre
CALL niv(5, ii)
g = 0

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

LOOP WHILE ni = 2 AND b < 16

r$ = n$(b)

CALL cadre(8, 15, 18, 2, vert)
CALL cadre(8, 47, 18, 2, vert)
COLOR blancbrill, vert
LOCATE 9, 17: PRINT "Singulier"
LOCATE 9, 49: PRINT "Pluriel"
CALL cadre(11, 15, 18, 4, rouge)
CALL cadre(11, 47, 18, 4, blanc)

LOCATE 13, 17
COLOR blancbrill, rouge: PRINT r$

IF LCASE$(MID$(r$, 1, 3)) = "un " THEN r$ = MID$(r$, 4) ELSE r$ = MID$(r$, 5)
IF r$ = "oeil" THEN w$ = "yeux": GOTO plu1
DR$ = RIGHT$(r$, 1)
IF DR$ = "s" OR DR$ = "x" OR DR$ = "z" THEN w$ = r$: GOTO plu1
DR$ = RIGHT$(r$, 2)
IF DR$ = "ou" THEN g = 1
IF DR$ = "al" THEN g = 2
IF DR$ = "au" THEN g = 3
IF DR$ = "eu" THEN g = 4
IF RIGHT$(r$, 3) = "ail" THEN g = 5
SELECT CASE g

CASE 0
w$ = r$ + "s"

CASE 1
IF r$ = "bijou" OR r$ = "caillou" OR r$ = "genou" OR r$ = "chou" OR r$ = "hibou" OR r$ = "joujou" OR r$ = "pou" THEN w$ = r$ + "x" ELSE w$ = r$ + "s"

CASE 2
IF r$ = "bal" OR r$ = "carnaval" OR r$ = "chacal" OR r$ = "festival" OR r$ = "récital" OR r$ = "régal" THEN w$ = r$ + "s" ELSE w$ = (LEFT$(r$, LEN(r$) - 2)) + "aux"

CASE 3
IF r$ = "landau" THEN w$ = r$ + "s" ELSE w$ = r$ + "x"

CASE 4
IF r$ = "pneu" OR r$ = "bleu" THEN w$ = r$ + "s" ELSE w$ = r$ + "x"

CASE 5
IF r$ = "travail" OR r$ = "émail" OR r$ = "soupirail" OR r$ = "corail" OR r$ = "vitrail" OR r$ = "bail" OR r$ = "ventail" THEN w$ = LEFT$(r$, LEN(r$) - 3) + "aux" ELSE w$ = r$ + "s"

END SELECT

plu1:
COLOR , noir
LOCATE 23: PRINT SPACE$(80)
CALL centre(23, blanc, "Tape le mot")
COLOR noir, blanc
LOCATE 13, 49: PRINT "des ";
DEF SEG = 0
POKE &H417, (PEEK(&H417) AND &HBF) 'minus
DEF SEG

CALL inputgen(13, rp$, 65, 165, noir, blanc)

CALL ligne23(noir, noir)

IF rp$ = w$ THEN
CALL exact2(1)
IF cc = 0 THEN re = re + 2
ELSE
cc = cc + 1
IF cc < 3 THEN
t$ = RIGHT$(rp$, 1)
IF t$ = "x" OR t$ = "s" OR t$ = "z" THEN
CALL erreur2(1)
ELSE
CALL centre(23, rougeclair, "Accord : x, s ou rien")
CALL attendre(2)
END IF
ELSE
CALL Solution(w$)
END IF
GOTO plu1
END IF
cc = 0
NEXT ii '+++++++++

CALL resultats(re, ni, 2)

END SUB

DEFINT A-Z
SUB transforme (m$)
'pour sub espace
'13/5/94
e$ = " ": GOSUB sup

e$ = "(": GOSUB avant
e$ = CHR$(34): GOSUB avant

e$ = CHR$(34): GOSUB apres
e$ = ")": GOSUB apres
e$ = ",": GOSUB apres
e$ = ".": GOSUB apres

e$ = ":": GOSUB avap
e$ = "!": GOSUB avap
e$ = "?": GOSUB avap
e$ = ";": GOSUB avap
e$ = "'": GOSUB avap '1° étape

GOSUB ctrl
GOSUB ctrl2
GOSUB ctrl3 '2° étape
GOSUB ctrl4

e$ = "! ! !": e2$ = "!!!": GOSUB ctrl5
e$ = "? ? ?": e2$ = "???": GOSUB ctrl5
e$ = ". . .": e2$ = "...": GOSUB ctrl5

EXIT SUB

apres:
l = 1: f = 0
DO
GOSUB espace
LOOP WHILE z <> 0
RETURN

espace:
z = INSTR(l, m$, e$): IF z = 0 THEN RETURN
IF e$ = CHR$(34) THEN f = f + 1
IF f / 2 <> INT(f / 2) AND e$ = CHR$(34) THEN l = z + 1: RETURN

IF ASC(MID$(m$, z + 1, 1)) <> 32 THEN m$ = MID$(m$, 1, z) + " " + MID$(m$, z + 1) 'pas espace après
IF z = 1 THEN l = z + 1: GOTO espace

IF ASC(MID$(m$, z - 1, 1)) = 32 THEN m$ = MID$(m$, 1, z - 2) + MID$(m$, z): 'espace avant
l = z + 1

RETURN

avant:
l = 1: f = 0
DO
GOSUB espace2
LOOP WHILE z <> 0
RETURN

espace2:
z = INSTR(l, m$, e$): IF z = 0 THEN RETURN
IF e$ = CHR$(34) THEN f = f + 1
IF f / 2 = INT(f / 2) AND e$ = CHR$(34) THEN l = z + 1: RETURN 'pair
IF ASC(MID$(m$, z + 1, 1)) = 32 THEN m$ = MID$(m$, 1, z) + MID$(m$, z + 2)'un espace après
IF z = 1 THEN GOTO esp2
IF ASC(MID$(m$, z - 1, 1)) <> 32 THEN m$ = MID$(m$, 1, z - 1) + " " + MID$(m$, z): z = z + 1 'pas d'espace
esp2:
l = z + 1
RETURN

avap:
l = 1
DO
GOSUB espace3
LOOP WHILE z <> 0
RETURN

espace3:
z = INSTR(l, m$, e$): IF z = 0 THEN RETURN
IF ASC(MID$(m$, z + 1, 1)) <> 32 THEN m$ = MID$(m$, 1, z) + " " + MID$(m$, z + 1)
IF z = 1 THEN l = z + 1: GOTO espace3
IF ASC(MID$(m$, z - 1, 1)) <> 32 THEN m$ = MID$(m$, 1, z - 1) + " " + MID$(m$, z) 'pas d'espace
l = z + 1
RETURN

sup:
l = 1
DO
GOSUB espace4
LOOP WHILE z <> LEN(m$)
RETURN

espace4:
z = INSTR(l, m$, e$): IF z = LEN(m$) THEN RETURN
IF ASC(MID$(m$, z + 1, 1)) = 32 THEN m$ = MID$(m$, 1, z) + MID$(m$, z + 2): RETURN
l = z + 1
RETURN

ctrl:
l = 1: f = 0
DO
GOSUB espace5
LOOP WHILE z <> 0
RETURN

espace5:
z = INSTR(l, m$, CHR$(34)): IF z = 0 THEN RETURN
f = f + 1
IF f / 2 <> INT(f / 2) THEN l = z + 1: RETURN
t$ = MID$(m$, z - 2, 2)
IF t$ = ". " OR t$ = "? " OR t$ = "! " OR t$ = ") " THEN
m$ = MID$(m$, 1, z - 2) + MID$(m$, z)
END IF
l = z + 1
RETURN

ctrl2:
l = 1
DO
GOSUB espace6
LOOP WHILE z <> 0
RETURN

espace6:
z = INSTR(l, m$, CHR$(34)): IF z = 0 THEN RETURN
IF z = 1 THEN l = z + 1: RETURN
t$ = MID$(m$, z - 2, 2)
IF t$ = "( " THEN
m$ = MID$(m$, 1, z - 2) + MID$(m$, z)
END IF
l = z + 1
RETURN

ctrl3:
l = 1
DO
GOSUB espace7
LOOP WHILE z <> 0
RETURN

espace7:
z = INSTR(l, m$, " ' "): IF z = 0 THEN RETURN
m$ = MID$(m$, 1, z - 1) + "'" + MID$(m$, z + 3)
l = z + 1
RETURN

ctrl4:
l = 1
DO
GOSUB espace8
LOOP WHILE z <> 0
RETURN

espace8:
z = INSTR(l, m$, ")"): IF z = 0 THEN RETURN
t$ = MID$(m$, z - 2, 2)
IF t$ = ". " OR t$ = "? " OR t$ = "! " THEN
m$ = MID$(m$, 1, z - 2) + MID$(m$, z)
END IF
l = z + 1
RETURN

ctrl5:
l = 1
DO
GOSUB espace9
LOOP WHILE z <> 0
RETURN

espace9:
z = INSTR(l, m$, e$): IF z = 0 THEN RETURN
m$ = MID$(m$, 1, z - 1) + e2$ + MID$(m$, z + 5)
l = z + 1
RETURN

END SUB
 

 

Précédente Accueil Remonter Suivante