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
Publicar un comentario