Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Menu

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menu

Mensajes - fre3men

#1
Proyectos / Re:Se busca gente para Proyecto de Juego
04 de Marzo de 2013, 10:03:21 AM
Además, si ponéis que "sois una empresa" al menos podrías tener un dominio y la web ya acabada (o con contenido suficiente para demostrar que sois serios también).

Luego, te recomiendo que no vayas indicando que serás el jefe cuando ni siquiera va haber retribución económica, la gente no quiere jefes, y menos si encima debería trabajar gratis (estás dando por supuesto que va haber ventas, y suficientes como para cobrar) ;) Pues eso, si es una empresa, busca trabajadores y paga a tus empleados. Si buscas un grupo afín para llevar a cabo algo que queréis, busca amigos o gente con los mismos intereses (pero de tú a tú). Es más, te recomiendo lo último, que lo "hagáis por amor al arte", sobre todo aprenderéis, conoceréis más gente y algo muy importante haréis CV.

Saludos.
#2
Hola, te contesto por aquí.

Añade/modifica el código que te puse con esto:

// Método para "procesar" la flor (la dibujaremos y podremos darle movimiento en el futuro...)
void run() {
this.movement(); // Añadimos movimiento al objeto
this.render(); // Dibujamos la flor
}

// Método para mover el objeto
void movement() {
float tempX = this.posX - sin(frameCount / 0.5);
float tempY = this.posY - sin(frameCount / 0.7);
this.posX = int(tempX);
this.posY = int(tempY);
  }


Como no soy físico ni matemático, esas fórmulas son algo pachangeras, pero da "algo" de sensación de viento. A mi esto (por ejemplo): http://www.todoexpertos.com/categorias/ciencias-e-ingenieria/fisica/respuestas/350048/movimiento-ondulatorio me suena a chino! Pero como verás, el código que creé ya estaba preparado para insertar el movimiento de forma muy fácil, aunque para que estuviera mejor habría que hacer más cosas, como eliminar el objeto al llegar a un extremo y hacer que aparezcan nuevos, o volver a una posición inicial el objeto o que salga desde la otra esquina... En si se puede aplicar muchas cosas (según lo que busques). El código de arriba mueve las flores como si estuviesen arrancadas por el viento (para movimiento ondulatorio fijadas en tierra, pues lo dicho, con mis conocimientos matemáticos no te puedo ayudar), pero ya tienes el ejemplo de como añadir el movimiento ;).

El código es prácticamente el mismo:
/* @pjs preload="http://www.fondosypantallas.com/wp-content/uploads/2010/07/premium-wallpaper-11.jpg"; */

// Variables globales
int cantidadFlores = 10;
ArrayList flores = new ArrayList();
PImage fondoPantalla;

// Función de inicialización
void setup() {

size(500,500);
smooth();

// Instanciamos una cantidad de flores
for (int i = 0; i < cantidadFlores; i++) {
flores.add(new Flor()); // Si no pasamos el parámetro X e Y, será aleatorio
}

fondoPantalla = loadImage("http://www.fondosypantallas.com/wp-content/uploads/2010/07/premium-wallpaper-11.jpg");
 
}

// Función principal
void draw() {

background(255); // Si la imagen que cargamos ocupa todo el lienzo, esto no será necesario (pero no molesta)
image(fondoPantalla, 0, 0);

// Recorremos todas las flores que pueda contener nuestro array de flores
for (int f = 0; f < flores.size(); f++) {   
Flor flor = (Flor) flores.get(f);
flor.run();
}
}

// Clase Flor
class Flor {
float r = 50;
float theta = 50;
float w = 20;
float h = 20;

int posX, posY;

// Constructor 1
Flor() {
float tempX, tempY;

tempX = random(0, width);
int x = int(tempX);
tempY = random(0, height);
int y = int(tempY);

this.posX = x;
this.posY = y;
}

// Constructor 2
Flor(int x, int y) {
this.posX = x;
this.posY = y;
}

// Método para "procesar" la flor (la dibujaremos y podremos darle movimiento en el futuro...)
void run() {
this.movement(); // Añadimos movimiento al objeto
this.render(); // Dibujamos la flor
}

// Método para mover el objeto
void movement() {
float tempX = this.posX - sin(frameCount / 0.5);
float tempY = this.posY - sin(frameCount / 0.7);
this.posX = int(tempX);
this.posY = int(tempY);
  }
 
 
// Método para dibujar nuestra flor
void render() {

pushMatrix();
translate(this.posX, this.posY);

float x = r * cos(theta);
float y = r * sin(theta);

noStroke();
fill(250, 250, 8);
ellipse(0, 0, 70, 70);

stroke(60, 120, 54);
noFill(); // Importante para que la forma del tallo no tape con un color de relleno al cerrarse el dibujo
pushMatrix();
translate(-width/2, -height/2); // Para no liarnos ahora mirando las coordenadas ya establecidas
bezier(250, 310, 240, 260, 250, 500, 400, 470); // Arghhhh
popMatrix();

noStroke();
fill(20, 130, 5);
arc (50, 150, 10, 80, 20, 60);

noFill();
stroke(0);
ellipse(0, 0, r*1.5, r*1.5);

int totalBoxes = 16;
float arclength = 0;

for (int i = 0; i < totalBoxes; i++ ) {

arclength += w/2;
float theta = arclength / r;

pushMatrix();
translate(r*cos(theta) , r*sin(theta));
rotate(theta); 
fill(255);
rectMode(CENTER);
rect(0, 0, w, h);
popMatrix();
   
arclength += w/2;
}

popMatrix();
}
}
#3
CitarHola. Estoy desesperada con Processing.  Tengo un objeto que he modificado con un ejemplo de  Processing y necesito multiplicarlo con "clases" y  moverlo tipo viento. También que lleve una foto de fondo. ¿Cómo lo hago? AYUDA!!!

No pides nada! ¿Cómo lo hago? o querías decir... ¿me lo hacéis?

