Sunteți pe pagina 1din 8

Problema:

Implementar el juego del Buscaminas. Crear una grilla de 8*8 celdas.


1 - Creamos un proyecto llamado: BuscaMinas
Lo almacenamos en el paquete: com.example.buscaminas
Borramos el TextView que agrega automticamente el plug-in de Eclipse
y disponemos un Button y un LinearLayout:

Luego codificamos las clases BuscaMinasActivity y Casilla:


packagecom.example.buscaminas;
publicclassCasilla{
publicintx,y,ancho;
publicintcontenido=0;
publicbooleandestapado=false;
publicvoidfijarxy(intx,inty,intancho){
this.x=x;
this.y=y;
this.ancho=ancho;
}

publicbooleandentro(intxx,intyy){
if(xx>=this.x&&xx<=this.x+ancho&&yy>=this.y&&yy<=this.y+ancho)
returntrue;
else
returnfalse;
}
}

Y la clase:
packagecom.example.buscaminas;
importandroid.app.Activity;
importandroid.content.Context;
importandroid.graphics.Canvas;
importandroid.graphics.Paint;
importandroid.graphics.Typeface;
importandroid.os.Bundle;
importandroid.view.Menu;
importandroid.view.MotionEvent;
importandroid.view.View;
importandroid.view.View.OnTouchListener;
importandroid.view.Window;
importandroid.view.WindowManager;
importandroid.widget.LinearLayout;
importandroid.widget.Toast;
publicclassMainActivityextendsActivityimplementsOnTouchListener{
privateTablerofondo;
intx,y;
privateCasilla[][]casillas;
privatebooleanactivo=true;
@Override
protectedvoidonCreate(BundlesavedInstanceState){
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);
LinearLayoutlayout=(LinearLayout)findViewById(R.id.layout2);
fondo=newTablero(this);
fondo.setOnTouchListener(this);
layout.addView(fondo);
casillas=newCasilla[8][8];
for(intf=0;f<8;f++){
for(intc=0;c<8;c++){
casillas[f][c]=newCasilla();
}
}
this.disponerBombas();
this.contarBombasPerimetro();
}
@Override
publicbooleanonCreateOptionsMenu(Menumenu){
//Inflatethemenu;thisaddsitemstotheactionbarifitis
present.
getMenuInflater().inflate(R.menu.activity_main,menu);
returntrue;
}
publicvoidpresionado(Viewview){
casillas=newCasilla[8][8];
for(intf=0;f<8;f++){
for(intc=0;c<8;c++){
casillas[f][c]=newCasilla();
}
}
this.disponerBombas();
this.contarBombasPerimetro();
activo=true;
fondo.invalidate();
}
@Override
publicbooleanonTouch(Viewview,MotionEventevent){
if(activo)
for(intf=0;f<8;f++){
for(intc=0;c<8;c++){
if(casillas[f][c].dentro((int)event.getX(),
(int)event.getY())){
casillas[f][c].destapado=true;
if(casillas[f][c].contenido==80){
Toast.makeText(this,"Booooooooommmmmmmmmmmm",
Toast.LENGTH_LONG).show();
activo=false;
}elseif(casillas[f][c].contenido==0)
recorrer(f,c);
fondo.invalidate();

}
}
}
if(gano()&&activo){
Toast.makeText(this,"Ganaste",Toast.LENGTH_LONG).show();
activo=false;
}
returntrue;
}
classTableroextendsView{
publicTablero(Contextcontext){
super(context);
}
protectedvoidonDraw(Canvascanvas){
canvas.drawRGB(0,0,0);
intancho=0;
if(canvas.getWidth()<canvas.getHeight())
ancho=fondo.getWidth();
else
ancho=fondo.getHeight();
intanchocua=ancho/8;
Paintpaint=newPaint();
paint.setTextSize(20);
Paintpaint2=newPaint();
paint2.setTextSize(20);
paint2.setTypeface(Typeface.DEFAULT_BOLD);
paint2.setARGB(255,0,0,255);
Paintpaintlinea1=newPaint();
paintlinea1.setARGB(255,255,255,255);
intfilaact=0;
for(intf=0;f<8;f++){
for(intc=0;c<8;c++){
casillas[f][c].fijarxy(c*anchocua,filaact,anchocua);
if(casillas[f][c].destapado==false)
paint.setARGB(153,204,204,204);
else
paint.setARGB(255,153,153,153);
canvas.drawRect(c*anchocua,filaact,c*anchocua
+anchocua2,filaact+anchocua2,paint);
//lineablanca
canvas.drawLine(c*anchocua,filaact,c*anchocua
+anchocua,filaact,paintlinea1);
canvas.drawLine(c*anchocua+anchocua1,filaact,c
*anchocua+anchocua1,filaact+anchocua,
paintlinea1);
if(casillas[f][c].contenido>=1
&&casillas[f][c].contenido<=8
&&casillas[f][c].destapado)

canvas.drawText(
String.valueOf(casillas[f][c].contenido),c
*anchocua+(anchocua/2)8,
filaact+anchocua/2,paint2);
if(casillas[f][c].contenido==80
&&casillas[f][c].destapado){
Paintbomba=newPaint();
bomba.setARGB(255,255,0,0);
canvas.drawCircle(c*anchocua+(anchocua/2),
filaact+(anchocua/2),8,bomba);
}
}
filaact=filaact+anchocua;
}
}
}
privatevoiddisponerBombas(){
intcantidad=8;
do{
intfila=(int)(Math.random()*8);
intcolumna=(int)(Math.random()*8);
if(casillas[fila][columna].contenido==0){
casillas[fila][columna].contenido=80;
cantidad;
}
}while(cantidad!=0);
}
privatebooleangano(){
intcant=0;
for(intf=0;f<8;f++)
for(intc=0;c<8;c++)
if(casillas[f][c].destapado)
cant++;
if(cant==56)
returntrue;
else
returnfalse;
}
privatevoidcontarBombasPerimetro(){
for(intf=0;f<8;f++){
for(intc=0;c<8;c++){
if(casillas[f][c].contenido==0){
intcant=contarCoordenada(f,c);
casillas[f][c].contenido=cant;
}
}
}
}

