treballant en la IA dels malos
This commit is contained in:
@@ -12,7 +12,7 @@ malos = {{
|
|||||||
x = 0,
|
x = 0,
|
||||||
y = 0,
|
y = 0,
|
||||||
velocitat = 0,
|
velocitat = 0,
|
||||||
dx = 0,
|
dx = -1,
|
||||||
dy = 0
|
dy = 0
|
||||||
}, {
|
}, {
|
||||||
x = 0,
|
x = 0,
|
||||||
@@ -56,89 +56,83 @@ end
|
|||||||
function update()
|
function update()
|
||||||
rellotge = rellotge + 1
|
rellotge = rellotge + 1
|
||||||
mou_jugador()
|
mou_jugador()
|
||||||
|
mou_malos()
|
||||||
pinta_laberinto()
|
pinta_laberinto()
|
||||||
pinta_jugador()
|
pinta_jugador()
|
||||||
pinta_malos()
|
pinta_malos()
|
||||||
|
print(malos[1].dx, 0, 0)
|
||||||
|
print(malos[1].dy, 4, 0)
|
||||||
end
|
end
|
||||||
|
|
||||||
function crea_laberinto()
|
function crea_laberinto()
|
||||||
-- Rellenalo todo a partir de la primera_fila-1
|
-- genera el laberinto
|
||||||
|
local longitud, inicio
|
||||||
for i = 0, 1199 do
|
for i = 0, 1199 do
|
||||||
|
-- plena tot de murs a partir de la primera_fila-1
|
||||||
if i < ((primera_fila - 1) * 40) then
|
if i < ((primera_fila - 1) * 40) then
|
||||||
laberinto[i] = 0x20
|
laberinto[i] = 0x20
|
||||||
-- laberinto[i] = 0xD8
|
|
||||||
else
|
else
|
||||||
laberinto[i] = 0x8F
|
laberinto[i] = 0x8F
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Pon camino en la primera y última fila
|
-- posa cami en la primera i última fila
|
||||||
for i = primera_columna, ultima_columna do
|
for i = primera_columna, ultima_columna do
|
||||||
laberinto[(40 * primera_fila) + i] = 0x20
|
laberinto[(40 * primera_fila) + i] = 0x20
|
||||||
laberinto[(40 * ultima_fila) + i] = 0x20
|
laberinto[(40 * ultima_fila) + i] = 0x20
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Pon camino en la primera y última columna
|
-- posa cami en la primera i última columna
|
||||||
for i = primera_fila, ultima_fila do
|
for i = primera_fila, ultima_fila do
|
||||||
laberinto[(40 * i) + primera_columna] = 0x20
|
laberinto[(40 * i) + primera_columna] = 0x20
|
||||||
laberinto[(40 * i) + ultima_columna] = 0x20
|
laberinto[(40 * i) + ultima_columna] = 0x20
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Crea filas aleatorios
|
-- crea filas aleatories
|
||||||
i = primera_fila
|
local fila = primera_fila
|
||||||
while i < ultima_fila - 1 do
|
while fila < ultima_fila - 1 do
|
||||||
if rnd(10) % 10 > 4 then
|
if rnd(10) % 10 > 4 then
|
||||||
-- 60% de probabilidad de pintar la fila entera
|
-- 60% de probabilitat de pintar la fila sencera
|
||||||
for j = primera_columna, ultima_columna do
|
for j = primera_columna, ultima_columna do
|
||||||
laberinto[(40 * i) + j] = 0x20
|
laberinto[(40 * fila) + j] = 0x20
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
-- 40% de probabilidad de pintar solo un segmento
|
-- 40% de probabilitat de pintar sols un segment
|
||||||
longitud = max(15, rnd(ultima_columna - primera_columna) + 1)
|
longitud = max(15, rnd(ultima_columna - primera_columna) + 1)
|
||||||
-- ink(0)
|
|
||||||
-- print(i, 0, i)
|
|
||||||
inicio = rnd(ultima_columna - longitud) + primera_columna
|
inicio = rnd(ultima_columna - longitud) + primera_columna
|
||||||
for j = 1, longitud do
|
for j = 1, longitud do
|
||||||
laberinto[(40 * i) + j + inicio] = 0x20
|
laberinto[(40 * fila) + j + inicio] = 0x20
|
||||||
-- print("X", j + inicio, i + 1)
|
|
||||||
end
|
end
|
||||||
-- print(inicio, 5, i)
|
|
||||||
-- print(longitud, 10, i)
|
|
||||||
end
|
end
|
||||||
i = i + rnd(3) + 3
|
fila = fila + rnd(3) + 3
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Crea columnas aleatorias
|
-- crea columnas aleatories
|
||||||
i = primera_columna
|
local columna = primera_columna
|
||||||
while i < ultima_columna - 1 do
|
while columna < ultima_columna - 1 do
|
||||||
if rnd(10) % 10 > 4 then
|
if rnd(10) % 10 > 4 then
|
||||||
-- 60% de probabilidad de pintar la columna entera
|
-- 60% de probabilitat de pintar la columna sencera
|
||||||
for j = primera_fila, ultima_fila do
|
for j = primera_fila, ultima_fila do
|
||||||
laberinto[(40 * j) + i] = 0x20
|
laberinto[(40 * j) + columna] = 0x20
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
-- 40% de probabilidad de pintar solo un segmento
|
-- 40% de probabilitat de pintar sols un segment
|
||||||
longitud = max(5, rnd(ultima_fila - primera_fila) + 1)
|
longitud = max(5, rnd(ultima_fila - primera_fila) + 1)
|
||||||
-- ink(0)
|
|
||||||
-- print(i, i, 0)
|
|
||||||
inicio = rnd(ultima_fila - longitud) + primera_fila - 1
|
inicio = rnd(ultima_fila - longitud) + primera_fila - 1
|
||||||
for j = 1, longitud do
|
for j = 1, longitud do
|
||||||
laberinto[(40 * (j + inicio)) + i] = 0x20
|
laberinto[(40 * (j + inicio)) + columna] = 0x20
|
||||||
-- print("X", i, j + inicio)
|
|
||||||
end
|
end
|
||||||
-- print(inicio, i, 1)
|
|
||||||
-- print(longitud, i, 2)
|
|
||||||
-- print(longitud + inicio, i, 3)
|
|
||||||
end
|
end
|
||||||
i = i + rnd(2) + 2
|
columna = columna + rnd(2) + 2
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function pinta_laberinto()
|
function pinta_laberinto()
|
||||||
|
-- pinta el laberinto en pantalla
|
||||||
for i = 0, 1199 do
|
for i = 0, 1199 do
|
||||||
ink(10)
|
ink(10)
|
||||||
print(chr(laberinto[i]), i % 40, flr(i / 40))
|
print(chr(laberinto[i]), i % 40, flr(i / 40))
|
||||||
-- Crea el efecto 3D pintando un caracter encima
|
-- crea el efecto 3D pintant un caracter per damunt
|
||||||
if laberinto[i] == 0x8F then
|
if laberinto[i] == 0x8F then
|
||||||
-- color(15,10)
|
-- color(15,10)
|
||||||
-- print(chr(0xCF), i % 40, flr(i / 40)-1)
|
-- print(chr(0xCF), i % 40, flr(i / 40)-1)
|
||||||
@@ -153,6 +147,7 @@ function pinta_jugador()
|
|||||||
end
|
end
|
||||||
|
|
||||||
function mou_jugador()
|
function mou_jugador()
|
||||||
|
-- mou el jugador a la nova ubicacio en funció de les tecles apretades
|
||||||
if jugador.velocitat == 0 then
|
if jugador.velocitat == 0 then
|
||||||
if btn(KEY_UP) then
|
if btn(KEY_UP) then
|
||||||
coloca_jugador(jugador.x, jugador.y - 1)
|
coloca_jugador(jugador.x, jugador.y - 1)
|
||||||
@@ -165,13 +160,12 @@ function mou_jugador()
|
|||||||
coloca_jugador(jugador.x + 1, jugador.y)
|
coloca_jugador(jugador.x + 1, jugador.y)
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
-- if jugador.velocitat > 0 then
|
|
||||||
jugador.velocitat = jugador.velocitat - 1
|
jugador.velocitat = jugador.velocitat - 1
|
||||||
-- end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function coloca_jugador(x, y)
|
function coloca_jugador(x, y)
|
||||||
|
-- coloca el jugador en el punt x, y en cas de que siga una casella válida
|
||||||
if laberinto[y * 40 + x] == 0x20 then
|
if laberinto[y * 40 + x] == 0x20 then
|
||||||
jugador.x = x
|
jugador.x = x
|
||||||
jugador.y = y
|
jugador.y = y
|
||||||
@@ -180,6 +174,7 @@ function coloca_jugador(x, y)
|
|||||||
end
|
end
|
||||||
|
|
||||||
function pinta_malos()
|
function pinta_malos()
|
||||||
|
-- pina els malos en pantalla
|
||||||
ink(4)
|
ink(4)
|
||||||
for i = 1, num_malos do
|
for i = 1, num_malos do
|
||||||
print(chr(0x07), malos[i].x, malos[i].y)
|
print(chr(0x07), malos[i].x, malos[i].y)
|
||||||
@@ -187,10 +182,78 @@ function pinta_malos()
|
|||||||
end
|
end
|
||||||
|
|
||||||
function crea_malos()
|
function crea_malos()
|
||||||
|
-- inicialitza el vector de malos
|
||||||
for i = 1, num_malos do
|
for i = 1, num_malos do
|
||||||
malos[i].x = ultima_columna
|
malos[i].x = ultima_columna
|
||||||
malos[i].y = primera_fila
|
malos[i].y = primera_fila
|
||||||
malos[i].dx = 0
|
malos[i].dx = -1
|
||||||
malos[i].dy = 0
|
malos[i].dy = 0
|
||||||
|
pensa_malo(i)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function mou_malos()
|
||||||
|
-- mou tots els malos a la nova ubicacio en funció de la seua direcció
|
||||||
|
for i = 1, num_malos do
|
||||||
|
if malos[i].velocitat == 0 then
|
||||||
|
coloca_malo(i, malos[i].x + malos[i].dx, malos[i].y + malos[i].dy)
|
||||||
|
if num_eixides_mapa(malos[i].x, malos[i].y) > 2 then
|
||||||
|
pensa_malo(i)
|
||||||
|
end
|
||||||
|
else
|
||||||
|
malos[i].velocitat = malos[i].velocitat - 1
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function coloca_malo(num, x, y)
|
||||||
|
-- coloca el malo en el punt x, y en cas de que siga una casella válida
|
||||||
|
if laberinto[y * 40 + x] == 0x20 then
|
||||||
|
malos[num].x = x
|
||||||
|
malos[num].y = y
|
||||||
|
malos[num].velocitat = 16
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function pensa_malo(num)
|
||||||
|
-- el malo calcula la direcció que ha de pendre per anar cap al jugador
|
||||||
|
if malos[num].x > jugador.x then
|
||||||
|
malos[num].dx = -1
|
||||||
|
else
|
||||||
|
if malos[num].x < jugador.x then
|
||||||
|
malos[num].dx = 1
|
||||||
|
else
|
||||||
|
malos[num].dx = 0
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
if malos[num].y > jugador.y then
|
||||||
|
malos[num].dy = -1
|
||||||
|
else
|
||||||
|
if malos[num].y < jugador.y then
|
||||||
|
malos[num].dy = 1
|
||||||
|
else
|
||||||
|
malos[num].dy = 0
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
function num_eixides_mapa(x, y)
|
||||||
|
-- torna el numero de caselles amb cami que hi ha al voltant del punt x, y
|
||||||
|
local eixides = 0
|
||||||
|
if laberinto[y * 40 + x + 1] == 0x20 then
|
||||||
|
eixides = eixides + 1
|
||||||
|
end
|
||||||
|
if laberinto[y * 40 + x - 1] == 0x20 then
|
||||||
|
eixides = eixides + 1
|
||||||
|
end
|
||||||
|
if laberinto[(y + 1) * 40 + x] == 0x20 then
|
||||||
|
eixides = eixides + 1
|
||||||
|
end
|
||||||
|
if laberinto[(y - 1) * 40 + x] == 0x20 then
|
||||||
|
eixides = eixides + 1
|
||||||
|
end
|
||||||
|
return eixides
|
||||||
|
end
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user