Herramientas de usuario

Herramientas del sitio


es:post_haste

¡Esta es una revisión vieja del documento!


POST HASTE

Ficha

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

Capturas

Descripción

Ayuda al cartero Percy a recoger y entregar todas sus cartas, evitando los perros y el terreno peligroso. Las cartas son recogidas cuando Percy toca un buzón y éstas son entregadas cuando él toca la puerta delantera de una casa.

El movimiento de Percy se hace con las teclas de cursor o las definidas en el mismo juego.

En el juego encontramos dos cuadros especiales. Aterrizar en uno le da a Percy una vida extra, y el otro nos pasa de nivel ó entregando todas las cartas.

El sindicato de carteros de Percy tiene un acuerdo de productividad, ésto significa que tiene un límite de tiempo. Podemos finalizar el juego en cualquier momento pulsando la tecla “Q”.

Listado

  • Listado - POSTE.BAS
10 REM           Poste Haste
20 REM   by John and Ruth Filsak
30 REM (c) Computing with the Amstrad
40 REM -------------PCW--------------
50 GOSUB 1110:play=-1:WHILE play:GOSUB 70:WEND
60 PRINT cls$;esc$"e";esc$"1":STOP
70 PRINT cls$:lives=3:score=0:letters=0:play1=-1
80 RESTORE 1730:FOR y=0 TO 31:READ g$:FOR x=0 TO 45:g=VAL(MID$(g$,x+1,1))
90 g(x,y)=g:xx=x*2:IF g=0 THEN 190
100 IF g=1 THEN CALL print1(xx,y,b1$):GOTO 190
110 IF g=2 THEN CALL print1(xx,y,b2$):GOTO 190
120 IF g=3 THEN POKE pen,85:CALL print1(xx,y,h1$):POKE pen,255:GOTO 190
130 IF g=4 THEN POKE pen,85:CALL print1(xx,y,h2$):POKE pen,255:GOTO 190
140 IF g=5 THEN POKE pen,85:CALL print1(xx,y,h3$):POKE pen,255:GOTO 190
150 IF g=6 THEN POKE pen,85:CALL print1(xx,y,h4$):POKE pen,255:h(xx/2,y)=0:GOTO 190
160 IF g=7 THEN CALL print1(xx,y,pole$):GOTO 190
170 IF g=8 THEN CALL print1(xx,y,pbox$):GOTO 190
180 POKE pen,85:CALL print1(xx,y,b2$):POKE pen,255
190 NEXT:NEXT:POKE paper,85
200 x=2:y=1:a$=STRING$(43,32):CALL print1(x,y,a$)
210 x=4:a$="Score:"+STR$(score):CALL print1(x,y,a$)
220 x=32:a$="Letters: "+STR$(letters):CALL print1(x,y,a$)
230 x=70:a$="Lives:"+STR$(lives):CALL print1(x,y,a$):POKE paper,0
240 p$=pmnr$:px=4:py=30:CALL print1(px,py,p$)
250 REM main movement loop
260 WHILE play1:a$=LOWER$(INKEY$)
270 IF a$="z"OR a$=CHR$(1)THEN GOSUB 470:GOTO 350
280 IF(a$="u"OR a$=CHR$(31))AND g(px/2,py)=7 THEN GOSUB 910:GOTO 350
290 g=g(px/2,py+1):IF(a$="d"OR a$=CHR$(30))AND(g=7 OR g=0)THEN GOSUB 930:GOTO 350
300 IF a$=" "THEN GOSUB 680: GOTO 320
310 IF a$="x"OR a$=CHR$(6)THEN GOSUB 530: GOTO 350
320 IF g(px/2,py)=7 THEN pbak$=pole$ ELSE pbak$=sp$
330 IF p$=pmnl$ THEN j=-j
340 g=g((px+j)/2,py+1):IF(g=0 OR g=8)AND g((px+j)/2,py)<>7 THEN CALL print1(px,py,pbak$):py=py+1:px=px+j:CALL print1(px,py,p$)
350 j=0:IF g(px/2,py)=7 THEN pbak$=pole$ ELSE pbak$=sp$
360 IF g(px/2,py)=8 THEN GOSUB 800
370 IF g(px/2,py+1)=9 THEN GOSUB 960
380 IF g(px/2-1,py)=6 AND h(px/2-1,py)=0 AND p$=pmnl$AND letters>0 THEN GOSUB 830
390 d=d+1:IF d=3 THEN d=1
400 dx=dx(d):dy=dy(d):IF px=dx AND py=dy THEN GOSUB 960
410 IF d(d)=1 THEN d$=dogl$:GOSUB 590
420 IF d(d)=2 THEN d$=dogr$:GOSUB 640
430 dx(d)=dx:dy(d)=dy:IF g(dx(d)/2,dy(d))=7 THEN dbak$(d)=pole$ELSE dbak$(d)=sp$
440 IF px=dx AND py=dy THEN GOSUB 960
450 WEND:RETURN
460 REM move left
470 IF p$=pmnr$THEN CALL print1(px,py,pmnl$):p$=pmnl$:RETURN
480 g=g(px/2-1,py):IF g=1 OR g=2 OR g=3 OR g=4 OR g=5 OR g=6 THEN RETURN
490 IF g=0 OR g=7 OR g=8 THEN CALL print1(px,py,pbak$):px=px-2
500 g=g(px/2,py+1):IF(g=0 OR g=8)AND g(px/2,py)<>7 THEN CALL print1(px,py,sp$):py=py+1
510 CALL print1(px,py,p$):RETURN
520 REM move right
530 IF p$=pmnl$THEN CALL print1(px,py,pmnr$):p$=pmnr$:RETURN
540 g=g(px/2+1,py):IF g=1 OR g=2 OR g=3 OR g=4 OR g=5 OR g=6 THEN RETURN
550 IF g=0 OR g=7 OR g=8 THEN CALL print1(px,py,pbak$):px=px+2
560 g=g(px/2,py+1):IF(g=0 OR g=8)AND g(px/2,py)<>7 THEN CALL print1(px,py,sp$):py=py+1
570 CALL print1(px,py,p$):RETURN
580 REM move dogs
590 bak$=dbak$(d):g=g(dx(d)/2,dy(d)+1):IF g=0 OR g=7 THEN CALL print1(dx,dy,bak$):dy=dy+1:CALL print1(dx,dy,d$):RETURN
600 g=g(dx(d)/2+1,dy(d)):IF g=0 OR g=7 THEN CALL print1(dx,dy,bak$):dx=dx+2:CALL print1(dx,dy,d$):RETURN
610 d(d)=2:IF d=2 AND dx=86 AND dy=30 THEN CALL print1(dx,dy,sp$):dy=30:CALL print1(dx,dy,d$)
620 IF d=1 AND dx=86 AND dy=30 THEN CALL print1(dx,dy,sp$):dx=4:dy=3:CALL print1(dx,dy,d$)
630 RETURN
640 bak$=dbak$(d):g=g(dx(d)/2,dy(d)+1):IF g=0 OR g=7 THEN CALL print1(dx,dy,bak$):dy=dy+1:CALL print1(dx,dy,d$):RETURN
650 g=g(dx(d)/2-1,dy(d)):IF g=0 OR g=7 THEN CALL print1(dx,dy,bak$):dx=dx-2:CALL print1(dx,dy,d$):RETURN
660 d(d)=1:RETURN
670 REM jump
680 g=g(px/2,py+1):IF g=0 OR g=8 THEN RETURN
690 j=2:g=g(px/2,py-1):IF g=1 OR g=2 OR g=3 OR g=4 OR g=5 OR g=6 OR g=9 THEN RETURN
700 CALL print1(px,py,pbak$):IF p$=pmnl$ THEN j1=-2 ELSE j1=2
710 py=py-1:CALL print1(px,py,p$)
720 IF g(px/2,py)=8 THEN GOSUB 800
730 IF g(px/2,py)=7 THEN pbak$=pole$ELSE pbak$=sp$
740 j=2:g=g((px+j1)/2,py-1):IF g=1 OR g=2 OR g=3 OR g=4 OR g=5 OR g=6 OR g=9 THEN RETURN
750 CALL print1(px,py,pbak$):px=px+j1:py=py-1:CALL print1(px,py,p$)
760 IF g(px/2,py)=8 THEN GOSUB 800
770 IF g(px/2,py)=7 THEN pbak$=pole$ELSE pbak$=sp$
780 RETURN
790 REM collect/deliver letters
800 letters=letters+2:x=48:y=1:IF letters<10 THEN x=50
810 a$=STR$(letters):POKE paper,85:CALL print1(x,y,a$)
820 POKE paper,0:g(px/2,py)=0:PRINT CHR$(7):RETURN
830 letters=letters-1:score=score+100:h(px/2-1,py)=1
840 PRINT CHR$(7):x=px-4:y=py-1:CALL print1(x,y,h5$):CALL print1(x,py,h6$)
850 POKE paper,85:a$=STR$(score):x=16:y=1:CALL print1(x,y,a$)
860 x=48:a$=STR$(letters):IF letters<10 THEN x=50
870 CALL print1(x,y,a$):POKE paper,0
880 IF score=1000 THEN GOSUB 1000
890 RETURN
900 REM up or down poles
910 CALL print1(px,py,pole$):py=py-1:CALL print1(px,py,pmnp$):IF g(px/2,py)=0 THEN CALL print1(px,py,p$)
920 RETURN
930 CALL print1(px,py,pbak$):py=py+1:CALL print1(px,py,pmnp$):IF g(px/2,py)=0 THEN CALL print1(px,py,p$)
940 RETURN
950 REM count lives/end game
960 lives=lives-1:PRINT CHR$(7):CALL print1(px,py,pbak$):px=4:py=30:CALL print1(px,py,p$)
970 x=82:y=1:a$=STR$(lives):POKE paper,85:CALL print1(x,y,a$):POKE paper,0
980 IF lives=0 THEN GOSUB 1000
990 RETURN
1000 FOR a=0 TO 4500:NEXT:PRINT cls$:CALL screen
1010 POKE double,1:x=20:y=6:a$="Game over.":CALL print1(x,y,a$)
1020 y=9:IF lives=0 THEN a$="YOU HAVE DIED!":CALL print1(x,y,a$)ELSE a$="THE MAIL HAS GOT THROUGH!":CALL print1(x,y,a$)
1030 y=12:a$="Score:"+STR$(score)+".":CALL print1(x,y,a$)
1040 IF lives>0 THEN a$="You have lost"+STR$(3-lives)+" lives.":y=15:CALL print1(x,y,a$)
1050 POKE double,0:y=22:a$="Play again? (Y/N)":CALL print1(x,y,a$)
1060 k$=LOWER$(INKEY$):IF k$=""THEN 1060
1070 IF k$<>"n"AND k$<>"y"THEN 1060
1080 IF k$="n"THEN play=0
1090 play1=0:RETURN
1100 REM initialize
1110 DEFINT a-z:esc$=CHR$(27):cls$=esc$+"E"+esc$+"H"+esc$+"0":PRINT cls$esc$"f
1120 PRINT esc$"POST HASTE"esc$"u":PRINT :PRINT"Loading machine code....Please wait."
1130 MEMORY &HCFFF:address=&HE000:RESTORE 1410
1140 FOR a=1 TO 31:sum=0:READ code$,check$:FOR b=1 TO 21 STEP 2
1150 byte=VAL("&H"+MID$(code$,b,2)):POKE address,byte
1160 sum=sum+byte:address=address+1:NEXT
1170 IF sum<>VAL("&H"+check$)THEN PRINT"Error":STOP
1180 NEXT:screen=&HE000:print1=&HE003:udgs=&HD100:pen=&HD001:paper=&HD000:double=&HD006
1190 POKE paper,0:POKE double,0:POKE pen,255
1200 REM user defined graphics
1210 RESTORE 1270:FOR a=0 TO 103:READ b:POKE udgs+a,b:NEXT:CALL screen
1220 pmnl$=CHR$(0):pmnr$=CHR$(1):pmnp$=CHR$(2):pole$=CHR$(3):h1$=CHR$(4):h2$=CHR$(5):h3$=CHR$(6):h4$=CHR$(7)
1230 b1$=CHR$(8):dogl$=CHR$(9):dogr$=CHR$(10):pbox$=CHR$(11):b2$=CHR$(12):h5$=h1$+h2$:h6$=h3$+h4$
1240 DIM g(45,41),h(45,31),dx(2),dy(2),d(2),dbak$(2)
1250 sp$=" ":dbak$(1)=sp$:dbak$(2)=sp$:pbak$=sp$
1260 dx(1)=2:dx(2)=82:dy(1)=3:dy(2)=3:d(1)=1:d(2)=2:RETURN
1270 DATA 24,24,8,28,58,24,20,52
1280 DATA 24,24,16,56,92,24,40,44
1290 DATA 24,28,124,60,24,60,62,24
1300 DATA 24,28,24,24,24,56,24,24
1310 DATA 3,3,15,21,42,85,170,255
1320 DATA 0,0,240,88,172,86,171,255
1330 DATA 132,132,132,132,255,174,213,255
1340 DATA 33,33,33,45,225,161,97,255
1350 DATA 126,195,129,153,153,129,195,126
1360 DATA 0,0,0,2,255,126,68,136
1370 DATA 0,0,0,64,255,126,34,17
1380 DATA 0,126,36,60,60,60,60,60
1390 DATA 255,0,221,85,85,119,0,255
1400 REM machine code
1410 DATA C306E0C35BE0CD29E01198,626
1420 DATA 2C2100B60168013E20F5D5,395
1430 DATA 3E0873237223133D20F8D1,3AA
1440 DATA EB09EBF13D20ECC9C1CD5A,6CA
1450 DATA FCE900C9661A6F2202D00A,49B
1460 DATA 3210D0030A6F030A67ED4B,33A
1470 DATA 10D006001113D0EDB02A02,3A3
1480 DATA D0CDFCE02204D02113D022,595
1490 DATA 11D0C9CD30E0CD29E0F32A,67A
1500 DATA 11D07E232211D0CDEAE011,52D
1510 DATA 4FE1010800EDB0DD2A04D0,4B1
1520 DATA 0E08FD214FE12A00D07D06,3E1
1530 DATA 08FDCB0006380D07DDCB08,3D2
1540 DATA 16DDCB001607C3A4E0CB04,4F1
1550 DATA DDCB0816DDCB0016CB04DD,530
1560 DATA CB0816DDCB001610D7FD23,4AE
1570 DATA 3A06D0A7CAD1E0DD7E08DD,672
1580 DATA 7709DD7E00DD7701DD2379,4A9
1590 DATA FE05C2D1E001C802DD094F,576
1600 DATA DD230DC282E02A04D00110,440
1610 DATA 00092204D02110D035C262,359
1620 DATA E0FBC91100B8FE20300311,4CF
1630 DATA 00D16F260029292919C95C,31F
1640 DATA 260054CB25010FE1094E23,2D5
1650 DATA 46EB29292909C93059005C,363
1660 DATA D05EA06170644067106AE0,504
1670 DATA 6CB06F807250752078F07A,544
1680 DATA C07D9080608330860089D0,53F
1690 DATA 8BA08E709140941097E099,5AE
1700 DATA B09C809F50A220A5F0A7C0,679
1710 DATA AA90AD60B0000000000000,2F7
1720 REM screen data
1730 DATA 111111111111111111111111111111111111111111111
1740 DATA 100000000000000000000000000000000000000000001
1750 DATA 111111111111111111111111111111111111111111111
1760 DATA 100000000000000000000000000000340000008000001
1770 DATA 108000000000700000000000000000560000011111111
1780 DATA 100000000000700000000000000001212000111113401
1790 DATA 111110101010700000000000000000000000000005601
1800 DATA 111100000000792222222222222222222292022222201
1810 DATA 111000000000700008000000000034000000000000071
1820 DATA 112220222229722222900000000056000000000000071
1830 DATA 100000000000000000000000000000000000000000001
1840 DATA 102222222222222222222222222299222222299222201
1850 DATA 100000000000000000000800000000000000000000001
1860 DATA 122222700000000000000000000000000000000000001
1870 DATA 100340700000000000111111003400000002222222221
1880 DATA 100560700000000000000000005600000000000000001
1890 DATA 111111122222222229992200022200002220000011011
1900 DATA 111111000000000000000000000000000000000018011
1910 DATA 111111000000222222222222222222222200111111111
1920 DATA 134000000000000000000000000000000001111111111
1930 DATA 156000799999000000000134000000000011111111111
1940 DATA 111000700000000000034056000000000700000000001
1950 DATA 111100700000000000056000100000000700000000001
1960 DATA 111110700000000000111100000000000700000000001
1970 DATA 100000700000000000000000000000000700000000001
1980 DATA 100340702220922222222222229922222222000010001
1990 DATA 100560700000000000000000000000000000000110001
2000 DATA 102222000000000000000000000000000000001113401
2010 DATA 100000000000000000000000000000000000011115601
2020 DATA 122222222299222272222002222229222222222222221
2030 DATA 100000000000000070000000000000000000000000001
2040 DATA 111111111111111111111111111111111111111111111

Controles

        
 ↑ o K = ARRIBA
 ↓ o M = ABAJO
 → o X = DERECHA
 ← o Z = IZQUIERDA
 SPACE = SALTAR
     Q = ABANDONAR

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 Post Haste
4.- Teclear run "Poste" y pulsar la tecla "ENTER"

Extras

Descarga

Enlaces

es/post_haste.1484216683.txt.gz · Última modificación: 2017/01/12 13:24 por jevicac