En este código, tienes la clase Flor para instanciar tantos objetos como quieras, ya te he puesto un sistema para que la posición sea aleatoria o donde tu digas (mediante sobrecarga de funciones, tienes dos funciones como constructor). Lo que no está es el movimiento, a parte que no he entendido si quieres que estén en un sitio fijo y se mueva la flor como si le golpeara el viento, o que aparezca desde un lado y se muevan a otro como si el viento las hubiera arrancado y las moviera por el aire. En tal caso, deberás buscar a un físico y/o matemático.
/* @pjs preload="http://www.fondosypantallas.com/wp-content/uploads/2010/07/premium-wallpaper-11.jpg"; */

// Variables globales
int cantidadFlores = 10;
ArrayList flores = new ArrayList();
PImage fondoPantalla;

// Función de inicialización
void setup() {

size(500,500);
smooth();

// Instanciamos una cantidad de flores
for (int i = 0; i < cantidadFlores; i++) {
flores.add(new Flor()); // Si no pasamos el parámetro X e Y, será aleatorio
}

fondoPantalla = loadImage("http://www.fondosypantallas.com/wp-content/uploads/2010/07/premium-wallpaper-11.jpg");
 
}

// Función principal
void draw() {

background(255); // Si la imagen que cargamos ocupa todo el lienzo, esto no será necesario (pero no molesta)
image(fondoPantalla, 0, 0);

// Recorremos todas las flores que pueda contener nuestro array de flores
for (int f = 0; f < flores.size(); f++) {    
Flor flor = (Flor) flores.get(f);
flor.run();
}
}

// Clase Flor
class Flor {
float r = 50;
float theta = 50;
float w = 20;
float h = 20;

int posX, posY;

// Constructor 1
Flor() {
float tempX, tempY;

tempX = random(0, width);
int x = int(tempX);
tempY = random(0, height);
int y = int(tempY);

this.posX = x;
this.posY = y;
}

// Constructor 2
Flor(int x, int y) {
this.posX = x;
this.posY = y;
}

// Método para "procesar" la flor (la dibujaremos y podremos darle movimiento en el futuro...)
void run() {
this.render(); // Dibujamos la flor
}

// Método para dibujar nuestra flor
void render() {

pushMatrix();
translate(this.posX, this.posY);

float x = r * cos(theta);
float y = r * sin(theta);

noStroke();
fill(250, 250, 8);
ellipse(0, 0, 70, 70);

stroke(60, 120, 54);
noFill(); // Importante para que la forma del tallo no tape con un color de relleno al cerrarse el dibujo
pushMatrix();
translate(-width/2, -height/2); // Para no liarnos ahora mirando las coordenadas ya establecidas
bezier(250, 310, 240, 260, 250, 500, 400, 470); // Arghhhh
popMatrix();

noStroke();
fill(20, 130, 5);
arc (50, 150, 10, 80, 20, 60);

noFill();
stroke(0);
ellipse(0, 0, r*1.5, r*1.5);

int totalBoxes = 16;
float arclength = 0;

for (int i = 0; i < totalBoxes; i++ ) {

arclength += w/2;
float theta = arclength / r;

pushMatrix();
translate(r*cos(theta) , r*sin(theta));
rotate(theta);  
fill(255);
rectMode(CENTER);
rect(0, 0, w, h);
popMatrix();
 
arclength += w/2;
}

popMatrix();
}
}

Puedes copiar el código y pegarlo en http://sketch.processing.org para ver el resultado (tal como está, aparecen 10 flores de forma aleatoria).

Se ha tenido que tocar el código de dibujo, pues utilizabas el centro y a partir de ahí valores fijados, así como rellenos que tapaban los demás dibujos (y partes de otros como el tallo que al cerrarse lo rellenabas de blanco).

La clase la he dejado preparada para que puedas manipularla mejor añadiendo nuevos métodos. Verás que tienes una función (método) que se llama run, ahí se puede implementar el movimiento.

He usado arraylist para poder dimensionar la cantidad de flores que habrá por pantalla de forma fácil.

Si pones una imagen grande de fondo de pantalla, puedes ajustarla cambiando los valores 0  image(fondoPantalla, 0, 0); si pones valores negativos, desplazarás la imagen cogiendo un trozo (el tamaño del lienzo). Dejándolo a cero, la imagen se carga desde la esquina superior izquierda.

Sea para lo que sea, (espero que no sea con fin lucrativo, porque entonces llamame tonto por trabajar gratis ;D), deberías aprender que hace el código, no tendría que haber puesto el código (aunque falte el movimiento), pero bueno, ahí lo tienes, AUNQUE NO TENGA MUCHO QUE VER CON EL TITULAR DEL TEMA.
#4
Hola,

Me he atrevido a realizar mi primer "tutorial" de programación!!! enfocado al uso de Processing.js* (http://www.processingjs.org).

* Puede ser Processing a secas y crear aplicaciones para Windows/Linux/Mac y applets de java. Aunque lo chulo es poder hacer aplicaciones para CANVAS!

Este tutorial excede por 1000 los caracteres permitidos al escribir un tema aquí, así como que lo tengo "formateado" con código BBC de mi web con colores que quedaría horroroso aquí. Por ello, y espero que no moleste os pongo sólo el enlace: http://www.heroquest.es/index.php?topic=7375

Además he creado un juego (proyecto en desarrollo pero totalmente jugable), es como un super comecocos del HeroQuest, pero más bestia, y todo son objetos. Los fantasmas son monstruos con su rango de búsqueda, velocidad, vida, imagen... (Aunque la IA la tengo que mejorar bastante). Las paredes también son objetos y puedo diseñar un sin fin de mapas.... El tema del juego es este (ahora lo tengo sólo como applet de java, se requiere la máquina virtual de java): http://www.heroquest.es/index.php?topic=7366

Espero que os guste :)

Un saludo.
#5
... continuación (por problemas con el límite de capacidad de caracteres por mensaje)

Tutorial de como diseñar una Prueba de Aventura
En este tutorial se muestra como se diseñan las Pruebas para asignar a las Aventuras (no obstante, se pueden hacer aventuras sin necesidad de asignar pruebas). Las Pruebas pueden asignarse a múltiples aventuras y varias iguales a una misma aventura.


