Rompe_Cabezas_IMG en VC# - visual studio 2012 – Por Joshyba
Pues esta es la tercera entrega de juegos en Visual C Sharp
y esta implementada conjuntamente con 2 alumnas del CONALEP plantel 022 de
Chiapa de Corzo, este juego tiene la idea del juego uno que es el del
rompecabezas ya que se trabajó con el evento clic de la picturebox, este cuenta
con 4 niveles.
Este juego tiene la poderosa ventaja de que puedes mover la
imagen en la posición que tu quieras, es decir no hay restricciones, por lo que
lo hace un juego fácil, pero también por las imágenes un poco difícil.
Nivel 1
Nivel 2
Nivel 3
Nivel 4
Nivela4 final 1
Nivela4 final 2
La ventana principal lee el jugador que tiene el mejor
tiempo y su nombre, información que se encuentra almacenada en el archivo
Data.dat.
Muy bien ahora vamos con el código:
Super clase del mejor tiempo:
class Mejor_Tiempo
{
string[] cad= new string[2];//arreglo que almacena el
nombre y la puntuacion
StreamWriter escritura; //clase
para escribir en el archivo
public Mejor_Tiempo() //lee el
archivo Data.dat
{
using (StreamReader sr = File.OpenText("Data.dat"))
{
int cont = 0;
String input;
while ((input = sr.ReadLine()) != null)
{
cad[cont] = input;//almacena la informacion en el arreglo
cont++;
}
sr.Close();
}
}
int mejor_tiempo() //retorna
el mejor tiempo en segundos
{
return Convert.ToInt32(cad[1]);
}
void escribir_mejor(string nom, string punto)//escribe el mejor
tiempo
{
escritura = new StreamWriter("Data.dat");//escribe el nuevo archivo
escritura.WriteLine(nom);//escribe la 1ra linea el nombre
escritura.WriteLine(punto); //escribe la 2da linea el tiempo
escritura.Close(); //cierra la escritura
}
public bool checa_mejor(string nomc,string puntoc)//reviza si el
tiempo jugado
{ //es
mejor al tiempo guardado
if(Convert.ToInt32(puntoc)<mejor_tiempo())
{
escribir_mejor(nomc, puntoc);
return true;
}
else
{
return false;
}
}
public string[] mejores()
{
return cad;//retorna el nombre del mejor
jugador
}
public string tiempo_dividido(string tiempo)//super funcion que
convierte los segundos
{// en
horas : minutos : segundos
Int32 segundos = Convert.ToInt32(tiempo);
int segun_final=segundos%60;
int minu=segundos/60;
int minutos=minu%60;
int horas=minu/60;
return horas.ToString()+":"+minutos.ToString()+":"+segun_final.ToString();//
retorna el tiempos bien claro
}
}
Super clase de las imágenes guardas:
class Imagenes
{
public Imagenes()
{
}
//*****
declaracion de las imagenes
string[] fondos={
"imagenes/Nivel1.jpg",
"imagenes/Nivel2.jpg",
"imagenes/Nivel3.jpg",
"imagenes/Nivel4.jpg",
};
string[] mini_fondos={
"imagenes/mini_Nivel1.jpg",
"imagenes/mini_Nivel2.jpg",
"imagenes/mini_Nivel3.jpg",
"imagenes/mini_Nivel4.jpg",
};
//carga
la imagen mini que se va jugar
public string cargar_Imagen_Mini(int posi)
{
return mini_fondos[posi];
}
public string cargar_Imagen(int posi)
{
return fondos[posi];
}
}
Ahora vamos con el código de los formularios, algo muy
importante es que todos comparte la varible NOmbreFull y TiempoFull, para ello
declaramos:
public static Form1 Main;
y en el constructor:
Form1.Main = this;
Formulario
1:
public static Form1 Main;
public int TiempoFinal = 0;//tiempo
total jugado
public string NombreFull = ""; //nombre del que esta jugando
Cuando carga el formulario leemos los ganadores
Iniciar_Ganadores();
En el botón de inciar el
juego:
if (textBox1.Text == "")//checamos si ya escribimos
el nuestro nombre
MessageBox.Show("Escribe tu
nombre");
else
{
Nivel1 n1 = new Nivel1();//si es asi cargamos el nivel
1
//n1.Tiempofinal
= this.TiempoFinal;
n1.NombreFull = textBox1.Text;//mandamos el nombre
n1.ShowDialog(); // y los mostramos
}
Funcion iniciar ganadores
private void Iniciar_Ganadores()
{
DGWGanadores.Columns.Clear();//limpiamos las columnas
DGWGanadores.Rows.Clear(); //limpiamos las filas
//DGWGanadores.ColumnCount
= 2;
DGWGanadores.Columns.Add("Name", "Nombre");//creamos las columnas
DGWGanadores.Columns.Add("Time", "Tiempo");
string[] mejores = new string[2];//creamos un arreglo del
tipos string
Mejor_Tiempo mt=new Mejor_Tiempo(); // cargamos la clase mejor
tiempo
mejores = mt.mejores(); //leemos los mejores
DGWGanadores.Rows.Add(mejores[0],
mt.tiempo_dividido(mejores[1])); // lo añadimos
}
Funcion final
public void Final()//cuando acaba el
juego se llama esta funcion
{
Mejor_Tiempo mt=new Mejor_Tiempo();
if(mt.checa_mejor(NombreFull,TiempoFinal.ToString()))
{
MessageBox.Show("Felicidades
"+NombreFull+" Haz logrado el mejor tiempo");
}
else
{
MessageBox.Show("Jajajaja
"+NombreFull+" Haz terminado, PERO NO con el mejor tiempo");
}
Iniciar_Ganadores();
}
Muy bien ahora vamos con el código de
los niveles, algo que hay que recalcar es que todos los niveles tienen la misma
lógica, lo único que cambia es la cantidad de ítems en el arreglo, por lo que
solo pondré los del nivel 1, también se agrego referencia a la dll de Windows media
player para reproducir mp3, y el sound player para reroducir audio wav para los
cliqueos.
Declaramos las variables
globales
public static Nivel1 n1;
public string NombreFull = "";
Mejor_Tiempo M_T = new Mejor_Tiempo();//cargamos el mejor tiempo
WindowsMediaPlayer wplayer = new WindowsMediaPlayer();//cargamos el reprductor wmp
public int Tiempofinal = 0; //iniciamos
el tiempo final en 0
int x=-1, y=-1; //valores
negativos para definir que no se ha dado ningun clic 1 y 2
Declaramos las imágenes y
el mapa del juego
string[] imagenes ={//cargamos
las imagenes en el arreglo
"imagenes/N1_a.jpg",
"imagenes/N1_b.jpg",
"imagenes/N1_c.jpg",
"imagenes/N1_d.jpg"
};
int[] mapa_juego ={//valores
de juego en posicion del mapa
3,2,
1,0,
};
En el load del
formulario cargamos:
wplayer.URL = "sonidos/Música_incidental_de_suspenso_tipo_Hollywood.mp3";//cargamos el sonido
wplayer.settings.volume = 40; //le ponemos bajitoo
wplayer.controls.play(); // y
damos play para reproducir
Imagenes img=new Imagenes(); //cargamos la clase imagenes
PBBien.Visible = false; //aqui ocultamos el picturebox final
A.ImageLocation =
imagenes[mapa_juego[0]];//cargamos el picture 1 y su
imagen
B.ImageLocation = imagenes[mapa_juego[1]];
C.ImageLocation =
imagenes[mapa_juego[2]];
D.ImageLocation =
imagenes[mapa_juego[3]];
pictureBox1.ImageLocation =
img.cargar_Imagen_Mini(0);//cargamos la imagen de guia
timer1.Enabled = true; // habilitamos el contador
Cargamos el timer:
Tiempofinal++;//cada segundo incrementamos en uno
label1.Text =
M_T.tiempo_dividido(Tiempofinal.ToString());//mostramos
el tiempo formateado
Nuestra super función pictures
que cambia la imagen del picture clicado:
private void pictures(int posi, int valor)//superfuncion que
muestra la imagen del picture
{//recibe
la posicion y el valor
switch (posi)
{
case 0:
A.ImageLocation =
imagenes[mapa_juego[valor]];
break;
case 1:
B.ImageLocation =
imagenes[mapa_juego[valor]];
break;
case 2:
C.ImageLocation =
imagenes[mapa_juego[valor]];
break;
case 3:
D.ImageLocation =
imagenes[mapa_juego[valor]];
break;
}
}
En cada picture en el evento clic únicamente llamamos
la función viendo( con su posición);
private void A_Click(object sender, EventArgs e)
{
viendo(0);//llama la funcino viendo
}
La función viendo es
para cambiar la imagen y el valor de cada picture de acuerdo con el clic uno y
el clic dos:
private void viendo(int posi)//esta funcion checa
el clic 1 y el clic2
{
int prex, prey; //variables
para almacenar el valor 1 y 2
if (x == -1)//si clic 1 =
negativo toma el valor de la posicion del
{
x = posi;//picturebox cliqueado
}
else if (y == -1 && x!=posi)//si clic 2 esta vacio y clic2 es diferente
{
y = posi; //se almacena el valor
//MessageBox.Show(x.ToString() +
"<>" + y.ToString());
pictures(x,
y); //se actualiza la imagen
pictures(y, x);
prex=mapa_juego[x];//se lee el valor
prey=mapa_juego[y];
mapa_juego[y]=prex; //y se actualiza
mapa_juego[x]= prey;
x = -1; //se resetea
y = -1;
}
gano(); //checamos si ya gano el juego
}
Y por ultimo la función del
ganador:
private void gano()
{
System.Media.SoundPlayer player = new System.Media.SoundPlayer();//carga la clase para el sonido
player.SoundLocation = @"sonidos/polish_xrikazen 7425_hifi.wav";//carga el sonido
player.Play(); // lo reproduce
bool Gano = true; //gano es verdadero
for (int x = 0; x < 4; x++) //se
reviza todo el mapa si cumple con las posiciones correctas
{
if (mapa_juego[x] != x)
Gano = false; //si hay uno que no se sale del for
}
if (Gano == true)//si salio bien
{
PBBien.Visible = true;//mostramos el picture de la img original
Imagenes img = new Imagenes();// la cargamos
PBBien.ImageLocation =
img.cargar_Imagen(0); // y la mostramos
timer1.Enabled = false; //paramos el timer
MessageBox.Show("Felicidades
has terminado el Primer Nivel en un Tiempo maximo de : " + M_T.tiempo_dividido(Tiempofinal.ToString()) + " ¿Listo para Seguir?");
Nivel2 N2 = new Nivel2();//cargamos el nivel2
N2.Tiempofinal = Tiempofinal;//le damos el nuevo tiempo
N2.NombreFull = NombreFull; //le pasamos el nombre
this.Hide(); // ocultamos nivel 1
wplayer.controls.stop();//paramos la musica
N2.ShowDialog(); //mostramos nivel 2
}
}
Muy bien ahora pues el codigo:
Nota: la dll wmp.dll no la adjunte en el rar.
Saludos y esto es todo con respecto a juegos por el momento.
Visita mis otras paginas:
Comentarios
Publicar un comentario