[VG5000] Lode Runner

Cette catégorie traite de développements récents destinés à nos vieilles machines, applications, jeux ou démos... Amis programmeurs, c'est ici que vous pourrez enfin devenir célèbres!

Modérateurs : Papy.G, fneck, Carl

Avatar de l’utilisateur
hlide
Messages : 3507
Inscription : 29 nov. 2017 10:23

Re: [VG5000] Lode Runner

Message par hlide »

@Guillaume

Code : Tout sélectionner

103 brick trap (same graphic as brick 101) - cord - scale
Il ne manque pas un REM là ?
Xavier_

Re: [VG5000] Lode Runner

Message par Xavier_ »

Salut Guillaume,

Pour être mesquin et t'aider à optimiser le programme…

Ce code me semble perfectible… dans sa structure:

Code : Tout sélectionner

203 V=PEEK(A+OS+(INT(OS/123)*6)):OS=OS+1
204 IF V=33 THEN TX 4:CURSORX 7+SX:CURSORY 7+SY:PRINT "-GAME COMPLETED-":GOTO 595
205 IF V>=35 AND V<=62 THEN C$=CHR$(100):L=V-34:E=0
206 IF V>=63 AND V<=90 THEN C$=CHR$(101):L=V-62:ET CO(1):E=1
207 IF V>=91 AND V<=95 THEN C$=CHR$(102):L=V-90:ET CO(2):E=2
208 IF V>=96 AND V<=110 THEN C$=CHR$(104):L=V-95:ET CO(4):E=4
209 IF V>=111 AND V<=122 THEN CURSORX X+SX:CURSORY Y+SY:ET CO(5):PRINT CHR$(105):T(X,Y)=5:X=X+1:C$=CHR$(100):L=V-111:E=0
210 IF V=123 THEN C$=CHR$(103):L=1:ET CO(3):E=3
211 IF V>=124 AND V<=127 THEN C$=CHR$(V-18):L=1:ET CO(V-118):E=V-118
:shock:
Ici tu fais deux test pour un interval !
Pourquoi es-tu si dur avec ton Basic ?

Code : Tout sélectionner

203 V=PEEK(A+OS+(INT(OS/123)*6)):OS=OS+1:IF V=33 THEN TX 4:CURSORX 7+SX:CURSORY 7+SY:PRINT "-GAME COMPLETED-":GOTO 595
204 IF V=123 THEN C$=CHR$(103):L=1:ET CO(3):E=3:GOTO 212
205 IF V<35 THEN GOTO 212
206 IF V<=62 THEN C$=CHR$(100):L=V-34:E=0:GOTO 212
207 IF V<=90 THEN C$=CHR$(101):L=V-62:ET CO(1):E=1:GOTO 212
208 IF V<=95 THEN C$=CHR$(102):L=V-90:ET CO(2):E=2:GOTO 212
209 IF V<=110 THEN C$=CHR$(104):L=V-95:ET CO(4):E=4:GOTO 212
210 IF V<=122 THEN CURSORX X+SX:CURSORY Y+SY:ET CO(5):PRINT CHR$(105):T(X,Y)=5:X=X+1:C$=CHR$(100):L=V-111:E=0:GOTO 212
211 IF V<=127 THEN C$=CHR$(V-18):L=1:ET CO(V-118):E=V-118
212 IF L=0 GOTO 223
Pareil, pourquoi tester une valeur fixe 15.000 fois ?

Code : Tout sélectionner

213 FOR J=0 TO L-1
214 D$=D$+C$
215 T(X+J,Y)=E
216 IF E=6 THEN ZN=ZN+1:ZX(ZN)=X+J:ZY(ZN)=Y
217 IF E=7 THEN G=G+1
218 IF E=8 AND EN<ME THEN EN=EN+1:EX(EN)=X+J:EY(EN)=Y:EO(EN)=X+J:EP(EN)=Y:EM(EN)=0:EL(EN)=INT(RND(1)*5)+5:T(X+J,Y)=0
219 IF E=8 AND EN=ME THEN D$=CHR$(100):T(X+J,Y)=0
220 IF E=9 THEN NX=X+J:NY=Y:O=X:P=Y
221 NEXT J

Code : Tout sélectionner

