Idear un juego vista de arriba

Ideas de juegos

Hola a todos, hace un tiempo(unas cuantas semanas) es un tile (el paisaje) y una navesita (un sprite) vista de arriba y la idea era completarla para un juego con ambientación futurística (clásico), me trabe con el tema del tile para que sea vaya moviendo a medida que avanza la nave.
Me encantaría que con este hilo en el foro (sé que no somos muchos los que lo leemos a diario) ir plasmando y armando un juego de este estilo e ir poniendo algunas líneas de código e ir aprendiendo con respecto a esto, espero que se sumen, no se el caso de los demás, pero trabajo, estudio y tengo familia, pero me encanta sentarme y ver que cosas hago con este programa, espero que se sumen y podamos montar algo lindo, un abrazo a todos y saludos.-

mira

usa el smooth scroll eso te puede ayudar

Listo

Gracias Germán por la respuesta, me voy a poner a practicar con el smooth scroll, veamos que sale con eso. Saludos.-
-------------------
Ahora es el momento

-------------------

no hay problema

no hay problema si no te sale, yo te puedo dar un ejemplo.

¡Por fin funca el mapa con setSmoothScroll!

Hola a todos, va encaminado el asunto, gracias a un ejemplo de mago del año 2007 pude entender como funciona el setSmoothScroll (haciendo las tablas de prueba). En el código siguiente tenemos una vista desde arriba con una pradera de fondo, en forma aleatoria se ubican 50 árboles y 10 lagunas (se pueden modificar los valores de las cantidades), aún no ubiqué las bases antiaéreas enemigos, pero es sólo poner el código para ello.
En el tile fondo.tmap están para hacer fondos de tipo pradera ó tipo desértico (en el ejemplo solamente está el de pradera).
Más adelante voy a realizar el tema de los sprites, es más fácil ya que tengo hecho algo, lo que me costaba era mover el mapa.

Debe haber un problema porque no me sale todo el código, le pongo la etiqueta "code" ( y ) y parte del código no sale y sacándole las etiquetas también hace lo mismo, el comentario sale cortado, así que lo subí a un almacenamiento de archivos en internet.

El código está aquí: main.sj

Nota: Para la descarga, deben introducir un código de seguridad que hay a la derecha y luego deben esperar uno 45 segundo hasta que aparezca en botón para descargar.

Cuando lo corran, se van a dar cuenta que va hacia abajo y que es manual el movimiento (hay que apretar las flechas de arriba y abajo), tengo que cambiar que se mueva solo el mapa pero que vaya hacia abajo, logrado esto, pongo las navecitas y arreglar algunos errores cuando aparecen los árboles y lagunas ya que según el número aleatorio, se "pisan" unos a otros.

El nombre del proyecto que se me ocurrió es Tierra Nova , espero que les guste y críticas constructivas ;-)

-------------------
Ahora es el momento

-------------------

tengo un problema

mira quiero arreglar todos los errores de tu proyecto pero tengo un problema descargando el main.js me podrias mandar por correo el codigo mi correo es juangerman-13@hotmail.com

lo logre

E logrado descargar el main y ya arregle todos los problemas que tenias hiciste un buen trabajo, no entendi bien como es que funciona el array poke. para evitar que una imagen se ponga sobre otra pon if por ejemplo:
if(tiles[j][l] == 176 && tiles[j+1][l] == 176 && tiles[j][l+1] == 176 && tiles[j+1][l+1] == 176)
aqui checo si en el mapa solo habia pasto en esos 4 espacios para un lago serian 6

Yo hice un programa que crea islas y si lo combino con el tuyo tendria un programa que hace mapas, me pondre a trabajar en eso y te lo ensenare para que te des una idea de como evitar sobre poner imagenes,tengo dos verciones de mi creador de islas uno nadamas hace islas y el otro crea islas detalladas*.

Queria saver si podemos hacer un equipo y hacer un juego donde tengamos varias islas y que naveges de isla en isla como un RPG y tenga una historia y enemigos una ves terminado esto yo convertire el codigo para que se pueda usar en java con mejores graficos** y haci tengamos un juego bien padre.

*usando java. no simplej.
**la diferencia de graficos entre simplej y java es muy alta por ejemplo de ancho en simplej tu tienes 256 como maximo en java es 1000.

Estupenda la idea

Muy buena la idea, otra idea y que conozco más en profundidad es python con pygame, es muy fácil y de resultados rápidos.
Lo que estaría bueno es terminar este proyecto y para ir puliendo nuestras "manías" al programar y entendernos y luego vemos ¿qué te parece?
-------------------
Ahora es el momento

