Le djembé est à la musique ce que le couteau est à la purée.
Magic 500 n'est que le jeu où l'on devine un nombre, après essais successifs (trop grand, trop petit...)
Développé par les membres de Microloges, le club d'informatique de Beaumetz les loges, Magic 500 présente l'interêt d'offrir des sources quickbasic qui peuvent servir d'exemples aux débutants...
Le fichier principal:
DECLARE SUB jeu (moinsbon!) DECLARE SUB regle () DECLARE SUB beethov () DECLARE SUB init (e$) DECLARE SUB texte (a$, li!, co!, couleur!, t$) DECLARE SUB espace (w!) DECLARE SUB elise () CONST nbnb = 5 'nb de nb à trouver CONST nbch = 3 'nb de chiffre à trouver CONST nbenr = 30 TYPE sov chnom AS STRING * 20 chnbes AS INTEGER END TYPE DIM joueur AS sov joueur.chnom = "Adam" ' Page de garde... '__________________________________________________ DO WIDTH 40, 25 CLS texte "MICRoLoGES", 12, 5, 3, "non" elise texte "PRESENTE:", 14, 10, 4, "oui" CLS texte " M A G I C 5 0 0", 12, 1, 5, "non" SLEEP 2 '_______________________________________________ 'page 2 WIDTH 80, 50 CLS OPEN "score.wou" FOR RANDOM AS #1 LEN = LEN(joueur) i = 1 texte "MEILLEURS SCORES", 1, 25, 2, "non" texte "NOM", 5, 15, 3, "non" texte "ESSAIS", 5, 50, 3, "non" max = LOF(1) / LEN(joueur) IF max > nbenr THEN max = nbenr FOR i = 1 TO max GET #1, i, joueur LOCATE 7 + i, 2 COLOR 1 PRINT i LOCATE 7 + i, 15 PRINT joueur.chnom LOCATE 7 + i, 50 COLOR 5 PRINT joueur.chnbes NEXT CLOSE #1 moinsbon = joueur.chnbes IF moinsbon = 0 OR max < nbenr THEN moinsbon = 9999 LOCATE 50, 35 COLOR 2 PRINT "J"; COLOR 1 PRINT "ouer/"; COLOR 2 PRINT "R"; COLOR 1 PRINT "ègles/"; COLOR 2 PRINT "Q"; COLOR 1 PRINT "uitter"; DO init e$ 'on initialise la liste de nb aleatoires LOOP UNTIL INSTR("jJrRqQ", e$) > 0 AND e$ <> "" SELECT CASE UCASE$(e$) CASE "J" jeu moinsbon CASE "Q" fin$ = "oui" CASE "R" regle END SELECT LOOP UNTIL fin$ = "oui" SUB jeu (moinsbon) DIM joueur AS sov DIM j AS sov CLS WIDTH 80, 50 BEEP FOR no = 1 TO nbnb nbcach = INT(RND * 9 * 10 ^ (nbch - 1)) + 10 ^ (nbch - 1) DO essai = essai + 1 PRINT COLOR 3 PRINT "Encore "; nbnb - no + 1; "nombre"; IF nbnb - no + 1 > 1 THEN PRINT ("s"); PRINT " ...trouver. "; COLOR 3 PRINT " Essai nø "; COLOR 4 PRINT essai; COLOR 3 PRINT " > "; t = 0 FOR y = 1 TO nbch t$ = "" DO t$ = INKEY$ LOOP UNTIL INSTR("0123456789q", t$) > 0 AND t$ <> "" IF t$ = "q" THEN STOP PRINT t$; t = t * 10 + VAL(t$) t$ = "" NEXT y IF t > nbcach THEN PRINT " trop grand " IF t < nbcach THEN PRINT " trop petit " LOOP UNTIL t = nbcach COLOR 4 PRINT " BRAVO !" IF no <nbnb THEN elise ELSE beethov espace (5) NEXT no PRINT " Mission accomplie !" SLEEP 3 ' ici on regarde le score et on le sauve si il est bon IF essai < moinsbon THEN PRINT " Bravo ! Vous entrez dans le top "; nbenr PRINT BEEP INPUT "Entrez votre nom : "; nom$ OPEN "score.new" FOR RANDOM AS #2 LEN = LEN(joueur) OPEN "score.wouf" FOR RANDOM AS #1 LEN = LEN(joueur) ok$ = "non" i2 = 0 max = LOF(1) / LEN(joueur) IF max = 0 THEN ok$ = "oui" j.chnom = nom$ j.chnbes = essai i2 = i2 + 1 PUT #2, i2, j END IF FOR i = 1 TO max GET #1, i, joueur IF (essai < joueur.chnbes OR joueur.chnbes = 0) AND ok$ = "non" THEN ok$ = "oui" j.chnom = nom$ j.chnbes = essai i2 = i2 + 1 PUT #2, i2, j END IF i2 = i2 + 1 PUT #2, i2, joueur NEXT IF ok$ = "non" THEN ok$ = "oui" j.chnom = nom$ j.chnbes = essai i2 = i2 + 1 PUT #2, i2, j END IF CLOSE #2 CLOSE #1 KILL "score.wou" NAME "score.new" AS "score.wou" END IF END SUB SUB regle WIDTH 40, 25 CLS texte "Règles", 5, 10, 5, "non" texte "du jeu", 5, 23, 5, "oui" espace (5) COLOR 4 PRINT "Il s'agit de découvrir "; PRINT nbnb; PRINT " nombres cachés en dépensant" PRINT "le moins d'essais possibles." PRINT PRINT " Les nombres sont des entiers de "; nbch; " chiffres" PRINT PRINT " plus petit, ou plus grand" PRINT "seront mes seules indications" PRINT texte "BONNE CHANCE", 23, 12, 3, "oui" LOCATE 25, 10 COLOR 4 PRINT " presser une touche"; SLEEP END SUB
Et ce fichier externe, comme un "include"...
SUB beethov ECOUTE$ = "T180 o2 P2 P8 L8 GGG L2 E-" SUITE$ = "P24 P8 L8 FFF L2 D" PLAY ECOUTE$ + SUITE$ END SUB SUB elise PLAY ON lise$ = "o3 L8 E D+ E D+ E o2 B o3 D C L2 o2 A" PLAY "MB X" + VARPTR$(lise$) END SUB SUB espace (w) FOR i = 1 TO w PRINT NEXT END SUB SUB init (e$) DO e$ = INKEY$ z = z + 1 LOOP UNTIL e$ <> "" RANDOMIZE (z) END SUB SUB texte (a$, li, co, couleur, t$) LOCATE li, co COLOR couleur FOR i = 1 TO LEN(a$) PRINT (MID$(a$, i, 1)); " "; IF t$ = "oui" THEN SLEEP 1 NEXT END SUB
Quick Basic est téléchargeable: qb45fr.zip
Un autre exemple sur Wikipedia: Exemple de programme sous Qbasic