Don Cangrejo EI2001-9 Taller de Proyecto 2011 Semestre Otoño Grupo 5 Natalia Hernández Gustavo Moreno Felipe Quintanilla
Objetivo Robot de lego que juega “Four in a line” contra una persona. Analiza jugadas y posiciona en el casillero más conveniente del tablero su ficha
Descripción Don Cangrejo juega el clásico juego “Connect 4” que consiste en colocar 4 fichas juntas en una columna, fila o diagonal para poder ganar. Utiliza motores para posicionar fichas y sensor de color para detectar las jugadas del oponente. Capaz de posicionar su jugada en un casillero adecuado. Sensor de choque para asignar turnos.
Robot Tablero
Riel
Coche Superior
Brazo
Programa Clases: Casilla: cada una indica su posición y estado Tablero: arreglo de 6x7 con todas las casillas del tablero. Linea: arreglo de 4 casillas Lista: lista enlazada con líneas ganadoras. Jugadas: lista enlazada con las 7 casillas donde puede realizar su jugada.
Métodos: casilla Tablero.leer(): revisa el tablero para detectar la jugada del oponente void Jugadas.actualizar(): actualiza la lista enlazada para tener siempre las casillas disponibles void Tablero.jugar(casilla): mueve al robot para jugar en la casilla señalada void casilla.cambiarEstado(int)
int linea.puntaje(casilla) le asigna un puntaje dependiendo de cómo esta llenada la línea y de si la casilla c está en la línea -1--> la casilla no está en la línea, el main la ignorará -2--> hay fichas de los dos jugadores -3--> 4 fichas del robot, se acabó el juego el robot gana -4--> 4 fichas del oponente, se acabó el juego el robot pierde >0--> puntaje obtenido
Exceptions: RobotGana RobotPierde
Programa try{ while(true){ Casilla r=Tablero.leer() r.cambiarEstado(2); jugadas.actualizar(); for(nodoB aux=jug.primero;aux!=null;aux=aux.sig){aux.p=0;} //resetea los puntajes de las casillas a cero; for(nodoB aux=jug.primero;aux!=null;aux=aux.sig){ for(nodoA bux=lis.primero;bux!=null;bux=bux.sig){ q=bux.valor.puntaje(aux.cas); if(q==-2) {bux.ant.sig=bux.sig;bux.sig.ant=bux.ant;} //elimina la linea de la lista else if(q>=0)aux.p+=q;//suma el puntaje obtenido else if(q==-3)throw new RobotGana(); else if(q==-4)throw new RobotPierde(); }
//una vez que se revisan todas las casillas y se asignan los puntajes se elige la mejor Casilla mejor;int m=0; for(nodoB aux=jug.primero;aux!=null;aux=aux.sig){ if(m<aux.p){mejor=aux.cas;m=aux.p;} Tablero.jugar(mejor); mejor.cambiarEstado(1) jugadas.actualizar(); } }
Cosas que faltan : Fichas Calibrarlo para que pueda moverse correctamente Probar la efectividad del algoritmo
Una Pequeña demostración…