3. INTRODUCCION
• En este proyecto se hizo el estudio y
comprobación de la teoría aplicada acerca del
juego Buscaminas (Minesweeper), el objetivo
era investigar acerca de su impacto en el
Mercado, además de la realización del juego
en un formato APK para que sea instalado en
cualquier Móvil Android.
4. IDEA
• CREACION DE UNA APLICACIÓN PARA ANDROID, LA
CUAL LLEVA EL NOMBRE DE MINESWEEPER
(BUSCA MINAS).
5. JUSTIFICACION
• Lo creamos como un homenaje a los juegos
predeterminados en Microsoft que muchas veces se piensa
ya no tienen lugar en la actualidad, lo adaptamos a un
modo Móvil para todos aquellos que aun siguieran siendo
jugadores potenciales ya que, no es solo útil para el
entretenimiento, en ocasiones ha sido utilizada como
practica en el entorno educativo, por su estrategia
•
6. USOS DE LA APLICACION
• PRACTICA
• ENTRETENIMIENTO
• CONOCIMIENTO
8. • ¿Por qué nos interesa Android?
• Por dos razones:
• Primero, el hecho de que Google lo esté introduciendo y la
notoriedad que Android ha obtenido en un periodo de tiempo
tan corto.
• La segunda razón por la que Android es importante es porque
no es solo otra plataforma móvil con un menú telefónico y una
pantalla táctil. La arquitectura de Android permite un entorno
de software altamente personalizable gracias a su enlace de
ejecución de las acciones solicitadas y el código para satisfacer
estas solicitudes.
9. ASPECTO HISTORICO
Buscaminas (nombre original en inglés: Minesweeper) es un videojuego para
un jugador inventado por Robert Donner en 1989. El objetivo del juego es
despejar un campo de minas sin detonar ninguna.
El Buscaminas es, probablemente, el juego más popular de todos los
que Windows incluye y de paso, el más original en su concepto. ¿Quién
podría pensar que liberar un campo minado pudiese ser tan divertido?
pues Robert Donner y Curt Johnson, creadores de este clásico.
El Buscaminas vio la luz por primera vez dentro del Microsoft Entertaintment
Pack para Windows. Dos años más tarde reaparecería ya dentro de la
instalación estándar de Windows 3.1, y a partir de ahí en todas las sucesivas
entregas del sistema operativo de Microsoft.
10. SUS PRIMEROS CREADORES
Robert Donner y Curt Johnson se acreditan por
Microsoft como los autores de Buscaminas de Windows.
Buscaminas fue programado por Robert Donner, quien
comenzó a trabajar en Microsoft en mayo de 1989.
Originario de Winnipeg, Canadá, que ya tenía un grado
de Maestría en Ciencias de la Computación y había
escrito
11. CUESTIONARIO DE ESTUDIO DE MERCADO
A través de este proyecto creamos una encuesta compuesta por las
preguntas que están a continuación que fue aplicada a distintas
personas:
¿Conoce el juego Minesweeper (Buscaminas)?
¿Cómo se enteró de su existencia?
¿Alguna vez lo uso?
¿Con que frecuencia?
En una escala del 1 al 10 ¿Cómo lo valoraría?
12. En comparación a otros juegos del mismo tipo ¿Cómo lo cataloga?
¿Alguna vez lo ha recomendado o mostrado a otras personas?
¿Qué es lo que le gusto y lo que no, de este juego?
¿Qué cambios haría para mejorarlo?
¿Qué incrementaría tu potencial interés en este juego?
*LA ENCUESTA SE APLICO A 15 PERSONAS (LA ENCUESTA ESTUVO BASADA EN LA VERSION DE PC PARA
FUTURAS MEJORES EN LA APP MOVIL)
13. Esta grafica especifica la valoración del juego en pc según sus clientes, es un juego
clásico, que se sigue considerando entre los ciudadanos como arduamente atrayente,
además de un reto para la comunidad.
14. Esta grafica de pastel marca el número de personas que consideran aburrido
o entretenido
16. ¿COMO LO CREAMOS?
Creamos un proyecto llamado: BuscaMinas
Borramos el TextView que agrega
automáticamente el plug-in de Eclipse y
disponemos un Button y un LinearLayout:
19. LinearLayout layout = (LinearLayout)
findViewById(R.id.layout2);
fondo = new Tablero(this);
fondo.setOnTouchListener(this);
layout.addView(fondo);
casillas = new Casilla[8][8];
for (int f = 0; f < 8; f++) {
for (int c = 0; c < 8; c++) {
casillas[f][c] = new Casilla();
}
}
this.disponerBombas();
this.contarBombasPerimetro();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar
if it is present.
getMenuInflater().inflate(R.menu.activity_main,
menu);
return true;
}
public void presionado(View v) {
casillas = new Casilla[8][8];
for (int f = 0; f < 8; f++) {
for (int c = 0; c < 8; c++) {
casillas[f][c] = new Casilla();
}
}
this.disponerBombas();
this.contarBombasPerimetro();
activo = true;
fondo.invalidate();
}
20. @Override
public boolean onTouch(View v, MotionEvent event) {
if (activo)
for (int f = 0; f < 8; f++) {
for (int c = 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;
} else if (casillas[f][c].contenido == 0)
recorrer(f, c);
fondo.invalidate();
}
}
}
if (gano() && activo) {
Toast.makeText(this, "Ganaste", Toast.LENGTH_LONG).show();
activo = false;
}
return true;
}
class Tablero extends View {
public Tablero(Context context) {
super(context);
}
protected void onDraw(Canvas canvas) {
canvas.drawRGB(0, 0, 0);
int ancho = 0;
if (canvas.getWidth() < canvas.getHeight())
ancho = fondo.getWidth();
else
ancho = fondo.getHeight();
int anchocua = ancho / 8;
Paint paint = new Paint();
paint.setTextSize(20);
Paint paint2 = new Paint();
paint2.setTextSize(20);
paint2.setTypeface(Typeface.DEFAULT_BOLD);
paint2.setARGB(255, 0, 0, 255);
Paint paintlinea1 = new Paint();
paintlinea1.setARGB(255, 255, 255, 255);
int filaact = 0;
for (int f = 0; f < 8; f++) {
for (int c = 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
+ anchocua - 2, filaact + anchocua - 2, paint);
// linea blanca
canvas.drawLine(c * anchocua, filaact, c * anchocua
+ anchocua, filaact, paintlinea1);
canvas.drawLine(c * anchocua + anchocua - 1, filaact, c
* anchocua + anchocua - 1, filaact + anchocua,
paintlinea1);
21. 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) {
Paint bomba = new Paint();
bomba.setARGB(255, 255, 0, 0);
canvas.drawCircle(c * anchocua + (anchocua / 2),
filaact + (anchocua / 2), 8, bomba);
}
}
filaact = filaact + anchocua;
}
}
}
private void disponerBombas() {
int cantidad = 8;
do {
int fila = (int) (Math.random() * 8);
int columna = (int) (Math.random() * 8);
if (casillas[fila][columna].contenido == 0) {
casillas[fila][columna].contenido = 80;
cantidad--;
}
} while (cantidad != 0);
}
private boolean gano() {
int cant = 0;
for (int f = 0; f < 8; f++)
for (int c = 0; c < 8; c++)
if (casillas[f][c].destapado)
cant++;
if (cant == 56)
return true;
else
return false;
}
22. private void contarBombasPerimetro() {
for (int f = 0; f < 8; f++) {
for (int c = 0; c < 8; c++) {
if (casillas[f][c].contenido == 0) {
int cant = contarCoordenada(f, c);
casillas[f][c].contenido = cant;
}
}
}
}
int contarCoordenada(int fila, int columna) {
int total = 0;
if (fila - 1 >= 0 && columna - 1 >= 0) {
if (casillas[fila - 1][columna - 1].contenido == 80)
total++;
}
if (fila - 1 >= 0) {
if (casillas[fila - 1][columna].contenido == 80)
total++;
}
if (fila - 1 >= 0 && columna + 1 < 8) {
if (casillas[fila - 1][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 && columna - 1 >= 0) {
if (casillas[fila + 1][columna - 1].contenido == 80)
total++;
}
if (columna - 1 >= 0) {
if (casillas[fila][columna - 1].contenido == 80)
total++;
}
return total;
}
private void recorrer(int fil, int col) {
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, col - 1);
recorrer(fil + 1, col);
recorrer(fil - 1, col);
recorrer(fil - 1, col - 1);
recorrer(fil - 1, col + 1);
recorrer(fil + 1, col + 1);
recorrer(fil + 1, col - 1);
} else if (casillas[fil][col].contenido >= 1
&& casillas[fil][col].contenido <= 8) {
casillas[fil][col].destapado = true;
}
}
}