TABLA DE IDIOMAS (_mmorpg_pruebas_idiomas.sql)
Tantos registros como idiomas haya dados de alta. Mínimo 1 registro para el idioma en español (idioma por defecto de la aplicación).

Identificador de la Prueba (idPrueba)
Valor que relaciona el texto de este registro al registro único de la Prueba en su tabla correspondiente.

Idioma del texto de la Prueba (idIdioma)
Para indicar que tipo de idioma es el registro, ya que la aplicación soporta multi-idioma. Por defecto "1" (español).

Nombre de la Prueba (nombre)
Tal como indica, es el nombre propio de la prueba.

Texto introductorio (descripcion)
Texto que introduce a que tipo de prueba se enfrenta el Héroe. Es un texto de ambientación.

Texto si se pasa con éxito (textoExito)
Texto que aparecerá si la prueba se ha pasado con éxito.

Texto si se fracasa la prueba (textoFracaso)
Este texto aparecerá si la prueba es un fallo. Se puede prescindir del mismo si la prueba está configurada para éxito, por ser una situación de ambientación...


TABLA DE PRUEBAS (_mmorpg_pruebas.sql)
Un sólo registro por prueba. Aquí se da de alta los datos de la prueba en sí.

Identificador de la Prueba (idPrueba)
Valor único, clave y autoincremental que dará la aplicación de forma automática al dar de alta una Prueba nueva para aventuras.

Valor aleatorio de Imagen (randImg)
Valor automático que otorga la aplicación al subir una imagen. Es un sistema propio para evitar problemas con las cachés de los navegadores.

Tipo de extensión de imagen (tipoImagen)
Identificador de extensión de archivo, valor que otorga la misma aplicación a extensiones permitidas de archivos de imagen. La aplicación sólo permite extensiones JPG, PNG y GIF, siendo el tamaño máximo 60x60 píxeles y el peso de 10KBytes (requisitos configurables por variables de sistema).