-------------------

bien

ok que nesesita el proyecto para estar terminado.

Para seguir avanzando

Hola, ahora mismo pongo el código para que no se pisen las imágenes, una lista de lo que hay que hacer sería:

  1. que el mapa se mueva de arriba hacia abajo,
  2. hacer los sprite de las diferentes naves y antiaéreas,
  3. dotar de IA fáciles a los enemigos
  4. y al final de un nivel, un enemigo con mejor IA
  5. poner como en Rogue, las iniciales de los mejores

y falta un poco de música, supongo que faltan cosas pero lo grosso sería eso.
-------------------
Ahora es el momento

-------------------

aqui esta

aqui esta el codigo libre de errores

final BOTON_ARRIBA = 1;
final BOTON_ABAJO = 2;
//final BOTON_IZQUIERDA = 4;
//final BOTON_DERECHA = 8;
final ANCHO = 128;
final ALTO = 96;
final MIN_X = 0;
final MAX_X = ANCHO * 8 - 257;
final MIN_Y = 0;
final MAX_Y = ALTO * 8 - 193;
var tiles = new array[ALTO][ANCHO];
var muestra1ravez = true;
/* Leer definiciones de tiles creadas con el tiles editor */
var tilesData = readTilesFile("fondos.tmap");
/* Poner colores en el mapa de colores */
for (var i = 0; i < 16; i++)
setTileColor(i, tilesData.colors[i].red,
tilesData.colors[i].green,
tilesData.colors[i].blue);
/* Grabar nuevas definiciones de tiles */
for (var i = 0; i < 256; i++)
setTilePixels(i, tilesData.pixels[i]);
/* crea el mapa con los tiles que dibuje */
for (var y = 0; y < ALTO; y++)
for (var x = 0; x < ANCHO; x++)
tiles[y][x] = 176; // todo el fondo tendra este tile (fondo de pradera)
/* pone los elementos de la naturaleza en el mapa */
// pone arbustos
for(var k = 0; k <= 50; k++)
{
var j = random(ALTO -1);
var l = random(31);
if(tiles[j][l] == 176 && tiles[j+1][l] == 176 && tiles[j][l+1] == 176 && tiles[j+1][l+1] == 176){
tiles[j][l] = 188;
tiles[j+1][l] = 204;
tiles[j][l+1] = 189;
tiles[j+1][l+1] = 205;
}}
// pone lagunas
for(var k = 0; k <= 10; k++)
{
var j = random(ALTO - 2);
var l = random(30);
if(tiles[j][l] == 176 && tiles[j][l+1] == 176 && tiles[j][l+2] == 176 &&
tiles[j+1][l] == 176 && tiles[j+1][l+1] == 176 && tiles[j+1][l+2] == 176&&
tiles[j+2][l] == 176 && tiles[j+2][l+1] == 176&& tiles[j+2][l+2] == 176){
tiles[j][l] = 181;
tiles[j][l+1] = 184;
tiles[j][l+2] = 182;
tiles[j+1][l] = 197;
tiles[j+1][l+1] = 212;
tiles[j+1][l+2] = 198;
tiles[j+2][l] = 213;
tiles[j+2][l+1] = 183;
tiles[j+2][l+2] = 214;
}}
var x = 0;
var y = 0;
muestraMundo() {
//muestra1ravez = false;
var xt = x / 8;
var xp = x % 8;
var yt = y / 8;
var yp = y % 8;
for (var r = 0; r < 25; r++)
arrayPoke(r * 64, tiles[yt + r], xt, 33);
setSmoothScroll(xp, yp);
}
muestraMundo();
vbi() {
var b = readCtrlOne();
if (b == BOTON_ARRIBA && y > MIN_Y) y--;
if (b == BOTON_ABAJO && y < MAX_Y) y++;
//if (b == BOTON_IZQUIERDA && x > MIN_X) x--;
//if (b == BOTON_DERECHA && x < MAX_X) x++;
if(b != 0) muestraMundo();
//if(muestra1ravez) muestraMundo();
}

Ahora lo reviso

Ahora miro el código y hago los sprites y lo subo, igualmente, si querés, modificalo y subirlo a internet (como el de badongo o alguno parecido).
-------------------
Ahora es el momento

-------------------

yo me pondre con

los sprites y el movimiento de la pantalla

ya no te molestes mas con los sprites yo ya habia echo un juego de naves y tengo todo una colleccion de naves en sprites.

bnvn

alguna persona de trujillo .........mi msn es cristianjesus0812@msn.com ayudenme

Movimiento de la pantalla listo

