Anuncios Google

5.- Función control puntos y Función saque aleatorio

Tutoriales Avanzados Homebrewes

En este capí­tulo estudiaremos como se detecta si la pelota ha golpeado una barra, y por tanto debe salir rebotada, o si la pelota ha sobrepasado una barra y por tanto se debe anotar un punto al jugador contrario. Veremos que si pelota toca una barra en su zona central, saldrá rebotada en sentido contrario pero con el mismo ángulo. Si la pelota toca la barra en un extremo, haremos que salga rebotada con un ángulo diferente, tal como ocurriría en la realidad.

-- funcion control puntos
 
function controlpuntos()
 
if x >= 465 then

Esta condicional comprueba si el centro de la pelota ha llegado al lí­mite derecho de la pantalla.

 

if y >= (PosBarraDrch - 30) and y <= (PosBarraDrch + 30) then

Esta condicional comprueba si la coordenada Y de la pelota se encuentra dentro de los extremos de la barra derecha, para hacerla rebotar.

En el siguiente dibujo vemos todas las variables implicadas:

 

AngPelota = pi &ndash; AngPelota

Modificamos el ángulo de la pelota para hacerla cambiar de dirección.

 local sonido = SonidoBarra
 
voz = sonido:play()

Ejecutamos el sonido del rebote en la barra.

NumGolpes = NumGolpes + 1

Sumamos 1 al contador de golpes utilizado para aumentar la velocidad de la pelota.

elseif y < (PosBarraDrch - 30) and y > (PosBarraDrch - 35) then

Si no se cumple la condicional anterior, comprobamos si la pelota ha tocado la esquina superior de la barra, para hacerla rebotar con un ángulo diferente.

En el siguiente dibujo vemos todas las variables implicadas:

AngPelota = pi - AngPelota + AngPico

Modificamos el ángulo de la pelota.

 local sonido = SonidoEsquina
 
voz = sonido:play()

Ejecutamos el sonido del rebote en la esquina de la barra.

NumGolpes = NumGolpes + 1

Sumamos 1 al contador de golpes utilizado para aumentar la velocidad de la pelota.

elseif y > (PosBarraDrch + 30) and y < (PosBarraDrch + 35) then

Si no se cumple la condicional anterior, comprobamos si la pelota ha tocado la esquina inferior de la barra, para hacerla rebotar con un ángulo diferente.

AngPelota = pi - AngPelota &ndash; AngPico

Modificamos el ángulo de la pelota.

 local sonido = SonidoEsquina
 
voz = sonido:play()

Ejecutamos el sonido del rebote en la esquina de la barra.

NumGolpes = NumGolpes + 1

Sumamos 1 al contador de golpes utilizado para aumentar la velocidad de la pelota.

else

Si tampoco se cumple la condicional anterior, es decir si la pelota no toca la barra ni una esquina, deberemos anotar 1 punto al jugador contrario.

 local sonido = SonidoPunto
 
voz = sonido:play()

Reproducimos el sonido de punto conseguido.

 

PuntosIzda = PuntosIzda + 1

Sumamos 1 punto al jugador de la izquierda.

 

 x = 450
 
y = 136

Establecemos las coordenadas de la pelota para iniciar un nuevo punto.

aleatorio()

Hacemos una llamada a la función aleatorio() para que nos de un ángulo de saque aleatorio.

AngPelota = AngPelota + pi

Se cambia el ángulo de la pelota para que se desplace hacia la izquierda, ya que la función aleatorio() sólo devuelve ángulos hacia la derecha.

NumGolpes = 0

Reseteamos el contador de golpes a 0, pues se inicia un nuevo punto.

screen.waitVblankStart(80)

Hacemos un pequeña pausa de 80/60 segundos, para que de tiempo a ver que la pelota sobrepasó la barra.

 if PuntosIzda == puntos then
 
finjuego()
 
end

Si los puntos que ahora tiene el jugador izquierdo han llegado al número de puntos establecido para el juego, se hace una llamada a la función finjuego(), la cual veremos en el capí­tulo 6 que realiza la finalización del juego.

end
 
end

 

A continuación se hace exactamente lo mismo, pero comprobando si la pelota ha llegado al lí­mite izquierdo de la pantalla.

 