Tipo de la Prueba (idTipoPrueba)
Nos indicará que prueba deberá realizar el Héroe. Hay muchos nuevos tipos de prueba en desarrallo.
Pruebas actualmente disponibles. El valor numérico es el identificador del Tipo de Prueba.:

  • 1 -> Éxito automático (ignorará el valor auxiliar)
  • 2 -> Tirada de Fuerza: El valor auxiliar es la dificultad de la tirada (de 1 a 7)
  • 3 -> Tirada de Inteligencia: El valor auxiliar es la dificultad de la tirada (de 1 a 7)
  • 4 -> Tirada de Velocidad: El valor auxiliar es la dificultad de la tirada (de 1 a 7)
  • 5 -> Tirada de Resistencia: El valor auxiliar es la dificultad de la tirada (de 1 a 7)
  • 6 -> Tirada de Agilidad: El valor auxiliar es la dificultad de la tirada (de 1 a 7)
  • 7 -> Tirada de Pericia: El valor auxiliar es la dificultad de la tirada (de 1 a 7)
  • 8 -> Tirada de Iniciativa: El valor auxiliar es la dificultad de la tirada (de 1 a 7)
  • 9 -> Tirada de Azar: El valor auxiliar es la dificultad de la tirada (de 1 a 7)
  • 10 -> Combate: El valor auxiliar es el ID de la Criatura
  • 11 -> Combate Grupo Azar: El valor auxiliar es el IDGrupo de la Criatura (dados de alta, muertos vivientes...)
  • 12 -> Tener un Objeto: El valor auxiliar es el ID objeto que debe tener el Héroe equipado o en la mochila. Si lo tiene es un éxito, sino es un fallo.
  • 13 -> Entregar Objeto: El valor auxiliar es el ID del objeto que será eliminado del equipo o mochila del personaje que hace la aventura. Si no tiene el objeto es fallo. Nota: El objeto se elimina independientemente del resultado de la Aventura.
  • 14 -> Entregar Oro: El valor auxiliar es la cantidad que se descontará al jugador. Si no tiene suficiente no se descuenta y es fallo.
  • 15 -> Haber realizado una Aventura: EL valor auxiliar es el ID de la Aventura. Si no se ha realizado será fallo.
  • 16 -> Haber conversado con PNJ: El valor auxiliar es el ID de la Conversación/Rumor. Si no se ha realizado será fallo.
  • 17 -> Tener una alineación concreta: El valor auxiliar indica la alineación (Buena, Maligna, Neutral, Buena y Neutral, Maligna y Neutral
  • 18 -> Sexualidad del personaje concreta: El valor auxiliar indica que sexualidad (Hombre/macho, Mujer/hembra, asexuado, hermafrodita)
  • 19 -> Ser un Personaje concreto: El valor auxiliar indica el ID del Personaje. Si es otro personaje el que hace la aventura, la prueba será un fallo.
  • 20 -> Ser de un Grupo de personaje concreto: El valor auxiliar indica el ID del Grupo de Personaje (Mágico, No mágico, Híbrido)
  • 21 -> Ser de una raza concreta: El valor auxiliar indica la ID de la Raza del personaje. (Razas dadas de alta en la BBDD).
  • 22 -> Ser de una profesión concreta: El valor auxiliar indica la ID de la Profesión del personaje. (Profesiones dadas de alta en la BBDD).

Valor auxiliar del Tipo de Prueba (valorAuxiliar)
Este valor acompaña al Tipo de Prueba, si por ejemplo es entregar un objeto o eliminarlo, el valor auxiliar es el identificador del objeto. Si es un combate, el valor auxiliar es el identificador de la criatura...

Efecto si se tiene éxito (idEfectoExito) x 3 -> hay tres campos iguales numerados del 1 al 3
Es un efecto que se aplica si la prueba ha sido realizada con éxito. Hay 3 campos iguales que permiten aplicar hasta 3 efectos si la prueba se ha realizado con éxito. Estos efectos se denominan efectos efímeros y son aplicables también a objetos de Un uso y Habilidades recargables. Hay otros efectos denominados persistentes, los cuales son para objeto equipados y Habilidades no recargables.
Esta es la lista de efectos disponibles para las Pruebas de Aventura. El valor numérico indica el ID del efecto que está programado en la aplicación (Hay muchos más en desarrollo):

  • 1 -> Recibir Oro: El valor auxiliar indica la cantidad de oro que se recibe.
  • 2 -> Eliminar un Estado afectado: El valor auxiliar indica el ID del estado que eliminará (si lo tiene el personaje que hace la aventura).
  • 3 -> Recuperar Puntos de Cuerpo Actual: El valor auxiliar indica los PC que se recuperan (hasta el límite de los PC Iniciales).
  • 4 -> Recuperar Puntos de Mente Actual: El valor auxiliar indica los PM que se recuperan (hasta el límite de los PM Iniciales).
  • 5 -> Recuperar Puntos de Movimiento Actuales: El valor auxiliar indica los PMov que se recuperan (hasta el límite de los PMov iniciales)
  • 6 -> Incrementar Puntos de Cuerpo Actual: El valor auxiliar es la cantidad de PC que se incrementan (sin límite de los PC Iniciales, se puede sobrepasar).
  • 7 -> Incrementar Puntos de Mente Actual: El valor auxiliar es la cantidad de PM que se incrementan (sin límite de los PM inicielas).
  • 8 -> Incrementar Puntos de Movimiento Actuales: El valor auxiliar es la cantidad de PMov que se incrementan (sin límite a los PMov iniciales).
  • 9 -> Perder Puntos Cuerpo Actual: El valor auxiliar indica la cantidad de PC que pierde el Personaje.
  • 10 -> Perder Puntos de Mente Actual: El valor auxiliar indica la cantidad de PM que pierde el Personaje.
  • 11 -> Perder Puntos de Movimineto Actual: El valor auxiliar indica la cantidad de PMov que pierde el Persoanje.
  • 12 -> Restaurar todos los Puntos de Cuerpo (hasta el límite del valor inicial, el valor auxiliar es ignorado).
  • 13 -> Restaurar todos los Puntos de Mente (hasta el límite del valor inicial, el valor auxiliar es ignorado).
  • 14 -> Restaurar todos los Puntos de Movimiento (hasta el límite del valor inicial, el valor auxiliar es ignorado).
  • 15 -> Incrementar la Suerte del Personaje: El valor auxiliar es la cantidad de puntos que se aumenta.
  • 16 -> Decrementar la Suerte del Personaje: El valor auxiliar es la cantidad de puntos que se disminuye.
  • 17 -> Inflige un Estado a un Personaje: El valor auxiliar es el ID de los Estados dados de alta en la BBDD (envenenado, aturdido...)
  • 18 -> Teletransporte: El valor auxiliar es la ID de la Localidad en la que se otorgará al Jugador (el ID debe ser válido).
  • 19 -> Aumentar Hueco Mochila: El valor auxiliar indica la cantidad de huecos que se aumenta la mochila (límite impuesto por huecos disponibles y Cuenta Premium).
  • 20 -> Entregar Objeto: El valor auxiliar indica el objeto que será entregado al Jugador. Si lo puede cargar y hay espacio en la mochila, este se colocará en la misma. Este objeto se da (siempre que haya capacidad de inventario) independientemente del resultado de la Aventura. Nota: los objetos aventura se entregan siempre, independientemente de la capacidad de inventario...
  • 21 -> Eliminar Objeto del Jugador: El valor auxiliar indica el objeto equipado o en la mochila del personaje que será eliminado (siempre que lo tenga).


Valor del efecto al tener éxito (valorEfectoExito) x 3 -> hay tres campos iguales numerados del 1 al 3
Es el valor que acompaña al efecto en caso de tener éxito. Por ejemplo si se pierde Puntos de Cuerpo, este valor indica la cantidad.

Efecto si se falla la prueba (idEfectoFallo) x 3
Exactamente al efecto de éxito pero se aplica si se falla la prueba. Hay también 3 campos iguales que permite añadir hasta 3 efectos si se falla la prueba.

Valor del efecto al fallar la prueba (valorEfectoFallo) x 3
Exactamente que el valor que acompaña a los efectos si hay un éxito en la prueba.

www.dreamworlds.es | www.mazeofgalious.com
#6
Aquí escribo un par de post (pues excedo los 20.000 caracteres del tema  :P). Podréis ver con las siguientes tablas (para las aventuas y sus pruebas), una pequeña parte del corazón de la bestia.

Tutorial de como crear una Aventura
Este tutorial es para mostrar como se diseña (y las posibilidades) de las aventuras. Las aventuras comprenden el diseño y selección de pruebas también, la creación (diseño) de las Pruebas se indicará en otro tutorial. No obstante las Aventuras también van relacionadas con lugares, opciones, rumores que se han tenido que escuchar... lo cual NO será explicado en este tutorial al no ser contenido exclusivo de las mismas.


TABLA DE IDIOMAS (_mmorpg_aventuras_idiomas.sql)
Tantos registros como idiomas haya dados de alta. Mínimo 1 registro para el idioma en español (idioma por defecto de la aplicación).

Identificador de la Aventura (idAventura)
Identificador de la Aventura, debe corresponder al ID de la Tabla de Aventuras diseñada. De esta forma se relaciona el nombre y textos de historia con la Aventura. El campo no es un valor único, ya que permite que la misma Aventura esté en varios idiomas.

Idioma del Texto (idIdioma)
Identificador del tipo de idioma de dicho registro, por defecto "1" (español). Esto va ligado al desarrollo de la aplicación que permite multi-idioma, tanto por aplicación como por contenido de la Base de Datos (estos registros).

Nombre de la Aventura (nombre)
Tal como se indica, es el nombre de la misma, máximo 40 caracteres.

Historia Inicial (historiaInicial)
Texto introductorio que aparece al listar la aventura desde la Opción que muestra aventuras disponibles. Máximo 1024 caracteres.

Historia Éxito (historiaExito)
Texto de la historia que muestra si la aventura ha sido un éxito. Máximo 1024 caracteres.

Historia Fracaso (historiaFallo)
Texto de la historia que se muestra si se ha fracasado en la misión. Máximo 1024 caracteres. Nota: es posible que la aventura esté diseñada para que sea éxito seguro, en tal caso este campo es prescindible.


TABLA DE AVENTURAS (_mmorpg_aventuras.sql)
Un sólo registro, único que identifica de forma única la aventura.

Identificador de la Aventura (idAventura)
Identificador de la Aventura. Es un valor automático (clave) y valor autoincremental. Identifica de forma única la Aventura.

Opcion de Edificio en la que se muestra (idOpcion)
Se indica el ID (identificador) de la opción que mostrará la aventura. Estas opciones aparecen en los contenedores de "edificio". Debe ser una ID válida de una opción configurada como Aventuras. El gestor de contenidos listará las opciones posibiles existentes (para facilitar la entrada de datos).

Época de la Aventura (idEpoca)
Indica a partir de que año aparecerá la aventura (es un requisito). De forma automática son para el Año 1. La aplicación soporta pasar de años, y puede estar configurada para que deje de mostrar las opciones, lugares, aventuras... de años anteriores. De momento dejar por defecto tal cual indica la aplicación, todo para el Año 1.

Inhabilitada por otra Aventura (idAventuraCancela)
Identificador de otra Aventura que hace que esta no esté disponible (si ha sido realizada con éxito la otra Aventura, estará en la tabla de aventuras realizadas por el jugador). (Por defecto 0, ninguna aventura deshabilita esta). Nota: esto (predomina) deshabilitará la aventura, independientemente de que se cumplan todos los demás requisitos y la configuración de la misma. El Gestor de Contenidos listará todas las aventuras creadas (para facilitar la entrada de datos).

Aventura anterior necesaria (idAventuraNecesaria)
Es el identificador de una Aventura anterior que debe haber sido realizada con éxito para que aparezca (se liste) esta, sino es como si no existiera la aventura. Es uno de los requisitos existentes. Por defecto 0 (no es necesario ninguna aventura anterior). El Gestor de Contenidos listará todas las aventuras creadas (para facilitar la entrada de datos).

Rumor o conversación necesaria (idRumorNecesario)
Indica el identificador de un rumor/conversación requerido. Es un requerimiento para que aparezca (se liste) la Aventura. Por defecto no requiere (cero). El Gestor de Contenidos listará todos los rumores existentes (para facilitar la entrada de datos).

Objeto requerido (idObjetoNecesario)
Identificador de un objeto que será necesario para realizar la Aventura. Sin él no se podrá comenzar con la misma, pero la aventura SI se listará (aparecerá). Este objeto (mediante la programación de la aplicación), es necesario que esté equipado o en algún hueco de la mochila. El Gestor de Contenidos listará todos los objetos existentes (para facilitar la entrada de datos).

Coste de la Aventura (precio)
Cantidad en Oro del Juego que tendrá que abonar el jugador para realizar la Aventura. Por defecto el coste de oro es CERO.

Acciones necesarias (acciones)
Cantidad de acciones requeridas para realizar la Aventura. El valor mínimo de acciones es 1 y el valor máximo es 30 (valores asignados por variables configurabales de sistema).

Duración de la Aventura (tiempo)
Tiempo en minutos que tardará la aventura en finalizar. El valor mínimo es de 1 minuto y el valor máximo de 120 minutos (valores asignados por variables configurables del sistema)

Máximo de Pruebas a realizar (pruebas)
Indica el límite de la cantidad de pruebas que se realizarán en la Aventura. Si no hay pruebas asignadas en la tabla correspondiente, este valor se ignorará, si hay menos de las que se ha indicado en este campo, sólo se harán las que se encuentren en la tabla.

Ordenar secuencialmente las Pruebas (pruebasOrden)
Para indicar si las pruebas asignadas (si existen) a la Aventura se harán con el orden indicado en su correspondiente tabla. Si no está activado, las hará de forma aleatoria. Por defecto está de forma aleatoria.

Permitir Montura (permitirMontura)
¡Para futuras implementaciones! Indicará si la Montura bonificará al personaje que realiza la aventura (no implementado). Por defecto NO (cero).

Permitir Mascota (permitirMascota)
¡Para futuras implementaciones! Indicará si la Mascota del personaje que realiza la aventura bonificará al Héroe (no implementado). Por defecto NO (cero).

Cuenta Premium requerida (premium)
Si es "1", indicará que esta aventura sólo la pueden hacer jugadores con Cuenta Premium. Este requisito no evita que se liste la Aventura.

Habilitar Aventura (visible)
Condición esencial para que la Aventura esté visible y pueda realizarse (si cumple con los requisitos). En caso de "0", la aventura no está disponible para el juego. Es un campo de Administración.

Edición bloqueda (bloqueado)
Campo de Administración, indica que sólo Administradores y Gestores Avanzados podrán editar la aventura.

Valor aleatorio de imagen (randImg)
Valor automático que otorga la aplicación al subir una imagen. Es un sistema propio para evitar problemas con las cachés de los navegadores.

Tipo de extensión de imagen (tipoImagen)
Identificador de extensión de archivo, valor que otorga la misma aplicación a extensiones permitidas de archivos de imagen. La aplicación sólo permite extensiones JPG, PNG y GIF, siendo el tamaño máximo 200x200 píxeles y el peso de 20KBytes (requisitos configurables por variables de sistema).

Aventura única o NO (permitirRepetir)
Este valor indica si se podrá repetir o la aventura será única. Por defecto se puede repetir, seleccionar CERO para indicar que la Aventura sólo se podrá realizar una sola vez (con éxito). Por defecto es repetible (uno).

Máximo de veces repetible (vecesRepetible)
Indica las veces que podrá ser repetible si está seleccionada la opción de Permitir Repetir. Por defecto es cero (se repetirá indefinidamente), cualquier otro valor pondrá un límite de veces que se podrá realizar con éxito. El máximo de veces repetible es de 128.

Dificultad de la Aventura (dificultad)
Es un multiplicador de la dificultad de la aventura (del 1 al 7) el cual está programado en la aplicación. 1 fácil, 7 extremadamente difícil. Dejar un valor 3 para normal.

Nivel necesario del Personaje (nivelRequerido)
Indica el nivel mínimo que se necesita para que el personaje activo del jugador pueda realizar la aventura. La aventura se listará independientemente de si se cumple o no este requisito. El Nivel 1 es por defecto.

Mínimo de personajes enrolados (minimoPersonajes)
¡Para futuras implementaciones! Es para indicar cuantos personajes enrolados debe tener el jugador en su equipo. La aventura se listará independientemente del valor indicado. Mínimo 1 (por defecto) máximo 10.

Sólo para este Personaje (personajePermitido)
Indica el identificador de un personaje (Héroe) que está dado de alta en la aplicación. Por defecto es cero, si hay un valor de ID válido, sólo dicho personaje podrá realizar la Aventura. Esto no impide que se liste la Aventura. Es un requisito.

Grupo del Personaje Requerido (idGrupoNecesario)
Indica el tipo de Grupo del Personaje, Mágico, No Mágico o No Requerido. Esto es un requisito que no evita que se liste la aventura. El personaje activo del jugador tendrá que pertenecer a dicho grupo para poderla realizar.

Alineación del Personaje Requerida (idAlineacionNecesaria)
Indica la Alineación del Personaje que tendrá que tener como requisito para poder realizar la Aventura. Este requisito no evitará que se liste la Aventura. Las posibilidades son Maligna, Buena, Neutral, Neutral o Buena, Neutral o Maligna y Cualquiera.

Prueba Final a realizar (idPruebaFinal)
Indicará una Prueba que hará al finalizar todas las demás pruebas, siendo identificada como Prueba final de la Aventura. Puede asignarse cualquier prueba y no forma parte del límite de pruebas anteriores. Útil para ambientar la aventura, dejando pruebas aleatorias anteriores pero una fija que se hará al final.

Realizar con éxito la Prueba Final (pruebaFinalNecesaria)
Indica si la Prueba Final debe finalizarse con éxito para que la Aventura sea exitosa.

Objeto premio al finalizar la Aventura con éxito (idObjetoTesoro)
Indica el valor del identificador de un objeto que se entregará como premio al conseguir con éxito la aventura (quedará registro en los logs del jugador). Nota: Las pruebas también pueden entregar objetos. Por defecto no se entrega ningún objeto como premio.

Premio de Oro (oroRecompensa)
Cantidad de monedas de oro que se entregará al jugador al finalizar la Aventura con éxito. Queda registrado en los Logs del jugador. Nota: Las pruebas pueden entregar oro. Cero por defecto.

Experiencia ganada (experiencia)
Valor de experiencia que gana el personaje activo del jugador que realiza la Aventura con éxito. Sólo se incrementa en el personaje que realiza la aventura. Cero por defecto.

Karma otorgada (karma)
Este valor influje en la Alineación del personaje, se otorgará o quitará karma (puede ser un valor negativo) al personaje activo que realiza la aventura con éxito. Cero por defecto.

Fama ganada (fama)
Es el valor de Fama que ganará el jugador al realizar con éxito la aventura. Este valor no va relacionado con el personaje sino con el perfil del jugador. Cero por defecto.

Eliminar Objeto requerido (eliminarObjetoNecesario)
Si está habilitado ("1"), eliminará del inventario del jugador el objeto que es requerido para poder realizar la Aventura. Lo elimina del personaje (indistintamente si está equipado o en la mochila).

Desgastar Equipo del personaje (desgastarEquipo)
Indicará si el equipo (objetos equipados, no en la mochila) del personaje que realiza la aventura se desgastan. Actualmente está implementado como 0 -> no hay desgaste, 100 -> todos los objetos equipados se desgastan (pierden 1 punto de vida). En el futuro se desarrollará como un valor % que indicará cuantos objetos aleatorios equipados se desgastarán.


TABLA DE PRUEBAS DE AVENTURA (_mmorpg_aventuras_pruebas.sql)
Tantos registros (pruebas) como se desee. Se pueden repetir registros iguales para que hayan pruebas iguales o depende de la configuración de la Aventura, haya más probabilidades de salir una prueba que otra.

Identificador de la Aventura (idAventura)
Identificador de la Aventura, debe corresponder al ID de la Tabla de Aventuras diseñada. De esta forma se relacionan las pruebas asignadas a una aventura en concreto. El campo no es un valor único, ya que permite que la misma Aventura tenga múltiples pruebas.

Prueba asignada (idPrueba)
Este es el ID que corresponde con una Prueba diseñada (dada de alta) en la Base de Datos del Juego. A diferencia de las aventuras (que son únicas), una misma prueba puede estar asignada varias veces a una misma aventura o a aventuras diferentes (del diseñador depende que tengan coherencia).

Dificultad de la Prueba (dificultadPrueba)
Es un valor que modifica la dificultad de la prueba, 1 a 7, siendo 3 una dificultad normal (valores que influyen a la hora de superar tiradas... mediante la programación de la aplicación). La dificultad de la Aventura será el mínimo a tener en cuenta (una Aventura con dificultad media, hará que las pruebas como mínimo sean medias, ignorando valores inferiores pero no dificultades superiores de cada prueba). NOTA: Sólo aplicable a pruebas de Tiradas (manda sobre el valor auxiliar de la prueba de tirada).

Orden de la Prueba (orden)
Valor numérico que se tendrá en cuenta a la hora de ordenar secuencialmente las pruebas (si está la Aventura configurada de tal forma). En caso de no estar bien configurado el valor, las ordenará según fueron dadas de alta (no la prueba diseñada sino la prueba a realizar).

Descartar Prueba (descartar)
¡Para futuras implementaciones! Indicará si la prueba no volverá a salir, aunque hayan más pruebas iguales dadas de alta para esta aventura. Por defecto NO descartar (cero).

Prueba Necesaria (necesaria)
Si está a "1" indicará que esta prueba es necesaria realizarla con éxito para que la misión (aventura) sea finalizada con éxito. Sino, la aventura habrá sido un fracaso, independientemente del resultado de las demás pruebas.

Finalizar Automáticamante (finAutomatico)
Indica que esta prueba finalizará automáticamente la Aventura, según los siguientes valores: 1 -> La prueba ha sido realizada con éxito, 2 -> La Prueba ha sido finalizada SIN éxito (prueba fallada), 3 -> Indistintamente, la prueba finalizará la aventura independientemente de su resultado. Por defecto el valor es "0", no finaliza la Aventura.

www.dreamworlds.es | www.mazeofgalious.com
#7
Antes de nada gracias a todos por vuestras palabras :)