Germán, acá te paso el movimiento de la pantalla, te agradecería que me envíes los sprites para ponerlos porque ya tengo unas líneas de soft para las naves.
Acá está el movimiento de pantalla "automático":

Sigo con el mismo problema, lo "cuelgo" en badongo:

main.sj

mi correo electrónico mío es: edariel.00@gmail.com

-------------------
Ahora es el momento

-------------------

Los sprites

Hola, ¿podés pasarme los sprites? entonces ya lo pongo en el programa. Es corto el mapa pero se puede ralentizar un poco si queremos (con un pause supongo) y para empezar está bien, supongo. Después le damos los detalles finos.
-------------------
Ahora es el momento

-------------------

listo

ya te los envie en tu correo y ya tengo el movimiento de la nave los sprites tienen ya los dibujos de los disparos, estaba pensando sacar el movimento del mapa del vbi y ponerlo en un while de esa manera sera mas rapido el juego
solo falta
1. dotar de IA fáciles a los enemigos
2. y al final de un nivel, un enemigo con mejor IA
3. poner como en Rogue, las iniciales de los mejores

vbi()

Lo del vbi es para que el IAVC maneje el dibujado de la pantalla y no haya parpadeos, se podría acelerar ya que el setSmoothScroll puede manejar hasta 8 píxeles (más de eso hay que usar el setScreenOffset), pero no creo que sea necesario, el tema que más rápido se termina el mapa igualmente de rápido, se puede probar. Si querés pasame el main.sj nuevo con los sprites metidos y ponemos algunas naves enemigas y empezamos a probar un IA básico.-
-------------------
Ahora es el momento

-------------------

Ayuda con sprites

Hola, necesitaría ayuda con los sprites, puse en el mapa el sprite de la nave y funciona muy bien, pero ahora quiero que dispare (utilizando la barra de espacio) pero no veo el disparo(no sé si va muy rápido), en este enlace está el mapa de sprite:

naves.smap

el mapa de fondo, el tile (el mismo que el anterior) es:

fondos.tmap

y el código del main nuevo es el siguiente:

main.sj

¿alguno tiene idea de como podría funcionar?
Miré el ejemplo de mago llamado demo, tiene un scroll para el fondo y una pelotas que van rebotando por toda la pantalla, y no veo nada del otro mundo más que el putSpriteAt para poner el sprite, pero creo que se pueden ver porque son muchas pelotas y tal vez por eso se ven, es solo una idea de porqué en el mío no se vé. Saludos.

-------------------
Ahora es el momento

-------------------

la siguiente ves preguntame

recuerdas los sprites eran de otro juego y si tiene disparos mi otro juego disparaba muchas balas.

las mejoras que les hice fueron:
*mejoramiento de controles para poder precionar mas de una tecla a la ves

**al mejorar los controles puede moverse en diagonal y disparar mientras se mueve

*dispara hasta 6 balas a la ves suficiente como para cubrir la pantalla de arriba a abajo
*duplicar la velocidad de la nave
*duplicar el tiempo de el mapa sin agrandar la variable
*hacer que se dentenga un poco antes el mapa para que no se vea una linea azul

problemas
*los sprites fueron disenados para que los enemigos ataquen desde abajo

solucion
*usar el sprites editor para voltear los sprites y cambiar el numero de la imagen de la nave

aqui esta el codigo


