Karoshi MSX Community
05 de Julio de 2021, 07:32:07 pm *
Bienvenido(a), Visitante. Por favor, ingresa o regístrate.

Ingresar con nombre de usuario, contraseña y duración de la sesión
Noticias:
 
   Inicio   Ayuda Buscar Ingresar Registrarse  
Páginas: 1 [2]
  Imprimir  
Autor Tema: Tiles obstáculo  (Leído 12027 veces)
0 Usuarios y 1 Visitante están viendo este tema.
nerlaska
Karoshi Excellent Member
******
Mensajes: 1102


Programador


WWW Email
« Respuesta #15 : 17 de Septiembre de 2007, 12:38:00 pm »

Si, los de IMANOK la verdad es que algunos de ellos dices .. joder .. que guapos. Aunque corrigeme si me equivoco .. usabas NestorBasIC Imanok?
Por otro lado .. echare un vistazo al NO NAME este que nombras.
En línea

MSX4EVER2GETHER
www.nerlaska.com
Imanok
Karoshi Hero
*****
Mensajes: 626


« Respuesta #16 : 17 de Septiembre de 2007, 02:44:42 pm »

Si, los de IMANOK la verdad es que algunos de ellos dices .. joder .. que guapos. Aunque corrigeme si me equivoco .. usabas NestorBasIC Imanok?
Sí, las versiones que hay ahora en la web, usan todas Nestorbasic.

Citar
Por otro lado .. echare un vistazo al NO NAME este que nombras.
Échale un ojo también al 'Nuts'. Para mí, es el mejor de los que hizo.
En línea
msx dummie
Karoshi Lover
***
Mensajes: 162



Email
« Respuesta #17 : 27 de Octubre de 2007, 02:23:36 pm »

chicos que es lo de imanok?
En línea
msx dummie
Karoshi Lover
***
Mensajes: 162



Email
« Respuesta #18 : 27 de Octubre de 2007, 02:41:44 pm »

yo tengo una duda con respecto a este tema... también... Huh

¿Como habria que programar a traves de vpeek las condiciones para que no pueda pasar?

imagino que la secuencia sera algo asi como:

se toca el joystick, se lee mediante vppek si puede o no puede avanzar hacia ese valor y si no puede pasar no pasa...

pero ¿mediante que comandos?
En línea
jltursan
Karoshi Forum's Guru
*******
Mensajes: 1516


¿Que es lo que has aprendido hoy?


WWW Email
« Respuesta #19 : 27 de Octubre de 2007, 03:33:41 pm »

"Los de Imanok" hace referencia a sus juegos, Imanok es uno de los desarrolladores con más experiencia y en activo que tenemos por estos lares Smiley. Pasate por su página

La secuencia habitual para moverse y detectar obstáculos en el fondo es:

1) Mover el bicho a las coordenadas en curso
2) Lees la dirección del joystick.
3) Según sea esta, lees (usando VPEEK) lo que habrá bajo la posición a la que te desplazarías.
4) Si no es un obstáculo modificas las coordenadas y si lo es, las dejas como están.
5) Vuelta a 1)

La fórmula a usar en el VPEEK es muy sencilla, piensa en cuantas columnas y filas hay en pantalla. Por ejemplo, si en screen 1 la pantalla comienza en la dirección $1800 (pásalo a decimal si te lías) y cada una de las 24 filas (Y) tiene 32 posiciones (columnas o X), ¿cual sería la posición de memoria que habría bajo X=16 e Y=12?,...tu mismo Wink. Para que te quede más claro te puedes guiar de un cuaderno cuadriculado, seguro que lo pillas al vuelo.
Una vez que sepas calcular esa dirección, no creo que tengas ningún problema en deducir la relación que habrá entre esa posición y las que están inmediatamente encima, debajo, a su izquierda o a su derecha. Eso es todo lo que necesitas Smiley
« Última modificación: 27 de Octubre de 2007, 03:35:30 pm por jltursan » En línea

Doom dee doom dee doom
msx dummie
Karoshi Lover
***
Mensajes: 162