Cita de: Goosebrush en 02 de Noviembre de 2011, 09:45:48 PM
Pues ya he terminado mi primera misión. La hija del leñador ya esta sana en su casa.  :D

Esta muy bien todo el sistema. Este tipo de juegos son muy peligrosos, cuando te das cuenta estas completamente enganchado.  ;)

¿Has hablado luego con su padre?, este te regalará un hacha y te dejará trabajar en sus tierras como leñador ;), además podrás enrolar a su hija! También en sus tierras se puede hacer una aventura que se puede repetir X veces (éxitos) y que puede que encuentres plantas que son muy útiles para que el Alquimista de Marienburgo haga mezclas para hacer pócimas.

No olvides de dormir para recuperar acciones, que son muy importantes para realizar gran cantidad de opciones/acciones del juego.


Cita de: Hechelion en 02 de Noviembre de 2011, 10:25:48 PM
Lo he estado probando y que puedo decir.

Como se comentaba antes, no es que sea imposible, pero para crear algo hay que tener los pies en la tierra y dedicarle mucho esfuerzo, lo que muchos no hacen, pero es excelente ver un ejemplo de lo contrario, alguien que supo hacer algo tangible, que tiene mucho potencial y que logró trabajar en él durante 3 años para finalizarlo.

Felicitaciones por el trabajo.

