elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado:


+  Foro de elhacker.net
|-+  Media
| |-+  Juegos y Consolas (Moderador: Randomize)
| | |-+  Desarrollo de videojuegos
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 2 [3] 4 5 6 7 8 9 10 11 12 13 14 15 16 Ir Abajo Respuesta Imprimir
Autor Tema: Desarrollo de videojuegos  (Leído 187,496 veces)
Komodo


Desconectado Desconectado

Mensajes: 352



Ver Perfil
Re: [Hilo oficial] Desarrollo de Videojuegos
« Respuesta #20 en: 10 Septiembre 2010, 14:06 pm »

Sacar información de lo que hace el cursor no es nada complicado gracias a Allegro, gracias a este code, podemos conseguir una especie de shooter.

Os pongo el code y una pantalla de lo que hace, no explicaré nada porque es más sencillo que el agua.

Pantalla:


Code:

Código
  1. #include <allegro.h> //It's my love
  2.  
  3. //BY P4|3L0-KOMODO
  4.  
  5. int main()
  6. {
  7.    allegro_init();
  8.    install_mouse();
  9.    install_keyboard();
  10.  
  11.    set_color_depth(16);
  12.    set_gfx_mode(GFX_AUTODETECT_FULLSCREEN, 1024, 768, 0, 0);
  13.  
  14.    BITMAP* mouse_image = load_bitmap("pointer.bmp", 0);
  15.    BITMAP* buffer = create_bitmap(screen->w, screen->h);
  16.  
  17.    position_mouse(50,50);
  18.  
  19.    while(!key[KEY_ESC])
  20.    {
  21.        draw_sprite(buffer, mouse_image, mouse_x, mouse_y);
  22.        textprintf_ex(buffer,font,mouse_x,(mouse_y-30),makecol(0,255,255),-1,"%i %i",mouse_x,mouse_y);
  23.  
  24.        if(mouse_b&1 && mouse_b&2){
  25.            textprintf_ex(buffer,font,50,50,makecol(250,0,255),-1,"Estas pulsando el boton izquierdo y el boton derecho");
  26.        }
  27.        else
  28.        {
  29.            if(mouse_b&1)
  30.                textprintf_ex(buffer,font,50,50,makecol(255,0,0),-1,"Estas pulsando el boton izquierdo");
  31.  
  32.            if(mouse_b&2)
  33.                textprintf_ex(buffer,font,50,50,makecol(0,0,255),-1,"Estas pulsando el boton derecho");
  34.  
  35.            if(mouse_b&4)
  36.                textprintf_ex(buffer,font,50,50,makecol(0,255,0),-1,"Estas pulsando el boton central");
  37.        }
  38.  
  39.        blit(buffer, screen, 0, 0, 0, 0, screen->w, screen->h);
  40.        clear_bitmap(buffer);
  41.    }
  42.  
  43.    return 0;
  44.  
  45. } END_OF_MAIN()
  46.  

Necesitais el pointer.bmp, que sería simple y llanamente un bmp con forma de puntero.



Espero que os guste.


« Última modificación: 10 Septiembre 2010, 15:20 pm por Ariath » En línea


Ariath


Desconectado Desconectado

Mensajes: 2.099


Ver Perfil WWW
Re: [Hilo oficial] Desarrollo de Videojuegos
« Respuesta #21 en: 10 Septiembre 2010, 14:58 pm »

Esto... ¿Me pasa solo a mí el verte los caracteres acentuados como interrogaciones?

Es parecido a SDL por lo que veo.

Por cierto... ¿Qué son estos dos parámetros?

textprintf_ex(buffer,font,50,50,makecol(255,0,0),-1,"Estas pulsando el boton izquierdo");

Salu2


P.D: Acordaos de usar las etiquetas GeSHi, que queda el código mucho más presentable. Si solo es añadirle el =cpp a la primera etiqueta del code :P .


En línea

Komodo


Desconectado Desconectado

Mensajes: 352



Ver Perfil
Re: [Hilo oficial] Desarrollo de Videojuegos
« Respuesta #22 en: 10 Septiembre 2010, 15:10 pm »

no, ariath es que esto es de http://foro.code-makers.net/forum/ y cambiaron la BD ahora edito.

Hace ya mucho que no toco allegro, pero lo makecol es el color... RGB algo obvio si ves que los valores son 3 y no superan 255 jajaja

y el otro pues ni idea, me lo aprendi usando el -1 y en todos se usa -1.

Ahora edito y añado más codes ;D
En línea


EvilGoblin


Desconectado Desconectado

Mensajes: 2.323


YO NO LA VOTE!


Ver Perfil
Re: [Hilo oficial] Desarrollo de Videojuegos
« Respuesta #23 en: 10 Septiembre 2010, 15:16 pm »

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... :P

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
En línea

Experimental Serial Lain [Linux User]
[D4N93R]
Wiki

Desconectado Desconectado

Mensajes: 1.646


My software never has bugs. Its just features!


Ver Perfil WWW
Re: [Hilo oficial] Desarrollo de Videojuegos
« Respuesta #24 en: 10 Septiembre 2010, 15:19 pm »

Yo preferiría usar lirrlicht.. :P A ver que sale
En línea

Ariath


Desconectado Desconectado

Mensajes: 2.099


Ver Perfil WWW
Re: [Hilo oficial] Desarrollo de Videojuegos
« Respuesta #25 en: 10 Septiembre 2010, 15:22 pm »

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).

Salu2
En línea

Komodo


Desconectado Desconectado

Mensajes: 352



Ver Perfil
Re: [Hilo oficial] Desarrollo de Videojuegos
« Respuesta #26 en: 10 Septiembre 2010, 15:22 pm »

¿Por qué a ver?

por cierto me funcionaba.
En línea


[D4N93R]
Wiki

Desconectado Desconectado

Mensajes: 1.646


My software never has bugs. Its just features!


Ver Perfil WWW
Re: [Hilo oficial] Desarrollo de Videojuegos
« Respuesta #27 en: 10 Septiembre 2010, 16:09 pm »

Si ariath, a mi a veces me ha pasado eso.. :S
En línea

EvilGoblin


Desconectado Desconectado

Mensajes: 2.323


YO NO LA VOTE!


Ver Perfil
Re: [Hilo oficial] Desarrollo de Videojuegos
« Respuesta #28 en: 10 Septiembre 2010, 18:19 pm »

¿Por qué a ver?

por cierto me funcionaba.

Si quisieras apuntar precisamente a un objeto pequeño no podrias...

El pixel que funciona de puntero es 1,1 (osea la esquina superior izquierda...)

Claro, almenos que lo hagas con algun programa y sea .cur que le podes indicar que pixel es el que funciona como cursor para hacer click
En línea

Experimental Serial Lain [Linux User]
[D4N93R]
Wiki

Desconectado Desconectado

Mensajes: 1.646


My software never has bugs. Its just features!


Ver Perfil WWW
Re: [Hilo oficial] Desarrollo de Videojuegos
« Respuesta #29 en: 10 Septiembre 2010, 19:54 pm »

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!! :D
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

Direction es solo un enum:
Código
  1. public enum Direction
  2. {
  3.      Up=0, Left, Down, Right
  4. }

Esta es nuestra culebra buena http://pastebin.com/wmYxxitm
Y este es la clase para las malas: http://pastebin.com/eVZWeCKG

Clase para los niveles(Level) http://pastebin.com/NEcQ4VWX
Y esta es la clase que administra los niveles: http://pastebin.com/Z8ipvYCk

Los extraItems como las manzanitas esas son estas: http://pastebin.com/sBCA5Af7
Y el board es el siguiente: http://pastebin.com/m9R5VmTi

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
  1. SetStyle(ControlStyles.SupportsTransparentBackColor, true); //auto descriptivo
  2. SetStyle(ControlStyles.AllPaintingInWmPaint, true); // Siempre true si usamos UserPaint, con esto evitamos flicker en el formulario
  3. SetStyle(ControlStyles.UserPaint, true); //Auto descriptivo
  4. SetStyle(ControlStyles.DoubleBuffer, true); // Habilita el double buffer en el control
  5. 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
  1. 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.
  2. board.GoStep(); //Ya veremos que hace esto más adelante
  3. board.UpdateArray(); //actualiza el array del juego
  4. this.Refresh(); // como se hizo una modificación en el array se refresca el control para que se invoke el evento paint.
  5.  

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
  1. e.Graphics.Clear(Color.Black); //borra todo y lo pinta de negro
  2. DrawBoard(e); // dibuja el tablero como tal
  3. DrawSnakeAndLevel(e); // self descriptive -.-
  4. DrawStat(e); // dibuja el score y eso..
  5.  


