Foros - Stratos

Programadores => General Programadores => Mensaje iniciado por: XÑA en 15 de Febrero de 2010, 10:40:58 AM

Título: Proyecto RPG 2D utilizando c#
Publicado por: XÑA en 15 de Febrero de 2010, 10:40:58 AM
Buenas a todos. Hace un motón que no hago absolutamente nada y lo cierto es que tengo muchas ganas de volver a darle al coding. Por desgracia para mi tiempo, aunque no para mi persona :) , tengo un niño de 10 años y una niña de 3, que me han absorbido un montonazo de tiempo hasta ahora. Pero el otro día le dije al niño a ver si le apetecía hacer un juego de pokemon donde él colocara los monigotes e hiciera lo que él quería, ¡y le hizo un montón de ilusión! Así que me emocioné y busqué software para hacer RPG. Encontré uno muy muy bueno, el Indie Game Maker, que tiene una cosa que está muy muy bien: ¡ compila para XNA y para Flash!

Entonces, me puse a urgar en el editor, y bueno, conseguí hacer algo, pero me pareció demasiado complicado para enseñárselo al niño, además de que la mayoría de cosas las iba descubriendo porque no tiene ayuda.

Así que decidí empezar a hacer un RPG, que no es muy complicado de hacer. Pero como estas cosas se empiezan pero no suelen acabarse, decidí que al menos intentaría aprender algo del proyecto, así si lo dejaba, al menos habría aprendido cosas nuevas.

Finalizada la introducción, espero que no os haya aburrido, aquí está lo que he decidido:

Desarrollo y Diseño de la aplicación:
Utilizar VStudio 2008 C# Framework 3.5 HASTA QUE salga 2010 con framework 4.0
Intentar explotar al máximo .Net 4.0
Utilizar DevExpress para los controles ( puedes usar el trial, que es lo que yo hago)
Utilizar las recomendaciones de programación en C#

Y en cuanto al editor:

Que pueda usarlo mi hijo ( fácil de usar, sustituyendo 'posibilidades' por 'facilidad')
Compilable para XNA (sé bastante XNA ) y SWF ( ni idea).

Bien, a partir de aquí, si la idea gusta y tengo cierto seguimiento, intentaré llevar un blog de cómo voy haciendo el proyecto y porqué tomo ciertas decisiones.

Y me gustaría de vosotros que me dierais todas las aportaciones que pusierais sobre la forma de programar correctamente ( Vicente este es tu punto fuerte!!).

¿Qué documentación tenéis sobre C# Best practices?

Gracias a todos.

Título: Re: Proyecto RPG 2D utilizando c#
Publicado por: XÑA en 19 de Febrero de 2010, 12:18:20 PM
Bueno, os muestro un pequeño avance del tema. Lo cierto es que DevXPress es bastante lógico y sencillo, da gusto trabajar con estos controles.

Podeis ver que en la pantalla del mapa hay en realidad 2 splits, así que puedes hacer más grande el trozo que necesites, para que puedas ir ajustando lo que necesites.

También estoy experimentando con el Ribbon, aunque es complicado cambiar el chip de la barra de control. En fin, veremos a ver cómo puedo avanzar en ese aspecto.

Finalmente abajo veis que aparecen los paneles. Estos son flotantes, y soportan docking. Ahí irán los clips, y podrás organizarlos en grupos y tener los que necesites, ocultarlos, en fin... Ahora mismo sale en el formulario de los clips, pero no debería estar ahí

(http://personal.telefonica.terra.es/web/carmasha/Clipboard01.jpg)

Título: Re: Proyecto RPG 2D utilizando c#
Publicado por: Vicente en 20 de Febrero de 2010, 01:00:21 AM
Hola!

está bien verte de nuevo programando :) Algunos comentarios:

- Utiliza VS2010. La RC ya está disponible para todo el mundo y funciona muy bien. No solo tienes acceso a las nuevas características del lenguaje (dynamic), si no que además tienes acceso a un montón de librerías nuevas: TPL (Task Parallel Library), MEF (Management Extensibility Framework), Rx (Reactive),...

- Utiliza WPF en vez de Winforms. Este es un poco más peliagudo, pero si lo que quieres es ponerte al día con .NET, es muy importante aprender WPF. Aprender WPF te "obligará" a aprender varias "best practices" de desarrollo en C# y a pensar de forma "declarativa", que es hacia donde el lenguaje se está moviendo poco a poco. Hacer la aplicación en WPF será una buena prueba para poner en práctica todo ese conocimiento "teórico".

