DECLARE SUB Obstacle () DECLARE SUB Param () DECLARE SUB Saut () DECLARE SUB CleanCors () DECLARE SUB APers () DECLARE SUB Touches () DECLARE SUB Precors () DECLARE SUB DeCors () DIM SHARED Speed, Sol, KJump, Jump, Dime, Cors, W, XPos, YPos, Perso, Sens DIM SHARED NuageX(10), NuageY(10), LJump, SJump, WMax, PWidth, K$, XPre DIM SHARED YPre, PHeigh CLS : SCREEN 12: RANDOMIZE TIMER: CLEAR : RESET PHeigh = 45: PWidth = 25: SJump = 1.5: Speed = 10: Cors = 1: Precors LOCATE 1, 1: PRINT "Role X" LINE (38, 2)-(48, 2), 15 LINE (38, 11)-(48, 11), 15 FOR X = 0 TO 48 STEP 1 FOR Y = 0 TO 11 STEP 1 IF POINT(X, Y) = 15 THEN FOR I = 7 TO 4 STEP -1 CIRCLE (10 * X + 50, 10 * Y + 150), I, I + 7 PAINT STEP(0, 0), I + 7, I + 7 NEXT I END IF NEXT Y, X LINE (0, 0)-(50, 20), 11, BF A$ = "ROLE X - PROGRAMMATION : JULIEN LEPAGE - GRAPHISMES : JULIEN LEPAGE - MUSIQUES : JULIEN LEPAGE - SCENARIO : JULIEN LEPAGE - CREATION : JUIN 2003 - SUPPORT : COMPAQ CONTURA 410C - OS : WINDOWS 95 - STRUCTURE : QBASIC 1.1 - " DO IF INKEY$ <> "" THEN EXIT DO LOCATE 28, 1: PRINT LEFT$(A$, 80) A = A + 1 IF A = 10 THEN A = 0: A$ = RIGHT$(A$, LEN(A$) - 1) + LEFT$(A$, 1) LOOP Param 1 CALL Precors: APers DO DeCors Touches Saut IF XPos < 10 THEN XPos = 10: APers IF XPos > 600 THEN EXIT DO LOOP Cors = 2: Param 2 CALL Precors: APers DO DeCors Touches Saut Obstacle IF XPos < 10 THEN Cors = 1: Param: XPos = 590: YPos = 400: Sens = 2 GOTO 1 END IF IF XPos > 600 THEN EXIT DO LOOP SUB APers SELECT CASE Perso CASE 1 SELECT CASE Sens CASE 1 LINE (XPos, YPos)-(XPos + 25, YPos - 25), 1, BF LINE (XPos, YPos - 25)-(XPos + 25, YPos - 45), 0, BF LINE (XPos + 25, YPos - 25)-(XPos + 5, YPos - 40), 12, BF PSET (XPos + 26, YPos - 30), 12 LINE (XPos + 20, YPos - 27)-(XPos + 25, YPos - 27), 0 CIRCLE (XPos + 20, YPos - 35), 2, 15 PAINT STEP(0, 0), 15, 15 PSET (XPos + 22, YPos - 35), 0 LINE (XPos + 10, YPos - 20)-(XPos + 10, YPos - 10), 0 LINE (XPos + 15, YPos - 20)-(XPos + 15, YPos - 10), 0 LINE (XPos + 10, YPos - 5)-(XPos + 15, YPos - 10), 12, BF LINE (XPos + 10, YPos - 5)-(XPos + 15, YPos - 10), 0, B CASE 2 LINE (XPos, YPos)-(XPos + 25, YPos - 25), 1, BF LINE (XPos, YPos - 25)-(XPos + 25, YPos - 45), 0, BF LINE (XPos + 20, YPos - 25)-(XPos, YPos - 40), 12, BF PSET (XPos - 1, YPos - 30), 12 LINE (XPos, YPos - 27)-(XPos + 5, YPos - 27), 0 CIRCLE (XPos + 5, YPos - 35), 2, 15 PAINT STEP(0, 0), 15, 15 PSET (XPos + 3, YPos - 35), 0 LINE (XPos + 10, YPos - 20)-(XPos + 10, YPos - 10), 0 LINE (XPos + 15, YPos - 20)-(XPos + 15, YPos - 10), 0 LINE (XPos + 10, YPos - 5)-(XPos + 15, YPos - 10), 12, BF LINE (XPos + 10, YPos - 5)-(XPos + 15, YPos - 10), 0, B CASE 3 LINE (XPos - 5, YPos - 20)-(XPos, YPos - 10), 1, BF LINE (XPos - 5, YPos - 20)-(XPos, YPos - 10), 0, B LINE (XPos + 25, YPos - 20)-(XPos + 30, YPos - 10), 1, BF LINE (XPos + 25, YPos - 20)-(XPos + 30, YPos - 10), 0, B LINE (XPos - 5, YPos - 10)-(XPos, YPos - 5), 12, BF LINE (XPos - 5, YPos - 10)-(XPos, YPos - 5), 0, B LINE (XPos + 25, YPos - 10)-(XPos + 30, YPos - 5), 12, BF LINE (XPos + 25, YPos - 10)-(XPos + 30, YPos - 5), 0, B LINE (XPos, YPos)-(XPos + 25, YPos - 25), 1, BF LINE (XPos, YPos - 40)-(XPos + 25, YPos - 45), 0, BF LINE (XPos, YPos - 25)-(XPos + 25, YPos - 40), 12, BF PSET (XPos + 12, YPos - 30), 4 LINE (XPos + 7, YPos - 27)-(XPos + 18, YPos - 27), 0 CIRCLE (XPos + 5, YPos - 35), 2, 15 PAINT STEP(0, 0), 15, 15 PSET (XPos + 5, YPos - 35), 0 CIRCLE (XPos + 20, YPos - 35), 2, 15 PAINT STEP(0, 0), 15, 15 PSET (XPos + 20, YPos - 35), 0 CASE 4 LINE (XPos - 5, YPos - 20)-(XPos, YPos - 10), 1, BF LINE (XPos - 5, YPos - 20)-(XPos, YPos - 10), 0, B LINE (XPos + 25, YPos - 20)-(XPos + 30, YPos - 10), 1, BF LINE (XPos + 25, YPos - 20)-(XPos + 30, YPos - 10), 0, B LINE (XPos - 5, YPos - 10)-(XPos, YPos - 5), 12, BF LINE (XPos - 5, YPos - 10)-(XPos, YPos - 5), 0, B LINE (XPos + 25, YPos - 10)-(XPos + 30, YPos - 5), 12, BF LINE (XPos + 25, YPos - 10)-(XPos + 30, YPos - 5), 0, B LINE (XPos, YPos)-(XPos + 25, YPos - 25), 1, BF LINE (XPos, YPos - 25)-(XPos + 25, YPos - 45), 0, BF END SELECT CASE 2 SELECT CASE Sens CASE 1 LINE (XPos, YPos)-(XPos + 25, YPos - 25), 10, BF LINE (XPos, YPos - 25)-(XPos + 25, YPos - 45), 0, BF LINE (XPos + 25, YPos - 25)-(XPos + 5, YPos - 40), 12, BF PSET (XPos + 26, YPos - 30), 12 LINE (XPos + 20, YPos - 27)-(XPos + 25, YPos - 27), 0 CIRCLE (XPos + 20, YPos - 35), 3, 15 PAINT STEP(0, 0), 15, 15 PSET (XPos + 22, YPos - 35), 0 LINE (XPos + 10, YPos - 20)-(XPos + 10, YPos - 10), 0 LINE (XPos + 15, YPos - 20)-(XPos + 15, YPos - 10), 0 LINE (XPos + 10, YPos - 5)-(XPos + 15, YPos - 10), 12, BF LINE (XPos + 10, YPos - 5)-(XPos + 15, YPos - 10), 0, B CASE 2 LINE (XPos, YPos)-(XPos + 25, YPos - 25), 10, BF LINE (XPos, YPos - 25)-(XPos + 25, YPos - 45), 0, BF LINE (XPos + 20, YPos - 25)-(XPos, YPos - 40), 12, BF PSET (XPos - 1, YPos - 30), 12 LINE (XPos, YPos - 27)-(XPos + 5, YPos - 27), 0 CIRCLE (XPos + 5, YPos - 35), 3, 15 PAINT STEP(0, 0), 15, 15 PSET (XPos + 3, YPos - 35), 0 LINE (XPos + 10, YPos - 20)-(XPos + 10, YPos - 10), 0 LINE (XPos + 15, YPos - 20)-(XPos + 15, YPos - 10), 0 LINE (XPos + 10, YPos - 5)-(XPos + 15, YPos - 10), 12, BF LINE (XPos + 10, YPos - 5)-(XPos + 15, YPos - 10), 0, B CASE 3 LINE (XPos - 5, YPos - 20)-(XPos, YPos - 10), 10, BF LINE (XPos - 5, YPos - 20)-(XPos, YPos - 10), 0, B LINE (XPos + 25, YPos - 20)-(XPos + 30, YPos - 10), 10, BF LINE (XPos + 25, YPos - 20)-(XPos + 30, YPos - 10), 0, B LINE (XPos - 5, YPos - 10)-(XPos, YPos - 5), 12, BF LINE (XPos - 5, YPos - 10)-(XPos, YPos - 5), 0, B LINE (XPos + 25, YPos - 10)-(XPos + 30, YPos - 5), 12, BF LINE (XPos + 25, YPos - 10)-(XPos + 30, YPos - 5), 0, B LINE (XPos, YPos)-(XPos + 25, YPos - 25), 10, BF LINE (XPos, YPos)-(XPos + 25, YPos - 25), 0, B LINE (XPos, YPos - 40)-(XPos + 25, YPos - 45), 5, BF LINE (XPos, YPos - 40)-(XPos + 25, YPos - 45), 0, B LINE (XPos, YPos - 25)-(XPos + 25, YPos - 40), 12, BF PSET (XPos + 12, YPos - 30), 4 LINE (XPos + 5, YPos - 27)-(XPos + 20, YPos - 27), 0 CIRCLE (XPos + 5, YPos - 35), 3, 15 PAINT STEP(0, 0), 15, 15 PSET (XPos + 7, YPos - 35), 0 CIRCLE (XPos + 20, YPos - 35), 3, 15 PAINT STEP(0, 0), 15, 15 PSET (XPos + 18, YPos - 35), 0 CASE 4 LINE (XPos - 5, YPos - 20)-(XPos, YPos - 10), 10, BF LINE (XPos - 5, YPos - 20)-(XPos, YPos - 10), 0, B LINE (XPos + 25, YPos - 20)-(XPos + 30, YPos - 10), 10, BF LINE (XPos + 25, YPos - 20)-(XPos + 30, YPos - 10), 0, B LINE (XPos - 5, YPos - 10)-(XPos, YPos - 5), 12, BF LINE (XPos - 5, YPos - 10)-(XPos, YPos - 5), 0, B LINE (XPos + 25, YPos - 10)-(XPos + 30, YPos - 5), 12, BF LINE (XPos + 25, YPos - 10)-(XPos + 30, YPos - 5), 0, B LINE (XPos, YPos)-(XPos + 25, YPos - 25), 10, BF LINE (XPos, YPos - 25)-(XPos + 25, YPos - 45), 0, BF END SELECT END SELECT END SUB SUB CleanCors SELECT CASE Cors CASE 1 LINE (XPre - 5, YPre)-(XPre + PWidth + 5, YPre - PHeigh), 11, BF LINE (XPre - 5, Sol)-(XPre + PWidth + 5, Sol + 10), 2, BF CASE 2 LINE (XPre - 5, YPre)-(XPre + PWidth + 5, YPre - PHeigh), 11, BF LINE (XPre - 5, 400)-(XPre + PWidth + 5, 410), 2, BF LINE (250, 400)-(260, 390), 2, BF IF (XPos >= 350 AND XPos <= 431) OR (XPre >= 350 AND XPre <= 431) THEN Temp1 = Perso: Perso = 2 Temp2 = Sens: Sens = 3 Temp3 = XPos: XPos = 400 Temp4 = YPos: YPos = 400 APers Perso = Temp1: Sens = Temp2: XPos = Temp3: YPos = Temp4 END IF END SELECT APers END SUB SUB DeCors SELECT CASE Cors CASE 1 PAINT (NuageX(1), NuageY(1)), 11, 11 A = INT(RND * 3) - 1 IF NuageX(1) <= 50 AND A = -1 THEN A = 1 IF NuageX(1) >= 600 AND A = 1 THEN A = -1 IF NuageY(1) <= 50 AND A = -1 THEN A = 1 IF NuageY(1) >= 300 AND A = 1 THEN A = -1 FOR I = 1 TO 10 NuageX(I) = NuageX(I) + A NuageY(I) = NuageY(I) + A CIRCLE (NuageX(I), NuageY(I)), 20, 7 PAINT (NuageX(I), NuageY(I)), 7, 7 CIRCLE (NuageX(I), NuageY(I)), 20, 15 PAINT (NuageX(I), NuageY(I)), 15, 15 NEXT I CASE 2 LINE (250, 400)-(260, 390), 2, BF END SELECT END SUB SUB Obstacle XPre = XPos: YPre = YPos SELECT CASE Cors CASE 2 IF Jump = 0 AND Sol = 400 THEN IF K$ = CHR$(0) + "M" AND XPos + PWidth > 250 AND XPos + PWidht - Speed <= 250 THEN XPos = 249 - PWidth IF K$ = CHR$(0) + "K" AND XPos < 260 AND XPos + Speed >= 260 THEN XPos = 261 IF K$ = CHR$(0) + "M" AND XPos + PWidth > 395 AND XPos + PWidht - Speed <= 395 THEN XPos = 394 - PWidth IF K$ = CHR$(0) + "K" AND XPos < 430 AND XPos + Speed >= 430 THEN XPos = 431 END IF: Sol = 400 IF XPos + PWidth > 250 AND XPos < 260 THEN Sol = 390 IF XPos + PWidth > 395 AND XPos < 430 THEN Sol = 355 END SELECT IF XPos <> XPre OR YPos <> YPre THEN CleanCors END SUB SUB Param SELECT CASE Cors CASE 1 XPos = 10: YPos = 400: Sol = 400: Dime = 2: Perso = 1 Sens = 1: KJump = 2000: Jump = 0: LJump = 2000: WMax = 0 CASE 2 XPos = 10: YPos = 400: Sol = 400: Dime = 2: Perso = 1: Sens = 1 KJump = 2000: Jump = 0: LJump = 2000: WMax = 50 END SELECT END SUB SUB Precors SELECT CASE Cors CASE 1 LINE (0, 0)-(640, 400), 11, BF LINE (0, 400)-(640, 480), 2, BF X = INT(RND * 300) + 160 Y = 100 FOR I = 1 TO 10 A = INT(RND * 40) - 20 B = INT(RND * 20) - 10 X = X + A: Y = Y + B NuageX(I) = X: NuageY(I) = Y CIRCLE (X, Y), 20, 12 PAINT (X, Y), 12, 12 CIRCLE (X, Y), 20, 15 PAINT (X, Y), 15, 15 NEXT I LOCATE 28, 1: PRINT " Utilisez les Ÿlˆches pour vous d‚placer, espace pour Ÿrapper. " CASE 2 LINE (0, 0)-(640, 400), 11, BF LINE (0, 400)-(640, 480), 2, BF LINE (250, 400)-(260, 390), 2, BF Temp1 = Perso: Perso = 2 Temp2 = Sens: Sens = 3 Temp3 = XPos: XPos = 400 Temp4 = YPos: YPos = 400 APers Perso = Temp1: Sens = Temp2: XPos = Temp3: YPos = Temp4 END SELECT END SUB SUB Saut XPre = XPos: YPre = YPos: W = W + 1 IF YPos < Sol AND Jump = 0 THEN Jump = 2: W = WMax IF W >= WMax THEN IF Jump = 1 THEN YPos = YPos - KJump / 100 KJump = KJump / SJump ELSEIF Jump = 2 THEN YPos = YPos + KJump / 100 KJump = KJump * SJump END IF ' IF Jump <> 0 THEN APers IF KJump < 100 AND Jump = 1 THEN Jump = 2 IF KJump = 0 AND Jump <> 0 THEN KJump = .1 IF YPos >= Sol - KJump / 100 THEN KJump = LJump: YPos = Sol: Jump = 0: 'APers W = 0 END IF IF XPos <> XPre OR YPos <> YPre THEN CleanCors END SUB SUB Touches K$ = INKEY$ XPre = XPos: YPre = YPos: SPre = Sens SELECT CASE K$ CASE CHR$(27) END CASE CHR$(0) + "K" IF Sens <> 2 THEN Sens = 2 ELSE XPos = XPos - Speed: Sens = 2 END IF CASE CHR$(0) + "M" IF Sens <> 1 THEN Sens = 1 ELSE XPos = XPos + Speed: Sens = 1 END IF CASE CHR$(0) + "P" IF Dime = 2 OR Sens <> 3 THEN Sens = 3 ELSE YPos = YPos + Speed: Sens = 3 END IF CASE CHR$(0) + "H" IF Dime = 3 THEN YPos = YPos - Speed: Sens = 4 ELSE IF Jump = 0 THEN Jump = 1: W = WMax END IF CASE CHR$(9) Speed = Speed / 2: WMax = WMax * 2 CASE "`" Speed = Speed * 2: WMax = WMax / 2 END SELECT IF XPos <> XPre OR YPos <> YPre OR SPre <> Sens THEN CleanCors END SUB SUB Variables ' Speed Vitesse du Perso Defaut : 10 ' Sol Emplacement du sol ' KJump ' Jump 1 = en saut 2 = en descente ' Dime 2 = Deplacement DG 3 = Deplacement HBDG ' Cors Numero du decors ' W Variable de saut ' XPos, YPos Position du personnage ' Perso Numero du personnage ' Sens Sens dans lequel avance le personnage ' NuageX(10), NuageY(10) Position du nuage ' LJump Hauteur du saut Defaut : 2000 ' SJump Avance du saut Defaut : 1.5 ' WMax Vitesse du saut ' PWidth Largeur du personnage ' K$ Derniere touche utilisee END SUB