Email
« Respuesta #20 : 10 de Diciembre de 2007, 12:30:45 pm »

bueno, retomo este tema también porque estoy repasando cosas y hay algunas que sigo sin tener claras.

hablabais de pasar los datos a la RAM o a la VRAM... ¿como se hace esto?
alguien podria iniciarme?
he visto que también se habla de hacer la deteccion de obstaculos, declarando un array en Basic... pero... ¿como le digo yo a la maquina cual es la estructura de la habitación? ¿tambien con datas?
¿podriais ponerme unos ejemplos para ambas cosas?
Graaacias!
En línea
jltursan
Karoshi Forum's Guru
*******
Mensajes: 1516


¿Que es lo que has aprendido hoy?


WWW Email
« Respuesta #21 : 10 de Diciembre de 2007, 01:45:57 pm »

Citar
hablabais de pasar los datos a la RAM o a la VRAM... ¿como se hace esto?

Pero, ¿en BASIC o en ensamblador?

Si es en ensamblador, tienes una función en la BIOS que se encarga de hacerlo a toda velocidad, sólo tienes que llamarla con los parámetros apropiados:

Código:
ld hl,pantalla ; origen en RAM
ld de,$0000 ;destino en VRAM
ld bc,6144 ; longitud
call $005C

Si es en BASIC, pues muchisimo más lento; pero podrías hacer lo mismo con un bucle de VPOKES, no hay instrucción que te lo haga de golpe:

Código:
RAM=&HD800
FOR VRAM=0 TO 6143:VPOKE VRAM,PEEK(RAM+VRAM):NEXT

...o algo así, dependiendo de lo que te venga mejor o necesites en tu código.

Respecto al mapeo de habitaciones, supongamos que tu habitación tiene 8x8 posiciones y que tiene esta disposición:

Código:
XXXXXXXX
X......X
X......X
X..XX..X
X..XX..X
X......X
X......X
XXXXXXXX

Si las X representan muro y los puntos terreno despejado, puedes optar por mapearlo de muchas formas, si quieres ahorrar memoria y no te importa que todo vaya un poco más lento puedes usar 1's para las paredes y 0's para lo vacio:

Código:
DATA &HFF,&H81,&H81,&H99,&H99,&H81,&H81,&HFF

Si quieres que en BASIC vaya todo un poco más rápido a costa de sacrificar memoria, puedes asignar arbitrariamente un byte a cada posición, si utilizamos 1 para los muros y 0 para lo vacio una vez más:

Código:
DATA 1,1,1,1,1,1,1,1
DATA 1,0,0,0,0,0,0,1
DATA 1,0,0,0,0,0,0,1
DATA 1,0,0,1,1,0,0,1
DATA 1,0,0,1,1,0,0,1
DATA 1,0,0,0,0,0,0,1
DATA 1,0,0,0,0,0,0,1
DATA 1,1,1,1,1,1,1,1

Así los cálculos para saber que hay en la posición en la que te encuentres son más sencillos y rápidos (tampoco tanto; pero bueno).
En línea

Doom dee doom dee doom
msx dummie
Karoshi Lover
***
Mensajes: 162



Email
« Respuesta #22 : 10 de Diciembre de 2007, 02:57:03 pm »

Gracias Jl, por tus explicaciones, pero sigo sin enterarme...

no entiendo esto:

RAM=&HD800
FOR VRAM=0 TO 6143:VPOKE VRAM,PEEK(RAM+VRAM):NEXT

ni tampoco porque me das esa linea de datas?

te importaria explicarme un poco más?, por favor.
En línea
jltursan
Karoshi Forum's Guru
*******
Mensajes: 1516


¿Que es lo que has aprendido hoy?


WWW Email
« Respuesta #23 : 10 de Diciembre de 2007, 04:50:24 pm »

Citar
FOR VRAM=0 TO 6143:VPOKE VRAM,PEEK(RAM+VRAM):NEXT

