Error[LuaDEV](error de programacion no del eboot)

Hola, perdon por el titulo, pero no sabia que poner para especificarlo jeje.

Tengo este codigo:

x = {}
 
x[0] = 10
 
y = {}
 
y[0] = 26
 
c = {x,y,estado}
 
c.estado = 1
 
c.x = math.random(5,475)
 
c.y = math.random(5,267)
 
 
if (x[0] + 16) >= c.x and x[0] <= (c.x + 10) and (y[0] + 16) >= c.y and y[0] <= (c.y + 10) then
 
		c.estado = 0
 
end

y me da de error: line 40 (la del if) attempo to perform arithmetic on field ? (a nil value)

Nose como solucionarlo, porque creo que todas las variables tienen valor...tiene que ser un error en las tablas, porque lo he probado con variables y no me da error...

 

Gracias ;)


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.

Me vuelve el error, esta vez

Me vuelve el error, esta vez os pongo el codigo entero a ver si vosotros sabeis que pasa...

--Variables
rojo = color.new(255,0,0)
verde = color.new(0,255,0)
azul = color.new(0,0,255)
amarillo = color.new(255,255,0)
 
-- on = 1, off = 0
estadoP = 0
imagen = {}
imagen.elementoH = image.load("ElementoH.png")
imagen.elementoV = image.load("ElementoV.png")
 
snake = {x,y}
snake.x = {}
snake.x[1] = 10
snake.y = {}
snake.y[1] = 26 
elementosH = {}
elementosV = {}
elementosH[1] = imagen.elementoH
elementosV[1] = imagen.elementoV
nElementos = 5
--N = 1,S = 2,E = 3,O = 4}
dir = 3
 
 
function movimiento()
	for i=1,nElementos do
		elementosH[i] = elementosH[1]
		elementosV[i] = elementosV[1]
		if estadoP == 0 then
			if dir == 1 or dir == 2 then
				image.blit(elementosV[1],snake.x[i],snake.y[i])
			elseif dir == 3 or dir == 4 then
				image.blit(elementosH[1],snake.x[i],snake.y[i])
			end
			if controls.press("cross") then
				estadoP=1
			end
		end
		if estadoP == 1 then
			if dir == 1 then
				snake.y[1] = snake.y[1] - 1
				snake.x[i] = snake.x[i-1]
				snake.y[i] = snake.y[i-1]
				image.blit(elementosV[i],snake.x[i],snake.y[i])
			elseif dir == 2 then
				snake.y[1] = snake.y[1] + 1
				snake.x[i] = snake.x[i-1]
				snake.y[i] = snake.y[i-1]
				image.blit(elementosV[i],snake.x[i],snake.y[i])
			elseif dir == 3 then
				snake.x[1] = snake.x[1] +1
				snake.x[i] = snake.x[i-1]
				snake.y[i] = snake.y[i-1]
				image.blit(elementosV[i],snake.x[i],snake.y[i])
			elseif dir == 4 then
				snake.x[1] = snake.x[1] -1
				snake.x[i] = snake.x[i-1]
				snake.y[i] = snake.y[i-1]
				image.blit(elementosH[i],snake.x[i],snake.y[i])
			end
			if controls.press("up") and dir ~= 2 then
				dir = 1
			elseif controls.press("down") and dir ~= 1 then
				dir = 2
			elseif controls.press("right") and dir ~= 4 then
				dir = 3
			elseif controls.press("left") and dir ~= 3 then
				dir = 4
			end
		end
	end	
end
 
while true do
	controls.read()
	screen.print(1,1,"X:"..snake.x[1])
	screen.print(50,1,"Y:"..snake.y[1])
	movimiento()
	screen.flip()
	if controls.press("select") then
		ERROR()
	end
end

Estoy intentado hacer el snake de toda la vida...porque pense que era facil y para practicar un poco, pero...me quedo atascado aqui, que nose que pasa.

Lo mismo hay barbaridades asique no os asusteis...jaja

gracias ;)

Pero, que error y en qué

Pero, que error y en qué línea? (Así es más rápido solucionarlo :P)

uy, perdon, se me fue la olla

uy, perdon, se me fue la olla jeje

El error es: attempo to perform arithmetic on field ? (a nil value)

y me lo da al pulsar X en la linea que esta en negrita:

elseif dir == 3 then

snake.x[1] = snake.x[1] +1

snake.x[i] = snake.x[i-1]

Perdon por no ponerlo antes...

El error está una línea

El error está una línea después de la que marcaste en negritas: de nuevo el problema con los índices. En la primera pasada del for, i vale 1.
1-1 = 0
snake.x[1] = snake[0] --igualas a nil, por eso dará error en las sucesivas pasadas del for.

mm ok muchas gracias jeje,

mm ok muchas gracias jeje, nose porque xro me he acordao antes cuando iba por la calle de poner i+1 = i xD

ahora....a ver si consigo hacer lo que quiero.

Muchas gracias ;)

Ahora veo que habias creado

Ahora veo que habias creado una tabla para las x xD

 

En Lua los índices de las

En Lua los índices de las tablas empiezan en 1, no en 0. Con eso en cuenta, no debería darte error :P

he vuelto a escribir el

he vuelto a escribir el codigo y ahora no me da error :S no se que habra pasado, perdon por las molestias y gracias.

Imagen de barney77

Eso mismo le dije yo, pero ya

Eso mismo le dije yo, pero ya los cambio a 1 y sigue igual.

Pues... no lo habrá hecho

Pues... no lo habrá hecho bien, porque yo acabo de probar el código con la modificación que sugerí, y va perfecto

x = {}
  x[1] = 10
y = {}
  y[1] = 26
c = {}
  c.estado = 1
    c.x = math.random(5,475)
      c.y = math.random(5,267)
 
if (x[1] + 16) >= c.x and x[1] <= (c.x + 10) and (y[1] + 16) >= c.y and y[1] <= (c.y + 10) then
	c.estado = 0
	os.message("Estado: "..c.estado)
else
	os.message("No se cumplió, pero sí furula xD")
end

._.

Imagen de barney77

En fin, ya lo soluciono.

En fin, ya lo soluciono.

Imagen de barney77

Que extraño code, nunca me

Que extraño code, nunca me había topado con algo así, pues la verdad ahora si que necesito que me expliques algo xD, para que son los parentesis en las comparaciones?

PD: intenta de cambiar los indices de las tablas, ejemplo tienes y[0], cambialo por y[1]

Seguro que sabe programar en

Seguro que sabe programar en C ya que en C los arrays empiezan por 0 no como en Lua que empiezan por el 1 y en C los if llevan paréntesis:

if ( ) {
 
 
 
}
 

nada, mismo error. He probado

nada, mismo error. He probado poniendo [1] en vez de [0] y quitando los parentesis, pero todo sigue igual...a ver si alguien sabe la solucion, gracias de todas formas :)

Imagen de barney77

Mmm pues ni idea .  

Mmm pues ni idea .

 

los parentesis...la verdad

los parentesis...la verdad que no tienen ninguna funcion, pero estoy acostumbrado a ponerlos, para que realice esa operacion antes jeje nuse, esque veo yo mas claramente que tiene que hacer primero el x[0] + 16 antes de comparar, funcion?? ninguna jeje. Es mania mia.

 

 

Imagen de barney77

No se si tiene mucho que ver,

No se si tiene mucho que ver, pero aver, quita los parentesis.

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.