- Es muy fácil pintar en una superficie de Direct3D e incrustrarla dentro de una aplicación WPF si estás interesado en pintar usando D3D. Aún sin usar D3D, pintar en WPF te da mucha más flexibilidad que pintar con Winforms (utilizas más la gráfica, puedes hacer tus propios shaders si quieres,...).

Sobre best practices en general, hay una herramienta llamada "StyleCop" que chequea el "estilo" de tu código y es extra-quisquillosa. Al principio es totalmente horrible intentar escribir código con 0 warnings de StyleCop, pero poco a poco le coges el truco y en general queda bastante bien.

http://code.msdn.microsoft.com/sourceanalysis

Además, tienes las archifamosas "Design Guidelines for Class Library Developers", pero no recomiendo leérselas de un tirón, si no de forma: voy a usar un evento, voy a ver que recomiendan sobre los eventos,...

http://code.msdn.microsoft.com/sourceanalysis

Si vas a usar WPF, necesitas leer sobre MVVM (Model-View-ViewModel), el patrón de diseño que se usa para este tipo de aplicaciones, te dejo una introducción pensada para gente que conoce Winforms:

http://reedcopsey.com/2010/01/07/better-user-and-developer-experiences-from-windows-forms-to-wpf-with-mvvm/

El código fuente de los artículos está aquí:

http://code.msdn.microsoft.com/WinFormToWPFMVVM

Y poco más se me ocurre ahora mismo, cualquier cosa pregunta :) Un saludo!

Vicente
Título: Re: Proyecto RPG 2D utilizando c#
Publicado por: XÑA en 20 de Febrero de 2010, 08:17:32 AM
Gracias por la información Vicente y encantado de volver a charlar contigo!!

Bueno, no puedo usar WPF porque los controles devxpress para WPF no tienen todavía la gran variedad que tienen los controles para Winforms. Para mi aprender DevXPress es importante, porque son unos controles muy extendidos en el mundo empresarial.

Sobre la RC de VStudio 2010, sí, voy a usar 2010, pero esperaré a Marzo a que salga la definitiva. Tampoco puedo dedicarle mucho tiempo al editor, así que principalmente ahora lo que hago es ir creando 'prototipos' de cómo se tiene que trabajar, para ver cual es el diseño final que le doy a todas las herramientas. Pero por ejemplo he usado las Extensiones de C# 3.5 para extender la clase Point, y creía que ya podía utilizar los constructores con parámetros por defecto, pero he visto que tengo que esperar a 4.0. Pero en cuanto tenga 2010, me tiro a por 4.0, aunque me asalta un poco la duda de si en XNA voy a poder utilizar las características 4.0. ¿Sabes si será así?

Gracias por el programa de estilo, voy a utilizarlo. Creo que hay que programar siguiendo un patrón que todos nos sintamos cómodos trabajando con él. Voy a ver que tal.

Bueno, a ver si puedo seguir avanzando un poco y este fin de semana ya puedo subir algo para que lo veais.

Título: Re: Proyecto RPG 2D utilizando c#
Publicado por: Vicente en 21 de Febrero de 2010, 02:42:55 AM
Mmm, los controles de WPF no tienen la variedad de los de Winforms porque en general no hace falta. Es decir, poner un Combobox con una imagen es insufrible en Winforms (y por eso las suites de controles tienen Combobox mejorados), mientras que poner una imagen en un Combobox en WPF es trivial :) Sigo pensando que aprender WPF es más útil, pero si no le quieres dedicar mucho tiempo al editor no te va a merecer la pena.