/* botones Nave 1 */
final BOTON_ARRIBA = 1;
final BOTON_ABAJO = 2;
final BOTON_IZQUIERDA = 4;
final BOTON_DERECHA = 8;
final BOTON_BARRA = 64; // disparo
final BUTTONS = 0x8c4;
/* limites mapa */
final ANCHO = 128;
final ALTO = 96;
final MIN_X = 0;
final MAX_X = ANCHO * 8 - 257;
final MIN_Y = 0;
final MAX_Y = ALTO * 8 - 193;
/*variables de las balas*/
var tiempo = 1;
var BALA =[
{x:-10,y: -16,dano:1},
{x:-10,y: -16,dano:1},
{x:-10,y: -16,dano:1},
{x:-10,y: -16,dano:1},
{x:-10,y: -16,dano:1},
{x:-10,y: -16,dano:1},
{x:-10,y: -16,dano:10}];
/* limites pantalla (para las naves) */
final ANCHO_PANTALLA = 256 - 16;
final ALTO_PANTALLA = 192 - 16;
var tiles = new array[ALTO][ANCHO]; // se guarda el mapa
var x = 0; // utilizado para el movimiento del mapa
var y = ALTO * 8 - 193; // utilizado para el movimiento del mapa
var x_n1 = 50; // direccion x de la nave 1
var y_n1 = 110; // direccion y de la nave 1
/* T I L E S */
/* Leer definiciones de tiles creadas con el tiles editor */
var tilesData = readTilesFile("fondos.tmap");
/* Poner colores en el mapa de colores */
for (var i = 0; i < 16; i++)
setTileColor(i, tilesData.colors[i].red,
tilesData.colors[i].green,
tilesData.colors[i].blue);
/* Grabar nuevas definiciones de tiles */
for (var i = 0; i < 256; i++)
setTilePixels(i, tilesData.pixels[i]);
/* crea el mapa con los tiles que dibuje */
for (var y = 0; y < ALTO; y++)
for (var x = 0; x < ANCHO; x++)
tiles[y][x] = 176; // todo el fondo tendra este tile (fondo de pradera)
/* S P R I T E S */
/* Leer definiciones de sprites creadas con el sprites editor */
var spritesData = readSpritesFile("naves.smap");
/* Poner colores en el mapa de colores */
for (var i = 0; i < 15; i++)
setSpriteColor(i, spritesData.colors[i].red,
spritesData.colors[i].green,
spritesData.colors[i].blue);
/* Grabar nuevas definiciones de sprites de 16 por 16 */
for (var i = 0; i < 128; i++)
setLargeSpritePixels(i, spritesData.largePixels[i]);
/* Grabar nuevas definiciones de sprites de 8 por 8 */
for (var i = 0; i < 128; i++)
setSmallSpritePixels(i, spritesData.smallPixels[i]);
/* Asigna los dibujos a los sprites */
setLargeSpriteImage(0, 48); // Nave 1
setSmallSpriteImage(1, 0);
setSmallSpriteImage(2, 0);
setSmallSpriteImage(3, 0);
setSmallSpriteImage(4, 0);
setSmallSpriteImage(5, 0);
setSmallSpriteImage(6, 0);
setSmallSpriteImage(7, 80); // vacio
/* M A P A */
/* pone los elementos de la naturaleza en el mapa */
// pone arbustos
for(var k = 0; k <= 50; k++)
{
var j = random(ALTO - 1);
var l = random(31);
if(tiles[j][l] == 176 && tiles[j+1][l] == 176 && tiles[j][l+1] == 176 && tiles[j+1][l+1] == 176)
{
tiles[j][l] = 188;
tiles[j+1][l] = 204;
tiles[j][l+1] = 189;
tiles[j+1][l+1] = 205;
}
}
// pone lagunas
for(var k = 0; k <= 10; k++)
{
var j = random(ALTO - 2);
var l = random(30);
if(tiles[j][l] == 176 && tiles[j][l+1] == 176 && tiles[j][l+2] == 176 &&
tiles[j+1][l] == 176 && tiles[j+1][l+1] == 176 && tiles[j+1][l+2] == 176 &&
tiles[j+2][l] == 176 && tiles[j+2][l+1] == 176 && tiles[j+2][l+2] == 176)
{
tiles[j][l] = 181;
tiles[j][l+1] = 184;
tiles[j][l+2] = 182;
tiles[j+1][l] = 197;
tiles[j+1][l+1] = 212;
tiles[j+1][l+2] = 198;
tiles[j+2][l] = 213;
tiles[j+2][l+1] = 183;
tiles[j+2][l+2] = 214;
}
}
/* M U E S T R A M A P A */
muestraMundo()
{
if(y >= 8) y-= .5;
var xt = x / 8;
var xp = x % 8;
var yt = y / 8;
var yp = y % 8;
for (var r = 0; r < 25; r++)
arrayPoke(r * 64, tiles[yt + r], xt, 33);
setSmoothScroll(xp, yp); //print(y);
}
mueveNave()
{
putSpriteAt(0, x_n1, y_n1);
}
carga() {
if (tiempo < 1.1)
tiempo = tiempo + .30;
}
dibujabalas(){
putSpriteAt(1 , BALA[0].x ,BALA[0].y);
putSpriteAt(2 , BALA[1].x ,BALA[1].y);
putSpriteAt(3 , BALA[2].x ,BALA[2].y);
putSpriteAt(4 , BALA[3].x ,BALA[3].y);
putSpriteAt(5 , BALA[4].x ,BALA[4].y);
putSpriteAt(6 , BALA[5].x ,BALA[5].y);
putSpriteAt(7 , BALA[6].x ,BALA[6].y);
}
muevebalas() {
for(var i = 0; i < 6;i++)
if (-8 < BALA[i].y)
BALA[i].y = BALA[i].y - 8;
}
dispara(){
if(0 > BALA[0].y && tiempo > 1) {
BALA[0].x = x_n1 + 3;
BALA[0].y = y_n1;
tiempo = 0;
}
for(var i = 0; i < 5;i++)
if(0 < BALA[i].y && 0 > BALA[i+1].y && tiempo > 1) {
BALA[i+1].x = x_n1 + 3;
BALA[i+1].y = y_n1;
tiempo = 0;
}}
mueveNave(); // para que aparezca la nave
vbi()
{
var b = peek(BUTTONS);
if ((b & BOTON_ARRIBA) != 0 && y_n1 > MIN_Y) y_n1 -= 2;
if ((b & BOTON_ABAJO) != 0 && y_n1 < ALTO_PANTALLA) y_n1 += 2;
if ((b & BOTON_IZQUIERDA) != 0 && x_n1 > MIN_X) x_n1 -= 2;
if ((b & BOTON_DERECHA) != 0 && x_n1 < ANCHO_PANTALLA) x_n1 += 2;
if ((b & BOTON_BARRA) != 0 && tiempo >= 1) dispara();
if (b != 0) mueveNave();
muestraMundo();
carga();
muevebalas();
dibujabalas();
}

