Vous êtes sur la page 1sur 6

LAS PRIMERAS PULSACIONES EN

EL TABLERO
Objetivo: Completa tu proyecto de la semana pasada para jugar contra
un jugador automtico sin comprobar, de momento, el final de una
partida, basta con que se pueda colocar una ficha del color adecuado
(distinto al color del jugador automtico) al pulsar en la casilla
correspondiente. Para ello, lgicamente, debers comprobar que la
casilla es accesible.
Continuamos con el desarrollo de nuestro juego dando vida al tablero
que hemos diseado en la entrega anterior. Como has podido estudiar
en las ltimas unidades, la forma ms sencilla de ejecutar un mtodo
cuando se pulsa un botn de la interfaz es asignar el nombre del mtodo
al atributo android:onClick del botn correspondiente. As es como
vamos a dotar de funcionalidad al tablero del juego Conecta 4 en esta
entrega del proyecto.
Para completar esta entrega te sugerimos que partas del proyecto
anterior para reutilizar el fichero de diseo que ya has creado y, si te
sientes con fuerzas, incluso optimizarlo mediante un fichero de estilo,
como te explicamos en el punto nmero 1. Si quieres ir directamente al
grano, puedes pasar al punto nmero 2 para aadir al proyecto una
nueva clase (Game) donde iremos colocando todo lo relativo a las reglas
del juego.

1. ESTILOS
Antes de avanzar en este sentido, veamos cmo simplificar el fichero de
diseo de la entrega anterior mediante la definicin de estilos. Si lo
prefieres, puedes saltar directamente a la seccin "2. Lgica del juego".
En nuestra entrega anterior el fichero de diseo constaba de filas de
botones con un aspecto parecido al siguiente:

Para evitar tener que repetir cdigo innecesariamente resulta muy til
crear un nuevo estilo dentro del fichero styles.xml de la
carpeta /res/values. Un estilo permite asignar de una vez el valor de
un subconjunto de atributos. Ms concretamente, el estilo consta de una
serie de items, cada uno correspondiente a un atributo al que se asigna
un valor. El siguiente fichero introduce el estiloC4Button:

Gracias a este estilo, el fichero de diseo se simplifica bastante. Por


ejemplo, una fila del tablero queda reducida a lo siguiente (el
atributo contentDescription no se puede asignar a travs del estilo):

Ahora puedes aadir al estilo el item correspondiente al


atributoandroid:onClick de tal forma que cuando el jugador pulse un
botn, se ejecute el mtodo correspondiente de la lgica del juego.

2. LGICA DEL JUEGO


Vamos a centrar nuestra atencin en el desarrollo de la lgica del juego.
Vamos a aadir al proyecto una nueva clase de nombre Game, donde
vamos a colocar todo lo relativo a las reglas del juego. Dejaremos
en MainActivity todo aquello que tiene que ver con la interfaz. A
continuacin te explicamos los pasos que tienes que seguir.
Te recomendamos que intentes programar el cdigo desde cero. Sin
embargo, si te resulta demasiado complicado, tambin puedes
descargar esteproyecto donde encontrars algunas de las funciones que
describimos a continuacin sin terminar. No te resultar complicado
completar el cuerpo de estas funciones siguiendo las indicaciones que
encontrars en sus cabeceras. Antes de nada, es muy recomendable que
leas la explicacin que viene a continuacin.

Game
Una pieza fundamental de tu juego ser el tablero, un array de enteros
que refleja el estado del tablero, es decir, qu casillas estn ocupadas y
cules estn libres:

int tablero[][];
Por ejemplo, puedes marcar las posiciones libres con 0, las ocupadas por
la mquina con 1 y las ocupadas por el jugador con 2. No olvides utilizar
variablesfinal para almacenar estos valores constantes, en lugar de
literales.
No se trata de que implementes en este momento la lgica completa del
juego sino que programes algunos de los mtodos fundamentales para,
al menos, ir colocando fichas y que la interfaz del tablero las muestre
con colores diferentes de acuerdo con el jugador. Dejaremos para ms
adelante los mtodos que detectan si se han colocado cuatro fichas en
lnea.
Para empezar, en esta entrega debers programar al menos los
siguientes mtodos dentro de la clase Game:

Game(): constructor sin argumentos de la clase Game donde


se instancia el array tablero y se inicializan sus elementos con el cdigo
correspondiente a posicin vaca.

boolean sePuedeColocarFicha(int i, int j): este


mtodo devuelve true si se puede colocar una ficha en la posicin del
tablero pasada como argumento, y false en caso contrario. Ten en
cuenta que no basta con comprobar que la posicin est vaca, sino que
adems debe ser la posicin vaca ms baja de su columna.

void juegaMaquina(): actualiza el array tablero con un


movimiento de la mquina. De momento puedes asignar aleatoriamente
una posicin disponible, para lo que tendrs que utilizar el mtodo
anterior. Ms adelante, tendrs ocasin de refinar el algoritmo utilizado
por la mquina.
Adems de estos mtodos ser conveniente que aadas mtodos de
acceso al tablero para consultar el estado de cada posicin.

MainActivity
Pasemos ahora a la actividad MainActivity. Una de sus nuevas
incorporaciones es el array de identificadores, similar a la del proyecto
cha cha cha, que necesitars para acceder a los botones del tablero
mediante sus coordenadas:

private final int ids[][] = {{R.id.c0, R.id.c1, ...} ...};


Adems, debers aadir un miembro privado de tipo Game:
private Game game;
La actividad MainActivity de tu entrega anterior se va a poblar con
algunos mtodos nuevos, adems de adaptar los ya existentes:

void onCreate(): adems de inflar la interfaz del tablero


como ya hiciste en la entrega anterior, debers instanciar el miembro
privado de tipo Game.

int deIdentificadorAFila(int id): este mtodo nos


devuelve la fila del tablero correspondiente al botn cuyo identificador
se pasa como argumento.

int deIdentificadorAColumna(int id): este mtodo nos


devuelve la columna del tablero correspondiente al botn cuyo
identificador se pasa como argumento.

void pulsado(View v): mtodo callback que se ejecuta


cuando el jugador pulsa una posicin del tablero. Este mtodo deber
identificar las coordenadas del botn del tablero que se ha pulsado
mediante llamadas a los dos mtodos anteriores, averiguar si se puede
colocar ficha mediante el mtodo sePuedeColocarFicha() de Game y, si
es as, actualizar el arraytablero. Un toast ser til para informar al
jugador en el caso de que la posicin pulsada no est disponible. A
continuacin deber llamar al mtodojuegaMaquina() de Game y,
finalmente, dibujarTablero(), que se encargar de actualizar el
aspecto de la interfaz. Este ltimo mtodo se explica a continuacin.

void dibujarTablero(): dibuja el tablero de acuerdo con


los valores del array tablero, es decir, dependiendo de si la posicin
est vaca, ocupada por una ficha de la mquina u ocupada con una
ficha del jugador. Tendrs que desarrollar dos recursos XML nuevos,
similares a c4_button.xml, uno para representar las fichas del jugador
humano y otro para las fichas de la mquina.
En la siguiente imagen se muestran las fichas de la mquina en rojo:

Vous aimerez peut-être aussi