Pues realmente fueron más de 4 años contando la versión anterior. No voy a mentir y diré que en más de una ocasión tuve alguna crisis importante que estuvo a punto de provocar que mandara a criar malvas la aplicación, que son dichos parones que he mencionado para descansar y volver con más ganas y sobretodo ideas.

Espero que te esté gustando la parte PVE del juego, aunque no es muy extenso por el momento, deberé ponerme las pilas y crear más aventuras y conversaciones de ambientación. Aunque el juego tiene su parte importante de PVP :D


Cita de: JuanCarlos en 02 de Noviembre de 2011, 11:19:40 PM
Muchas felicidades por el juego, después de 3 años el esfuerzo ha merecido la pena
Es realmente difícil mantener un proyecto tan largo, sin acabar dejándolo aparcado para empezar otra cosa, se nota q estabas muy motivado y has tenido mucha fuerza de voluntad. Pero también he visto q al principio ya había alguna versión jugable y la gente te ayudaba a probarlo y al ver q a ellos les gustaba y te pedian añadirle más cosas, eso seguro q te animó a seguir adelante.

Me llama la atención la manera como has logrado crear un MMORPG tú solo, has reducido el alcance del proyecto (creo q desde los comienzos) para q pudieras abarcarlo hasta el final. Me refiero, claro está, a que eliminaste la parte gráfica en 3D para poder dedicarte a toda la funcionalidad del mundo persistente y a crear el RPG. Has acertado de lleno, si no lo hubieras hecho así, el proyecto sería farónico y nunca vería la luz.
Tal como ha quedado lo cierto es se parece mucho a un MMO, pero en lugar de ser de estrategia, como tantos de los q hay por ahí, este es de rol, lo que lo hace diferente y ahí está tu mejor baza. Espero q cuando la partida avance, logres encontrar el equilibrio de forma q los jugadores puedan dedicarle unas cuantas horas durante el día (q puedan realizar varias acciones de duración breve) y puedan dejar alguna acción larga para q se haga durante la noche (como viajar lejos o una misión larga).