Esa linea lo que hace es volcar 6144 bytes consecutivos almacenados en la RAM a partir de la dirección &HD800 a la posición 0 de la VRAM. Supongo que lo que te confunde es lo de RAM+VRAM; pero no hagas caso, no lo he hecho más que para aprovechar la variable del bucle. Otra posible forma de volcar desde BASIC, la RAM a la VRAM es simplemente usando los datos almacenados en lineas DATA, seguro que ya has visto este método más de una vez:

Código:
FOR I=0 TO 7:READ DATO:VPOKE &H208+I,DATO:NEXT
DATA 255,129,129,129,129,129,129,255

Por cierto, con lo anterior estoy redefiniendo la letra "A" en screen 1, o lo que es lo mismo copiando 8 bytes de la RAM (donde quiera que el BASIC los haya situado) a la VRAM.

Cualquier conjunto de datos que quieras almacenar en BASIC deberás hacerlo mediante lineas DATA, ya sean gráficos, mapas o cualquier cosa. Digamos que yo he transcrito esos minimapas que te puse a valores y he puesto las lineas DATA tal como quedarían en tu programa BASIC Smiley

Todo esto que te explico es para BASIC que supongo que es lo que pretendes usar, ¿correcto?
En línea

Doom dee doom dee doom
msx dummie
Karoshi Lover
***
Mensajes: 162



Email
« Respuesta #24 : 10 de Diciembre de 2007, 06:16:51 pm »

correctisimo! muchisimas grácias! Wink

lo cargare de la segunda forma de momento, pero te quiero preguntar, solo por curiosidad:

¿que hace ahi entonces ese PEEK?
En línea
cybernoid
Karoshi Maniac
****
Mensajes: 368



WWW
« Respuesta #25 : 10 de Diciembre de 2007, 07:03:43 pm »

correctisimo! muchisimas grácias! Wink

lo cargare de la segunda forma de momento, pero te quiero preguntar, solo por curiosidad:

¿que hace ahi entonces ese PEEK?

el PEEK lo utiliza para leer la informacion contenida en la RAM y el VPOKE para escribir la informacion en la VRAM
En línea
msx dummie
Karoshi Lover
***
Mensajes: 162



Email
« Respuesta #26 : 11 de Diciembre de 2007, 10:30:08 am »

pero...
porque hay que ponerlo al hacer el vpoke? dentro, quiero decir.
me refiero a despues de la coma, esto no lo habia visto nunca...
En línea
jltursan
Karoshi Forum's Guru
*******
Mensajes: 1516


¿Que es lo que has aprendido hoy?


WWW Email
« Respuesta #27 : 11 de Diciembre de 2007, 10:48:05 am »

Ahhh, ¿te refieres a eso?. La práctica totalidad de los lenguajes de programación permiten el uso de "expresiones" en lugar de valores, una expresión en este caso sería cualquier constante, variable o función que devuelva algún valor. Según esto y teniendo en cuenta que la sintaxis del VPOKE es VPOKE direccion,valor; pues cualquiera de las siguientes construcciones sería válida:

Código:
VPOKE &H0000,255: REM usando un valor directamente

D=255
VPOKE &H0000,D: REM usando una variable

VPOKE &H0000,PEEK(&HC000): REM usando una funcion

Esto es aplicable a cualquier instrucción de MSX-BASIC, por ejemplo puedes poner:

Código:
X=&HC000:Y=&HC001
PUT SPRITE 0,(PEEK(X),PEEK(Y)),0,15
En línea

Doom dee doom dee doom
msx dummie
Karoshi Lover
***
Mensajes: 162



Email
« Respuesta #28 : 11 de Diciembre de 2007, 11:59:04 am »

Gracias Jlturstan!
luego le pego unas vueltas, a ver si lo pillo, que estoy currando y no puedo ahora.
Un saludo!
En línea
Páginas: 1 [2]
  Imprimir  
 
Ir a:  

Impulsado por MySQL Impulsado por PHP Powered by SMF 1.1.21 | SMF © 2013, Simple Machines XHTML 1.0 válido! CSS válido!