Se qué no debo publicar codes muy largos, pero es necesario hacerlo para no ir tanto a pastebin :D
Código
  1. private void DrawSnakeAndLevel(PaintEventArgs e)
  2. {
  3.    if (Board.WaitForUser)
  4.        return;
  5.    int[,] array = board.Array;
  6.  
  7.    //iteramos todos las posiciones del array y vemos cada valor y pintamos lo correspondiente
  8.    for (int y = 0; y < boardSize; y++)
  9.    {
  10.        for (int x = 0; x < boardSize; x++)
  11.        {
  12.            Brush tmpColor = null;
  13.            if (array[x, y] == 1)
  14.                tmpColor = Brushes.Green; //1 es la culebra buena, es decir el player, y es verde :D
  15.            else if (array[x, y] == 5)
  16.                //si es 5 es una manzana, por lo que no pintamos un punto de un color e especial
  17.                //la manzana se pinta dento de ese method por lo que le referenciamos el e.Graphics
  18.                DrawApple(e.Graphics, Brushes.Red, Pens.Green, x, y);
  19.            else if (array[x, y] == 99)
  20.                tmpColor = Brushes.Blue;
  21.            else if (array[x, y] == 50)
  22.                tmpColor = Brushes.Yellow;
  23.            else if (array[x, y] == 1000)
  24.                DrawApple(e.Graphics, Board.m_extraItem.Color, Pens.Green, x, y); // 1000 es un extra item!
  25.  
  26.            if (tmpColor != null)
  27.                e.Graphics.FillRectangle(tmpColor, (x * lineSize) + 6, (y * lineSize) + 31, lineSize, lineSize);
  28.        }
  29.    }
  30. }
  31.  
  32. private void DrawApple(Graphics e, Brush brush, Pen pen, int x, int y)
  33. {
  34.   //bueno, intento dibujar una forma de manzana, solo Dios sabe que hice en el code xD
  35.    e.FillPie(brush, (x * lineSize) + 5, (y * lineSize) + 30,
  36.                    lineSize + 1, lineSize + 1, -60, 330);
  37.    e.DrawLine(pen,
  38.        (x * lineSize) + lineSize / 2 + 5, (y * lineSize) + 30 + lineSize / 2,
  39.        (x * lineSize) + lineSize + 5, (y * lineSize) + 30);
  40.    e.DrawLine(pen,
  41.        (x * lineSize) + lineSize / 2 + 5, (y * lineSize) + 30 + lineSize / 2,
  42.        (x * lineSize) + lineSize + 5, (y * lineSize) + 30 - 1);
  43.    e.DrawLine(pen,
  44.        (x * lineSize) + lineSize / 2 + 5, (y * lineSize) + 30 + lineSize / 2,
  45.        (x * lineSize) + lineSize + 5, (y * lineSize) + 30 - 2);
  46. }
  47.  
  48.  
  49. private void DrawBoard(PaintEventArgs e)
  50. {
  51.    // nada mas que un rectangulo azul xD
  52.    e.Graphics.DrawRectangle(Pens.Blue, 5, 30, boardSize * lineSize+1, boardSize * lineSize+1);
  53. }
  54.  
  55.  
  56. private void DrawStat(PaintEventArgs e)
  57. {
  58.    //puros strings , es decir los scores.. bastante self descriptive el code..
  59.    e.Graphics.DrawString("Level: " + board.LevelIndex.ToString(), new Font("Arial", 10), Brushes.LightBlue, 5, 5);
  60.    e.Graphics.DrawString("Lives: " + ((board.Lives < 0) ? "0" : board.Lives.ToString()), new Font("Arial", 10), Brushes.LightBlue, 110, 5);
  61.    e.Graphics.DrawString("Score: " + Board.Score.ToString().PadLeft(9,'0'), new Font("Arial", 10), Brushes.LightBlue, 199, 5);
  62.  
  63.    if (Board.Lives == 0)
  64.        e.Graphics.DrawString("Game Over", new Font("Arial", 20), Brushes.LightBlue, (boardSize * lineSize) / 4, ((boardSize * lineSize) / 2)+40);
  65.    if (Board.WaitForUser)
  66.        e.Graphics.DrawString("Press any key to start level " + Board.LevelIndex.ToString(), new Font("Arial", 15), Brushes.LightBlue, 20, ((boardSize * lineSize) / 2) + 15);
  67.  
  68.    e.Graphics.DrawString("Items Left: " + board.LevelTotalItems.ToString(), new Font("Arial", 12), Brushes.LightBlue, 120,boardSize * lineSize +40);
  69. }
  70.  

Bueno por ahora eso es todo, si checkan el código y no entienden o no están seguros de qué hace, postean y respondemos..

Un saludo :P
« Última modificación: 10 Septiembre 2010, 20:25 pm por [D4N93R] » En línea

Páginas: 1 2 [3] 4 5 6 7 8 9 10 11 12 13 14 15 16 Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines