anexo prg del archivo del juego de pacman hecho en fivewin
le faltan detallitos pero ya se puede jugar
http://www.eleben.com.mx/pacman.zip
- Code: Select all Expand view RUN
// 15 de abril del 2015
// chino72vale@hotmail.com
#include "Fivewin.ch"
MEMVAR xTeclas
MEMVAR nXPos, nYPos, xDonde, oSprite, nXposa, nYposa
MEMVAR aMatriz, Maxren, MaxCol, Omuro, xVidas
MEMVAR oComida, nComida, Van, aComidas, oFantasmas, fXpos, fYpos
MEMVAR xfdonde, XOTRA, XPOS, osay, csay, ofanta1, ofanta2, ofanta3, ofanta4, ofanta5, Ownd
FUNCTION MAIN()
local oBrush, oTimer
local i, y, n:=0, m:=0
PUBLIC xTeclas, xvidas
PUBLIC nXPos, nYPos
PUBLIC Xdonde, oSprite, oMuro
PUBLIC aMatriz, Maxren, Maxcol, Omuro
PUBLIC oComida, nComida, Van, Acomidas
PUBLIC fXpos, fYpos, Ofantasmas
PUBLIC xFdonde, xotra, XPOS
PUBLIC OSAY, CSAY, OFANTA, OFANTA2, OFANTA3, OFANTA4, ofanta5, Ownd
//12345678901234567890123456789
amatriz := { {"xxxxxxxxxxxxxxxxxxxxxxxxxxxxx"},;
{"x o o o o xxxxx o o o o x"},;
{"x xxx xxoxx ooooo xxoxx xxx x"},;
{"xoxxxoxxoxxoxxxxxoxxoxxoxxxox"},;
{"xooooooooooooooooooooooooooox"},;
{"xoxxxoxxoxxxxxoxxxxxoxxoxxxox"},;
{"xoooooxxoooooxoxoooooxxooooox"},;
{"xoxxxoxxxxxxoxoxoxxxxxxoxxxox"},;
{"xoxxxoxxoooooooooooooxxoxxxox"},;
{"toooooxxoxxxxxoxxxxxoxxooooof"},;
{"xoxxxoxxoxxxxxoxxxxxoxxoxxxox"},;
{"xoxxxoxxoooooooooooooxxoxxxox"},;
{"xoxxxoxxxxxxoxoxoxxxxxxoxxxox"},;
{"xoooooxxoooooxoxoooooxxooooox"},;
{"xoxxxoxxoxxxxxoxxxxxoxxoxoxox"},;
{"xoxxxoooooooooooooooooooxoxox"},;
{"xoooooxxxxoxxxoxxxxoxxxoxoxox"},;
{"xoxxxoxxxxooooooooooxxxoxoxox"},;
{"xooooooooooxxxxxxxxooooooooox"},;
{"xxxxxxxxxxxxxxxxxxxxxxxxxxxxx"}}
//65*37
nComida:=0
XTECLAS = 0
Van:=0
XPOS:=0
nXPos = 450 // columna
nYPos = 540 // rengloN
xdonde = 1
Maxren:=20
Maxcol:=29
xotra:=0
xfdonde:=2
// posicion inicial fantasma
fXpos:=5*30
fYpos:=15*30
xVidas:=0
aComidas:=array(MaxRen,MaxCol)
for i:=1 to maxren
for y:= 1 to maxcol
aComidas[i][y]=substr(amatriz[i][1],y,1)
if substr(amatriz[i][1],y,1)="o"
nComida++
endif
next y
next i
omuro:=array(maxren,maxcol)
DEFINE WINDOW oWnd FROM 1,1 to 50,125
@ nYpos, nxPos BITMAP oSprite FILE "recpac\pacman.bmp" PIXEL size 30,30 NOBORDER
@ fxPos, fYpos BITMAP ofantasmas FILE "recpac\fanta1.bmp" PIXEL size 30,30 NOBORDER
oFanta1:=TFANTASMON():NEW(270,300,,"recpac\fanta2.bmp")
ofanta2:=TFANTASMON():NEW(360,360,,"recpac\fanta3.bmp")
ofanta3:=TFANTASMON():NEW(360,360,,"recpac\fanta4.bmp")
ofanta4:=TFANTASMON():NEW(360,360,,"recpac\fanta5.bmp")
ofanta5:=TFANTASMON():NEW(360,360,,"recpac\fanta6.bmp")
n:=30
// DIBUJANDO LA PANTALLA MAESTRA
for i:= 1 to maxren
m:=30
for y:= 1 to maxcol
if aComidas[i][y]="x"
@ n, m BITMAP omuro[i][y] size 30,30 of ownd ;
FILE "recpac\marcos.bmp" PIXEL NO BORDER
ELSE
if aComidas[i][y]="o"
@ n, m BITMAP omuro[i][y] size 30,30 of ownd ;
FILE "recpac\comidita.bmp" PIXEL NOBORDER
ENDIF
endif
m:=m+30
next y
n:=n+30
next i
// TERMINA dibujo pantalla
oWnd:bKeyDown :={ | nKey | xteclas:=Teclas(nKey, oSprite) }
oSprite:lTransparent = .t.
ownd:binit := { || vueltacompleta() }
ACTIVATE WINDOW oWnd // CENTERED
RETURN NIL
FUNCTION TERMINO()
LOCAL DEV:=.t.
LOCAL I, Y
FOR I:=1 TO MAXREN
FOR Y:=1 TO MAXCOL
if aComidas[i][y]="o"
dev:=.f.
endif
next y
next i
return dev
FUNCTION VUELTACOMPLETA()
LOCAL I
local xcol:=15, xren:=18
sonido_Inicial()
do while xdonde<>10
checapos()
ofanta1:movimiento_Checapos()
ofanta2:movimiento_Checapos()
ofanta3:movimiento_Checapos()
ofanta4:movimiento_Checapos()
ofanta5:movimiento_Checapos()
nXposa:=nXpos
nyPosa:=nYpos
IF XDONDE =1 // abajo
nypos = nypos +30
xren:=nypos/30
xcol:=nxpos/30
if aComidas[xren][xcol]="x"
nYpos := nYpos -30
endif
oSprite:LoadBmp( "recpac\pacmana.bmp")
oWnd:Refresh()
ENDIF
IF XDONDE =0 // arriba
nypos = nypos -30
xren:=nypos/30
xcol:=nxpos/30
if aComidas[xren][xcol]="x"
nYpos := nYpos +30
endif
oSprite:LoadBmp( "recpac\pacmant.bmp")
oWnd:Refresh()
ENDIF
IF XDONDE =2 // izquierda
nXpos = nXpos -30
xren:=nypos/30
xcol:=nxpos/30
if aComidas[xren][xcol]="x"
nXpos := nXpos +30
else
if aComidas[xren][xcol]="t"
nxpos:=870
endif
endif
oSprite:LoadBmp( "recpac\pacmani.bmp")
oWnd:Refresh()
ENDIF
IF XDONDE =3 // derecha
nXpos:= nXpos +30
xren:=nypos/30
xcol:=nxpos/30
if aComidas[xren][xcol]="x"
nXpos := nxpos -30
else
if aComidas[xren][xcol]="f"
nxpos:=30
endif
endif
oSprite:LoadBmp( "recpac\pacmand.bmp")
oWnd:Refresh()
ENDIF
if aComidas[xren][xcol]="o"
omuro[xren][xcol]:end()
aComidas[xren][xcol]:=" "
van ++
Sonido_Comiendo()
else
// Sonido_sincomer()
endif
// corrida del fantasmon wey
ofanta1:Movimiento_Fantasma()
ofanta2:Movimiento_Fantasma()
ofanta3:Movimiento_Fantasma()
ofanta4:movimiento_Fantasma()
ofanta5:movimiento_Fantasma()
IF XFDONDE =1 // abajo
fxpos = fxpos +30
xren:=fxpos/30
xcol:=fypos/30
if aComidas[xren][xcol]="x"
fxpos := fxpos -30
endif
ENDIF
IF XFDONDE =0 // arriba
fxpos = fxpos -30
xren:=fxpos/30
xcol:=fypos/30
if aComidas[xren][xcol]="x"
fxpos := fxpos +30
endif
ENDIF
IF XFDONDE =2 // izquierda
fypos = fypos -30
xren:=fxpos/30
xcol:=fypos/30
if aComidas[xren][xcol]="x"
fypos := fypos +30
// xfdonde:=1
// fxpos:=fxpos+30
else
if aComidas[xren][xcol]="t"
//fypos := fypos +30
fYpos:=840
endif
endif
ENDIF
IF XFDONDE =3 // derecha
fypos:= fypos +30
xren:=fxpos/30
xcol:=fypos/30
if aComidas[xren][xcol]="x"
fypos := fypos -30
else
if aComidas[xren][xcol]="f"
// fypos := fypos -30
fYpos:=60
endif
endif
ENDIF
// movimiento del fantasma
Mueve_Pacman()
Mueve_Fantasma()
ofanta1:Mover_Fantasma()
oFanta2:Mover_Fantasma()
ofanta3:Mover_Fantasma()
ofanta4:Mover_Fantasma()
ofanta5:Mover_Fantasma()
if (nYpos=fxpos .and. nXpos=fypos) .or. (nYposa=fXpos .and. nxposa=fypos) // agarre del fantamas al pacman
sonido_tecomio()
syswait(1.9)
// ? "ey estoy en 3 son dos opciones ", xpos, xotra, xfdonde
nXPos = 450 // movemos al pacman alos valor de inicio we
nYPos = 540
fXpos:=5*30 // movemos al fantasmas al valor inicial
fYpos:=15*30
xfdonde:= 2
xVidas++ // ya le dio en la madre los fantamas del caribe al pacman
if xvidas=3
Sonido_final()
syswait(5)
quit
endif
endif
IF XDONDE=10 .or. van=nComida // vamanos para fuera
// "ey estoy en 3 son dos opciones ",xpos, xotra, xfdonde
Sonido_final()
syswait(5)
QUIT
ENDIF
enddo
?//finalizo bye"
Sonido_final()
syswait(5)
RETURN NIL
Function Mueve_Pacman()
oSprite:Move( nYPos, nXPos, , , .T. )
syswait(.15)
Return NIl
Function Mueve_fantasma()
ofantasmas:Move( fxPos, fyPos, , , .T. )
Return NIl
Function Sonido_Termina()
SndPlaySound( "recpac\cry.wav", 3 )
syswait(.5)
Return NIL
Function Sonido_Comiendo()
SndPlaySound( "recpac\comida.wav", 3 )
Return Nil
Function Sonido_Inicial()
SndPlaySound( "recpac\pacman_beginning\pacman_beginning.wav", 3 )
syswait(4.0)
Return Nil
Function Sonido_rComiendo()
SndPlaySound( "recpac\pacman_eatfruit\pacman_eatfruit.wav", 3 )
Return Nil
Function Sonido_Final()
SndPlaySound( "recpac\pacman_intermission.wav", 3 )
Return Nil
Function Sonido_tecomio()
SndPlaySound( "recpac\pacman_death\pacman_death.wav", 3 )
Return Nil
Function Sonido_finalizar()
SndPlaySound( "recpac\pacman_death\pacman_death.wav", 3 )
Return Nil
Function teclas(xKey, oSprite)
IF xkey = 38 //ARRIBA
XDONDE = 0
endif
if xkey = 40 // abajo
XDONDE = 1
endif
if xkey = 37
XDONDE = 2
endif
if xkey = 39
XDONDE =3
endif
if xkey = 27
xdonde=10
endif
Return XKEY
Function checapos()
local xren, xcol
//local xotra:=0
local xnpos :=0
xren:=fxpos/30
xcol:=fypos/30
xotra:=0
XPOS:=0
if !acomidas[xren+1][xcol]="x"
xpos++
xotra:=xotra + 1
endif
if !acomidas[xren-1][xcol]="x"
xpos++
xotra:= xotra + 2
endif
if !acomidas[xren][xcol-1]="x"
xpos++
xotra:= xotra + 3
endif
if !acomidas[xren][xcol+1]="x"
xpos++
xotra:= xotra + 4
endif
if xpos>2 // quire decir que ay que random para decidi a que lugar ir we
xfdonde:=nrandom(3)
else
if xpos=2
if xotra = 4 .or. xotra=6 .OR. XOTRA=5 //quire decir que esta en la esquina del muro
xfdonde:=nrandom(3)
else
endif
endif
endif
Return NIL
CLASS TFANTASMON
DATA xfdonde INIT 2
DATA ny INIT 0
DATA xModo INIT 0
DATA xRen INIT 0
DATA XcOL INIT 0
DATA fXpos INIT 0
DATA FyPOS INIT 0
DATA oFanta
METHOD New()
METHOD Mover_Fantasma()
METHOD Movimiento_Fantasma()
METHOD Movimiento_ChecaPos()
METHOD Movimiento_Agarre()
ENDCLASS
METHOD New(fxPos, fyPos, ofanta, odibujo ) CLASS TFANTASMON
@ fxPos, fYpos BITMAP ofanta FILE odibujo PIXEL size 30,30 NOBORDER
::oFanta:=ofanta
::fxPos:=fxpos
::fYpos:=fYpos
RETURN SELF
METHOD Mover_Fantasma() CLASS TFANTASMON
::ofanta:Move( ::fxPos, ::fyPos, , , .T. )
::Movimiento_Agarre()
Return NIl
// agarre del fantamas
METHOD Movimiento_Agarre() CLASS TFANTASMON
if (nYpos=::fxpos .and. nXpos=::fypos) .or. (nYposa=::fXpos .and. nxposa=::fypos) // agarre del fantamas al pacman
sonido_tecomio()
syswait(1.9)
// ? "ey estoy en 3 son dos opciones ", xpos, xotra, xfdonde
nXPos = 450 // movemos al pacman alos valor de inicio we
nYPos = 540
xVidas++ // ya le dio en la madre los fantamas del caribe al pacman
if xvidas=3
Sonido_final()
syswait(5)
quit
endif
Endif
RETURN NIL
// corrida del fantasmon wey
METHOD Movimiento_Fantasma() CLASS TFANTASMON
IF ::XFDONDE =1 // abajo
::fxpos = ::fxpos +30
::xren:=::fxpos/30
::xcol:=::fypos/30
if aComidas[::xren][::xcol]="x"
::fxpos := ::fxpos -30
endif
ENDIF
IF ::XFDONDE =0 // arriba
::fxpos = ::fxpos -30
::xren:=::fxpos/30
::xcol:=::fypos/30
if aComidas[::xren][::xcol]="x"
::fxpos := ::fxpos +30
endif
ENDIF
IF ::XFDONDE =2 // izquierda
::fypos = ::fypos -30
::xren:=::fxpos/30
::xcol:=::fypos/30
if aComidas[::xren][::xcol]="x"
::fypos := ::fypos +30
else
if aComidas[::xren][::xcol]="t"
//fypos := fypos +30
::fYpos:=840
endif
endif
ENDIF
IF ::XFDONDE =3 // derecha
::fypos:= ::fypos +30
::xren:=::fxpos/30
::xcol:=::fypos/30
if aComidas[::xren][::xcol]="x"
::fypos := ::fypos -30
else
if aComidas[::xren][::xcol]="f"
// fypos := fypos -30
::fYpos:=60
endif
endif
ENDIF
RETURN NIL
METHOD Movimiento_ChecaPos() CLASS TFANTASMON
local xren, xcol
local xnpos :=0
xren:=::fxpos/30
xcol:=::fypos/30
xotra:=0
XPOS:=0
if !acomidas[xren+1][xcol]="x"
xpos++
xotra:=xotra + 1
endif
if !acomidas[xren-1][xcol]="x"
xpos++
xotra:= xotra + 2
endif
if !acomidas[xren][xcol-1]="x"
xpos++
xotra:= xotra + 3
endif
if !acomidas[xren][xcol+1]="x"
xpos++
xotra:= xotra + 4
endif
if xpos>2 // quire decir que ay que random para decidi a que lugar ir we
::xfdonde:=nrandom(3)
else
if xpos=2
if xotra = 4 .or. xotra=6 .OR. XOTRA=5 //quire decir que esta en la esquina del muro
::xfdonde:=nrandom(3)
// ? "ey estoy en 3 son dos opciones ", xotra, xfdonde
else
// xfdonde:=nrandom(3)
// ? " son 1 opciones ", xotra, xfdonde
endif
endif
endif
Return NIL