Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





duda con un codigo en Blitz3D

Iniciado por masterblade, 07 de Mayo de 2007, 08:55:45 PM

« anterior - próximo »

masterblade

hola

tengo un problema con un codigo que estoy desarrollando en el lenguaje del Blitz3D

primero les muestro mi codigo para que puedan entender un poco mas mi duda

AppTitle "Snake Pacman v1.0"

Graphics 640,480

Global estado, muro, i, playerx, playery, colision_arriba, colision_abajo
Global colision_derecha, colision_izquierda, snake_der, snake_izq, snake_arri
Global snake_aba, snake_frame, movsnake, manzana, uva, piedra, corazon, platano
Global comidax, comiday

snake_der=LoadAnimImage("pacman_animation_black.bmp",32,32,0,11)
snake_izq=LoadAnimImage("pacman_animation_black_2.bmp",32,32,0,11)
snake_arri=LoadAnimImage("pacman_animation_black_3_1.bmp",32,32,0,11)
snake_aba=LoadAnimImage("pacman_animation_black_4_1.bmp",32,32,0,11)

manzana=LoadImage("manzana_1.bmp")
uva=LoadImage("uva_1.bmp")
piedra=LoadImage("piedra_1.bmp")
corazon=LoadImage("corazon_1.bmp")
platano=LoadImage("platano_1.bmp")

movsnake=3

playerx=100
playery=100

SetBuffer BackBuffer()

comidax=Rnd(5,460)
comiday=Rnd(5,460)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
While Not KeyDown(1)

         Cls

         ;muestra la animacion del sprite         
         ;If MilliSecs() > tmrSparks + 100 Then
         ;    tmrSparks=MilliSecs() ; 'reset' the timer
         ;    frmSparks=( frmSparks + 1 ) Mod 11 ; incrementa el frame
          ;End If
         
         ;dependiendo de que opcion se active la animacion del snake va a mostrar
         ;hacia arriba, abajo, a la izquierda o a la derecha
         Select estado
         
                   Case 0
                        DrawImage snake_arri,playerx,playery,snake_frame   
                   Case 1
                        DrawImage snake_aba,playerx,playery,snake_frame
                   Case 2
                        DrawImage snake_der,playerx,playery,snake_frame
                   Case 3
                          DrawImage snake_izq,playerx,playery,snake_frame
         End Select   
         
         If KeyDown(200)=True Then  ;arriba
             playery=playery-movsnake
             estado=0
             snake_frame=(snake_frame+1) Mod 11; inicia el movimiento de sprites conforme movemos a la snake
             ;if playery<0 then playery=0 ;detiene para que el jugador no salga fuera de la pantalla   
            
             ;if playery<=32 then playery=32
            
         ElseIf KeyDown(208)=True Then   ;abajo
             playery=playery+movsnake      
             estado=1
             snake_frame=(snake_frame+1) Mod 11
             ;if playery>448 then playery=448
            
            
         ElseIf KeyDown(205)=True Then       ;derecha      
              playerx=playerx+movsnake
              estado=2
               snake_frame=(snake_frame+1) Mod 11
               ;if playerx>608 then playerx=608
      
         ElseIf KeyDown(203)=True Then       ;izquierda         
               playerx=playerx-movsnake
               estado=3
               snake_frame=(snake_frame+1) Mod 11
               ;if playerx<0 then playerx=0

         End If       
         
         Level_One
         
         ;Colocar_comida   
         
         Flip
Wend

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Function Level_One(); esta funcion dibuja 4 paredes como mapa
muro=LoadImage("wall1.bmp")

For i=0 To 512 Step 32 ;dibuja la pared de arriba y detiene a la snake en esa pared
      DrawImage muro,i,0,0
      If ImagesCollide(muro,i,0,0,snake_arri,playerx,playery,snake_frame) Then
          playery=31 ; si la snake colisiona con la pared de arriba, playery tendra
                      ; el valor de 31
      End If      
Next

For i=0 To 416 Step 32  ;dibuja la pared izquierda y detiene a la snake en esa pared
      DrawImage muro,0,i,0
      If ImagesCollide(muro,0,i,0,snake_izq,playerx,playery,snake_frame) Then
         playerx=31  ; si la snake colisiona con la pared de la izquierda, playerx tendra
                      ; el valor de 31
      End If
Next

For i=0 To 512 Step 32  ;dibuja la pared de abajo y detiene a la snake en esa pared
      DrawImage muro,i,447,0
      If ImagesCollide(muro,i,447,0,snake_aba,playerx,playery,snake_frame) Then
         playery=416 ; si la snake colisiona con la pared de abajo, playery tendra
                      ; el valor de 416
      End If
Next

For i=0 To 416 Step 32  ;dibuja la pared de la derecha y detiene a la snake en esa pared
      DrawImage muro,512,i,0
      If ImagesCollide(muro,512,i,0,snake_der,playerx,playery,snake_frame) Then
         playerx=480
      End If
Next

; el codigo de abajo es el que elimina a la comida cuando la snake colisiona con la comida
   DrawImage(manzana,comidax,comiday,0)
   If ImagesCollide(manzana,comidax,comiday,0,snake_aba,playerx,playery,snake_frame)=True Then
      FreeImage manzana
   ElseIf ImagesCollide(manzana,comidax,comiday,0,snake_arri,playerx,playery,snake_frame)=True Then
      FreeImage manzana
   ElseIf ImagesCollide(manzana,comidax,comiday,0,snake_der,playerx,playery,snake_frame)=True Then
      FreeImage manzana
   ElseIf ImagesCollide(manzana,comidax,comiday,0,snake_izq,playerx,playery,snake_frame)= True Then
      FreeImage manzana
   EndIf
   
End Function

mi problema es que cuando la snake (el pacman) colisiona con una comida (la manzana) se elimina la comida pero me aparece la imagen con la que formo las paredes

¿alguien sabe a que se debe este problema?

espero que me puedan ayudar

saludos

RobiHm

Web : Indómita
Blog : MiBlog
Evobas : Evobas
Kobox : Kobox

Xine

Como piensas dibujar una manzana liberada ?

CitarDrawImage(manzana,comidax,comiday,0)
If ImagesCollide(manzana,comidax,comiday,0,snake_aba,playerx,playery,snake_frame)=True Then
FreeImage manzana

masterblade

ya corregi lo que me salia mal, ahora tengo otra pregunta, cuando estoy probando el juego y llego a juntar unos 170 puntos (suma hecha entre 1, 2 y 3 puntos) mi compu se alenta bastante y se traba, ¿Saben como puedo solucionar esto?

Saludos






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.