[C] proyecto sobre scrabble en mente, dudas sobre la "IA"

Iniciado por Traxza, 14 Mayo 2013, 21:23 PM

0 Miembros y 1 Visitante están viendo este tema.

Traxza

Buenas tardes, llevo semanas calentándome la cabeza hasta que me decido postear mi "problema" para pedir ideas.

Estoy trabajando en un proyecto en C standard (con algo de c++ pero poco), en el juego scrabble mas concretamente,
y tengo por ahora el proyecto casi terminado, pero para que soporte un jugador o 2 jugadores "humanos", mi problema viene cuando quiero implementar una especie de IA o robot para jugar contra un jugador humano, no hago mas que darle vueltas a la cabeza pero o se me ocurren locuras o no se me ocurre nada.

No vengo al foro a que me den las cosas hechas ni mucho menos, tan solo me gustaría que quien quiera poner su granito de arena me aporte alguna idea, y añadir que el proyecto es para aprender.

Para hacer una idea a quien lea el post, tengo una estructura en el tablero de juego así:

struct casilla
{
int bonus;//si es por dos o por tres
int tipobonus;//si es de letra o de palabra
bool ocupado;//controla si ya esta ocupada
bool candidata;//controla si puede ser ocupada
char letra;//letra
int valor;//valor en puntos
bool nueva;//se controla si es de las recién colocadas
bool puntuado;//se controla cada turno si esta ficha ha sido puntuada
};

Estoy abierto a modificaciones en la estructura sin problemas.

Por ahora soy capaz de formar palabras con las 7 letras del "estante" del robot, pero sin tener en cuenta las letras del tablero, por otra parte, si tuviese en cuenta alguna letra o conjunto de letras sé que debería forzar que esas letras se encuentren en la palabra final en el mismo orden.

Gracias por vuestra atención.

amchacon

Podemos pensar en, segun las palabras que disponga el bot. Generar una lista de palabras equivalentes o seudoequivalentes (seudoequivalente es igual pero faltando la
ultima/primera letra). Calcular los puntos de cada palabra y coger la que más tiene, después sería buscar alguna letra "libre" con la que cruzar (colocar la palabra y detectar si hay alguna palabra en horizontal o vertical).

Creo que deberías seguir ese camino. De momento intenta apañarte una función que te devuelva las palabras posibles respecto a un cojunto de letras desordenadas...
Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar

OmarHack

Si quieres algo profesional busca una lista con las palabras del diccionario para que el bot maneje. También puedes ponerle dificultad, y esta variará según el tamaño que le pongas a la base de datos con las palabras. Lleva mucho trabajo, pero si le pones 100 parabras, le vas a ganar siempre, todo depende de las letras que generes para usar.
I like to test things.

Traxza

Cita de: amchacon en 14 Mayo 2013, 23:07 PM
De momento intenta apañarte una función que te devuelva las palabras posibles respecto a un cojunto de letras desordenadas...

Sí, he creado una función que recoge una cadena de caracteres y forma todas las palabras posibles (que hay en un diccionario binario con 75.000 palabras)con esas letras, en milésimas de segundo, pero sin tener en cuenta las del tablero (por ahora), mañana seguiré a ver que puedo sacar de todo esto, gracias

amchacon

Perfecto, ahora lo ideal sería encontrar un "cruce" donde meter.

Por no complicarse mucho, coge la ultima letra de una palabra y busca otra igual en el tablero. Cada letra que encuentres en el tablero debe cumplir el siguiente requisito:

- Que no haya ninguna otra letra ocupada en n+1 espacios a la izquierda (donde n es la longitud de la palabra).


Despues ya, intenta generalizarlo para cruzar en vertical, de izquierda a derecha...
Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar