Mirando cosas del proyecto Mono (proyecto que permite ejecutar aplicaciones .NET en Linux y Mac) me he encontrado con otro llamado MonoXNA, el cual, por lo que he entendido, es una versión libre del Microsoft XNA.
Para el que no sepa lo que es el XNA... os pongo de la Wikipedia XD :
Cita de: Wikipedia: Microsoft XNA
Microsoft XNA (XNA's Not Acronymed, XNA no es un acrónimo) es un conjunto de herramientas con un entorno de ejecución administrado proporcionado por Microsoft que facilita el desarrollo de juegos de ordenador y de gestión. Intentos para liberar a los desarrolladores de juegos la creación de "repetitivo código"1 y traer diferentes aspectos de la producción de juego en conjunto de un único sistema2 el XNA es una herramientas que se anunció el 24 de marzo de 2004, en la Game Developers Conference en San José, California. La primera comunidad Technology Preview de XNA Build fue lanzado el 14 de marzo de 2006. XNA Game Studio 2.0 fue lanzado en diciembre de 2007, seguida de XNA Game Studio 3.0 en 30 de octubre de 2008.
XNA actualmente abarca secciones de Microsoft Game Development Sections, incluyendo el estándar Kit de desarrollo de Xbox y XNA Game Studio.
Es decir, es con lo que se crean los juegos amateur (también llamados "indie") que pululan por el XBox Arcade.
El mismo también está disponible para desarrollar juegos en Windows, y aunque no se el grado de desarrollo que lleva la versión libre, con su ayuda también se podrán ejecutar los mismos en Linux y Mac.
Voy a desempolvar el Visual Studio 2008 Express, porque de momento voy a hacer algunas cosas con el, y de paso, como quiero hacer una pequeña guía para configurar el CodeBlocks para trabajar con SDL, también la haré para hacer lo mismo con el Visual C++.
if(mouse_b&1&& mouse_b&2){ textprintf_ex(buffer,font,50,50,makecol(250,0,255),-1,"Estas pulsando el boton izquierdo y el boton derecho"); } else { if(mouse_b&1) textprintf_ex(buffer,font,50,50,makecol(255,0,0),-1,"Estas pulsando el boton izquierdo");
if(mouse_b&2) textprintf_ex(buffer,font,50,50,makecol(0,0,255),-1,"Estas pulsando el boton derecho");
if(mouse_b&4) textprintf_ex(buffer,font,50,50,makecol(0,255,0),-1,"Estas pulsando el boton central"); }
Komodo No es por insinuar nada.. pero ese puntero no sirve xD
tiene q ser al reves... pork el unico pixel que se marca al pulsar es 1,1 .. lo demas es solo dibujo...
Utilize una vez allegro.. parece util para los Juegos en 3D.. pero para eso aprenderia Ogre3D (motor grafico) ya que utilizar OpenGL seria demaSiado complejo para un juego x.X
He modificado un poco el código, ordenándolo para que quede más "mono" .
No se porque, pero cuando corrijo textos de mensajes retocando espacios, a veces en la previsualización, los espacios aparecen como cosas al estilo de %20 o algo así (no recuerdo ahora mismo el texto exacto).
Veamos como hice el juego del Snake en C# (como el de Nokia) aunque el mio tiene una especie de Level Manager. Solo uso GDI+ o Graphics en .Net, vamos es lo mismo xD UPDATE: VIDEITO!! Note: Ojo, es importante conocer que jugué rapidito, y que ya yo me pasé todos mis niveles sin trampa! xD luego subo otro video en donde aparezcan las culebritas malas! Note2: Hay que esperar que se procese el videito!
Primero hacemos el modelo de componentes:
El SnakeBase, ba a ser nuestra base de la culebra, porque este juego tiene culebras malas xD http://pastebin.com/3FyG9igV
Ahora explicamos las partes importantes y cruciales del juego:
Para dibujar el juego creé un control de usuario para así usar la DLL en la aplicación que yo quiera xD estilo easternegg xD
Cómo? bueno, primero el control debe tener los siguientes atributos:
Código
SetStyle(ControlStyles.SupportsTransparentBackColor, true);//auto descriptivo SetStyle(ControlStyles.AllPaintingInWmPaint, true);// Siempre true si usamos UserPaint, con esto evitamos flicker en el formulario SetStyle(ControlStyles.UserPaint, true);//Auto descriptivo SetStyle(ControlStyles.DoubleBuffer, true);// Habilita el double buffer en el control SetStyle(ControlStyles.Opaque, true);
Como el juego es MUY sencillo lo hice con un Timer xD No el renderizado sino el control del juego como tal., Este es el código del tick:
Código
t.Interval= board.Interval;//define la velocidad del juego, si cambia de nivel, el interval se reduce por lo que va "más" rápido. board.GoStep();//Ya veremos que hace esto más adelante board.UpdateArray();//actualiza el array del juego this.Refresh();// como se hizo una modificación en el array se refresca el control para que se invoke el evento paint.
Ahora me dirán, de qué array habla este loco xD, pues el juego en sí es un array, es una forma fácil de hacerlo y va bastante bien. En cada posición hay un número que indica qué hay en el tablero
en el OnPaint del control que se llama cuando hacemos Refresh se hace lo siguiente:
Código
e.Graphics.Clear(Color.Black);//borra todo y lo pinta de negro DrawBoard(e);// dibuja el tablero como tal DrawSnakeAndLevel(e);// self descriptive -.- DrawStat(e);// dibuja el score y eso..
Se qué no debo publicar codes muy largos, pero es necesario hacerlo para no ir tanto a pastebin
//iteramos todos las posiciones del array y vemos cada valor y pintamos lo correspondiente for(int y =0; y < boardSize; y++) { for(int x =0; x < boardSize; x++) { Brush tmpColor =null; if(array[x, y]==1) tmpColor = Brushes.Green;//1 es la culebra buena, es decir el player, y es verde :D elseif(array[x, y]==5) //si es 5 es una manzana, por lo que no pintamos un punto de un color e especial //la manzana se pinta dento de ese method por lo que le referenciamos el e.Graphics DrawApple(e.Graphics, Brushes.Red, Pens.Green, x, y); elseif(array[x, y]==99) tmpColor = Brushes.Blue; elseif(array[x, y]==50) tmpColor = Brushes.Yellow; elseif(array[x, y]==1000) DrawApple(e.Graphics, Board.m_extraItem.Color, Pens.Green, x, y);// 1000 es un extra item!