Anuncios Google

Me ayudan por favor?

He estado trabajando en un juego tipo Contra pero para LUA, bueno, no llevo mucho, de hehcho, apenas he hecho que un cuadro se mueva, y que choque, el punto es que estoy intentando que dispare, pero no lo logro, este es el código que llevo hecho, habrá algún error???

--Crear colores
verde = Color.new(0, 128, 0)
blanco = Color.new(255,255,255)
blue = Color.new(0,0,255)
amarillo = Color.new(255,255,-255)
azul = Color.new(150,150,255)
rojo = Color.new(255,0,0)
gris = Color.new(112, 128, 144)

--A Crear los objetos

fondo = Image.load("fondo.png")

pared = Image.createEmpty(10,272)
pared:clear(rojo)

jugador1 = Image.createEmpty(32,32)
jugador1:clear(blanco)

piso = Image.createEmpty(480,10)
piso:clear(verde)

bala = Image.createEmpty(4,4)
bala:clear(rojo)

bloque = Image.createEmpty(35,20)
bloque:clear(gris)

--VARIABLES
oldpad = Controls.read()
balaActual = 0
direccion = "derecha"

--MÚSICA...

Music.playFile("hung.xm", true)

--Tabla del jugador

jugador = {}
jugador.gravedad = 230
jugador.y = 230
jugador.x = 50
jugador.velocidad = 10
jugador.estado = "piso"

--Essso!
personajeAlto = 32
personajeAncho = 32

--Array de los bloques
Bloque = {}
Bloque[1] = { x = 100, y = 242, alto = bloque:height(), ancho = bloque:width() }
Bloque[2] = { x = 300, y = 242, alto = bloque:height(), ancho = bloque:width() }
Bloque[3] = { x = 200, y = 242, alto = bloque:height(), ancho = bloque:width() }

--Tabla de las balas
infoBala = {}
for a = 1,5 do
infoBala[a] = { imagen = bala , disparando = false, direccion = "derecha", x = jugador.x + 32,
y = jugador.y + 16 }
end

--Función que prepara el disparo
function configBala()

if balaActual < 5 then
balaActual = balaActual + 1
else
balaActual = 1
end
if direccion == "izquierda" then
infoBala[balaActual].x = jugador.x
infoBala[balaActual].y = jugador.y + 16
end
if direccion == "derecha" then
infoBala[balaActual].x = jugador.x + 32
infoBala[balaActual].y = jugador.y + 16
end
if direccion == "arriba" then
infoBala[balaActual].x = jugador.x + 16
infoBala[balaActual].y = jugador.y
end
if direccion == "abajo" then
infoBala[balaActual].x = jugador.x + 16
infoBala[balaActual].y = jugador.y + 32
end
infoBala[balaActual].direccion = direccion
infoBala[balaActual].disparando = true
end

--Función que comprueba si una bala a sido disparada
function disparando()

for i = 1,5 do
if infoBala[i].disparando == true then
if infoBala[i].direccion == "derecha" then infoBala[i].x = infoBala[i].x + 10 end
if infoBala[i].direccion == "izquierda" then infoBala[i].x = infoBala[i].x - 10 end
if infoBala[i].direccion == "arriba" then infoBala[i].y = infoBala[i].y - 10 end
if infoBala[i].direccion == "abajo" then infoBala[i].y = infoBala[i].y + 10 end
end
if infoBala[i].x < 0 or infoBala[i].x > 480 or infoBala[i].y < 0 or infoBala[i].y > 272 then
infoBala[i].disparando = false
end
end
end

--Función que da movimiento al personaje
function movimiento()

pad = Controls.read()

if pad:left() and jugador.x >0 then
jugador.x = jugador.x - 2
end

if pad:right() and jugador.x <448 then
jugador.x = jugador.x + 2
end

if pad:cross() and oldpad:cross() ~= pad:cross() and jugador.estado == "piso" then
jugador.estado = "saltando"
end

if jugador.estado == "saltando" then
jugador.velocidad = jugador.velocidad - 0.5
jugador.gravedad = jugador.gravedad - jugador.velocidad
end

if jugador.gravedad < 0 then
jugador.estado = "cayendo"
end

if jugador.gravedad < 230 and jugador.estado == "cayendo" then
jugador.gravedad = jugador.gravedad + (jugador.velocidad + 3)
end

if jugador.gravedad == 230 then
jugador.velocidad = 10
jugador.estado = "piso"
end

if jugador.gravedad > 230 then
jugador.gravedad = 230
end

jugador.y = jugador.gravedad
end

--Función que revisa si hay colisiones
function revisarColisiones(objeto)

