Herramientas de usuario

Herramientas del sitio


es:mario_s_cement_factory

¡Esta es una revisión vieja del documento!


MARIO´S CEMENT FACTORY

Ficha

Autor ???????
Computadora Amstrad PCW 8256 / 8512 / 9512
Año ????
Género Arcade
Controles Teclado
Lenguajes Inglés
Estado Preservado

Capturas

Descripción

Listado

  • Listado - MARIO.BAS
10 OPTION RUN:DEFINT a-z:DEFSNG e:hi!=HIMEM:MEMORY &HBFFF,1000:GOSUB 1510:DIM a%(22,65),sz(4),LX(4),b(8,17)
20 RESTORE 30:FOR x=&HC070 TO &HC098:READ pk:POKE x,pk:NEXT x
30 DATA 243,62,129,211,241,62,130,211,242,175,95,103,22,184,58,153,192,111,41,41
40 DATA 41,25,17,154,192,235,1,8,0,237,176,62,133,211,241,62,134,211,242,251,201
50 char=200:lives=5
60 count=17:ch=char:WHILE char<count+ch:POKE &HC099,(char):FOR r=1 TO 8:READ b(r,ct):POKE &HC099+r,(b(r,ct))
70 NEXT :cl=&HC070:CALL cl:char=char+1:WEND
80 DATA 255,135,143,157,185,241,225,255,255,225,241,185,157,143,135,255,192,96,48,24,12,6,3,1,3,6,12,24,48,96,192,128,255,127,56,124,254,254,124,56,255,254,28,62,127,127,62,28,7,12,12,7,129,223,113,51
90 DATA  0,1,0,0,7,15,13,13,240,8,240,96,254,255,251,251,13,1,1,3,6,12,12,60,249,248,152,12,12,12,12,60
100 DATA 60,12,12,12,12,152,248,249,60,12,12,6,3,1,1,13,251,251,255,254,96,240,8,240,13,13,15,7,0,0,1,0,3,0,14,3,6,247,159,247,199,227,115,59,31,255,255,254,
110 WIDTH 90:PRINT CHR$(27)+"0":GOSUB 1510
120 rev$=CHR$(27)+"p":rof$=CHR$(27)+"q"
130 sd$=rev$+CHR$(27)+"r  "+CHR$(27)+"u"+rof$:con$=CHR$(27)+"e"
140 man$(1)=CHR$(207)+CHR$(208)+CHR$(8)+CHR$(8)+CHR$(10)+CHR$(209)+CHR$(210)
150 liftman$=man$(1)+" "+STRING$(3,8)+CHR$(10)+CHR$(200)+CHR$(201)+CHR$(200)
160 downman$=CHR$(212)+CHR$(211)+CHR$(8)+CHR$(8)+CHR$(10)+CHR$(214)+CHR$(213)
170 crump$="  "+CHR$(8)+CHR$(8)+CHR$(10)+CHR$(215)+CHR$(216)
180 CART$(1)=" "+CHR$(202)+CHR$(27)+"p"+CHR$(27)+"r  "+CHR$(27)+"q"+CHR$(27)+"u"+CHR$(203)+STRING$(4,8)+CHR$(10)+" "+CHR$(204)+CHR$(205)+" "
190 CART$(2)=" "+CHR$(202)+"  "+CHR$(203)+STRING$(4,8)+CHR$(10)+" "+CHR$(204)+CHR$(205)+" "
200 train$(1)=CHR$(202)+"  "+CHR$(203)+CHR$(202)+"  "+CHR$(203)+CHR$(202)+"  "+CHR$(203)+CHR$(202)+sd$+CHR$(203)+CHR$(202)+sd$+CHR$(203)+CHR$(202)+sd$+CHR$(203)
210 train$(2)=" "+CHR$(204)+CHR$(205)+"  "+CHR$(204)+CHR$(205)+"  "+CHR$(204)+CHR$(205)+"  "+CHR$(204)+CHR$(205)+"  "+CHR$(204)+CHR$(205)+"  "+CHR$(204)+CHR$(205)+"  "
220 blank$="  "+CHR$(8)+CHR$(8)+CHR$(10)+"  "
230 PRINT CHR$(27)+"f"
240 FOR i=1 TO 4:GIRD$= GIRD$+CHR$(200)+CHR$(201):NEXT i
250 FOR i=1 TO 3:Hop$=Hop$+CHR$(149)+"  "+CHR$(149)+STRING$(4,8)+CHR$(10):NEXT i
260 Hop$=Hop$+CHR$(147)+CHR$(154)+CHR$(154)+CHR$(153)
270 DEF FNat$(x,y)=CHR$(27)+"Y"+CHR$(32+x)+CHR$(32+y)
280 c$=CHR$(27)+"E":PRINT c$
290 RANDOMIZE(PEEK(64504!))
300 sand$="  "+CHR$(8)+CHR$(8)+CHR$(10)+rev$+CHR$(27)+"r  "+rof$+CHR$(27)+"u"
310 GOSUB 1240:GOSUB 1350
320 LX(1)=21:LX(2)=13:LX(3)=5:LX(4)=13:MX=7:MY=23:cc=1:ccc=1:c=1:c1=1:ccy=40:sz(1)=0:sz(2)=0
330 PRINT FNat$(MX,MY)Man$(1)
335 PRINT FNat$(4,38)GIRD$ FNat$(23,38)REV$"       "rof$
340 IF ML<>0 THEN GOTO 420 ELSE X$=INKEY$:IF X$="" THEN cnt=cnt+1
350 IF X$=CHR$(27) THEN MEMORY hi!:END
360 IF X$=" " THEN cnt=1:GOSUB 790  
370 IF X$=CHR$(1) AND MY>23 THEN cnt=1:GOSUB 610
380 IF X$=CHR$(6) AND MY<60 THEN cnt=1:GOSUB 630
390 ON cnt GOSUB 650,1020,650,1130,1080,650,1180
400 IF cnt=7 THEN cnt=0
410 GOTO 340
420 IF (ml=1 AND LX(1)<6) OR (ml=2 AND LX(2)<6) THEN mx=lx(ml)-2:my=42:ml=0:GOTO  1370
430 IF (ml=3 AND LX(3)>20) OR (ml=4 AND LX(4)>20) THEN mx=(lx(ml)-2):my=39:ml=0:GOTO 1370
440 ON ml GOTO 450,490,530,570
450 X$=INKEY$:IF X$="" THEN cnt=cnt+1:GOTO 390
460 IF X$=CHR$(6) THEN IF lx(1)=9 OR lx(1)=14 THEN MX=(LX(1)-2):MY=45:PRINT FNat$(MX,MY)man$(1):ml=0:PRINT FNat$(LX(1)-2,42)blank$:GOTO 340
470 IF X$=CHR$(1) THEN IF lx(3)=lx(1) THEN ml=3 :PRINT FNat$(lx(1)-2,42)blank$ ELSE IF lx(4)=lx(1) THEN ml=4:PRINT FNat$(lx(1)-2,42)Blank$:GOTO 390
480 GOTO 340
490 X$=INKEY$:IF X$="" THEN cnt=cnt+1:GOTO 390
500 IF X$=CHR$(6) THEN IF lx(2)=9 OR lx(2)=14 THEN MX=(LX(2)-2):MY=45:PRINT FNat$(MX,MY)man$(1):PRINT FNat$(LX(2)-2,42)blank$:ml=0:GOTO 340
510 IF X$=CHR$(1) THEN IF lx(3)=lx(2) THEN ml=3 :PRINT FNat$(lx(2)-2,42)blank$ ELSE IF lx(4)=lx(2) THEN ml=4:PRINT FNat$(lx(2)-2,42)blank$:GOTO 390
520 GOTO 340
530 X$=INKEY$:IF X$="" THEN cnt=cnt+1:GOTO 390
540 IF X$=CHR$(1) THEN IF lx(3)=10 OR lx(3)=15 OR LX(3)=20 THEN MX=(LX(3)-3):MY=37:PRINT FNat$(MX,MY)man$(1):ml=0:PRINT FNat$(LX(3)-3,39)blank$:LX(3)=LX(3)-1:GOTO 340
550 IF X$=CHR$(6) THEN IF lx(1)=lx(3)-2 THEN ml=1:LX(3)=LX(3)-1:LX(1)=LX(1)+1:PRINT FNat$(lx(3)-2,39)blank$ ELSE IF lx(2)=lx(3)-2 THEN ml=2:PRINT FNat$(lx(3)-3,39)blank$:LX(3)=LX(3)-1:LX(2)=LX(2)+1:GOTO 390
560 GOTO 340
570 X$=INKEY$:IF X$="" THEN cnt=cnt+1:GOTO 390
580 IF X$=CHR$(1) THEN IF lx(4)=10 OR lx(4)=15 OR lx(4)=20 THEN MX=(LX(4)-3):MY=37:PRINT FNat$(MX,MY)man$(1):ml=0:PRINT FNat$(LX(4)-3,39)blank$:LX(4)=LX(4)-1:GOTO 340
590 IF X$=CHR$(6) THEN IF lx(1)=lx(4)-3 THEN ml=1:LX(4)=LX(4)-1:LX(1)=LX(1)+1:PRINT FNat$(lx(4)-2,39)blank$ ELSE IF lx(2)=lx(4)-3 THEN ml=2:PRINT FNat$(lx(4)-3,39)blank$:LX(4)=LX(4)-1:LX(2)=LX(2)+1:GOTO 390
600 GOTO 340
610 IF my=45 THEN IF lx(1)=(mx+1) THEN ML=1 ELSE IF lx(2)=mx+1 THEN ML=2 ELSE IF MY=45 THEN GOTO 1370
620 LX(ml)=LX(ml)+1:MY1=MY:MY=MY-2:PRINT FNat$(MX,MY)MAN$(1) FNat$(MX,MY1)blank$:RETURN
630 IF my=37 THEN IF lx(4)=(mx+2) THEN ML=4 ELSE IF lx(3)=(mx+2) THEN ML=3 ELSE IF MY=37 THEN GOTO 1370
640 MY1=MY:MY=MY+2:PRINT FNat$(MX,MY)MAN$(1) FNat$(MX,MY1)blank$:RETURN
650 REM MOVE CARTS
660 PRINT FNat$(2,cy)cart$(c):cy=cy+1
670 PRINT FNat$(2,ccy)Cart$(c1):ccy=ccy+1
680 IF cy=20 AND (c=1 AND cc=1)  THEN c=2:h=1:GOSUB 940
690 IF ccy=20 AND (c1=1 AND ccc=1) THEN c1=2 :h=1:GOSUB 960
700 IF cy=64 AND (c=1 AND cc=2) THEN c=2 :h=2:GOSUB 950
710 IF ccy=64 AND (c1=1 AND ccc=2) THEN c1=2 :h=2:GOSUB 970
720 IF cy=82 AND cc=1 THEN PRINT FNAT$(2,cy)"    "+STRING$(3,8)+CHR$(10)+"  ":cy=2:c=1:cc=2
730 IF cy=82 AND cc=2 THEN PRINT FNAT$(2,cy)"    "+STRING$(3,8)+CHR$(10)+"  ":cy=2:c=1:cc=1
740 IF ccy=82 AND ccc=1 THEN PRINT FNAT$(2,ccy)"    "+STRING$(3,8)+CHR$(10)+"  ":ccy=2:c1=1:ccc=2
750 IF ccy=82 AND ccc=2 THEN PRINT FNAT$(2,ccy)"    "+STRING$(3,8)+CHR$(10)+"  ":ccy=2:c1=1:ccc=1
760 IF sz(1)=-3 THEN PRINT FNat$(6,23)"WARNING" ELSE PRINT FNat$(6,23)"        "
770 IF sz(2)=-3 THEN PRINT FNat$(6,56)"WARNING" ELSE PRINT FNat$(6,56)"       "
780 RETURN
790 REM WORK HOPPERS
800 h=0:IF MX=7 AND MY=23 THEN h=1 
810 IF MX=12 AND MY=23 THEN h=3 
820 IF MX=7 AND MY=61 THEN h=2
830 IF MX=12 AND MY=61 THEN h=4 
840 IF h=0 THEN RETURN
850 ON h GOTO 860,880,900,920
860 IF sz(1)=0 THEN GOTO 330 ELSE sz(1)=sz(1)+1:PRINT FNat$((8+sz(1)),20)"  "
870 IF sz(3)=-3 THEN GOSUB 1000 ELSE FOR sx=9 TO (12+sz(3)):PRINT FNat$(sx,20)sand$:NEXT sx:sz(3)=sz(3)-1:SCORE=SCORE+1:PRINT FNat$(0,42)rev$"SCORE: "SCORE rof$ CHR$(7):GOTO 330
880 IF sz(2)=0 THEN GOTO 330 ELSE sz(2)=sz(2)+1:PRINT FNat$((8+sz(2)),64)"  "
890 IF sz(4)=-3 THEN GOSUB 1010 ELSE FOR sx=9 TO (12+sz(4)):PRINT FNat$(sx,64)sand$:NEXT sx:sz(4)=sz(4)-1:SCORE=SCORE+1:PRINT FNat$(0,42)rev$"SCORE: "SCORE rof$ CHR$(7):GOTO 330
900 IF sz(3)=0 THEN GOTO 330 ELSE sz(3)=sz(3)+1:PRINT FNat$((13+sz(3)),20)"  "
910 FOR sx=14 TO 20:PRINT FNat$(sx,20)sand$:NEXT sx:FOR i=1 TO 5:SCORE=SCORE+1:PRINT FNat$(0,42)rev$"SCORE: "SCORE rof$ CHR$(7):NEXT:GOSUB 1420:GOTO 330
920 IF sz(4)=0 THEN GOTO 330 ELSE sz(4)=sz(4)+1:PRINT FNat$((13+sz(4)),64)"  "
930 FOR sx=14 TO 20:PRINT FNat$(sx,64)sand$:NEXT sx:FOR i=1 TO 5:SCORE=SCORE+1:PRINT FNat$(0,42)rev$"SCORE: "SCORE rof$ CHR$(7):NEXT:GOSUB 1430:GOTO 330   
940 IF sz(1)=-3 THEN GOSUB 980 ELSE FOR sx=4 TO (7+sz(1)):PRINT FNat$(sx,cy)sand$:NEXT sx:sz(1)=sz(1)-1:RETURN
950 IF sz(2)=-3 THEN GOSUB 980 ELSE FOR sx=4 TO (7+sz(2)):PRINT FNat$(sx,cy)sand$:NEXT sx:sz(2)=sz(2)-1:RETURN
960 IF sz(1)=-3 THEN GOSUB 980 ELSE FOR sx=4 TO (7+sz(1)):PRINT FNat$(sx,ccy)sand$:NEXT sx:sz(1)=sz(1)-1:RETURN
970 IF sz(2)=-3 THEN GOSUB 980 ELSE FOR sx=4 TO (7+sz(2)):PRINT FNat$(sx,ccy)sand$:NEXT sx:sz(2)=sz(2)-1:RETURN
980 FOR sx=4 TO 22:PRINT FNat$(sx,(cy-2))CHR$(7)+"      "+STRING$(6,8)+CHR$(10)+rev$+"      "+rof$:NEXT sx
990 PRINT STRING$(5,7):LIVES=1:GOTO 1370
1000 FOR sx=11 TO 22:PRINT FNat$(sx,18)CHR$(7)+"      "+STRING$(6,8)+CHR$(10)+rev$+"      "+rof$:NEXT sx:GOTO 990
1010 FOR sx=11 TO 22:PRINT FNat$(sx,62)CHR$(7)+"      "+STRING$(6,8)+CHR$(10)+rev$+"      "+rof$:NEXT sx:GOTO 990
1020 REM MOVE LIFTS
1030 IF ml=1 AND lx(1)<>3 THEN PRINT FNat$(LX(1)-3,42)liftman$+STRING$(3,8)+CHR$(10)+"   ":GOTO 1050
1040 IF LX(1)=3 THEN GOTO 1070 ELSE PRINT FNat$(LX(1),42)CHR$(200)+CHR$(201)+CHR$(200)+STRING$(3,8)+CHR$(10)+"   "
1050 IF LX(1)>4 THEN LX(1)=LX(1)-1 
1060 IF LX(1)=4 THEN PRINT FNat$(5,42)"   ":LX(1)=MIN((LX(2)+8),22)
1070 RETURN
1080 IF ml=3 AND lx(3)<23 THEN PRINT FNat$(LX(3)-3,39)"   "+STRING$(3,8)+CHR$(10)+liftman$:GOTO 1100
1090 IF LX(3)=23 THEN GOTO 1120 ELSE PRINT FNAT$(LX(3),39)"   "+STRING$(3,8)+CHR$(10)+CHR$(200)+CHR$(201)+CHR$(200)
1100 IF LX(3)<23 THEN LX(3)=LX(3)+1 
1110 IF LX(3)=22 THEN PRINT FNat$(LX(3),39)"   ":LX(3)=(LX(4)-8)
1120 RETURN
1130 IF ml=2 AND lx(2)<>3 THEN PRINT FNat$(LX(2)-3,42)liftman$+STRING$(3,8)+CHR$(10)+"   ":GOTO 1150 
1140 IF LX(2)=3 THEN GOTO 1170 ELSE PRINT FNat$(LX(2),42)CHR$(200)+CHR$(201)+CHR$(200)+STRING$(3,8)+CHR$(10)+"   "
1150 IF LX(2)>4 THEN LX(2)=LX(2)-1
1160 IF LX(2)=4 THEN PRINT FNat$(5,42)"   " :LX(2)=MIN((LX(1)+8),22)
1170 RETURN
1180 IF ml=4 AND lx(4)<22 THEN PRINT FNat$(LX(4)-3,39)"   "+STRING$(3,8)+CHR$(10)+liftman$:GOTO 1200
1190 IF LX(4)=23 THEN GOTO 1220 ELSE PRINT FNAT$(LX(4),39)"   "+STRING$(3,8)+CHR$(10)+CHR$(200)+CHR$(201)+CHR$(200)
1200 IF LX(4)<22 THEN LX(4)=LX(4)+1
1210 IF LX(4)=22 THEN PRINT FNat$(LX(4),39)"   ":LX(4)=(LX(3)-8)
1220 RETURN
1230 REM SCREEN
1240 PRINT FNat$(4,3)GIRD$+GIRD$+"    "+GIRD$+GIRD$+GIRD$+GIRD$+GIRD$+"    "+GIRD$+GIRD$
1250 PRINT FNat$(6,19)hop$ FNat$(6,63)hop$ FNat$(11,19)hop$ FNat$(11,63)hop$
1260 j=201:FOR y=3 TO 82 STEP 79:FOR x=4 TO 22:j=1-j:PRINT FNat$(x,y)CHR$(ABS(j)):NEXT x:NEXT y
1270 PRINT FNat$(9,23)GIRD$+GIRD$+"      "+GIRD$+GIRD$+CHR$(200)+CHR$(201)
1280 PRINT FNat$(14,23)GIRD$+GIRD$+"      "+GIRD$+GIRD$+CHR$(200)+CHR$(201):PRINT FNat$(19,23)GIRD$+GIRD$
1290 j=201:FOR x=15 TO 19:j=1-j:PRINT FNat$(x,23)CHR$(ABS(j)):NEXT x
1300 j=201:FOR x=19 TO 22:j=1-j:PRINT FNat$(x,38)CHR$(ABS(j)):NEXT x
1310 j=201:FOR x=15 TO 22:j=1-j:PRINT FNat$(x,45)CHR$(ABS(j)):NEXT x
1320 PRINT FNat$(22,1)rev$ SPACE$(88) Rof$
1330 PRINT FNat$(21,11)train$(1) FNat$(22,11)TRain$(2):PRINT  FNat$(21,55)train$(1)FNat$(22,55)train$(2)     
1331 FOR y=0 TO 64 STEP 8:t=1:FOR x=1 TO 2:t=1-t:PRINT FNat$(24+x,y)train$(t+1):NEXT:NEXT
1332 FOR y=0 TO 80 STEP 8:t=1:FOR x=3 TO 4:PRINT FNat$(24+x,y)gird$:NEXT:NEXT
1333 PRINT FNat$(27,18)rev$" M A R I O ' S  C E M E N T  F A C T O R Y "rof$
1335 FOR y=0 TO 64 STEP 8:t=1:FOR x=1 TO 2:t=1-t:PRINT FNat$(28+x,y)train$(t+1):NEXT:NEXT
1340 RETURN
1350 PRINT FNat$(0,0)"LIVES:":FOR i= 2 TO 6:PRINT FNat$(0,(i*3))man$(1):NEXT i:RETURN
1360 IF LIVES<>5 THEN FOR i=2 TO (6-LIVES):PRINT FNat$(0,24-(i*3))crump$:NEXT i:RETURN ELSE RETURN
1370 PRINT FNat$(mx,my)"  "+CHR$(8)+CHR$(8)+CHR$(10)+"  ":my=41:FOR mx=mx TO 21:FOR i=1 TO 20:NEXT i:PRINT FNat$(mx,my)CHR$(7)+downman$ FNat$((mx-1),my)"  ":NEXT mx
1375 PRINT FNat$(4,38) GIRD$ FNat$(23,38)REV$"        "rof$
1380 PRINT FNat$(mx-1,my)crump$:lives=lives-1:MX=7:MY=23:GOSUB 1360:GOSUB 1570:IF LIVES=0 THEN GOTO 1390 ELSE GOTO 330
1390 IF INKEY$<>"" THEN PRINT CHR$(7)
1400 PRINT FNat$(23,25)rev$"     DO YOU WANT ANOTHER GO?     "rof$:x$=INKEY$:IF x$="" THEN GOTO 1390 
1410 IF UPPER$(x$)="Y" THEN MEMORY hi!:RUN ELSE MEMORY hi!:END
1420 ok=FRE(""):FOR ty=1 TO 4:FOR i=1 TO 80:NEXT i:PRINT FNat$(21,7)SPACE$(ty)+train$(1) FNat$(22,7)SPACE$(ty)+train$(2):NEXT ty:RETURN
1430 ok=FRE(""):FOR ty=1 TO 4:FOR i=1 TO 80:NEXT i:PRINT FNat$(21,51)SPACE$(ty)+train$(1) FNat$(22,51)SPACE$(ty)+train$(2):NEXT ty:RETURN
1440 REM "Music"
1450 DATA 229,213,197,221,229,42,27,192,237,91,25,192,205,29,192,62
1460 DATA 12,211,248,221,225,193,209,225,201,0,0,0,0,243,125,203
1470 DATA 61,203,61,47,230,3,79,6,0,221,33,49,192,221,9,62
1480 DATA 11,0,0,0,4,12,13,32,253,14,63,5,32,248,60,254
1490 DATA 13,32,2,61,61,211,248,68,79,254,11,32,9,122,179,40
1500 DATA 9,121,77,27,221,233,77,12,221,233,251,201
1510 RESTORE 1450:FOR nn=&HC000 TO &HC05B:READ dd:POKE nn,dd:NEXT
1520 AZ=&HC000:BZ=&HC019:CZ=&HC01B
1530 RESTORE 1540:FOR NN=0 TO 9:READ E(NN):NEXT
1540 DATA 189.8765,210,234.4015,254.612,284,318,351,372,1740,6000
1550 time$="22224648"
1560 note$="77445467":RETURN
1570 FOR i=1 TO LEN(time$):dd=VAL(MID$(time$,i,1)):ff=VAL(MID$(note$,i,1))
1580 f2=E(FF):tt=3500000!/(f2*2):tt=INT(tt/4-30.125)
1600 f2=INT(f2*(dd/12))
1610 POKE BZ,f2-256*INT(f2/256):POKE BZ+1,INT(f2/256)
1620 POKE CZ,tt-256*INT(tt/256):POKE CZ+1,INT(tt/256):CALL AZ
1630 NEXT:RETURN

Controles

      ↑ = ARRIBA
      ↓ = ABAJO
      → = DERECHA
      ← = IZQUIERDA
  SPACE = DESCARGAR
        

Carga del programa

1.- Introducir el disco CP/M por la cara 2
2.- Escribir BASIC y esperar a que cargue
3.- Retirar el disco CP/M e introducir el disco que contiene el juego Mario´s Cement Factory
4.- Teclear run "Mario" y pulsar la tecla "ENTER"

Extras

Descarga

Enlaces

es/mario_s_cement_factory.1484388976.txt.gz · Última modificación: 2017/01/14 13:16 por jevicac