' ************************************* ' * JEU du CHASSEUR de Gloutons * C:\MIAMMIAM\MIAMMIAM.BAS ' ************************************* ' AUTEUR: Michel - DATE 27/10/1995 - 17/11/1995 - 12/06/2006 OPTION BASE 1: DEFSTR A-Z: CLEAR , , 4000 DEF SEG = 0 Pk% = PEEK(1047): IF (Pk% AND 32) = 0 THEN POKE 1047, Pk% OR 32 DEF SEG DIM Score&(15), Joueur(15) AS STRING * 20, Nota(15) AS STRING * 20 DIM Terrain(38, 27) AS STRING * 1 ' Indices COLONNE (Xt%) et Ligne (Yt%) ' Suivant Xts% Yts% ' Valeurs: Mur = "M" ' Chasseur = "C" ' Vie de Secours = "V" ' PiŠges "1" … "5" en cours de pose ' "5" … "1" en cours de d‚montage ' "P" si complet ' "6" pour UN Glouton pris DIM Xpix%(38) ' Pixel de gauche de colonne du terrain DIM Ypix%(27) ' Pixel du haut de ligne du terrain DIM Glouton%(38, 27) ' Nombre de Gloutons par case DIM XGl%(21) ' Colonnes des diff‚rents Gloutons DIM YGl%(21) ' Lignes des diff‚rents Gloutons DIM DGlouton(21) ' Direction de deplacement des Gloutons ' (N, S, E, O) DIM Glouton.Piege%(38, 27) ' Num‚ro du Glouton pris au piŠge DIM Duree.Piege%(38, 27) ' Dur‚e pi‚geage Glouton ' ** PRESENTATION ** SCREEN 12: WINDOW SCREEN (1, 1)-(640, 480): RANDOMIZE TIMER GOSUB GS01.CADRE ' ** Dessins DIM Chasseur&(33), Glouton1&(33), Glouton2&(33), Glouton3&(33), Glouton4&(33) DIM Pvide&(33), Pplein1&(33), Pplein2&(33), Vsec&(33), Boum&(33), L&(385) CLOSE : OPEN "C:\MIAMMIAM\CHASSEUR.GRA" FOR INPUT AS #1 ' ** Chasseur FOR I% = 1 TO 33: INPUT #1, Chasseur&(I%): NEXT I%: CLOSE OPEN "C:\MIAMMIAM\Glouton1.GRA" FOR INPUT AS #1 ' ** Glouton 1 FOR I% = 1 TO 33: INPUT #1, Glouton1&(I%): NEXT I%: CLOSE OPEN "C:\MIAMMIAM\Glouton2.GRA" FOR INPUT AS #1 ' ** Glouton 2 FOR I% = 1 TO 33: INPUT #1, Glouton2&(I%): NEXT I%: CLOSE OPEN "C:\MIAMMIAM\Glouton3.GRA" FOR INPUT AS #1 ' ** Glouton 3 FOR I% = 1 TO 33: INPUT #1, Glouton3&(I%): NEXT I%: CLOSE OPEN "C:\MIAMMIAM\Glouton4.GRA" FOR INPUT AS #1 ' ** Glouton 4 FOR I% = 1 TO 33: INPUT #1, Glouton4&(I%): NEXT I%: CLOSE OPEN "C:\MIAMMIAM\PVIDE.GRA" FOR INPUT AS #1 ' ** PiŠge Vide FOR I% = 1 TO 33: INPUT #1, Pvide&(I%): NEXT I%: CLOSE OPEN "C:\MIAMMIAM\PPLEIN1.GRA" FOR INPUT AS #1 ' ** PiŠge Ferm‚ 1 FOR I% = 1 TO 33: INPUT #1, Pplein1&(I%): NEXT I%: CLOSE OPEN "C:\MIAMMIAM\PPLEIN2.GRA" FOR INPUT AS #1 ' ** PiŠge Ferm‚ 2 FOR I% = 1 TO 33: INPUT #1, Pplein2&(I%): NEXT I%: CLOSE OPEN "C:\MIAMMIAM\VSEC.GRA" FOR INPUT AS #1 ' ** VIE de SECOURS FOR I% = 1 TO 33: INPUT #1, Vsec&(I%): NEXT I%: CLOSE OPEN "C:\MIAMMIAM\BOUM.GRA" FOR INPUT AS #1 ' ** BOUM FOR I% = 1 TO 33: INPUT #1, Boum&(I%): NEXT I%: CLOSE ' ** Chiffres 18/25 DIM C0&(76), C1&(76), C2&(76), C3&(76), C4&(76), C5&(76) DIM C6&(76), C7&(76), C8&(76), C9&(76), CM&(76), CP&(76) OPEN "C:\MIAMMIAM\C_0.LET" FOR INPUT AS #1 FOR I% = 1 TO 76: INPUT #1, C0&(I%): NEXT I%: CLOSE OPEN "C:\MIAMMIAM\C_1.LET" FOR INPUT AS #1 FOR I% = 1 TO 76: INPUT #1, C1&(I%): NEXT I%: CLOSE OPEN "C:\MIAMMIAM\C_2.LET" FOR INPUT AS #1 FOR I% = 1 TO 76: INPUT #1, C2&(I%): NEXT I%: CLOSE OPEN "C:\MIAMMIAM\C_3.LET" FOR INPUT AS #1 FOR I% = 1 TO 76: INPUT #1, C3&(I%): NEXT I%: CLOSE OPEN "C:\MIAMMIAM\C_4.LET" FOR INPUT AS #1 FOR I% = 1 TO 76: INPUT #1, C4&(I%): NEXT I%: CLOSE OPEN "C:\MIAMMIAM\C_5.LET" FOR INPUT AS #1 FOR I% = 1 TO 76: INPUT #1, C5&(I%): NEXT I%: CLOSE OPEN "C:\MIAMMIAM\C_6.LET" FOR INPUT AS #1 FOR I% = 1 TO 76: INPUT #1, C6&(I%): NEXT I%: CLOSE OPEN "C:\MIAMMIAM\C_7.LET" FOR INPUT AS #1 FOR I% = 1 TO 76: INPUT #1, C7&(I%): NEXT I%: CLOSE OPEN "C:\MIAMMIAM\C_8.LET" FOR INPUT AS #1 FOR I% = 1 TO 76: INPUT #1, C8&(I%): NEXT I%: CLOSE OPEN "C:\MIAMMIAM\C_9.LET" FOR INPUT AS #1 FOR I% = 1 TO 76: INPUT #1, C9&(I%): NEXT I%: CLOSE OPEN "C:\MIAMMIAM\C_M.LET" FOR INPUT AS #1 FOR I% = 1 TO 76: INPUT #1, CM&(I%): NEXT I%: CLOSE OPEN "C:\MIAMMIAM\C_P.LET" FOR INPUT AS #1 FOR I% = 1 TO 76: INPUT #1, CP&(I%): NEXT I%: CLOSE ' ** Chiffres 13/16 DIM D0&(33), D1&(33), D2&(33), D3&(33), D4&(33), D5&(33) DIM D6&(33), D7&(33), D8&(33), D9&(33), DM&(33), DP&(33) DIM DMIN&(33), DSEC&(33) OPEN "C:\MIAMMIAM\C0.LET" FOR INPUT AS #1 FOR I% = 1 TO 33: INPUT #1, D0&(I%): NEXT I%: CLOSE OPEN "C:\MIAMMIAM\C1.LET" FOR INPUT AS #1 FOR I% = 1 TO 33: INPUT #1, D1&(I%): NEXT I%: CLOSE OPEN "C:\MIAMMIAM\C2.LET" FOR INPUT AS #1 FOR I% = 1 TO 33: INPUT #1, D2&(I%): NEXT I%: CLOSE OPEN "C:\MIAMMIAM\C3.LET" FOR INPUT AS #1 FOR I% = 1 TO 33: INPUT #1, D3&(I%): NEXT I%: CLOSE OPEN "C:\MIAMMIAM\C4.LET" FOR INPUT AS #1 FOR I% = 1 TO 33: INPUT #1, D4&(I%): NEXT I%: CLOSE OPEN "C:\MIAMMIAM\C5.LET" FOR INPUT AS #1 FOR I% = 1 TO 33: INPUT #1, D5&(I%): NEXT I%: CLOSE OPEN "C:\MIAMMIAM\C6.LET" FOR INPUT AS #1 FOR I% = 1 TO 33: INPUT #1, D6&(I%): NEXT I%: CLOSE OPEN "C:\MIAMMIAM\C7.LET" FOR INPUT AS #1 FOR I% = 1 TO 33: INPUT #1, D7&(I%): NEXT I%: CLOSE OPEN "C:\MIAMMIAM\C8.LET" FOR INPUT AS #1 FOR I% = 1 TO 33: INPUT #1, D8&(I%): NEXT I%: CLOSE OPEN "C:\MIAMMIAM\C9.LET" FOR INPUT AS #1 FOR I% = 1 TO 33: INPUT #1, D9&(I%): NEXT I%: CLOSE OPEN "C:\MIAMMIAM\CM.LET" FOR INPUT AS #1 FOR I% = 1 TO 33: INPUT #1, DM&(I%): NEXT I%: CLOSE OPEN "C:\MIAMMIAM\CP.LET" FOR INPUT AS #1 FOR I% = 1 TO 33: INPUT #1, DP&(I%): NEXT I%: CLOSE OPEN "C:\MIAMMIAM\CMIN.LET" FOR INPUT AS #1 FOR I% = 1 TO 33: INPUT #1, DMIN&(I%): NEXT I%: CLOSE OPEN "C:\MIAMMIAM\CSEC.LET" FOR INPUT AS #1 FOR I% = 1 TO 33: INPUT #1, DSEC&(I%): NEXT I%: CLOSE E00.SUITE: COLOR 14 DATA 97, 145, 241, 289, 337, 385, 433, 481,241, 289, 337 DATA 145, 193, 241, 289, 337, 385, 433, 481 Xdep% = 500: Y1% = 103: M = "LACHASSE" FOR I% = 1 TO 8 Lettre = MID$(M, I%, 1): READ Xfin%: GOSUB GS02.TITRE NEXT I% Y1% = 193: M = "AUX" FOR I% = 1 TO 3 Lettre = MID$(M, I%, 1): READ Xfin%: GOSUB GS02.TITRE NEXT I% Y1% = 283: M = "GLOUTONS" FOR I% = 1 TO 8 Lettre = MID$(M, I%, 1): READ Xfin%: GOSUB GS02.TITRE NEXT I% LINE (113, 369)-(544, 377), 11, BF FOR A& = 1 TO 100000 X% = INT(RND * 608) + 16: Y% = INT(RND * 448) + 16 C% = POINT(X%, Y%) IF C% = 0 THEN PSET (X%, Y%), INT(RND * 13) + 3 NEXT GOTO E50.DEBUT E32.CREAT.FICH.SCORES: ' *** PREMIERE Cr‚ation du fichier des scores CLOSE : OPEN "C:\MIAMMIAM\SCORES.CHA" FOR OUTPUT AS #1 Score& = 0: Joueur = "????? ": Nota = SPACE$(20) FOR I% = 1 TO 15: WRITE #1, Score&, Joueur, Nota: NEXT I% CLOSE : GOTO E51.LECTURE.SCORES E50.DEBUT: ON ERROR GOTO F04.ERREUR.PROG Cfd% = 0 ' COULEUR DE FOND ECRAN Ccv1% = 15: Ccv2% = 0 ' COULEUR CADRE VIDE Cct1% = 11: Cct2% = 0: Cte1% = 15: Cte2% = 0 ' COULEUR CADRE/TITRE SCREEN 0: WIDTH 80, 25: LOCATE 1, 1: COLOR , Cfd%: PRINT SPACE$(2000); Titre = " *** JEU de la CHASSE aux Gloutons *** " Y% = 2: X% = 23: GOSUB GS06.TITRE: L.Er% = 25 E51.LECTURE.SCORES: Etape = "OUVERTURE FICHIER" CLOSE : OPEN "C:\MIAMMIAM\SCORES.CHA" FOR INPUT AS #1 Etape = "" FOR I% = 1 TO 15 INPUT #1, Score&, Joueur, Nota Score&(I%) = Score&: Joueur(I%) = Joueur: Nota(I%) = Nota NEXT I% CLOSE : GOSUB GS08.TRI.SCORES COLOR Cfd%, Cfd% FOR Y% = 5 TO 23: LOCATE Y%, 2: PRINT SPACE$(78); : NEXT Y% Tempo = "SCORES … BATTRE": Lchg% = 7: Cchg% = 4: Lcbd% = 23: Ccbd% = 6 GOSUB GS07.CADRE.VIDE: COLOR 30, 0 FOR I% = 1 TO 15: LOCATE I% + 7, 5: PRINT MID$(Tempo, I%, 1); : NEXT I% LOCATE 14, 12: COLOR 11: PRINT "Û"; LOCATE 15, 8: PRINT "°±²ÛÛ"; : LOCATE 16, 12: PRINT "Û"; Ecr(1) = "ÉÍÍËÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»" Ecr(2) = "ºRgº Score º JOUEUR º Observations º" Ecr(3) = "ÌÍÍÎÍÍÍÍÍÍÍÍÍÎÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÎÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹" Ecr(4) = "º º º º º" Ecr(5) = "ÈÍÍÊÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ" COLOR 15, 0: FOR Y% = 5 TO 7: LOCATE Y%, 15: PRINT Ecr(Y% - 4); : NEXT Y% FOR Y% = 8 TO 22: LOCATE Y%, 15: PRINT Ecr(4); : NEXT Y% LOCATE 23, 15: PRINT Ecr(5); : COLOR 15, 0 FOR I% = 1 TO 15 LOCATE I% + 7, 16: PRINT USING "##"; I% LOCATE I% + 7, 19: PRINT USING "######## "; Score&(I%) LOCATE I% + 7, 29: PRINT Joueur(I%) LOCATE I% + 7, 50: PRINT Nota(I%) NEXT I% Faux = "APPUYEZ sur une TOUCHE quelconque pour POURSUIVRE" GOSUB GS03.ERREUR COLOR Cfd%: FOR Y% = 5 TO 23: LOCATE Y%, 2: PRINT SPACE$(78); : NEXT Y% Cct1% = 14: Cct2% = 5: Cte1% = 15: Cte2% = 1 Titre = " Votre NOM : " Y% = 11: X% = 27: GOSUB GS06.TITRE Y% = 12: X% = 41: Nbc% = 15: Saisiepr = "?": GOSUB GS05.ALPHA Joueur = S LOCATE Y%, X%: COLOR 14, Cfd%: PRINT Joueur; : SLEEP 2 ' Mise en table des cordonn‚es Colonne/Ligne du terrain en pixels ' Pixel en haut et … gauche de chaque colonne/ligne FOR X% = 1 TO 38: Xpix%(X%) = X% * 16 + 1: NEXT X% FOR Y% = 1 TO 27: Ypix%(Y%) = (Y% + 2) * 16 + 1: NEXT Y% Nb.Gl% = 1: Vies% = 3 Score& = 0: Valeur.Glouton% = 2000: Valeur.Vie.Secours% = 2500 ON TIMER(1) GOSUB GS14.BONUS.TEMPS ' *** Ancienne m‚thode de ralentissement 'Debut! = TIMER 'DO: V1& = V1& + 1: LOOP UNTIL TIMER > Debut! + 1 ' ************ 'T1# = V1& * 8 ' *** Ralentiseur de jeu ' ************ Duree.Cycle! = .4 ' *** Nouvelle m‚thode de r‚gularisation de vitesse SCREEN 12: WINDOW SCREEN (1, 1)-(640, 480) E52.NIVEAU.SUPERIEUR: '*** Affichage terrain vide RANDOMIZE TIMER: Couleur% = 0 LINE (1, 1)-(640, 480), Couleur%, BF LINE (33, 65)-(608, 464), 15, BF FOR X% = 49 TO 529 STEP 80 FOR Y% = 81 TO 401 STEP 64 LINE (X%, Y%)-(X% + 63, Y% + 47), Couleur%, BF NEXT Y% NEXT X% ERASE Terrain, Glouton%, XGl%, YGl% ' ** Initialisation du Terrain "(38, 27)" FOR X% = 1 TO 38: FOR Y% = 1 TO 27: Terrain(X%, Y%) = "M": NEXT Y%, X% FOR Y% = 2 TO 26 STEP 4: FOR X% = 2 TO 37: Terrain(X%, Y%) = " ": NEXT X%, Y% FOR X% = 2 TO 37 STEP 5: FOR Y% = 2 TO 26: Terrain(X%, Y%) = " ": NEXT Y%, X% ' ** Suppression de 5 'Couloirs' FOR I% = 1 TO 5 E52.OCCUPE: A2.7% = INT(RND * 6) + 1: X% = 7 + (A2.7% - 1) * 5 A2.6% = INT(RND * 5) + 1: Y% = 6 + (A2.6% - 1) * 4 SELECT CASE INT(RND * 4) + 1 CASE 1: IF Terrain(X%, Y% - 1) = "M" GOTO E52.OCCUPE Xcl% = Xpix%(X%): Ycl% = Ypix%(Y%) Xhg% = Xcl%: Xbd% = Xhg% + 15 Yhg% = Ycl% - 48: Ybd% = Ycl% - 1 LINE (Xhg%, Yhg%)-(Xbd%, Ybd%), Couleur%, BF FOR Y% = Y% - 1 TO Y% - 3 STEP -1: Terrain(X%, Y%) = "M": NEXT Y% CASE 2: IF Terrain(X%, Y% + 1) = "M" GOTO E52.OCCUPE Xcl% = Xpix%(X%): Ycl% = Ypix%(Y%) Xhg% = Xcl%: Xbd% = Xhg% + 15 Yhg% = Ycl% + 16: Ybd% = Ycl% + 63 LINE (Xhg%, Yhg%)-(Xbd%, Ybd%), Couleur%, BF FOR Y% = Y% + 1 TO Y% + 3: Terrain(X%, Y%) = "M": NEXT Y% CASE 3: IF Terrain(X% - 1, Y%) = "M" GOTO E52.OCCUPE Xcl% = Xpix%(X%): Ycl% = Ypix%(Y%) Xhg% = Xcl% - 64: Xbd% = Xcl% - 1 Yhg% = Ycl%: Ybd% = Ycl% + 15 LINE (Xhg%, Yhg%)-(Xbd%, Ybd%), Couleur%, BF FOR X% = X% - 4 TO X% - 1: Terrain(X%, Y%) = "M": NEXT X% CASE 4: IF Terrain(X%, Y% + 1) = "M" GOTO E52.OCCUPE Xcl% = Xpix%(X%): Ycl% = Ypix%(Y%) Xhg% = Xcl% + 16: Xbd% = Xhg% + 63 Yhg% = Ycl%: Ybd% = Ycl% + 15 LINE (Xhg%, Yhg%)-(Xbd%, Ybd%), Couleur%, BF FOR X% = X% + 1 TO X% + 4: Terrain(X%, Y%) = "M": NEXT X% END SELECT NEXT I% ' ** Position de d‚part du chasseur Terrain(37, 26) = "C": Xch% = 37: Ych% = 26 ' ** Position Initiale des Gloutons (au nombre de Nb.Glouton%) Nb.Gl% = Nb.Gl% + 2: IF Nb.Gl% > 20 THEN Nb.Gl% = 20 Nb.Glouton% = Nb.Gl%: Glouton%(2, 2) = Nb.Glouton% FOR A% = 1 TO Nb.Glouton%: XGl%(A%) = 2: YGl%(A%) = 2: NEXT A% ' *** (Ralentisseur) 'T& = V1& / 5 - 24 * Nb.Glouton% ' ** Position de la vie de secours sur le terrain E52.PAS.LIBRE: Y% = INT(RND * 25) + 2: X% = INT(RND * 36) + 2 IF Terrain(X%, Y%) <> " " GOTO E52.PAS.LIBRE PUT (Xpix%(X%), Ypix%(Y%)), Vsec&, PSET: Terrain(X%, Y%) = "V" ' ** Coordonn‚es de d‚part des Gloutons FOR I% = 1 TO Nb.Glouton%: XGl% = 2: YGl% = 2: NEXT I% ' ** Affichage Chasseur et Gloutons en position de d‚part PUT (Xpix%(Xch%), Ypix%(Ych%)), Chasseur&, PSET PUT (Xpix%(XGl%), Ypix%(YGl%)), Glouton1&, PSET K.Pr = "5": Valeur.Vie.Secours% = Valeur.Vie.Secours% + 1000 Valeur.Glouton% = Valeur.Glouton% + 1000 ' ** Affichage du score … battre LOCATE 2, 41: COLOR 15: PRINT "SCORE … BATTRE:" LOCATE 1, 41: COLOR 15: PRINT USING "#,###,###"; Score&(1) Xx% = 445: Yy% = 10: GOSUB GS12.ECRITURE.SCORE ' ** Score … battre GOSUB GS08.AFFICHE.TOUT: LOCATE 30, 1: COLOR 11 PRINT "RAPPEL: A -> Pose PIEGE, Z -> Vide P, E -> Sup P"; PRINT ", R -> PAUSE, @ -> FIN, +/- -> V"; ' ** Bonus% = 0: Duree% = 150 + 30 * Nb.Glouton%: TIMER ON ' ** COLOR 15: LOCATE 6, 7: PRINT "GLOUTONS" COLOR 15: LOCATE 7, 9: PRINT USING "## …"; Nb.Glouton% LOCATE 8, 8: PRINT Valeur.Glouton% E53.COMMANDE: ' ** Guide Chasseur ** 'FOR A& = 1 TO T&: NEXT ' ** Ralentisseur Debut! = TIMER PUT (Xpix%(Xch%), Ypix%(Ych%)), Chasseur&, PSET IF Vies% < 0 THEN ' ** Jeu Perdu ... TIMER OFF: FOR S% = 123 TO 65 STEP -5: SOUND S%, 1: NEXT S%: SLEEP 2 PLAY "O2 T120 L16F L8AB- O3 L4CF L6C L16D L8C O2 L8B- L4AG L8F" SLEEP 2: GOTO E80.CEFINI END IF GOSUB GS10.AFFICHE.NB.GLOUTONS IF Nb.Glouton% = 0 THEN TIMER OFF: SLEEP 2: GOTO E99.NIVEAU.FINI K = INKEY$: IF K = "" THEN K = K.Pr E53A: COLOR 0 ' *** les commandes du joueur SELECT CASE K CASE CHR$(0) + "H", "8": Dxch% = 0: Dych% = -1: Stepx% = 0: Stepy% = -1: GOTO E53.CHASSEUR CASE CHR$(0) + "P", "2": Dxch% = 0: Dych% = 1: Stepx% = 0: Stepy% = 1: GOTO E53.CHASSEUR CASE CHR$(0) + "K", "4": Dxch% = -1: Dych% = 0: Stepx% = -1: Stepy% = 0: GOTO E53.CHASSEUR CASE CHR$(0) + "M", "6": Dxch% = 1: Dych% = 0: Stepx% = 1: Stepy% = 0: GOTO E53.CHASSEUR CASE CHR$(0) + "Q", "A", "a", "P", "p": GOTO E57.POSE.PIEGE CASE CHR$(0) + "I", "E", "e", "S", "s": GOTO E58.SUPPRESSION.PIEGE CASE "V", "v", "Z", "z": GOTO E58.VIDE.PIEGE 'CASE "+": T& = T& * .95: K.Pr = "5": GOTO E53.COMMANDE 'CASE "-": T& = T& * 1.05: K.Pr = "5": GOTO E53.COMMANDE CASE "+": Duree.Cycle! = Duree.Cycle! * .95 K.Pr = "5": GOTO E53.COMMANDE CASE "-": Duree.Cycle! = Duree.Cycle! * 1.05 K.Pr = "5": GOTO E53.COMMANDE CASE CHR$(27): COLOR 15: END CASE "R", "r", "5": K.Pr = K: TIMER OFF SLEEP: TIMER ON GOTO E53.COMMANDE CASE "@": COLOR 15: GOTO E80.CEFINI CASE ELSE: K = K.Pr: GOTO E53A END SELECT E53.CHASSEUR: ' ** D‚placement du Chasseur Xts% = Xch% + Dxch%: Yts% = Ych% + Dych% Suivant = Terrain(Xts%, Yts%): Glouton% = Glouton%(Xts%, Yts%) ' ** Arriv‚e contre une cloison ou un piege (prˆt ou plein) IF Suivant = "M" OR Suivant = "P" OR Suivant = "6" GOTO E59.GLOUTON ' ** RIEN devant IF Suivant = " " AND Glouton% = 0 THEN IF Dxch% = 0 THEN ' ** D‚placement vertical Yd% = Ypix%(Ych%): Yf% = Ypix%(Yts%): X% = Xpix%(Xch%) FOR Y% = Yd% TO Yf% STEP Stepy% PUT (X%, Y%), Chasseur&, PSET NEXT Y% ELSE ' ** D‚placement Horizontal Xd% = Xpix%(Xch%): Xf% = Xpix%(Xts%): Y% = Ypix%(Ych%) FOR X% = Xd% TO Xf% - Dxch% STEP Stepx% PUT (X% + Dxch%, Y%), Chasseur&, PSET NEXT X% END IF Terrain(Xch%, Ych%) = " ": Terrain(Xts%, Yts%) = "C" IF Glouton%(Xch%, Ych%) > 0 THEN ' ** Glouton au d‚part du chasseur SELECT CASE INT(RND * 4) + 1 CASE 1: PUT (Xpix%(Xch%), Ypix%(Ych%)), Glouton1&, PSET CASE 2: PUT (Xpix%(Xch%), Ypix%(Ych%)), Glouton2&, PSET CASE 3: PUT (Xpix%(Xch%), Ypix%(Ych%)), Glouton3&, PSET CASE 4: PUT (Xpix%(Xch%), Ypix%(Ych%)), Glouton4&, PSET END SELECT END IF Xch% = Xts%: Ych% = Yts%: GOTO E59.GLOUTON END IF ' ** Une Vie de Secours devant et PAS de Glouton IF Suivant = "V" AND Glouton% = 0 THEN Xpix% = Xpix%(Xts%): Ypix% = Ypix%(Yts%) FOR S% = 130 TO 200 STEP 10: SOUND S%, 1: NEXT S% PUT (Xpix%, Ypix%), Vsec&, PRESET: PUT (Xpix%, Ypix%), Vsec&, PSET LINE (Xpix%(Xch%), Ypix%(Ych%))-(Xpix%(Xch%) + 15, Ypix%(Ych%) + 15), 15, BF Terrain(Xch%, Ych%) = " ": Terrain(Xts%, Yts%) = "C" IF Glouton%(Xch%, Ych%) > 0 THEN ' ** Glouton au d‚part du chasseur SELECT CASE INT(RND * 4) + 1 CASE 1: PUT (Xpix%(Xch%), Ypix%(Ych%)), Glouton1&, PSET CASE 2: PUT (Xpix%(Xch%), Ypix%(Ych%)), Glouton2&, PSET CASE 3: PUT (Xpix%(Xch%), Ypix%(Ych%)), Glouton3&, PSET CASE 4: PUT (Xpix%(Xch%), Ypix%(Ych%)), Glouton4&, PSET END SELECT END IF Xch% = Xts%: Ych% = Yts% PUT (Xpix%(Xch%), Ypix%(Ych%)), Chasseur&, PSET ' ** Affichage des Vies et du Score Vies% = Vies% + 1: Score& = Score& + Valeur.Vie.Secours% GOSUB GS08.AFFICHE.TOUT: GOTO E59.GLOUTON END IF ' ** Le chasseur arrive contre un piege en cours de construction IF Suivant >= "1" AND Suivant <= "5" AND Glouton% = 0 THEN IF Glouton%(Xch%, Ych%) > 0 THEN ' ** Glouton au d‚part du chasseur SELECT CASE INT(RND * 4) + 1 CASE 1: PUT (Xpix%(Xch%), Ypix%(Ych%)), Glouton1&, PSET CASE 2: PUT (Xpix%(Xch%), Ypix%(Ych%)), Glouton2&, PSET CASE 3: PUT (Xpix%(Xch%), Ypix%(Ych%)), Glouton3&, PSET CASE 4: PUT (Xpix%(Xch%), Ypix%(Ych%)), Glouton4&, PSET END SELECT END IF GOTO E59.GLOUTON END IF ' ** Le chasseur arrive SUR un Glouton ...("Catastroffe...") IF Glouton% > 0 THEN IF Dxch% = 0 THEN ' ** D‚placement vertical Yd% = Ypix%(Ych%): Yf% = Ypix%(Yts%): X% = Xpix%(Xch%) FOR Y% = Yd% TO Yf% STEP Stepy% PUT (X%, Y%), Chasseur&, PSET NEXT Y% ELSE ' ** D‚placement Horizontal Xd% = Xpix%(Xch%): Xf% = Xpix%(Xts%): Y% = Ypix%(Ych%) FOR X% = Xd% TO Xf% - Dxch% STEP Stepx% PUT (X% + Dxch%, Y%), Chasseur&, PSET NEXT X% END IF Terrain(Xch%, Ych%) = " ": Terrain(Xts%, Yts%) = "C" PUT (Xpix%(Xts%), Ypix%(Yts%)), Boum&, PSET PUT (Xpix%(Xts%), Ypix%(Yts%)), Chasseur&, PSET FOR S% = 500 TO 120 STEP -40: SOUND S%, S% / 2000: NEXT S% PUT (Xpix%(Xts%), Ypix%(Yts%)), Glouton1&, PSET ' ** Affichage des Vies et du Score Vies% = Vies% - 1: Score& = Score& - 2000: GOSUB GS08.AFFICHE.TOUT IF Vies% < 0 GOTO E53.COMMANDE Xch% = Xts%: Ych% = Yts%: GOTO E59.GLOUTON END IF E57.POSE.PIEGE: Xts% = Xch% + Dxch%: Yts% = Ych% + Dych% Suivant = Terrain(Xts%, Yts%): Glouton% = Glouton%(Xts%, Yts%) ' ** Interdiction de construire un piŠge IF Suivant = "M" OR Suivant = "V" OR Suivant = "P" OR Glouton% > 0 THEN GOTO E59.GLOUTON END IF Piege% = VAL(Suivant): Piege% = Piege% + 1 IF Piege% > 5 THEN Piege% = 5 IF Piege% < 5 THEN ' ** PiŠge en cours de construction PUT (Xpix%(Xts%), Ypix%(Yts%)), Pvide&, PRESET PLAY "O2 T250 L16 C" Terrain(Xts%, Yts%) = RIGHT$(STR$(Piege%), 1) ELSE ' ** PiŠge termin‚ PUT (Xpix%(Xts%), Ypix%(Yts%)), Pvide&, PSET Terrain(Xts%, Yts%) = "P" ' ** PIEGE TERMINE PLAY "O2 T250 L16CEG" END IF GOTO E59.GLOUTON E58.SUPPRESSION.PIEGE: Xts% = Xch% + Dxch%: Yts% = Ych% + Dych% Suivant = Terrain(Xts%, Yts%): Glouton% = Glouton%(Xts%, Yts%) ' ** ?? Contre un Mur, une Vie de Secours, une case blanche ' ou un Glouton pris au piŠge IF Suivant = "M" OR Suivant = "V" GOTO E58A IF Suivant = " " OR Suivant = "6" GOTO E58A ' ** D‚molition PiŠge termin‚, mais vide IF Suivant = "P" THEN Terrain(Xts%, Yts%) = "5": BEEP PUT (Xpix%(Xts%), Ypix%(Yts%)), Pvide&, PRESET: GOTO E58A END IF ' ** Suite de la d‚molition du piŠge IF Suivant > "1" THEN Piege% = VAL(Suivant): Piege% = Piege% - 1 X1% = Xpix%(Xts%): Y1% = Ypix%(Yts%) IF Piege% > 0 THEN PUT (X1%, Y1%), Pvide&, PRESET: BEEP Terrain(Xts%, Yts%) = RIGHT$(STR$(Piege%), 1): GOTO E58A END IF END IF ' ** Suppression finale du piŠge LINE (X1%, Y1%)-(X1% + 15, Y1% + 15), 15, BF: Terrain(Xts%, Yts%) = " " SOUND 400, 18 E58A: GOTO E59.GLOUTON E58.VIDE.PIEGE: Xts% = Xch% + Dxch%: Yts% = Ych% + Dych% Suivant = Terrain(Xts%, Yts%): Glouton% = Glouton%(Xts%, Yts%) ' ** ?? Contre un Mur, une Vie de Secours IF Suivant = "M" OR Suivant = "V" GOTO E59.GLOUTON ' ** ?? Contre un PiŠge (Termin‚ ou non) IF Suivant >= "1" AND Suivant <= "5" GOTO E59.GLOUTON ' ** Vidage piŠge avec Glouton pris (Le Glouton sera mort...) IF Suivant = "6" THEN FOR S% = 440 TO 220 STEP -10: SOUND S%, S% / 1000: NEXT S% L.P% = Glouton.Piege%(Xts%, Yts%): Glouton.Piege%(Xts%, Yts%) = 0 XGl%(L.P%) = 0: YGl%(L.P%) = 0 Duree.Piege%(Xts%, Yts%) = 0: Glouton%(Xts%, Yts%) = 0 Nb.Glouton% = Nb.Glouton% - 1 Score& = Score& + Valeur.Glouton%: GOSUB GS08.AFFICHE.TOUT Px% = Xpix%(Xts%): Py% = Ypix%(Yts%) LINE (Px%, Py%)-(Px% + 15, Py% + 15), 15, BF Terrain(Xts%, Yts%) = " " END IF E59.GLOUTON: Gl.Concerne% = 0 E59A: Gl.Concerne% = Gl.Concerne% + 1 FOR W# = 1 TO T& * 3: NEXT W# IF Gl.Concerne% > Nb.Gl% GOTO E59.FIN.GL Xg% = XGl%(Gl.Concerne%): Yg% = YGl%(Gl.Concerne%) ' ** Glouton d‚j… ‚limin‚ ... (-----> Temps mort) IF Xg% = 0 THEN FOR W# = 1 TO T& * 1.5: NEXT W#: GOTO E59A ' ** Glouton d‚j… pris dans un piŠge (Immobilisation pendant 30 cycles) IF Terrain(Xg%, Yg%) = "6" AND Duree.Piege%(Xg%, Yg%) > 0 THEN Duree.Piege%(Xg%, Yg%) = Duree.Piege%(Xg%, Yg%) - 1 PLAY "T400 O3 L32 CE" ' Le glouton appelle AU SECOURS FOR A% = 1 TO 16 ' Le glouton se d‚bat !! PUT (Xpix%(Xg%), Ypix%(Yg%)), Pplein1&, PRESET PUT (Xpix%(Xg%), Ypix%(Yg%)), Pplein2&, PSET PUT (Xpix%(Xg%), Ypix%(Yg%)), Pplein1&, PRESET PUT (Xpix%(Xg%), Ypix%(Yg%)), Pplein2&, PSET NEXT A% GOTO E59A END IF ' ** Le Glouton se libŠre SEUL du piŠge IF Terrain(Xg%, Yg%) = "6" AND Duree.Piege%(Xg%, Yg%) = 0 THEN FOR S% = 250 TO 500 STEP 25: SOUND S%, S% / 1000: NEXT S% Glouton.Piege%(Xg%, Yg%) = 0: Terrain(Xg%, Yg%) = " " Xx% = Xpix%(Xg%): Yy% = Ypix%(Yg%): GOSUB GS13.DESSIN.GLOUTON GOTO E59A END IF ' ** Glouton … un carrefour (Nouvelle direction al‚atoire) IF Xg% MOD 5 = 2 AND Yg% MOD 4 = 2 THEN E59B: Aleat1.4% = INT(RND * 4) + 1 DL.Nouveau = MID$("ENOS", Aleat1.4%, 1) SELECT CASE DL.Nouveau: CASE "N": IF Terrain(Xg%, Yg% - 1) = "M" GOTO E59B CASE "S": IF Terrain(Xg%, Yg% + 1) = "M" GOTO E59B CASE "O": IF Terrain(Xg% - 1, Yg%) = "M" GOTO E59B CASE "E": IF Terrain(Xg% + 1, Yg%) = "M" GOTO E59B END SELECT DGlouton(Gl.Concerne%) = DL.Nouveau END IF DL = DGlouton(Gl.Concerne%) ' ** Direction d‚placement du Glouton SELECT CASE DL: CASE "N": Dxg% = 0: Step.Xg% = 0: Dyg% = -1: Step.Yg% = -1 CASE "S": Dxg% = 0: Step.Xg% = 0: Dyg% = 1: Step.Yg% = 1 CASE "O": Dxg% = -1: Step.Xg% = -1: Dyg% = 0: Step.Yg% = 0 CASE "E": Dxg% = 1: Step.Xg% = 1: Dyg% = 0: Step.Yg% = 0 END SELECT XLs% = Xg% + Dxg%: YLs% = Yg% + Dyg% Suivant = Terrain(XLs%, YLs%) ' ** Le Glouton se prend dans un piŠge IF Suivant = "P" THEN Duree.Piege%(XLs%, YLs%) = 30: Terrain(XLs%, YLs%) = "6" Glouton.Piege%(XLs%, YLs%) = Gl.Concerne% GOSUB GS16.DEPLACEMENT.GLOUTON FOR A% = 1 TO 4 PUT (Xpix%(XLs%), Ypix%(YLs%)), Pplein1&, PSET PUT (Xpix%(XLs%), Ypix%(YLs%)), Pplein2&, PSET PUT (Xpix%(XLs%), Ypix%(YLs%)), Pplein1&, PSET PUT (Xpix%(XLs%), Ypix%(YLs%)), Pplein2&, PSET NEXT A% Glouton%(Xg%, Yg%) = Glouton%(Xg%, Yg%) - 1 Glouton%(XLs%, YLs%) = Glouton%(XLs%, YLs%) + 1 FOR S% = 160 TO 90 STEP -5: SOUND S%, S% / 100: NEXT S% GOTO E59A END IF ' ** Le Glouton libŠre un copain pris au piŠge IF Suivant = "6" AND Gl.Concerne% <> Glouton.Piege%(XLs%, YLs%) THEN Duree.Piege%(XLs%, YLs%) = 0: Terrain(XLs%, YLs%) = " " PLAY "O2 L16 CEG>CC": GOSUB GS16.DEPLACEMENT.GLOUTON PUT (Xpix%(XLs%), Ypix%(YLs%)), Glouton4&, PSET Glouton%(Xg%, Yg%) = Glouton%(Xg%, Yg%) - 1 Glouton%(XLs%, YLs%) = Glouton%(XLs%, YLs%) + 1 Glouton.Piege%(XLs%, YLs%) = 0: GOTO E59A END IF ' ** Contre un mur (en principe jamais) IF Suivant = "M" GOTO E59A ' ** Le Glouton peut avancer (Vie de secours ou piŠge non termin‚) OK IF Suivant = " " OR Suivant = "V" OR Suivant <= "5" THEN GOSUB GS16.DEPLACEMENT.GLOUTON Glouton%(Xg%, Yg%) = Glouton%(Xg%, Yg%) - 1 Glouton%(XLs%, YLs%) = Glouton%(XLs%, YLs%) + 1 IF Glouton%(Xg%, Yg%) > 0 THEN PUT (Xpix%(Xg%), Ypix%(Yg%)), Glouton1&, PSET ELSEIF Terrain(Xg%, Yg%) = "V" THEN PUT (Xpix%(Xg%), Ypix%(Yg%)), Vsec&, PSET ELSEIF Terrain(Xg%, Yg%) = "C" THEN PUT (Xpix%(Xg%), Ypix%(Yg%)), Chasseur&, PSET ELSEIF Terrain(Xg%, Yg%) >= "1" AND Terrain(Xg%, Yg%) <= "5" THEN LINE (Xpix%(Xg%), Ypix%(Yg%))-(Xpix%(Xg%) + 15, Ypix%(Yg%) + 15), 15, BF Terrain(Xg%, Yg%) = " " END IF IF Terrain(Xg%, Yg%) <= "5" THEN Terrain(Xg%, Yg%) = " " END IF ' ** Le Glouton boulotte le chasseur IF Suivant = "C" THEN GOSUB GS16.DEPLACEMENT.GLOUTON PUT (Xpix%(XLs%), Ypix%(YLs%)), Boum&, PSET FOR S% = 1000 TO 100 STEP -50: SOUND S%, S% / 500: NEXT S% PUT (Xpix%(XLs%), Ypix%(YLs%)), Glouton1&, PSET PUT (Xpix%(XLs%), Ypix%(YLs%)), Chasseur&, PSET 'AND ' ** Affichage des Vies et du Score Vies% = Vies% - 1: Score& = Score& - 2000 GOSUB GS08.AFFICHE.TOUT: IF Vies% < 0 GOTO E53.COMMANDE Glouton%(Xg%, Yg%) = Glouton%(Xg%, Yg%) - 1 Glouton%(XLs%, YLs%) = Glouton%(XLs%, YLs%) + 1 IF Glouton%(Xg%, Yg%) > 0 THEN Xx% = Xpix%(Xg%): Yy% = Ypix%(Yg%): GOSUB GS13.DESSIN.GLOUTON ELSEIF Terrain(Xg%, Yg%) = "V" THEN PUT (Xpix%(Xg%), Ypix%(Yg%)), Vsec&, PSET END IF Dxch% = 0: Dych% = 0: Stepx% = 0: Stepy% = 0: GOTO E59.GLOUTON END IF GOTO E59A E59.FIN.GL: K.Pr = K: ' **** NOUVEAU RALENTISSEUR DO LOOP UNTIL TIMER >= Debut! + Duree.Cycle! ' ************************* GOTO E53.COMMANDE E80.CEFINI: TIMER OFF SCREEN 0: WIDTH 80, 25: LOCATE 1, 1: COLOR Cfd%: PRINT SPACE$(2000); Titre = "°±² JEU de la CHASSE aux Gloutons ²±°" Y% = 5: X% = 23: GOSUB GS06.TITRE: L.Er% = 25 IF Score& > Score&(15) GOTO E80A Lchg% = 10: Cchg% = 2: Lcbd% = 16: Ccbd% = 78: Ccv1% = 14: Ccv2% = 1 GOSUB GS07.CADRE.VIDE: COLOR 10, 0 LOCATE 12, 15: PRINT "Je suis SINCEREMENT DESOLE (HI, HI, HI...), Mais...." COLOR 14, 0: LOCATE 14, 5 PRINT "Vous ˆtes ENCORE plus MAUVAIS que le MOINS BON dont j'ai SOUVENANCE !!!" Faux = "Pressez une touche quelconque pour poursuivre": GOSUB GS03.ERREUR LOCATE 9, 1: COLOR Cfd%: PRINT SPACE$(1280); GOTO E90.ENCORE E80A: ' ** Nouveaux scores … battre D = DATE$: Date = MID$(D, 4, 2) + LEFT$(D, 2) + RIGHT$(D, 2) Score&(15) = Score&: Joueur(15) = Joueur: Nota(15) = MID$(D, 4, 2) + "/" + LEFT$(D, 2) + "/" + RIGHT$(D, 2) Nota(15) = Nota(15) + " … " + TIME$: GOSUB GS08.TRI.SCORES': TIMER OFF Tempo = "SCORES … BATTRE" Lchg% = 5: Cchg% = 4: Lcbd% = 21: Ccbd% = 6: GOSUB GS07.CADRE.VIDE: COLOR 15, 0 FOR I% = 1 TO 15: LOCATE I% + 5, 5: PRINT MID$(Tempo, I%, 1); : NEXT I% COLOR 14, 0: FOR L% = 4 TO 6: LOCATE L%, 15: PRINT Ecr(L% - 3); : NEXT L% FOR L% = 7 TO 21: LOCATE L%, 15: PRINT Ecr(4): NEXT L% LOCATE 22, 15: PRINT Ecr(5) FOR I% = 1 TO 15 IF Score&(I%) = Score& THEN COLOR 30, 0: ELSE COLOR 15, 0 LOCATE I% + 6, 16: PRINT USING "##"; I% LOCATE I% + 6, 19: PRINT USING "####### "; Score&(I%) LOCATE I% + 6, 29: PRINT Joueur(I%) LOCATE I% + 6, 50: PRINT Nota(I%) NEXT I% ' ** MISE … JOUR du FICHIER des SCORES CLOSE : OPEN "C:\MIAMMIAM\SCORES.CHA" FOR OUTPUT AS #1 FOR I% = 1 TO 15 Score& = Score&(I%): Joueur = Joueur(I%): Nota = Nota(I%) WRITE #1, Score&, Joueur, Nota NEXT I% CLOSE : Faux = "APPUYEZ sur une TOUCHE pour POURSUIVRE": GOSUB GS03.ERREUR E90.ENCORE: LOCATE 4, 1: COLOR Cfd%: PRINT SPACE$(1660); E90A: Titre = " VOULEZ FAIRE UNE AUTRE PARTIE (O ou N) " Y% = 12: X% = 15: GOSUB GS06.TITRE: Y% = 13: X% = 58: Nbc% = 1 Saisiepr = "O": GOSUB GS05.ALPHA: S = UCASE$(S) IF S = "N" THEN SYSTEM IF S = "O" GOTO E50.DEBUT Faux = "R‚pondez O, o, N ou n !!! " GOSUB GS03.SIRENE: GOSUB GS03.ERREUR: GOTO E90A E99.NIVEAU.FINI: Score& = Score& + Bonus% GOSUB GS08.AFFICHE.TOUT: GOTO E52.NIVEAU.SUPERIEUR GS01.CADRE: ' VERTICALE GAUCHE K% = 13: Yb% = 250 FOR Y% = 1 TO 16 Yb% = 239 + 1: LINE (Y%, Y%)-(Y%, Yb%), K%, , 255 NEXT Y% Yb% = 480: Yh% = 231 FOR X% = 16 TO 1 STEP -1 Yh% = Yh% + 1: LINE (X%, Yh%)-(X%, Yb%), K%, , 255 NEXT X% ' HORIZONTALE DU HAUT FOR Y% = 1 TO 16 LINE (Y%, Y%)-(320, Y%), K%, , 255 NEXT Y% Xd% = 641 FOR Y% = 1 TO 16 '16 TO 1 STEP -1 Xd% = Xd% - 1: LINE (321 - Y%, Y%)-(Xd%, Y%), K%, , 255' 4095 NEXT Y% ' HORIZONTALE DU BAS Xg% = 0 FOR Y% = 480 TO 465 STEP -1 Xg% = Xg% + 1: LINE (Xg%, Y%)-(320, Y%), K%, , 255 NEXT Y% Xg% = 304: Xd% = 641 FOR Y% = 465 TO 480 Xg% = Xg% + 1: Xd% = Xd% - 1 LINE (Xg%, Y%)-(640, Y%), K%, , 255 NEXT Y% ' DROITE X% = 641 FOR Y% = 1 TO 16 X% = X% - 1: LINE (X%, Y%)-(X%, 232), K%, , 255'32752 NEXT Y% X% = 641: Y% = 240 FOR X% = 640 TO 625 STEP -1 Y% = Y% - 1: LINE (X%, Y%)-(X%, 464), K%, , 255 NEXT X% 'K% = 12 K1% = 12 LINE (1, 1)-(24, 24), K1%, BF: LINE (1, 1)-(24, 24), K1% - 8, B LINE (1, 228)-(24, 252), K1%, BF: LINE (1, 228)-(24, 252), K1% - 8, B LINE (1, 455)-(24, 480), K1%, BF: LINE (1, 455)-(24, 480), K1% - 8, B LINE (309, 1)-(332, 24), K1%, BF: LINE (1, 1)-(24, 24), K1% - 8, B LINE (309, 457)-(332, 480), K1%, BF: LINE (1, 228)-(24, 252), K1% - 8, B LINE (617, 1)-(640, 24), K1%, BF: LINE (1, 1)-(24, 24), K1% - 8, B LINE (617, 228)-(640, 252), K1%, BF: LINE (1, 228)-(24, 252), K1% - 8, B LINE (617, 455)-(640, 480), K1%, BF: LINE (1, 455)-(24, 480), K1% - 8, B RETURN GS02.TITRE: ' ** Affichage de " LA CHASSE AUX GLOUTONS " OPEN "C:\MIAMMIAM\L_" + Lettre + ".LET" FOR INPUT AS #1 FOR L% = 1 TO 385 X% = INT(RND * 608) + 16: Y% = INT(RND * 448) + 16 C% = POINT(X%, Y%) IF C% = 0 THEN PSET (X%, Y%), INT(RND * 13) + 3 INPUT #1, L&(L%) NEXT L%: CLOSE FOR X% = Xdep% TO Xfin% STEP -4: PUT (X%, Y1%), L&, PSET: NEXT X% RETURN GS03.ERREUR: Faux = " ** " + Faux + " ** " IF LEN(Faux) > 79 THEN Faux = LEFT$(Faux, 79) LOCATE 25, 40 - LEN(Faux) / 2: COLOR 15: PRINT Faux; : GOSUB GS04.ATTENTE LOCATE 25, 1: COLOR 0: PRINT SPACE$(80); RETURN GS03.SIRENE: FOR A% = 1 TO 3 FOR S% = 500 TO 40 STEP -50: SOUND S%, S% / 2000: NEXT S% NEXT A% RETURN GS04.ATTENTE: K = INKEY$: IF K = "" GOTO GS04.ATTENTE IF K = "@" OR K = CHR$(27) OR K = CHR$(3) THEN COLOR 14: END RETURN GS05.ALPHA: ' SAISIE ALPHANUMERIQUE Lsp% = LEN(Saisiepr) IF Lsp% < Nbc% THEN Saisiepr = Saisiepr + SPACE$(Nbc% - Lsp%) P% = 0: S = Saisiepr GS05A: COLOR 15, 4: LOCATE Y%, X%: PRINT S; COLOR 26, 1: LOCATE Y%, X% + P%: PRINT MID$(S, P% + 1, 1); IF MID$(S, P% + 1, 1) = " " THEN LOCATE Y%, X% + P%: PRINT CHR$(14); GS05B: K = INKEY$: IF K = "" GOTO GS05B SELECT CASE K CASE CHR$(0) + "K" '… Gauche IF P% = 0 THEN BEEP: GOTO GS05B P% = P% - 1: GOTO GS05A CASE CHR$(0) + "M" '… Droite IF P% = Nbc% THEN BEEP: GOTO GS05B P% = P% + 1: GOTO GS05A CASE CHR$(13) 'Entr‚e IF P% = 0 THEN S = Saisiepr: GOTO GS05D ELSE GOTO GS05C CASE CHR$(0) + "R" ' Insertion case blanche S = LEFT$(S, P%) + " " + RIGHT$(S, Nbc% - P%) IF RIGHT$(S, 1) <> " " THEN BEEP S = LEFT$(S, Nbc%): GOTO GS05A CASE CHR$(0) + "S" ' Suppression S = LEFT$(S, P%) + RIGHT$(S, Nbc% - P% - 1) + " ": GOTO GS05A CASE CHR$(0) + "G" ' Retour au D‚but P% = 0: GOTO GS05A CASE CHR$(0) + "O" ' … la fin P% = LEN(RTRIM$(S)): GOTO GS05A CASE CHR$(8) ' Effacement caractere pr‚c‚dent IF P% = 0 THEN BEEP: GOTO GS05A S = LEFT$(S, P% - 1) + RIGHT$(S, Nbc% - P%) + " " P% = P% - 1: GOTO GS05A CASE CHR$(9), CHR$(29) BEEP: GOTO GS05A CASE CHR$(3), CHR$(27): COLOR 14, Cfd%: END 'CTRL + C ou ECHAP CASE ELSE P% = P% + 1: IF P% > Nbc% THEN BEEP: P% = Nbc%: GOTO GS05A MID$(S, P%, 1) = K: GOTO GS05A END SELECT GS05C: IF P% = Nbc% GOTO GS05D Pk% = INSTR(S, "æ"): IF Pk% = 0 THEN Pk% = INSTR(S, "°") IF Pk% > 0 THEN S = LEFT$(S, Pk% - 1) Ls% = LEN(S): IF Ls% < Nbc% THEN S = S + SPACE$(Nbc% - Ls%) GS05D: LOCATE Y%, X%: COLOR 14, Cfd%: PRINT S; : Saisie = S RETURN GS06.TITRE: Lg% = LEN(Titre): COLOR Cct1%, Cct2% LOCATE Y%, X%: PRINT "É"; STRING$(Lg%, "Í"); "»"; LOCATE Y% + 1, X%: PRINT "º"; : LOCATE Y% + 1, X% + Lg% + 1: PRINT "º"; LOCATE Y% + 2, X%: PRINT "È"; STRING$(Lg%, "Í"); "¼"; LOCATE Y% + 1, X% + 1: COLOR Cte1%, Cte2%: PRINT Titre; RETURN GS07.CADRE.VIDE: COLOR Ccv1%, Ccv2% LOCATE Lchg%, Cchg%: PRINT "É"; STRING$(Ccbd% - Cchg% - 1, "Í"); "»"; LOCATE Lcbd%, Cchg%: PRINT "È"; STRING$(Ccbd% - Cchg% - 1, "Í"); "¼"; FOR Y% = Lchg% + 1 TO Lcbd% - 1 LOCATE Y%, Cchg%: PRINT "º"; : LOCATE Y%, Ccbd%: PRINT "º"; NEXT Y% RETURN GS08.TRI.SCORES: ' TRI TABLE SCORES Zoe% = 0: Rg% = 0 GS08A: IF Zoe% = 1 THEN Rg% = Rg1%: Zoe% = 0 Rg% = Rg% + 1: IF Rg% > 15 GOTO GS08C ELSE IF Rg% = 1 GOTO GS08A GS08B: IF Score&(Rg% - 1) >= Score&(Rg%) GOTO GS08A SWAP Score&(Rg% - 1), Score&(Rg%): SWAP Joueur(Rg% - 1), Joueur(Rg%) SWAP Nota(Rg% - 1), Nota(Rg%) IF Rg% - 1 = 1 GOTO GS08A ELSE IF Zoe% = 0 THEN Rg1% = Rg%: Zoe% = 1 Rg% = Rg% - 1: GOTO GS08B GS08C: RETURN GS08.AFFICHE.TOUT: ' Vies, Gloutons, Score GOSUB GS09.AFFICHE.VIES GOSUB GS10.AFFICHE.NB.GLOUTONS GOSUB GS11.AFFICHE.SCORE RETURN GS09.AFFICHE.VIES: LINE (1, 1)-(320, 16), 0, BF LOCATE 1, 1: COLOR 15: PRINT "VIES"; : Xp% = 32: Yp% = 1: N% = 0 IF Vies% > 27 THEN Vies.Affichees% = 27 ELSE Vies.Affichees% = Vies% FOR I% = 1 TO Vies.Affichees% Xp% = Xp% + 10: PUT (Xp%, 1), Vsec&, PSET NEXT I% RETURN GS10.AFFICHE.NB.GLOUTONS: LOCATE 4, 1: COLOR 15: PRINT "GL": Xga% = 5 COLOR 14: LOCATE 7, 9: PRINT USING "## …"; Nb.Glouton%; LINE (16, 48)-(320, 64), 0, BF FOR Nb% = 1 TO Nb.Glouton% Xga% = Xga% + 15 SELECT CASE INT(RND * 4) + 1 CASE 1: PUT (Xga%, 48), Glouton1&, PSET CASE 2: PUT (Xga%, 48), Glouton2&, PSET CASE 3: PUT (Xga%, 48), Glouton3&, PSET CASE 4: PUT (Xga%, 48), Glouton4&, PSET END SELECT NEXT Nb% RETURN GS11.AFFICHE.SCORE: LOCATE 4, 41: COLOR 15: PRINT "SCORE :"; LOCATE 1, 41: COLOR 8: PRINT USING "#,###,###"; Score& Xx% = 445: Yy% = 39: GOSUB GS12.ECRITURE.SCORE RETURN GS12.ECRITURE.SCORE: FOR C% = 41 TO 49 Xx% = Xx% + 18 SELECT CASE CHR$(SCREEN(1, C%)) CASE " ": LINE (Xx%, Yy%)-(Xx% + 23, Yy% + 25), 0, BF CASE "0": PUT (Xx%, Yy%), C0&, PSET CASE "1": PUT (Xx%, Yy%), C1&, PSET CASE "2": PUT (Xx%, Yy%), C2&, PSET CASE "3": PUT (Xx%, Yy%), C3&, PSET CASE "4": PUT (Xx%, Yy%), C4&, PSET CASE "5": PUT (Xx%, Yy%), C5&, PSET CASE "6": PUT (Xx%, Yy%), C6&, PSET CASE "7": PUT (Xx%, Yy%), C7&, PSET CASE "8": PUT (Xx%, Yy%), C8&, PSET CASE "9": PUT (Xx%, Yy%), C9&, PSET CASE ",": PUT (Xx%, Yy%), CP&, PSET CASE "-": PUT (Xx%, Yy%), CM&, PSET END SELECT NEXT C% RETURN GS13.DESSIN.GLOUTON: SELECT CASE INT(RND * 4) + 1: CASE 1: PUT (Xx%, Yy%), Glouton1&, PSET CASE 2: PUT (Xx%, Yy%), Glouton2&, PSET CASE 3: PUT (Xx%, Yy%), Glouton3&, PSET CASE 4: PUT (Xx%, Yy%), Glouton4&, PSET END SELECT RETURN GS14.BONUS.TEMPS: Duree% = Duree% - 1: Bonus% = Duree% * 20 LOCATE 2, 1: COLOR 14: PRINT "CHRONOMETRE "; LOCATE 1, 41: COLOR 8: PRINT USING "####"; Duree% Xb% = 97: Yb% = 17: Cfin% = 44: GOSUB GS15.ECRITURE.1316 Xb% = Xb% + 13: PUT (Xb%, Yb%), DMIN&, PSET IF Bonus% >= 0 THEN COLOR 14 ELSE COLOR 12 LOCATE 2, 24: PRINT "BONUS "; LOCATE 1, 41: COLOR 8: PRINT USING "#####"; Bonus% Xb% = 220: Cfin% = 45: GOSUB GS15.ECRITURE.1316 RETURN GS15.ECRITURE.1316: FOR C9% = 41 TO Cfin% SELECT CASE CHR$(SCREEN(1, C9%)) CASE " ": Xb% = Xb% + 14 LINE (Xb%, Yb%)-(Xb% + 12, Yb% + 15), 0, BF CASE "0": Xb% = Xb% + 14: PUT (Xb%, Yb%), D0&, PSET CASE "1": Xb% = Xb% + 14: PUT (Xb%, Yb%), D1&, PSET CASE "2": Xb% = Xb% + 14: PUT (Xb%, Yb%), D2&, PSET CASE "3": Xb% = Xb% + 14: PUT (Xb%, Yb%), D3&, PSET CASE "4": Xb% = Xb% + 14: PUT (Xb%, Yb%), D4&, PSET CASE "5": Xb% = Xb% + 14: PUT (Xb%, Yb%), D5&, PSET CASE "6": Xb% = Xb% + 14: PUT (Xb%, Yb%), D6&, PSET CASE "7": Xb% = Xb% + 14: PUT (Xb%, Yb%), D7&, PSET CASE "8": Xb% = Xb% + 14: PUT (Xb%, Yb%), D8&, PSET CASE "9": Xb% = Xb% + 14: PUT (Xb%, Yb%), D9&, PSET CASE "-": Xb% = Xb% + 14: PUT (Xb%, Yb%), DM&, PSET END SELECT NEXT C9%: RETURN GS16.DEPLACEMENT.GLOUTON: IF Dxg% = 0 THEN ' D‚placement vertical Yd% = Ypix%(Yg%): Yf% = Ypix%(YLs%): X% = Xpix%(Xg%): Z% = 0 YGl%(Gl.Concerne%) = YGl%(Gl.Concerne%) + Dyg% Yy% = Yf%: Xx% = X% FOR Y% = Yd% TO Yf% STEP Step.Yg% Z% = Z% + 1: IF Z% > 4 THEN Z% = 1 IF Z% = 1 THEN PUT (X%, Y%), Glouton1&, PSET IF Z% = 2 THEN PUT (X%, Y%), Glouton2&, PSET IF Z% = 3 THEN PUT (X%, Y%), Glouton3&, PSET IF Z% = 4 THEN PUT (X%, Y%), Glouton4&, PSET NEXT Y% GOSUB GS13.DESSIN.GLOUTON ELSE ' D‚placement horizontal Xd% = Xpix%(Xg%): Xf% = Xpix%(XLs%): Y% = Ypix%(Yg%): Z% = 0 XGl%(Gl.Concerne%) = XGl%(Gl.Concerne%) + Dxg% Xx% = Xf%: Yy% = Y% FOR X% = Xd% TO Xf% STEP Step.Xg% Z% = Z% + 1: IF Z% > 4 THEN Z% = 1 IF Z% = 1 THEN PUT (X%, Y%), Glouton1&, PSET IF Z% = 2 THEN PUT (X%, Y%), Glouton2&, PSET IF Z% = 3 THEN PUT (X%, Y%), Glouton3&, PSET IF Z% = 4 THEN PUT (X%, Y%), Glouton4&, PSET NEXT X% GOSUB GS13.DESSIN.GLOUTON END IF RETURN F04.ERREUR.PROG: IF ERR = 53 AND Etape = "OUVERTURE FICHIER" THEN RESUME E32.CREAT.FICH.SCORES END IF Faux = " ---> ERREUR PROGRAMME Nø " + STR$(ERR) + " ?????" GOSUB GS03.SIRENE: GOSUB GS03.ERREUR: COLOR 15: END