Yo sigo probándolo, he matado unos lobos, he cobrado la recompensa, ahora estoy explorando las cuevas del norte... a viciar

Como he comentado a Hechelion, realmente hubo más de una crisis. Pero al final pude sortear todos los problemas y llegar a buen puerto :)

Lo que comentas de la versión antigua, esta la hice para el SMF1, ya cuando publiqué dicho tema, tenía bastante avanzada la versión de marras (nunca me ha gustado decir que haré algo, prefiero hacerlo, o al menos tenerlo muy avanzado antes de decir nada, pero vamos esto ya es cada cual, claro), por ello ya lo podían probar y dar sus impresiones ;), lo que está claro que anima a continuar si estas son agradales y muestran que estás haciendo algo que gusta :)

Sobre lo del equilibrio del juego, ciertamente falta ir probándolo con muchos jugadores para ver donde sobra o cojea de tiempos y recompensas, para ir equilibrando el mismo. También, si va teniendo aceptación, le iré dedicando más tiempo a crear el universo del juego, diseñando más aventuras, ambientación... De momento el PVE diseñado es suficiente para cubrir las necesidades de los más jugones, pero luego se podría hacer algo repetitivo, ya que las aventuras únicas ya estarían hechas y quedarían sólo las que se pueden repetir indefinidamente o un montón de veces. Eso sí, vuelvo a decir que también su parte importante del juego es el PVP ;D.

Si te has ido por las Colinas Sangrientas que están en el norte, en una aventura de las únicas habrás recibido una bonita llave, ¿sabes que tendrás que ir a Marienburgo para poder usarla en unas mazmorras que hay en una torre? ;)

PD: Te he espiado jeje, pero no te he atacado ni robado, soy muy bueno!




Tengo que crear las instrucciones del juego, aunque en todas las secciones pongo ayudas del juego.

Supongo que habréis visto que los personajes tienen habilidades, unas se pueden utilizar y se recargan, probad de picar sobre ellas para ver como aparecen estados que duran un tiempo y ver que las habilidades se recargan. Por supuesto se pueden aprender nuevas habilidades o magias.

Un saludo.
#8
Cita de: matriax en 02 de Noviembre de 2011, 12:37:34 PM
Edit:
Por cierto me iba a registrar pero despues de fallar 4 veces el Captcha he desistido. De todas formas pinta bien el proyecto :) .