intcontarCoordenada(intfila,intcolumna){
inttotal=0;
if(fila1>=0&&columna1>=0){
if(casillas[fila1][columna1].contenido==80)
total++;
}
if(fila1>=0){
if(casillas[fila1][columna].contenido==80)
total++;
}
if(fila1>=0&&columna+1<8){
if(casillas[fila1][columna+1].contenido==80)
total++;
}
if(columna+1<8){
if(casillas[fila][columna+1].contenido==80)
total++;
}
if(fila+1<8&&columna+1<8){
if(casillas[fila+1][columna+1].contenido==80)
total++;
}
if(fila+1<8){
if(casillas[fila+1][columna].contenido==80)
total++;
}
if(fila+1<8&&columna1>=0){
if(casillas[fila+1][columna1].contenido==80)
total++;
}
if(columna1>=0){
if(casillas[fila][columna1].contenido==80)
total++;
}
returntotal;
}
privatevoidrecorrer(intfil,intcol){
if(fil>=0&&fil<8&&col>=0&&col<8){
if(casillas[fil][col].contenido==0){
casillas[fil][col].destapado=true;
casillas[fil][col].contenido=50;
recorrer(fil,col+1);
recorrer(fil,col1);
recorrer(fil+1,col);
recorrer(fil1,col);
recorrer(fil1,col1);
recorrer(fil1,col+1);
recorrer(fil+1,col+1);
recorrer(fil+1,col1);

}elseif(casillas[fil][col].contenido>=1
&&casillas[fil][col].contenido<=8){
casillas[fil][col].destapado=true;
}
}
}
}

La interfaz visual de la aplicacin es:

S-ar putea să vă placă și