Juego Moviendo la bolita en VC#, Visual studio 2012



Pues seguimos con los juego en C#, pero en este caso tendremos que mover una pelotita dentro de un pictureBox en partes donde si se permite, para ello nuestra lógica será que si podemos mover en donde haya ceros y no donde haya unos
Ok, basándonos en esa lógica vamos a crea un mapa de 400px por 400px y cada valor tendrá una imagen 40px por 40px, resultado una mapa de 100 valores.


Para ello vamos declarar las siguientes variables:

Usaremos runtime.interopservices
using System.Runtime.InteropServices;

Las variables globales
[DllImport("user32.dll")]//para mover la posicion del mouse
        public static extern int SetCursorPos(int x, int y);//obtiene la posicion del mouse
        int x=390, y=390; //valores del x y y globales
        int Nivel_Global = 1; //nivel actual del juego
        bool esta_jugando = false; //valor que detecta si esta jugando o no
        bool pase = false; //pase para pasar
        int seg = 0,min=0; //variables del tiempo

        int[,] posicionx ={ //posiciones valor y pixeles en X
                            {0,40},
                            {1,80},
                            {2,120},
                            {3,160},
                            {4,200},
                            {5,240},
                            {6,280},
                            {7,320},
                            {8,360},
                            {9,400},
                        };
        int[,] posiciony ={//posiciones valor y pixeles en Y
                            {0,40},
                            {10,80},
                            {20,120},
                            {30,160},
                            {40,200},
                            {50,240},
                            {60,280},
                            {70,320},
                            {80,360},
                            {90,400},
                        };


Y los mapas globales:

        int[] nivel1 ={ //mapa nivel 1
                        2,0,0,1,0,0,0,1,1,1,
                        0,1,0,1,0,1,0,0,0,1,
                        0,1,0,0,0,1,0,1,0,0,
                        0,1,1,1,1,1,0,1,1,1,
                        1,0,0,0,1,0,0,0,1,1,
                        1,1,1,0,1,1,1,0,0,0,
                        0,1,1,1,0,0,1,1,1,0,
                        0,1,1,1,0,0,1,0,1,0,
                        0,1,0,0,0,0,0,0,0,0,
                        0,0,0,1,1,1,1,1,1,0,
                    };

        int[] nivel2 ={  //mapa nivel 2
                        1,1,1,1,1,1,1,1,0,2,
                        1,1,1,1,1,1,1,0,0,1,
                        1,1,1,1,1,1,0,0,1,1,
                        1,1,1,1,1,0,0,1,1,1,
                        1,1,1,1,1,0,1,1,1,1,
                        1,1,1,1,1,0,1,1,1,1,
                        1,1,1,1,1,0,0,1,1,1,
                        1,1,1,1,1,1,0,0,1,1,
                        1,1,1,1,1,1,1,0,0,1,
                        1,1,1,1,1,1,1,1,0,0,
                    };

        int[] nivel3 ={ //mapa nivel 3
                        0,0,0,0,0,0,0,0,0,0,
                        0,1,1,1,1,1,1,1,1,0,
                        0,1,1,1,1,1,1,1,1,0,
                        0,1,1,1,1,1,1,1,1,0,
                        0,1,1,1,1,1,1,1,1,0,
                        0,1,1,1,1,1,1,1,1,0,
                        0,1,1,1,1,1,1,1,1,0,
                        0,1,1,1,1,1,1,1,1,0,
                        0,1,1,1,1,1,1,1,1,0,
                        0,1,1,1,1,1,1,1,1,2,
                    };

        int[] nivel4 ={ //mapa nivel 4
                        0,0,0,0,0,0,0,0,0,0,
                        0,1,1,1,1,1,1,1,1,0,
                        0,1,0,0,0,0,0,0,1,0,
                        0,1,0,1,1,1,1,0,1,0,
                        0,1,0,1,0,2,1,0,1,0,
                        0,1,0,1,0,1,1,0,1,0,
                        0,1,0,1,0,0,0,0,1,0,
                        0,1,0,1,1,1,1,1,1,0,
                        0,1,0,0,0,0,0,0,0,0,
                        0,1,1,1,1,1,1,1,1,1,
                    };