213 FOR J=0 TO L-1:D$=D$+C$:T(X+J,Y)=E:IF E=6 THEN ZN=ZN+1:ZX(ZN)=X+J:ZY(ZN)=Y:GOTO 221
214 REM *
215 REM A EFFACER
216 REM *
217 IF E=7 THEN G=G+1:GOTO 221
218 IF E=8 AND EN<ME THEN EN=EN+1:EX(EN)=X+J:EY(EN)=Y:EO(EN)=X+J:EP(EN)=Y:EM(EN)=0:EL(EN)=INT(RND(1)*5)+5:T(X+J,Y)=0:GOTO 221
219 IF E=8 AND EN=ME THEN D$=CHR$(100):T(X+J,Y)=0:GOTO 221
220 IF E=9 THEN NX=X+J:NY=Y:O=X:P=Y
221 NEXT J
ça perd de la mémoire, mais c'est plus rapide… mais tu en gagnes en concaténant les lignes.
Dernière modification par Xavier_ le 28 avr. 2020 10:58, modifié 2 fois.
Guillaume
Messages : 46
Inscription : 26 avr. 2020 15:24
Localisation : Nice

Re: [VG5000] Lode Runner

Message par Guillaume »

hlide a écrit : 28 avr. 2020 10:25 @Guillaume

Code : Tout sélectionner

103 brick trap (same graphic as brick 101) - cord - scale
Il ne manque pas un REM là ?
Oui, un oubli, mais en fait ca ne gene pas.
J'écris mes programmes sur un editeur texte sur mon PC pour plus d'éfficacité. Ensuite je les intégre dans l'émulateur par la simulation clavier. De ce fait, pour ne pas surcharger le programme BASIC en mémoire, je double les lignes pour que les commentaires dans le source ne soit pas pris en compte. Par exemple:
150 REM un commentaire
150 PRINT A$
Au chargement du programme, la deuxième ligne 150 va écraser la première, les commentaires sont enlevés de fait du code.
Et finalement, comme la ligne de commentaire n'est jamais éxécuté, on peut se permettre de ne pas mettre le REM.
Avatar de l’utilisateur
hlide
Messages : 3507
Inscription : 29 nov. 2017 10:23

Re: [VG5000] Lode Runner

Message par hlide »

Bien vu !
Guillaume
Messages : 46
Inscription : 26 avr. 2020 15:24
Localisation : Nice

Re: [VG5000] Lode Runner

Message par Guillaume »

Xavier_ a écrit : 28 avr. 2020 10:49 Salut Guillaume,
Pour être mesquin et t'aider à optimiser le programme…
Merci pour tes suggestions, je les prends en compte!
joaopa
Messages : 512
Inscription : 14 sept. 2013 12:17

Re: [VG5000] Lode Runner

Message par joaopa »

Dans les optimisations à la marge; j'ai vu quelques gosub suivi d'un return. A remplacer avantageusement par un goto. ligne(700-720; 610-611), 508

>Si tu veux plus de détails sur le format des tableaux, n'hésite pas.

Oui, je suis intéressé.
Xavier_

Re: [VG5000] Lode Runner

Message par Xavier_ »

Salut,

Voilà, j'ai tout cassé…
Ma version corrige le placement de face et ajoute une animation pour la bombe.
Mais, les monstres ne bougent plus…
Et je n'ai pas trouvé comment effacer le cadre à chaque fin de tableau.
:oops:
Tu prends ce dont tu as besoin…

Code : Tout sélectionner