Respecto a XNA y 4.0, no puedes usarlos juntos :( XNA 3.1 está ligado a VS2008. Y respecto al programa de estilo, no te vas a sentir nada cómodo al principio, prueba con una clase tonta de 30 líneas y fácil te saca 50 errores :p Una vez te acostumbres, es muy fácil, pero cuesta un poco al principio.

Un saludo!

Vicente
Título: Re: Proyecto RPG 2D utilizando c#
Publicado por: XÑA en 22 de Febrero de 2010, 10:12:56 AM
Bueno, tengo ahora una cuestión de nomenclatura.

¿Cómo nombrais los controles?

Por ejemplo, tenemos el menuBarItemButton1, ¿esto lo poneis como mBINuevo , por ejemplo?

Lo cierto es que no tengo una norma y me doy cuenta de que cada vez lo modifico todo. Había pensado llamarlo ctrl + nombre, pero claro, colisiona a veces porque puede haber más de un control que haga lo mismo, en mi caso, el trackBar y el TextEdit, sirven para cambiar el tamaño del grid.

¿Qué hacéis vosotros?
Título: Re: Proyecto RPG 2D utilizando c#
Publicado por: Vicente en 22 de Febrero de 2010, 04:59:23 PM
Los botones es una de las cosas en las que no hay una norma clara :( Yo normalmente los prefijo con el tipo de control y luego el nombre. Y en inglés por cierto :p
Título: Re: Proyecto RPG 2D utilizando c#
Publicado por: XÑA en 25 de Febrero de 2010, 09:13:53 AM
Bueno, sigue el Work In Progress...

Aquí podemos ver la carga de Tiles, y cómo se crean los 'ClipGroups'. Puedes seleccionar y ordenarlos para tener, por ejemplo, unos con árboles, otro con tierra, otro con edificios...

(http://personal.telefonica.terra.es/web/carmasha/Clipboard04.jpg)

Aquí vemos el mapa, con los panales abajo, que nos permitirán seleccionar fácilmente los clips

(http://personal.telefonica.terra.es/web/carmasha/Clipboard02.jpg)

Y fijaos, la gran ventaja de los panales, es que puedo colocarlos donde quiera, lo que me permite organizarme de la mejor forma posible.

(http://personal.telefonica.terra.es/web/carmasha/Clipboard03.jpg)

Título: Re: Proyecto RPG 2D utilizando c#
Publicado por: kraj0t en 25 de Febrero de 2010, 12:07:41 PM
Dios bendiga a WeifenLuo.
Título: Re: Proyecto RPG 2D utilizando c#
Publicado por: Vicente en 25 de Febrero de 2010, 05:29:47 PM
Mola mucho la verdad :)
Título: Re: Proyecto RPG 2D utilizando c#
Publicado por: flipper83 en 26 de Febrero de 2010, 08:18:05 AM
está muy wapo yo le meteria capitas q siempre viene bien para poner una casa encima de tierra o cesped ^_^
Título: Re: Proyecto RPG 2D utilizando c#
Publicado por: XÑA en 04 de Marzo de 2010, 11:36:50 AM
Bueno, aquì podéis ver los avances con el tema de caminos e intersecciones.

Utilizo Drag & Drop para coger el clip y posicionarlo en el sitio que corresponde. De esta forma el macanismo para ir haciendo caminos se hará de forma automática.


(http://personal.telefonica.terra.es/web/carmasha/Clipboard05.jpg)
Título: Re: Proyecto RPG 2D utilizando c#
Publicado por: XÑA en 06 de Marzo de 2010, 03:51:43 PM
Y aquí tenemos la formación del camino en el mapa. He optado por que el usuario dibuje líneas y después el editor creará los caminos. Eso nos permite modificar el camino muy fácilmente y es bastante rápido. Se permite cambiar el ancho del camino, así que fácilmente los construyes del tamaño que quieras, aunque no hay diagonales, pero creo que no es necesario.  :-\

¡Madre mía que locura ha sido lo del camino y no está del todo resuelto!

(http://personal.telefonica.terra.es/web/carmasha/Clipboard06.jpg)
Título: Re: Proyecto RPG 2D utilizando c#
Publicado por: Hechelion en 08 de Marzo de 2010, 04:50:21 AM

Cita de: XÑA¡Madre mía que locura ha sido lo del camino y no está del todo resuelto!

Ni que lo digas, yo estoy tratando de hacer algo parecido pero son "Autotileset", o sea, pintas un área y el sistema calcula sólo los tile de los bordes y tal como dices es una locura llevarlo a buen termino.

Mis felicitaciones y ánimos para que sigas adelante con el proyecto.
Título: Re: Proyecto RPG 2D utilizando c#
Publicado por: XÑA en 08 de Marzo de 2010, 10:39:20 AM
Gracias, lo cierto es que va bastante bien. :D
Título: Re: Proyecto RPG 2D utilizando c#
Publicado por: Esgaroth en 08 de Marzo de 2010, 11:43:26 AM
Hola, en respuesta a tu mensaje en el hilo "Generador de diálogos 1" en donde me sugeriste "unir fuerzas" tengo que decirte que soy un novato total, de modo que no puedo ayudarte en mucho, solo tengo conocimientos básicos de Visual Basic 6.0 y C++. ¡Nunca usé Visual Studio 2008!  :-[

Pero al menos me gustaría colaborar con ideas. Si querés un editor simple yo podría diseñar uno (diseñar no programar XD) desde cero. Pasé mucho tiempo experimentando y programando plataformas de juegos RPG 2D (en especial de pokemon). Si querés hacer un editor muy fácil de manejar desde ya te digo que no va a ser fácil hacer que sea fácil, porque requiere de especial atención en ciertas herramientas. Acá van las ideas que se me ocurren ahora:

1. Sistema de capas.

2. Mapeado con objetos pre-determinados. Un ejemplo sería que en vez de tener que elegir el conjunto de tiles a pintar desde una grilla se eligan desde una galería de imágenes, así en vez de seleccionar recortando un edificio, se seleccionaría la "imágen" edificio y luego se pintaría en el mapa normalmente. Esto le dá bastante facilidad de uso, pero requiere de definir los objetos para ubicarlos luego en la galería de imágenes.

3. Objetos personalizables. Con seleccionar un objeto de la galería de imágenes, podría aparecer un panel con sus propiedades. La altura para los edificios, altura y anchura para las casas, color para las flores, etc.

Este sería un trabajo MUY arduo, en especial el punto 3. Pero bueno, son solo opiniones, ideas. Me gustaría ayudar pero nosé cómo... (si estubieras haciendo un juego en vez de un editor te podría ayudar completando a mano las bases de datos o txt necesarios, pokemon es uno de los juegos que más datos necesita: nombres de pokemons, stats, tipos, objetos (de todo tipo), niveles en los que aprenden ataques, etc.

Voy a pasar regularmente para ver tus avances.

Saludos.
Título: Re: Proyecto RPG 2D utilizando c#
Publicado por: XÑA en 08 de Marzo de 2010, 11:49:46 AM
Gracias por tu respuesta. Voy a intentar contestarla por puntos.

Lo cierto es que tengo muy claro que tiene que ser fácil, sobre todo porque tiene que utilizarlo mi hijo, ¡que tiene 11 años! Por eso cogí controles profesionales, los DevXPress.

1. Sistema de capas.

Ya lo tiene.

2. Mapeado con objetos pre-determinados. Un ejemplo sería que en vez de tener que elegir el conjunto de tiles a pintar desde una grilla se eligan desde una galería de imágenes, así en vez de seleccionar recortando un edificio, se seleccionaría la "imágen" edificio y luego se pintaría en el mapa normalmente. Esto le dá bastante facilidad de uso, pero requiere de definir los objetos para ubicarlos luego en la galería de imágenes.

También lo he pensado así. Si te fijas, los tiles se convierten a Clips, que los organizas por temas o como quieras.

3. Objetos personalizables. Con seleccionar un objeto de la galería de imágenes, podría aparecer un panel con sus propiedades. La altura para los edificios, altura y anchura para las casas, color para las flores, etc.

Todavía no tengo claras las propiedades, aunque sí será algo cómodo para el usuario.


Este sería un trabajo MUY arduo, en especial el punto 3. Pero bueno, son solo opiniones, ideas. Me gustaría ayudar pero nosé cómo... (si estubieras haciendo un juego en vez de un editor te podría ayudar completando a mano las bases de datos o txt necesarios, pokemon es uno de los juegos que más datos necesita: nombres de pokemons, stats, tipos, objetos (de todo tipo), niveles en los que aprenden ataques, etc.

Voy a pasar regularmente para ver tus avances.

Gracias, espero ir añadiendo cositas pronto :)
Título: Re: Proyecto RPG 2D utilizando c#
Publicado por: Buffon en 25 de Marzo de 2010, 08:42:15 AM
Cita de: XÑA en 22 de Febrero de 2010, 10:12:56 AM
Bueno, tengo ahora una cuestión de nomenclatura.

¿Cómo nombrais los controles?

Por ejemplo, tenemos el menuBarItemButton1, ¿esto lo poneis como mBINuevo , por ejemplo?

Lo cierto es que no tengo una norma y me doy cuenta de que cada vez lo modifico todo. Había pensado llamarlo ctrl + nombre, pero claro, colisiona a veces porque puede haber más de un control que haga lo mismo, en mi caso, el trackBar y el TextEdit, sirven para cambiar el tamaño del grid.

¿Qué hacéis vosotros?

perdona pero no vi este mensaje y me gustaría contestarte.

A nivel de programación, qué diferencia hay entre poner _menuBarIzqBoton, _mBIB, _mb, _userInformationButton ?

No vas a ganar ni memoria ni velocidad de ejecución por poner un nombre de 4 letras a uno de 240, pero si vas a ganar una cosa, entendimiento de código.

prefiero tener lo siguiente:


function onGetUserList(evt:Event){}

<mx:Button id="bGetUserList" buttonDown="onGetUserList()">


a esto


function onButtonDown(evt:Event){}

<mx:Button id="bButton1MenuIzq" buttonDown="onButtonDown()">
Título: Re: Proyecto RPG 2D utilizando c#
Publicado por: Hpadrono en 26 de Junio de 2010, 09:48:25 PM
buenas soy nuevo me gusto este tema y veo que no se a actualizado el post desde febrero me gustaria saber si quedo en el olvido o siguio avanzando
Título: Re: Proyecto RPG 2D utilizando c#
Publicado por: XÑA en 28 de Julio de 2010, 09:58:32 PM
Ups, pues síque ha pasado ya el tiempo.

Pues lo cierto es que continué pero empecé a tener problemas de velocidad. Dibujar con el GUI es tremendamente lento. Así que tuve que programar bien el tema de los InvalidateRect, para que sólo se invalidara la zona que tocaba. Pero bueno, aún así, era muy muy lento.

Así que me planteé seriamente utilizar XNA, pero me pareció demasiado complicado hacerlo así. Hubiera tenido otras alternativas, como Direct2D que quizás me hubieran ido bien, pero como tengo Windows XP... :(

En fin, otro proyecto empezado..Aunque aprendí bastante sobre DevXpress!!!  ^_^
Título: Re: Proyecto RPG 2D utilizando c#
Publicado por: blau en 28 de Julio de 2010, 10:16:42 PM
Hombre, no hay que ser tan drastico, yo para editar siempre uso una mezcla de forms y xna.

En los forms pongo los botones, las listas, los combos, y en xna visualizo, e incluso muevo objetos con el raton en algunos editores.

Para muestra un Gui ;)

http://www.youtube.com/watch?v=8mfZjkqUcTE
Título: Re: Proyecto RPG 2D utilizando c#
Publicado por: Vicente en 28 de Julio de 2010, 10:32:47 PM
Cita de: XÑA en 28 de Julio de 2010, 09:58:32 PM
Ups, pues síque ha pasado ya el tiempo.

Pues lo cierto es que continué pero empecé a tener problemas de velocidad. Dibujar con el GUI es tremendamente lento. Así que tuve que programar bien el tema de los InvalidateRect, para que sólo se invalidara la zona que tocaba. Pero bueno, aún así, era muy muy lento.

Así que me planteé seriamente utilizar XNA, pero me pareció demasiado complicado hacerlo así. Hubiera tenido otras alternativas, como Direct2D que quizás me hubieran ido bien, pero como tengo Windows XP... :(

En fin, otro proyecto empezado..Aunque aprendí bastante sobre DevXpress!!!  ^_^

Podrías haber usado SlimDX y WPF, la verdad que es super fácil integrar las dos cosas, y SlimDX te iba a costar 0 aprender a usarlo ;)
Título: Re: Proyecto RPG 2D utilizando c#
Publicado por: XÑA en 31 de Julio de 2010, 09:41:31 AM
Me acabo de comprar un libro de WPF, bueno en realidad acabo de comprar los siguientes libros:

Professional C# 4.0 and .Net
ASP.Net 4.0
Professional WPF
Diseño web para dummies  :-\
Professional Visual Studio 2010

Como puedes ver, estoy a tope!!!! jajajaja

Bueno, el proyecto RPG me sirvió para conocer las limitaciones del GUI. Yo estaba acostumbrado a pintarlo todo de golpe sin problemas y con el GUI eso NO se puede hacer, con lo que aparecen nuevos problemas. Sin embargo como era lento y TODAVIA no pintaba con transparencias, pues pensé que no iba a ir a ningún lugar con eso.

Luego, como siempre, problemas de tiempo, y dejas el proyecto ahí aparcado. Pero aprendí a usar los controles de devExpress, que molan un montón y a como se programa un poco el GUI, que era algo que no había hecho nunca.

Y ahora vuelvo a tener algo de tiempo en verano y ...¡estoy estudiando IA! Ya tengo hecho un par de SteeringBehaviours!!! Por cierto, buscando por internet he encontrado un montón de cosas de Steerring con Jad!!!!

Es que siempre tengo la mosca detrás de la oreja con los juegos, haga lo que haga, me tiran muchísimo!

Un abrazo Vicente!!
Título: Re: Proyecto RPG 2D utilizando c#
Publicado por: Vicente en 31 de Julio de 2010, 03:14:59 PM
Ahora mismo para C# 4.0 y WPF, a mi los libros que más me gustan son:

C# in Depth 2nd Edition (aun no está a la venta, solo preview en PDF). Si solo te pudieras comprar un libro de C# en tu vida, este es el mejor.
CLR via C# 3rd Edition.

Pro WPF with C# 2008.
WPF in Action with Visual Studio 2008.

Los de WPF aunque sean con .NET 3.5 para aprender WPF están bastante bien. Aunque para WPF hay mucha documentación en la web, sobre todo de como diseñar las aplicaciones de WPF por dentro (MVVM).