if (jugador.x + personajeAncho > objeto.x) and (jugador.x < objeto.x + objeto.ancho) and
(jugador.y + personajeAlto > objeto.y) and (jugador.y < objeto.y + objeto.alto) then
jugador.x = anteriorx
jugador.y = anteriory
end
end

--Función para poder correr y saltar más alto
function saltarAlto()

if pad:left() and jugador.x >0 and pad:square() and jugador.estado == "piso" then
jugador.x = jugador.x - 4
end

if pad:right() and jugador.x <448 and pad:square() and jugador.estado == "piso" then
jugador.x = jugador.x + 4
end

if pad:cross() and pad:square() and pad:left() and jugador.estado == "piso" or
pad:cross() and pad:square() and pad:right() and jugador.estado == "piso"
then jugador.estado = "saltando alto"
end

if jugador.estado == "saltando alto" then
jugador.velocidad = jugador.velocidad - 0.4
jugador.gravedad = jugador.gravedad - jugador.velocidad
end

if jugador.gravedad == 230 then
jugador.velocidad = 10
jugador.estado = "piso"
end

if jugador.gravedad > 230 then jugador.gravedad = 230 end

jugador.y = jugador.gravedad
end

--Función que modifica la "dirección" del jugador
function direccionP()

if pad:left() then
direccion = "izquierda"
end
if pad:right() then
direccion = "derecha"
end
if pad:up() then
direccion = "arriba"
end
if pad:down() then
direccion = "abajo"
end
end

--Empezamos el Bucle Principal
while true do

pad = Controls.read()
screen:clear()

if pad:square() and oldpad:square() ~= pad:square() then
configBala()
end

anteriorx = jugador.x
anteriory = jugador.y
screen:clear()

--A llenarnos de funciones
direccionP()
movimiento()
saltarAlto()
disparando()

revisarColisiones(Bloque[1])
revisarColisiones(Bloque[2])
revisarColisiones(Bloque[3])

--Poner las cosas en pantalla
screen:blit(0, 0, fondo, 0, 0, fondo:width(), fondo:height(), false)
screen:blit(jugador.x,jugador.y,jugador1)
for a = 1,3 do
screen:blit(Bloque[a].x,Bloque[a].y,bloque)
end
screen:blit(0,262,piso)

screen:print(10,10,"X: "..jugador.x.." Y: "..jugador.y,amarillo)
screen:print(10,20,"Estado del jugador: "..jugador.estado,blanco)
screen:print(10,30,"Direccion del jugador: "..direccion,blue)

screen.waitVblankStart()
screen.flip()
oldpad = pad
if pad:start() then break end
if pad:select() then screen:save("screenshot.png") end
end

Ese es el código, me ayudan por favor? Ojo que todavía está muy verde el "juego"


Anuncios Google

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 ELeNDeR

Veo que lo que has intentado

Veo que lo que has intentado hacer es juntar dos snippets y con el último tutorial para tener un personaje que dispare, salte y se choque con los obstáculos. No es algo fácil de hacer y tendría que revisarlo tranquilamente en casa.

Así a simple vista, veo 3 "end" seguidos en la función "configBala()", creo que sobra uno. En varias sentencias IF no hay signo de comparación, supongo que habrá sido la propia web quien los haya hecho desaparecer.

El resto tendría que mirarlo más detenidamente. A ver si alguien que tenga más tiempo puede echarte una mano. Saludos.

Imagen de Ragezort

Quote : "...En varias

Quote : "...En varias sentencias IF no hay signo de comparación, supongo que habrá sido la propia web quien los haya hecho desaparecer..."

Cuando en una sentencia IF no se introduce ningun comparador (en lenguaje C y Pascal) se pasa a ser una comprobación Booloenaica de => 1. Boolenaica ya que la respuesta de la función de Controls.read():boton() siempre sera una respuesta definida a Boolean.

Imagen de ELeNDeR

Me refiero a este (entre

Me refiero a este (entre otros):

if pad:right() and jugador.x 230 then

Después de "jugador.x" tendrá que venir algún signo de comparación, sino dará error el "230" que viene a continuación. A eso me refería.

Elender, al parecer la web

Elender, al parecer la web las quitó, así como en esa misma función, quitó varias sentencias más, porque los end si son correctos, si quito uno me dice que falta terminar la function configBala(), intento ver yo mismo que error hay en el juego, porque no quiere disparar, siento que falta algo, pero como soy nuevo, no se que es.

Imagen de ELeNDeR

Pues a ver si lo consigues,

Pues a ver si lo consigues, porque con el código que muestra la web va a ser un poco difícil.

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.