-- Lado Izdo
 
if x <= 15 then
 
if y >= (PosBarraIzda - 30) and y <= (PosBarraIzda + 30) then
 
AngPelota = pi - AngPelota
 
local sonido = SonidoBarra
 
voz = sonido:play()
 
NumGolpes = NumGolpes + 1
 
elseif y < (PosBarraIzda - 30) and y > (PosBarraIzda - 35) then
 
AngPelota = pi - AngPelota - AngPico
 
local sonido = SonidoEsquina
 
voz = sonido:play()
 
NumGolpes = NumGolpes + 1
 
elseif y > (PosBarraIzda + 30) and y < (PosBarraIzda + 35) then
 
AngPelota = pi - AngPelota + AngPico
 
local sonido = SonidoEsquina
 
voz = sonido:play()
 
NumGolpes = NumGolpes + 1
 
else
 
local sonido = SonidoPunto
 
voz = sonido:play()
 
PuntosDrch = PuntosDrch + 1
 
x = 30
 
y = 136
 
aleatorio()
 
NumGolpes = 0
 
screen.waitVblankStart(80)
 
if PuntosDrch == puntos then
 
finjuego()
 
end
 
end
 
end
 
end

A continuación veremos la función aleatorio() la cual calcula un ángulo de saque aleatorio. De esta forma la dirección inicial de la pelota no será siempre la misma.

-- Funcion saque aleatorio
 
function aleatorio()
 
aleat = math.random(1,4)
 
if aleat == 1 then
 
angulo = -30
 
elseif aleat == 2 then
 
angulo = -20
 
elseif aleat == 3 then
 
angulo = 20
 
elseif aleat == 4 then
 
angulo = 30
 
end
 
AngPelota = (angulo * pi) / 180
 
end

Mediante este grupo de comandos se calcula la dirección inicial de la pelota, de forma aleatoria. La función matemática math.random(1,4) devuelve un número pseudoaleatorio comprendido entre 1 y 4. En función de este número se selecciona el ángulo que forma la dirección de desplazamiento de la pelota.

El ángulo devuelto por la función siempre hace desplazar la pelota hacia la derecha de la pantalla. Por tanto cuando se produzca el saque desde el lado derecho de la pantalla, como vimos en la función controlpuntos(), le debemos sumar pi (180 grados) para que se desplace hacia el lado izquierdo.

4.727275
Tu voto: Ninguno Votos totales: 4.7 (11 votos)

Anuncios Google

Comentarios

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de Lord Hades

Pues si, pero para que

Pues si, pero para que comentar que no le entiende.

Seguro solo para ganarse un SceneBito xD

PD: No quiero crear una discusion de esto

Salu2..!! :D


Imagen de Lord Hades

Silverstein fijate en la

Silverstein fijate en la fecha de los post

No ervivas post muertos mira la fecha de este: Mar, 2006/09/26 - 20:35

hace tres años ...!!!


Imagen de Locoropeza

Esto no es

precisamente un post muerto, es mas bien un tuto ¬¬, fijate bien y en la pagina principal de SB no sale en los temas activos

Imagen de corinv3

mmmmmmmmmmmmm

aaaaaaaaaa no le entiendo aaaaaa ya me desespere  aaaaaaaaaaaaaa yo kiero ser un coder pero no le entiendo a nadaaaaaaaa del lua player aaaaaaaaa

ya perdi la esperansa es la 2 ves k lo leo


despues de mucho aqui estoyy, oigan saben porque no puedo ver el foro de psp

scenebeta? si sabes mandame un MP

muy bueno

ahora lo pruevo

Muuuuubien pucelano Muuuuuubien

Este es un gran trabajo

Un saludo:Peseperos

Imagen de pucelano

Muuuuuy agradecido

Espero que este tutorial os sea útil a muchos.

Un saludo


 

Descargar Homebrew de BETA, gratis. Visualizar un tutorial, gratis. Iniciarse en la programacion en español, gratis. Colaborar a que la scene PSP en español crezca, no tiene precio.


Descargar Homebrew de BETA, gratis. Visualizar un tutorial, gratis. Iniciarse en la programacion en español, gratis. Colaborar a que la scene PSP en español crezca, no tiene precio.

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.