Bárbaro

Estuve haciendo las tablas de prueba, y ahí me dí cuenta de cómo se "mueven" los disparos.
Una consulta: utilizando:

final BUTTONS = 0x8c4;
var b = peek(BUTTONS);

¿es más rápido de esta manera que utilizar readCtrlOne() ó leyendo directamente de la memoria del IAVC se pueden tomar varias teclas y es más rápido?

Probando el código noté que cuando se desplaza en diagonal arriba-derecha se podía disparar pero cuando lo hago en las otras diagonales no lo hace (arriba-izq, abajo-der y abajo-izq), no encuentro error en el programa que diferencie los movimientos ¿tenés el mismo problema?
Para seguir practicando:

  • los movimientos de la nave lo voy a llevar a la función mueveNave() con el fin de que el vbi() esté más limpio.
  • poner un enemigo, y dotarla de una IA básica

Gracias por la ayuda, estaría bueno para después, elaborar unos buenos mapas de fondo. Saludos.-
-------------------
Ahora es el momento

-------------------

el mismo problema

es un problema muy difil de resolver porque hasta donde se yo los teclados pueden detectar hasta 3 teclas

tengo IA basica para el enimigo pero me esta dando problemas al tener mas de 50 enemgios

requerimientos del enemigo
*tener la capasidad de moverse como en sic sac.
*tener la capasidad de disparar cada cierto tiempo pero sin sobre cargar los sprites ya que creo que tenemos un limite de 20 sprites
*tener vida
*poder morir con balas
*auto destruirse al llegar al final para liberar sprites
*cada enemigo devera tener sus caracteristicas

problemas
*nunca se complicara el juego ya que 7 de los 20 sprites son de la nave

solucion
*combertir los sprites de los disparos enemigos a tiles no se notara mucha diferencia ya que las valas ban a 8 de velocidad

Cambiá por Ctrl

Encontré (supongo) que es simplej, cambié la barra espaciadora por el botón de Control y funcionó correctamente. Ahora voy a poner en un tema nuevo este problemita.
El boton de control tiene el valor de 32, cambialo y va a andar todas las diagonales.
-------------------
Ahora es el momento

-------------------

ok

horita reviso eso. estoy creando un mapa de fondo que se vea un poco mas real y que no siempre veas la mismas imagenes por horita solo tengo lagos despues hare bosques y luego tal ves caminos y ciudades de tal manera paresca que estas volando sobre muchos lugares.si no es muy complicado hare varios climas por ejemplo un desierto.

Bárbaro eso para el mapa

Ahí le mandé un correo electrónico a mago (mago@simplej.org) del problema que encontramos, para que en un futuro libere una versión más pulida.
Bárbaro esos cambios en el mapa, ahora estoy el tema de los enemigos, veamos como sale y subo los enlaces para que los veas.
Fijate que el tile que hice, está el tema de los lagos en el desierto y hay unas "tierras" con cambios para el desierto, para que lo tengas en cuenta.

-------------------
Ahora es el momento

-------------------

ok

nadamas lo de los lagos avarca hasta 34 tiles prefiero cambiar el color de las cosas en lugar de crear un nuevo tile horita estoy adaptando el programa a el juego para que puedas ver los lagos te enviare el codigo y los tiles por correo devido a que es mucho! como para ponerlo aqui

listo

yo ya tengo un fondo bien padre donde hay lagos, arboles, carreteras y tu que llevas?