1 CLEAR 0200
2 DR=10
3 ME=2
4 NL=3
10 REM4|+&}/|+EoE%|+)oi|&}&)s@rEo@)s@yq'~#s@v}~#q@oC&FoE$o3v$z~'vGoHv+yv)}#oir}%&oD+Eo&x$}+oZ%}9oo\?\z}*otsoGp}%op}#~#sxoB{oo?[?
11 REM[?sxt|tocoe$~t|tstoA_[otsq}$xor~#p}$oCxo[A[@[@[xoAo@[A[(xrq[}$[(rerp}FoA^'qB*o.u*r*uZ=|i&}.|p}(oHu|Cryo_\'p~#t}&v'oDoCo@)$
12 REM}$utqa'Bo?(q~$sa%&soDo@(a}&ocuq~)?&voGt&voGtAoH%}%Co?AoH#oApCo?%u&oAr}$pZ|=|j2tt?#}#?'tp}$ooq}#C#}$ooq}#poqqovoqqopppoooop
13 REMvpoooopppq}~}$rrq}~}$pqoCrooroCqroooopoqqopoooorxpoooopxs}&q}~}$t}%oDroCqoEusoooorvuo.vuv}$#vZ+|4+|)}(~%A(|(BoE$@'|'@%v%@&
14 REM|&@&v}~#A%|$}A&r}%@oB$|$BoAoE$r@#|#@%z$o}~$@o@&t}'oAst?o@oA'ro0wrs}'~%wroEoDoCo@zo.qzq+qZP|G?#}1|?#~#}%??{AoBr}%|Eo??{AoL#
15 REMA$o??&q}#~'B#A$o??oGoF#A$o??rDoC}}?#A}#o??rDoLo??r?&}s}$~%}#?o??rAoEoEo?o??q}AvoEo?o??o@{?$s$q@%o?o??o@{?oCoF}}#o?o??o@{?o
16 REMCoD}Do??o~%o@}@s}$~'o?Z$|;$|3g$|,~(uoCo?&?oA%~s}#o'usAoE$~$r}$vvCoB$vv'uvv$}$r}$vv@oJspB#o$o.p}$pB#o$q}+ocp?#}?#oEo.pCo)o.u
17 REMo)p*}#q~%oZ-|&|--|&|-%}#~%o?|&|?r~#}%oCoao?|&|?oaoCoo?%?r?|&|?%o?%?oo?%?r?|&|?%o?%?oo?#}#?r?|&|?%o?#}#?ooCr?|&|?%oCoo?%?r?
18 REM|&|?%o?%?oo?%?ob?oBo?bo?%?oo?%?%o?so?r?%?oo?~}#?%o?q}~o?r?#}~?oo@{@%o?_[?r@{@ot{$wq{'ou{~s%p{(oZ|=|nko?#~%?/?'?pC1C#p?#A1?
19 REM}A#pC#~&~(~#C#pA#?{O#?#pC{A#}@#}Fo?#pC{Oo?#pC{Oo?#pC{B&Go?#pC{B&Go?#pC{B%}oFo?#zBogqy^/u$^(~),}0|$*oE$}(|$&}%uD&|$Hx}&|$,o
20 REMD|Co@$~+u|'sHu|#~%r}HoE\%oBHo.sHv}#bs@(@v@%s@$}}$@t}(sIoErs-vFo&}&#o1oZ!
100 SETEG 68,"003864626262427C7C00":SETEG 69,"003C62606C78625C7C00":SETEG 76,"003060606060427C7C00"
101 SETEG 78,"0026646C747464644200":SETEG 79,"003864666666423C3C00":SETEG 82,"003C66666C78786C4600"
102 SETEG 85,"002466666666423C3C00"
104 SETET 100,"00000000000000000000":SETET 101,"FEFEFEFE00EFEFEFEF00":SETET 102,"FFFFFFFFFFFFFFFFFF00"
106 SETET 103,"FEFEFEFE00EFEFEFEF00":SETET 104,"00FF0000000000000000":SETET 105,"42427E424242427E4242"
108 SETET 106,"40427E420202427E4240":SETET 107,"000000007EA5A58181FF":SETET 108,"1C3E2A3E1C1C2A1C1436"
110 SETET 109,"1C2236221C1C2A1C1436":SETET 126,"0000070A1F356F54FBD6":SETET 127,"080836C868B0F8D8FCB4"
114 SETET 110,"1C2232221C1C281C1236":SETET 111,"1C2232221C1C0A1C242C":SETET 112,"1C2226221C1C0A1C2436"
116 SETET 113,"1C2226221C1C281C121A":SETET 116,"FEFEFEFE00EFEFEFEF00":SETET 117,"FEFEFEFE00EFEFEFEF00"
118 SETET 118,"C3FF6236221C141C2448":SETET 119,"C3FF6236221C141C1209":SETET 120,"BAC667477A52527E6A46"
121 SETET 121,"5D63E6E25E4A4A7E5662":SETET 122,"BAC667477A52527E6A46":SETET 123,"5D63E6E25E4A4A7E5662"
124 SETET 124,"1C22B6A35D3E081C1436":SETET 125,"1C22B6A35D3E081C1436":SETET  99,"FFFFFFFFFFFFFFFFFFFF"
130 DIM CO(10),T(29,17),ZX(18),ZY(18)
131 DIM EX(6),EY(6),EO(6),EP(6),EM(6),EL(6),ED(6)
132 DATA 0,1,1,1,7,7,0,3,5,7
133 FOR I=0 TO 9:READ CO(I):NEXT I
134 FOR I=1 TO 28:T(I,17)=2:NEXT I
135 DEFFN MD=INT(((NX+NY)/2)-INT((NX+NY)/2)+0.5)
136 T=1:SX=5:SY=3:S=0:G=0:D=0:A=&"4A02"+38:OS=0
137 INIT 0,0:DISPLAY 255:PAGE:ET 3
138 FOR I=0 TO 29:CURSORX I+SX:CURSORY SY:PRINT CHR$(99):CURSORX I+SX:CURSORY SY+17:PRINT CHR$(99):NEXT I
139 FOR I=1 TO 16:CURSORX SX:CURSORY I+SY:PRINT CHR$(99):CURSORX SX+29:CURSORY I+SY:PRINT CHR$(99):NEXT I
140 TX 7:CURSORX SX:CURSORY SY+19:PRINT "SCORE":GOSUB 420:TX 1:CURSORX SX+13:CURSORY SY+19:PRINT "HIGH SCORE":GOSUB 423
141 GOSUB 435
142 ET 1,3:D$=CHR$(101)+CHR$(101)+CHR$(101)+CHR$(101)
143 CURSORX 5:CURSORY 1:PRINT D$:CURSORX 30:CURSORY 1:PRINT D$
144 CURSORX 5:CURSORY 2:PRINT D$:CURSORX 30:CURSORY 2:PRINT D$
145 TX 3,3:CURSORX 9:CURSORY 1:PRINT "LLOODDEE  RRUUNNNNEERR":CURSORX 9:CURSORY 2:PRINT "LLOODDEE  RRUUNNNNEERR"
146 CURSORX 1:CURSORY 23:TX 4:PRINT "Original game 1983 (c)Douglas E. Smith"
147 CURSORX 1:CURSORY 24:PRINT "VG5000 version 1986 (c)Guillaume Ramey"
148 G$=CHR$(126)+CHR$(127)
149 ET 3:FOR I=3 TO 20 STEP 2:CURSORX INT(RND(1)*4):CURSORY I:PRINT G$:CURSORX INT(RND(1)*4)+35:CURSORY I:PRINT G$:NEXT I
150 TX 2:FOR I=4 TO 20 STEP 2:CURSORX INT(RND(1)*5):CURSORY I:PRINT "$":CURSORX INT(RND(1)*5)+35:CURSORY I:PRINT "$":NEXT I
200 X=1:Y=1:ZN=0:EN=0:BS=1000:CURSORX 28+SX:CURSORY 18+SY:TX 7:PRINT "--"
201 ET 0
202 D$=""
203 V=PEEK(A+OS+(INT(OS/123)*6)):OS=OS+1:IF V=33 THEN TX 4:CURSORX 7+SX:CURSORY 7+SY:PRINT "-GAME COMPLETED-":GOTO 595
204 IF V=123 THEN C$=CHR$(103):L=1:ET CO(3):E=3:GOTO 212
205 IF V<35 THEN GOTO 212
206 IF V<=62 THEN C$=CHR$(100):L=V-34:E=0:GOTO 212
207 IF V<=90 THEN C$=CHR$(101):L=V-62:ET CO(1):E=1:GOTO 212
208 IF V<=95 THEN C$=CHR$(102):L=V-90:ET CO(2):E=2:GOTO 212
209 IF V<=110 THEN C$=CHR$(104):L=V-95:ET CO(4):E=4:GOTO 212
210 IF V<=122 THEN CURSORX X+SX:CURSORY Y+SY:ET CO(5):PRINT CHR$(105):T(X,Y)=5:X=X+1:C$=CHR$(100):L=V-111:E=0:GOTO 212
211 C$=CHR$(V-18):L=1:ET CO(V-118):E=V-118
212 IF L=0 GOTO 223
213 FOR J=0 TO L-1:D$=D$+C$:T(X+J,Y)=E:IF E=6 THEN ZN=ZN+1:ZX(ZN)=X+J:ZY(ZN)=Y:GOTO 221
214 IF E=7 THEN G=G+1:GOTO 221
215 IF E=8 AND EN<ME THEN EN=EN+1:EX(EN)=X+J:EY(EN)=Y:EO(EN)=X+J:EP(EN)=Y:EM(EN)=0:EL(EN)=INT(RND(1)*5)+5:T(X+J,Y)=0:GOTO 221
216 IF E=8 AND EN=ME THEN D$=CHR$(100):T(X+J,Y)=0:GOTO 221
217 IF E=9 THEN NX=X+J:NY=Y:O=X:P=Y
221 NEXT J
222 CURSORX X+SX:CURSORY Y+SY:PRINT D$:X=X+L
223 IF X>28 THEN X=1:Y=Y+1
224 IF Y<17 GOTO 202
401 CURSORX 22+SX:CURSORY 18+SY:TX 7:PRINT "LEVEL "+RIGHT$("00"+MID$(STR$(T),2,2),2):SOUND 100,10:SOUND 150,10
402 CURSORX SX:CURSORY 18+SY:TX 7:PRINT "BONUS ":GOSUB 418
405 DISPLAY DR
406 REM SCROLL
410 X=NX:Y=NY:T(X,Y)=0
411 GOTO 900
418 CURSORX 8+SX:CURSORY 18+SY:TX 7:PRINT RIGHT$("0000"+MID$(STR$(BS),2,4),4):RETURN
420 TX7:CURSORX 6+SX:CURSORY 19+SY:PRINT RIGHT$("000000"+MID$(STR$(S),2,6),6):RETURN
421 IF S<=HS THEN RETURN
422 HS=S:PLAY "T30O4BABA"
423 TX1:CURSORX 24+SX:CURSORY 19+SY:PRINT RIGHT$("000000"+MID$(STR$(HS),2,6),6):RETURN
435 D$="":IF NL>0 THEN FOR I=1 TO NL:D$=D$+CHR$(109):NEXT I
436 D$=D$+CHR$(100):ET 2:CURSORX SX+15:CURSORY SY+18:PRINT D$:RETURN
500 IF STICKX(2)=1 THEN NX=X+1:C=0:D=0:GOTO 509
501 IF STICKX(2)=255 THEN NX=X-1:C=0:D=0:GOTO 510
502 IF STICKY(2)=1 THEN NY=Y+1:D=1:E=0:GOSUB 920:GOTO 510
503 IF STICKY(2)=255 THEN NY=Y-1:D=0:GOTO 510
504 IF ACTION(2)=1 THEN GOTO 585
505 IF KEY(0)=115 THEN GOTO 560
506 C=C+1:IF C>30 THEN BS=BS-20:SOUND 180,1:C=0:D=1:E=T(X,Y):IF E=0 THEN GOSUB 920
507 IF BS<0 THEN BS=0
508 GOTO 418
509 IF T(NX,NY)=0 THEN D=2
510 W=0:IF NX<1 THEN NX=1
511 IF NX>28 THEN NX=28
512 IF NY<1 THEN NY=1
513 IF NY>16 THEN NY=16
514 IF NX=X AND NY=Y GOTO 500
515 E=T(NX,NY)
516 IF E=1 OR E=2 THEN NX=X:NY=Y:GOTO 500
517 IF E=7 THEN SOUND 140,2:G=G-1:S=S+100:T(NX,NY)=0:GOSUB 420
518 IF E=7 AND G=0 THEN GOSUB 580
529 CURSORX NX+SX:CURSORY NY+SY:ET CO(9)
530 IF E=6 AND G>0 THEN PRINT CHR$(110+FNMD(NX)+D):GOTO 532
531 PRINT CHR$(110+E*2+FNMD(NX)+D)
532 E=T(X,Y):CURSORX X+SX:CURSORY Y+SY:ET CO(E):PRINT CHR$(100+E)
533 X=NX:Y=NY
534 GOSUB 550
536 E=T(X,Y):F=T(X,Y+1)
537 IF (E=0ORE=3OR(E=6ANDG<>0))AND(F=0ORF=3ORF=4OR(F=6ANDG<>0)ORF=7ORF=8) THEN NY=Y+1:D=0:SOUND 200-W*8,1:W=W+1:GOTO 510
538 IF E=0 THEN SOUND 10+FNMD(NX)*10,1
539 IF (E=5 OR E=6) AND Y=1 AND G=0 GOTO 590
540 RETURN
550 FOR I=1 TO EN:IF X=EX(I) AND Y=EY(I) GOTO 560
551 NEXT I
552 RETURN
560 TX 3
561 GOSUB 940
562 CURSORX X+SX:CURSORY Y+SY:PRINT " ":PLAY "T15O3GFEFEDEDCBAA"
567 NL=NL-1:GOSUB 435:IF NL<1 GOTO 593
569 FOR I=1 TO EN
570 E=T(EX(I),EY(I)):CURSORX EX(I)+SX:CURSORY EY(I)+SY:ET CO(E):PRINT CHR$(100+E)
571 EX(I)=EO(I):EY(I)=EP(I):CURSORX EX(I)+SX:CURSORY EY(I)+SY:ET CO(8):PRINT CHR$(108)
572 NEXT I
573 E=T(X,Y):CURSORX X+SX:CURSORY Y+SY:ET CO(E):PRINT CHR$(100+E)
574 X=O:Y=P:NX=X:NY=Y:GOSUB 920
575 GOTO 900
580 CO(6)=7:ET CO(6)
581 FOR I=1 TO ZN:CURSORX ZX(I)+SX:CURSORY ZY(I)+SY:PRINT CHR$(106):SOUND 50+I*2,2:NEXT I
584 RETURN
585 IF (X+D-1)<1 OR (X+D-1)>28 OR Y=16 THEN RETURN
586 ET 7:F=T(X+D-1,Y+1):IF F<>1 GOTO 510
587 T(X+D-1,Y+1)=0:CURSORXX+D-1+SX:CURSORYY+1+SY:GOSUB 930:PRINTCHR$(100):NY=NY+1:FORI=1TO20:SOUND 255-2*I,1:NEXTI
588 IF S>24 THEN S=S-25:GOSUB 420
589 GOTO 510
590 PLAY "T30O3A20RC10D10R20C10D30":IF BS>0 THEN FOR I=1 TO BS STEP 20:S=S+20:GOSUB 420:BS=BS-20:GOSUB 418:SOUND 110,1:NEXT I
591 GOSUB 421:CO(6)=0:T=T+1:IF INT(RND(1)*2)=0 THEN SETET 101,"FEFEFEFE00EFEFEFEF00":SETET 103,"FEFEFEFE00EFEFEFEF00":GOTO 200
592 SETET 101,"FFFF183C66C381FFFF00":SETET 103,"FFFF183C66C381FFFF00":GOTO 200
593 GOSUB 421:TX 4:CURSORX 7+SX:CURSORY 7+SY:PRINT "G A M E  O V E R"
595 CURSORX 7+SX:CURSORY 8+SY:PRINT "REPLAY?    (Y/N)"
597 IF KEY(0)=78 OR KEY(0)=110 THEN INIT 6,6:END
598 IF KEY(0)=89 OR KEY(0)=121 THEN NL=3:GOTO 136
599 GOTO 597
600 EL(N)=EL(N)-1
601 IF EL(N)<1 THEN EM(N)=INT(RND(1)*3):GOTO 890
602 ON EM(N)+1 GOTO 692, 630, 630
603 RETURN
630 AX=EX(N):AY=EY(N):ON ED(N) GOTO 632,633,634,635:GOTO 650
632 IE=-1:ES=2:GOTO 650
633 IE=1:ES=1:GOTO 650
634 IE=-1:ES=4:GOTO 670
635 IE=1:ES=3:GOTO 670
650 EX(N)=EX(N)+IE
651 IF EX(N)<1 THEN EX(N)=1:ED(N)=2:RETURN
652 IF EX(N)>28 THEN EX(N)=28:ED(N)=1:RETURN
653 E=T(EX(N),EY(N)):B=T(EX(N),EY(N)+1):U=T(EX(N),EY(N)-1)
654 IF E=1 OR E=2 OR E=3 THEN EX(N)=AX:ED(N)=ES:RETURN
655 IF E=0 AND (B=0 OR B>5) THEN EX(N)=AX:ED(N)=ES:RETURN
656 GOSUB 690
659 IF B<>5 THEN GOTO 662
660 IF U=5 AND INT(RND(1)*4)=0 THEN ED(N)=INT(RND(1)*2)+3:RETURN
661 IF INT(RND(1)*4)=0 THEN ED(N)=4:RETURN
662 IF U=5 AND INT(RND(1)*4)=0 THEN ED(N)=3:RETURN
663 RETURN
670 EY(N)=EY(N)+IE
671 IF EY(N)<1 THEN EY(N)=1:ED(N)=4:RETURN
672 IF EY(N)>16 THEN EY(N)=16:ED(N)=3:RETURN
673 E=T(EX(N),EY(N)):B=T(EX(N),EY(N)+1)
674 IF NOT ((E=0 AND B<>0) OR E=5) THEN EY(N)=AY:ED(N)=ES:RETURN
675 L=T(EX(N)-1,EY(N)):R=T(EX(N)+1,EY(N)):LB=T(EX(N)-1,EY(N)+1):RB=T(EX(N)+1,EY(N)+1)
676 GOSUB 690
679 LL=((L=0 OR L>=5) AND (LB=1 OR LB=2 OR LB=3 OR LB=5))
680 RR=((R=0 OR R>=5) AND (RB=1 OR RB=2 OR RB=3 OR RB=5))
681 IF LL AND RR AND INT(RND(1)*4)=0 THEN ED(N)=INT(RND(1)*2)+1:RETURN
682 IF LL AND INT(RND(1)*4)=0 THEN ED(N)=1:RETURN
683 IF RR AND INT(RND(1)*4)=0 THEN ED(N)=2:RETURN
684 RETURN
686 RETURN
690 E=T(AX,AY)
691 CURSORX AX+SX:CURSORY AY+SY:ET CO(E):PRINT CHR$(100+E)
692 CURSORX EX(N)+SX:CURSORY EY(N)+SY:ET CO(8):PRINT CHR$(108)
693 IF EX(N)=X AND EY(N)=Y GOTO 560
694 RETURN
720 GOTO 692
890 ON EM(N) GOTO 891, 892, 895
891 EL(N)=1
892 IF T(EX(N),EY(N))=0 THEN ED(N)=INT(RND(1)*2)+1
893 IF T(EX(N),EY(N))=5 THEN ED(N)=INT(RND(1)*2)+3
894 EL(N)=INT(RND(1)*10)+10:RETURN
895 IF EM(N)=2 THEN EL(N)=1:RETURN
900 GOSUB 500
901 IF EN>=1 THEN N=1:GOSUB 600
902 GOSUB 500
903 IF EN>=2 THEN N=2:GOSUB 600
904 GOSUB 500
905 IF EN>=3 THEN N=3:GOSUB 600
906 GOSUB 500
907 IF EN>=4 THEN N=4:GOSUB 600
908 GOSUB 500
909 IF EN>=5 THEN N=5:GOSUB 600
910 GOSUB 500
911 IF EN>=6 THEN N=6:GOSUB 600
913 GOTO 900
920 CURSORX X+SX:CURSORY Y+SY:ET CO(9):PRINT CHR$(109):RETURN
930 SETET 98,"0058043C767A7A7E3C00":PRINT CHR$(98):FOR TR=0 TO 60:NEXT TR:PLAY "T00O4BBAA":SETET 98,"0024566672008ED6CC00"
931 FOR TR=0 TO 30:NEXT TR:CURSORXX+D-1+SX:CURSORYY+1+SY:PRINT CHR$(98):PLAY "T00O4BA":SETET 98,"2A55AA51824181810000"
932 CURSORXX+D-1+SX:CURSORYY+1+SY:ET 1:PRINT CHR$(98):RETURN
940 CURSORX X+SX:CURSORY Y+SY:ET
941 SETET 97,"38446C4438385428286C":PRINT CHR$(97):FOR TR=0 TO 60:NEXT TR:PLAY "T00O1E"
942 SETET 97,"180038446C44AA7C106C":FOR TR=0 TO 60:NEXT TR:PLAY "T00O1D"
943 SETET 97,"08140802396D557DAA7C":FOR TR=0 TO 60:NEXT TR:PLAY "T00O1C"
944 SETET 97,"081C080822553E55FE00":FOR TR=0 TO 60:NEXT TR:PLAY "T00O1B"
945 SETET 97,"00081C0808142A45FE00":FOR TR=0 TO 60:NEXT TR:PLAY "T00O1A":TX:RETURN
950 SETET 97,"1C2236229C661918A5C3":FOR TR=0 TO 60:NEXT TR:CURSORXX+SX:CURSORYY+SY:ET 1:PRINT CHR$(97)
951 FOR TR=0 TO 60:IF STICKY(2)=255 AND STICKX(2)=1 THEN NY=Y-1:NX=X+1:C=0:D=0:RETURN
953 IF STICKY(2)=255 AND STICKX(2)=255 THEN NY=Y-1:NX=X-1:C=0:D=0:RETURN
954 NEXT TR
960 RETURN
[Edit: toujours pas de cerveau aux monstres, mais on meurt mieux ! ]

