Menú

Mostrar Mensajes

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

Mostrar Mensajes Menú

Mensajes - [D4N93R]

#741
.NET (C#, VB.NET, ASP) / Re: Error con notifyIcon c#
10 Septiembre 2010, 20:55 PM
Podrïas postear el stackTrace...
#742
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!
[youtube=425,350]http://www.youtube.com/watch?v=CgvD00qXmFs[/youtube]


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 (csharp) [Seleccionar]
public enum Direction
{
     Up=0, Left, Down, Right
}


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 (csharp) [Seleccionar]

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 (csharp) [Seleccionar]
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 (csharp) [Seleccionar]

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 :D
Código (csharp) [Seleccionar]

private void DrawSnakeAndLevel(PaintEventArgs e)
{
   if (Board.WaitForUser)
       return;
   int[,] array = board.Array;
           
   //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
           else if (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);
           else if (array[x, y] == 99)
               tmpColor = Brushes.Blue;
           else if (array[x, y] == 50)
               tmpColor = Brushes.Yellow;
           else if (array[x, y] == 1000)
               DrawApple(e.Graphics, Board.m_extraItem.Color, Pens.Green, x, y); // 1000 es un extra item!

           if (tmpColor != null)
               e.Graphics.FillRectangle(tmpColor, (x * lineSize) + 6, (y * lineSize) + 31, lineSize, lineSize);
       }
   }
}

private void DrawApple(Graphics e, Brush brush, Pen pen, int x, int y)
{
  //bueno, intento dibujar una forma de manzana, solo Dios sabe que hice en el code xD
   e.FillPie(brush, (x * lineSize) + 5, (y * lineSize) + 30,
                   lineSize + 1, lineSize + 1, -60, 330);
   e.DrawLine(pen,
       (x * lineSize) + lineSize / 2 + 5, (y * lineSize) + 30 + lineSize / 2,
       (x * lineSize) + lineSize + 5, (y * lineSize) + 30);
   e.DrawLine(pen,
       (x * lineSize) + lineSize / 2 + 5, (y * lineSize) + 30 + lineSize / 2,
       (x * lineSize) + lineSize + 5, (y * lineSize) + 30 - 1);
   e.DrawLine(pen,
       (x * lineSize) + lineSize / 2 + 5, (y * lineSize) + 30 + lineSize / 2,
       (x * lineSize) + lineSize + 5, (y * lineSize) + 30 - 2);
}


private void DrawBoard(PaintEventArgs e)
{
   // nada mas que un rectangulo azul xD
   e.Graphics.DrawRectangle(Pens.Blue, 5, 30, boardSize * lineSize+1, boardSize * lineSize+1);
}


private void DrawStat(PaintEventArgs e)
{
   //puros strings , es decir los scores.. bastante self descriptive el code..
   e.Graphics.DrawString("Level: " + board.LevelIndex.ToString(), new Font("Arial", 10), Brushes.LightBlue, 5, 5);
   e.Graphics.DrawString("Lives: " + ((board.Lives < 0) ? "0" : board.Lives.ToString()), new Font("Arial", 10), Brushes.LightBlue, 110, 5);
   e.Graphics.DrawString("Score: " + Board.Score.ToString().PadLeft(9,'0'), new Font("Arial", 10), Brushes.LightBlue, 199, 5);
           
   if (Board.Lives == 0)
       e.Graphics.DrawString("Game Over", new Font("Arial", 20), Brushes.LightBlue, (boardSize * lineSize) / 4, ((boardSize * lineSize) / 2)+40);
   if (Board.WaitForUser)
       e.Graphics.DrawString("Press any key to start level " + Board.LevelIndex.ToString(), new Font("Arial", 15), Brushes.LightBlue, 20, ((boardSize * lineSize) / 2) + 15);

   e.Graphics.DrawString("Items Left: " + board.LevelTotalItems.ToString(), new Font("Arial", 12), Brushes.LightBlue, 120,boardSize * lineSize +40);
}


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
#743
.NET (C#, VB.NET, ASP) / Re: Error con notifyIcon c#
10 Septiembre 2010, 19:12 PM
en el notifyIcon1_DoubleClick deberia ser:
Código (csharp) [Seleccionar]
if (this.WindowState == FormWindowState.Minimized)
    this.WindowState = FormWindowState.Normal;
this.Activate();
#744
.NET (C#, VB.NET, ASP) / Re: keyascii = 0
10 Septiembre 2010, 17:20 PM
Bueno, si quieres usar algo con algún evento del tipo keypress puedes usar el Enum http://msdn.microsoft.com/en-us/library/system.windows.forms.keys.aspx

Si lo que quieres es el ascii puedes hacer un cast del char a byte .. :) o usar System.Text.Encoding.ASCII.GetChars()

Deja de leer guias de vb6 para aprender .net que eso no se puede :) , te recomiendo este site:
http://elguille.info/NET/cursoVB.NET/Default.aspx

Saludos!
#745
No fumen marihuana, acabarán programando en .Net   :xD
#746
Si ariath, a mi a veces me ha pasado eso.. :S
#747
Yo preferiría usar lirrlicht.. :P A ver que sale
#748
Yeap, Someday, like everybody else xD
#749
.NET (C#, VB.NET, ASP) / Re: Recomendacion libro
10 Septiembre 2010, 14:50 PM
Traten siempre de leer libros nuevos, aunque, la versión 2.0 siempre va a ser el core de los demás frameworks, al menos por ahora es así.

Un buen libro sobre el 2.0 y uno sobre el 4.0 es lo ideal, aunque no tengo idea de ningún autor o editorial :P
#750
Bueno puedes hacer un enum con los valores Hexadecimales y luego hacer bitwise. De esa forma puedes pasar los meses que quieras.

Por ejemplo

Código (csharp) [Seleccionar]
short january  =0X01    ;// binario es 0000000001
short october =0X200   ;// binario es 1000000000
long result=january  & october ; //binario es 1000000001


Fíjate que es & y no && que es diferente.

Un saludo!