Muy bien ahora en el picture en el evento cuando se mueve el mouse mostraremos la posición del mouse y checaremos su se puede o no mover la pelotita:
        private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
        {
            //vamos a utilizar esta informacion para saber como se mueve el mouse
            label2.Text = "X=" + e.Location.X.ToString() + "---" + "Y=" + e.Location.Y.ToString();
            if (esta_jugando == true)
            {
                if (checa_si(e.Location.X, e.Location.Y) == true)
                {
                    x = e.Location.X;//mueve la bolita en X
                    y = e.Location.Y;//mueve la bolita en Y
                    pase = false;
                }
                else
                {
                    if (pase == false)
                    {
                        MessageBox.Show("Haz perdido jajaja, Tramposo(a) si tratas de cruzar");
                        Nivel_Global = 1;
                        x = 390;
                        y = 390;
                        esta_jugando = false;
                        seg = 0;//se resetea el tiempo
                        min = 0;
                        timer1.Enabled = false;//y se para el timer
                    }
                }
            }
            this.Refresh();//se actualiza el picture
        }

En un botón para iniciar el juego:
        private void button1_Click(object sender, EventArgs e)
        {
            pictureBox1.ImageLocation = "imagenes/nivel_1.png";//colocamos la imagen de fondo
            esta_jugando = true; //activamos el juego
            timer1.Enabled = true; //y activamos el timer
        }
En el picture pintamos la imagen:
        private void pictureBox1_Paint(object sender, PaintEventArgs e)
        {
            e.Graphics.DrawImage(Image.FromFile("imagenes/ball.png"), x-10,y-10, 32, 32);
        }
La función checa_si recibe como parámetros de valores las posiciones x,y del mouse ymediante esas posiciones se genera un valor de x que son del 0,1,2,3,4,5,6,7,8,9 y valores de y que son 0,10,20,30,40,50,60,70,80,90, por lo que en suma se generan valores totales de 0 al 99 es decir las 100 posiciones:
        private bool checa_si(int xx,int yy)//Checa si se puede mover
        {//obteniendo la posicion en la que se encuentra el cursor
            int posicionfinal = 0;
            //checando x
            for(int a=0;a<9;a++)
            {
                if (xx >= posicionx[a, 1] && xx <= posicionx[a+1, 1])//si esta dentro del rango
                {
                    posicionfinal+=posicionx[a+1,1-1];
                    break;
                }
            }
            //checandoy
            for (int a = 0; a < 9; a++)
            {
                if (yy >= posiciony[a, 1] && yy <= posiciony[a+1, 1])
                {
                    posicionfinal += posiciony[a+1, 1-1];
                    break;
                }
            }
            label1.Text=posicionfinal.ToString();//muestra la posicion
            //si toca los puntos validos incrementa de nivel
            if (nivel1[posicionfinal] == 2 && Nivel_Global==1 )
            {
                pase = true;
                x=390; y=390;
                pictureBox1.ImageLocation = "imagenes/nivel_2.png";
                Nivel_Global++;
                SetCursorPos(900, 550);
               
            }
            if (nivel2[posicionfinal] == 2 && Nivel_Global == 2)
            {
                pase = true;
                x=15; y=390;
                pictureBox1.ImageLocation = "imagenes/nivel_3.png";
                Nivel_Global++;
                SetCursorPos(80, 550);
            }
            if (nivel3[posicionfinal] == 2 && Nivel_Global == 3)
            {
                pase = true;
                x = 15; y = 390;
                pictureBox1.ImageLocation = "imagenes/nivel_4.png";
                Nivel_Global++;
                SetCursorPos(80, 550);
            }
            if (nivel4[posicionfinal] == 2 && Nivel_Global == 4)
            {
                MessageBox.Show("Felicidades - Haz Ganado");
            }
            if (checa_posi(posicionfinal))//checa si toca un cero o un 1
                return true;
            else
                return false;
        }

La función checa si es la que dice si se puede o no moverse la pelotita:
        private bool checa_posi(int posi)// checa en esa posicion si hay un 1 o un 0
        {
            bool previo=false;
            switch (Nivel_Global)
            {
                case 1:
                    if (nivel1[posi] == 0 || nivel1[posi] == 2)
                    {
                        previo = true;
                    }
                    break;
                case 2:
                    if (nivel2[posi] == 0)
                    {
                        previo = true;
                    }
                    break;
                case 3:
                    if (nivel3[posi] == 0)
                    {
                        previo = true;
                    }

                    break;
                case 4:
                    if (nivel4[posi] == 0)
                    {
                        previo = true;
                    }
                    break;
            }
            return previo;
        }
Y por ultimo el contador de tiempo super sencillo:
        private void timer1_Tick(object sender, EventArgs e)
        {//contador sencillo
            seg++;
            if(seg==60){
                seg=0;
                min++;
            }
            Time.Text = min.ToString() + ":" + seg.ToString();
        }



Visita mis otras paginas:

Comentarios

Entradas populares de este blog

Juego del ahorcado en C# (C Sharp)

RompeCabezas - Juego 1 - VC# 2012

Escribiendo en los TextField de un Pdf con Visual Basic y iTextSharp