[Edit2: Zut! 1986 ! J'étais parti sur un jeu tout nouveau… Purée, tu te replonges dans la piscine olympique !]

[Edit3: Monstres réparés… reste la sortie d'un trou créé au rez-de-chaussée par une bombinette...]

Donc, ajout de l'animation de la bombe, le placement en frontal pour la bombe en dessous, optimisation de certaines routines (conditions), l'animation de la mort.
D'autres suggestions ?
Guillaume
Messages : 46
Inscription : 26 avr. 2020 15:24
Localisation : Nice

Re: [VG5000] Lode Runner

Message par Guillaume »

Xavier_ a écrit : 28 avr. 2020 21:46 Salut,
Voilà, j'ai tout cassé…
Ma version corrige le placement de face et ajoute une animation pour la bombe.
Mais, les monstres ne bougent plus…
Et je n'ai pas trouvé comment effacer le cadre à chaque fin de tableau.
:oops:
Tu prends ce dont tu as besoin…
[Edit: toujours pas de cerveau aux monstres, mais on meurt mieux ! ]
[Edit2: Zut! 1986 ! J'étais parti sur un jeu tout nouveau… Purée, tu te replonges dans la piscine olympique !]
[Edit3: Monstres réparés… reste la sortie d'un trou créé au rez-de-chaussée par une bombinette...]
Donc, ajout de l'animation de la bombe, le placement en frontal pour la bombe en dessous, optimisation de certaines routines (conditions), l'animation de la mort.
D'autres suggestions ?
Merci Xavier pour ton apport, je viens de faire tourner, c'est sympa, la petite tombe notament!!

Et oui 1986 c'était la première écriture, j'était encore un mome. Cela nous ne nous rajeuni pas!
A ce propos, je me demande si sur le forum il n'y a que des utilisateur nostalgiques qui ont vécus cette époque formidable de la micro (époque bien courte finalement, en gros les années 80) ou y a-il des personnes nées après et intérressées par le sujet?
Avatar de l’utilisateur
frktaunus
Messages : 1148
Inscription : 08 mai 2019 11:23
Localisation : LILLE

Re: [VG5000] Lode Runner

Message par frktaunus »

j'ai vécu cette époque, on était patients et on pouvait taper le programme à chaque fois avant de jouer... :lol:
Franck
Est ce que l'on peut enregistrer de la musique classique sur une cassette Metal ?
Markerror
Messages : 2123
Inscription : 31 oct. 2011 19:21
Localisation : Orléans
Contact :

Re: [VG5000] Lode Runner

Message par Markerror »

Sans trahir un secret de polichinelle, je pense que la moyenne d'âge des habitués du forum tourne autour de la cinquantaine. La plupart ont donc connu ce qui est maintenant perçu comme un âge d'or de la micro-informatique personnelle.
Dernière modification par Markerror le 02 mai 2020 18:37, modifié 1 fois.
Daniel
Messages : 17426
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: [VG5000] Lode Runner

Message par Daniel »

Cinquante ans, c'est une moyenne très vraisemblable. Mais il y a quelques exceptions, beaucoup plus jeunes ou beaucoup plus vieux. Ils ne sont pas nombreux, mais j'en connais. Il y en a même un qui est né avant l'invention du transistor. C'est une indication pour trouver son âge.
Daniel
L'obstacle augmente mon ardeur.
Xavier_

Re: [VG5000] Lode Runner

Message par Xavier_ »

Salut,

La période des "HomeMade"s correspond exactement à la période de diffusion des Hebdogiciels…

De 1984 à début 1987, le temps que la programmation se professionalise.
Avant 1986/87 on saisissait les programmes à la main, après, la proposition logicielle était plus importante et la saisie manuelle était moins justifiée.

Hebdogiciel était un magazine pour "ados" et enfants, contrairement à son aspect "Homme moderne" et cadre dynamique.
La majorité des contributions étaient issus de programmeurs de 10 à 17 ans.
Donc, les grands nostalgiques sont nés de 1967 à 1977.
8)
Guillaume
Messages : 46
Inscription : 26 avr. 2020 15:24
Localisation : Nice

Re: [VG5000] Lode Runner

Message par Guillaume »

Et on ne peut pas non plus dire que cela intérressait beaucoup de filles!
Guillaume
Messages : 46
Inscription : 26 avr. 2020 15:24
Localisation : Nice

Re: [VG5000] Lode Runner

Message par Guillaume »

Vitesse de chargement des Levels:

J'ai pris un peu le temps de faire quelques tests pour voir ce qui était améliorable.
J'ai changé chaque élément et chronometré les performances pour identifier les plus gros gain possible en temps de chargement.

Petite déception, c'est pas gagné...

- J'ai testé 4 ou 5 améliorations sur le code avec plus de branchement, des tests simplifiés, des lignes plus longues, simplification. Cela ne donne quasiment rien, on gagne quelques pourcents guère plus.
- Je me suis alors lancé dans l'analyse de quelles fonctions étaient les plus gourmande en temps d'éxécution pour orienté la suite. Particulièrement visé PEEK, CURSORX, CURSORY, PRINT. PEEK ne prends pas vraiment lus de temps que lire une variable. CURSORX CURSORY, j'ai réussi à ne l'utiliser qu'au changement de ligne et faire des PRINT D$; pour qu'une fois une ligne lancée, on affiche à la suite. Petit gain intérressant. PRINT est gourmand. C'est un tiers du temps de l'affichage d'un Level. On peux rèduire en affichant toute une ligne d'un coup, mais je ne peux pas gérer les couleurs des éléments, on est en monochrome. S'il fallait re-injecter la couleur des éléments du décor après coup (dans la mémoire vidéo), il faudrait reparser le tableau, ce qui anéantirai probablement le gain précédent.

Il faut encore chercher un peu je pense. Mais il est probable qu'il faille changer complètement de méthode et passer en Code Machine pour cette partie du programme, mais le code correspondant risque d'être long à mettre en oeuvre, ou alors ne garder que l'affichage en Code Machine, mais ce n'est qu'un gain de 35%.

Autre option possible: De garder tel quel pour le premier tableau à charger. Mais pour les suivant, de le faire pendant l'execution du jeu, un petit peu en temps discret. Cela à l'inconvenient de devoir creer un tableau de valeur supplémentaire ou de stocker cela dans une zone mémoire que l'on pourra dumper au bon endroit ensuite. Et pour que cette option soit valide, il faut que la phase de jeu soit très rapide pour avoir un peu de temps disponible pour aussi faire se genre de travail en tache de fond.
joaopa
Messages : 512
Inscription : 14 sept. 2013 12:17

Re: [VG5000] Lode Runner

Message par joaopa »

Si tu es intéressé, je peux me charger de coder en Z80. Il faudrait juste que tu commentes le code (en particulier dire a quoi correspondent les principales variables). Tu pourrais faire les explications sur ce site, plutôt que sur le code si ça t'aide.
Dernière modification par joaopa le 29 avr. 2020 21:49, modifié 1 fois.
Répondre