program Ghost_Guzzler; (* Portado a mainstream TP3 por CP/M User - 9 de Mayo 2008 Juego Original BASIC escrito por Colin Reynolds, publicado por Usbourne Publishing en 1983 en Creepy Computer Games. *) (* Para jugar este juego simplemente compilalo en memoria o como un archivo COM de TP3, el concepto del juego es Aspirar tantos Fantasmas como puedas. Cada Fantasma esta representado por un numero de 0 a 9 (¡aleatorio, por supuesto!) y para Aspirarlos necesitaras colocar tu Aspiradora en el numero correcto y Aspirarlos - para ello, 'M' o 'm' selecciona el número deseado y 'X' o 'x' lo aspirara! Una advertencia, si compilas esto a un archivo COM el juego comenzara inmediatamente!! :-D Buena Suerte - ah, y a ver hasta donde puedes llegar - cada fantasma que puntues acumulara su numero a tu puntuacion a excepción del 0 que te dará 10 puntos! *) (* Notas: Mientras intentaba hacer que el juego se jugara lo mas parecido a la version BASIC original, hice un cambio que mejoro el movimiento de los fantasmas que estan representados por un numero. He probado este juego en un emulador de Amstrad CPC6128 que normalente corre a 4Mhz, este programa utiliza una rutina de retardo que establece la velocidad del juego y que yo he puesto a 100, aunque el juego original parece usar un retardo de 50 para ordenadores mas rapidos asi que quiza es mejor que eso, de hecho fue sugerido por Usbourne que alterando el retardo de la velocidad es una buena manera de establecer un buen nivel de dificultad. *) var gotit : boolean; oldghostpos : byte; function getghostvalue : byte; begin getghostvalue:=trunc(random(10)); end; procedure viewlives(numlives : byte); var loop : byte; begin for loop:=1 to numlives do begin gotoxy(loop,24); write('/'); end; if numlives=2 then begin gotoxy(3,24); write(' '); end; if numlives=1 then begin gotoxy(2,24); write(' '); end; end; procedure updatescore(score : integer); begin gotoxy(10,24); write('Score: '); write(score); end; procedure printposition(whereisghost, ghostvalue, myvalue : byte); var oldposition : byte; begin oldghostpos:=whereisghost; if (whereisghost<>1) then begin oldposition:=whereisghost-1; gotoxy(oldposition,10); write(' '); end; if (whereisghost=1) then begin oldposition:=24; gotoxy(oldposition,10); write(' '); end; gotoxy(whereisghost,10); write(ghostvalue); gotoxy(25,10); write(':'); write(myvalue); end; procedure checkresult(goodvalue, badvalue : byte); var clresult:byte; begin if goodvalue=badvalue then begin gotoxy(40,24); write('GOT IT'); gotoxy(40,25); write('******'); gotit:=true; { mydelay; } delay(100); gotoxy(oldghostpos,10); write(' '); for clresult:=0 to 1 do begin gotoxy(40,clresult+24); write(' '); end; end; end; var score, myvalue, lives, distance {i}, ghostvalue, mypos : byte; getkey : char; begin {main} clrscr; gotoxy(35,1); write('Ghost Guzzler'); score:=0; myvalue:=0; lives:=3; ghostvalue:=getghostvalue; distance:=1; viewlives(lives); repeat printposition(distance,ghostvalue,myvalue); { mydelay; } delay(100); if keypressed then begin read(kbd,getkey); if getkey IN [#120, #88, #109, #77] then begin case getkey of #120, #88 : checkresult(myvalue,ghostvalue); #109, #77 : begin myvalue:=myvalue+1; if myvalue=10 then myvalue:=0 end; end; end; end; distance:=distance+1; if gotit then begin distance:=1; if ghostvalue=0 then score:=score+10 else score:=score+ghostvalue; updatescore(score); ghostvalue:=getghostvalue; end; gotit:=false; if distance=25 then begin lives:=lives-1; viewlives(lives); ghostvalue:=getghostvalue; distance:=1; end; until lives=0; clrscr; Gotoxy(30,11); write('La puntuacion de tu'); gotoxy(34,12); write('Aspirado Fantasmal es ',score); end. {main}