Lo he bajado a nivel medio (el captcha) de momento no creo que haya muchos spammers dispuestos a registrarse, ya que no está apenas difundido. Pero el sistema de seguridad de registro no es mayor al que había aquí (siendo del mismo SMF). Los captcha originales del SMF son sólo letras (nunca números y símbolos), y cuando no está claro puedes pedir otra imagen del mismo ;) . Pero lo dicho, lo he bajado un nivel (pero que sepas que aún había uno por encima que casi no se ve nada!).

Espero que vuelvas a intentar registrarte de nuevo, sinceramente creo que merece la pena probarlo, que te enganche después, eso ya es más si te gustan estos tipos de juego ;)

Cita de: pinger en 02 de Noviembre de 2011, 12:53:42 PM
Mucha suerte en el proyecto, supongo que será beta, a ver que tal funciona con 1000 usuarios registrados.

Tiene buena pinta, son 3 años currando de verdad imagino.

Sí, más de 3 años currando de verdad, algunos fin de semanas incluso de 12 horas casi interrumpidas (lo que hace la motivación!). Digamos que una media de 4 horas diarias casi todos esos años (salvo algunos parones de un par de meses). Os puedo asegurar que he llegado a enfermar varias veces por culpa de este proyecto (por apenas dormir, problemas, estrés...).

Respecto a como funcionará con 1000 usuarios registrados, no hay problema, 1000 o 100000 (salvo que el tamaño de la BBDD en MYSQL será mucho más grande, pero 1000 usuarios registrados no es casi nada para la BBDD). Otra cosa son jugadores en línea a la vez, pero creé la aplicación con una tecnología mia, la cual lo que hace, es que cada usuario se actualiza a si mismo (y a otros si interactua), dejando el servidor bastante tranquilo muchas veces, además que las acciones que hace un jugador requeieren muchas veces de un tiempo, el cual corre desde el lado cliente y al actualizar se verifica en el servidor. Como un pequeño ejemplo: las tiendas del juego tienen stock para cada objeto que se vende (aunque puede ser infinito, claro), si este se acaba, una variable indica cuando se acabó, y otra del sistema indica cuando se regenerará, el jugador que entre en esa tienda, actualizará el stock si ha pasado el tiempo que debía pasar para regenerar el stock (nada de un cron job funcionando para tal fin...).

Además, me gustaría que algún entendido de seguridad en la programación, pruebe esta, a ver si consigue vulnerar las protecciones del juego. Me interesa mucho este aspecto. Eso sí, advierto que también programé un sistema automático de sanciones en el juego (aunque puedo declarar a un jugador como beta tester para que no lo sancione).

Espero que alguno de vosotros pruebe la aplicación (almenos un buen rato) para que pueda contar sus impresiones por aquí. También espero que os guste la web en sí, ya que el proyecto no es sólo la aplicación (aunque es lo más grande, claro).

Un saludo :)
#9
Hola, soy usuario nuevo registrado, aunque he sido lector antes ;). Este es mi primer post.

Me he registrado porque quería presentar un proyecto que inauguré la semana pasada, el cual me ha llevado más de 3 años de desarrollo en solitario (y más si contamos otra versión anterior). Este tipo de comunidades me gustan mucho (más aún si el sistema de foros es el SMF).

El proyecto que he dicho que vengo a presentar es un MMORPG (sí, otro más, aunque en mi defensa decir que es totalmente jugable y está acabado*) para navegador web (nada de esas cosas tan molonas como el 3D y la música). Está desarrollado en PHP, MYSQL, JQUERY + javascript, xHTML+ CSS, y utilizo el SMF2 como una especie de framework PHP para utilizar sus templates y su sistema de autentificación (además de MVC). No necesita ningún plugin extra como java o flash, y por las pruebas funciona bien en navegadores como IE9,8,7, Firefox 3 o superior, Opera, Chrome (aunque aquí tengo que solucionar algún leve error) y Safari. También probado con navegadores bajo Ubuntu como el Konqueror.

* Está en versión beta, pero realmente todo lo que quería dejar listo para ser ya jugado está hecho, pero hay muchas opciones futuribles de la aplicación, sin contar que el diseño del mundo es práctiamente infinito, se puede crear mundos, continentes, aventuras, objetos... indefinidamente.

Como datos técnicos de interés, la aplicación corre en un servidor virtual Intel Xeon X5450 @ 3.00GHz y 1GB de RAM dedicada, esperando que en no mucho tiempo sea necesario adquirir un servidor dedicado  ::)

También quiero indicar que más que un juego en sí, es un motor para crear MMORPG para navegadores web, aunque estoy rellenando la BBDD para explotarlo ya como un juego. La parte de Gestión de Contenidos no está hecha, bueno, algo si tengo hecho, como la edición de objetos del mismo (por supuesto también la estructura y sistema de permisos).

La url del juego es: www.mazeofgalious.com
Como el nombre del juego de cartucho del MSX de Konami (del 87), el cual le tengo mucho cariño y me lo acabé en su día (es lo que tiene pasar ya de los 30 años).

En www.dreamworlds.es está gran parte de las características de este motor.
En www.heroquest.es, en esta URL: http://www.heroquest.es/index.php?topic=1010.0 tenéis un tema en el que se va viendo como se fue gestando dicho MMORPG.

Además en la web de www.heroquest.es podréis ver algunos de mis otros proyectos, sobretodo otro macro proyecto de Salas Virtuales para jugar a juegos de mesa (enfocado al magnífico HeroQuest): http://www.heroquest.es/index.php?topic=1112.msg13524#msg13524

Espero que este proyecto os guste (almenos lo probéis para poder dejar alguna impresión, si es buena mucho mejor ;D), es Made in Spain y hecho con mucho esfuerzo!

Por supuesto, como favor, si sabéis de gente que le gusta este tipo de juegos por navegador, pues le mostréis el mismo, estos juegos se nutren de jugadores, cuantos más mejor (más rivalidad y usuarios con los que poder interactuar).

Un saludo.





Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.