Ir al contenido



Foto

Juego TicTacToe!


  • Por favor identifícate para responder
8 respuestas en este tema

#1 Khronos

Khronos

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 56 mensajes

Escrito 15 agosto 2010 - 08:31

El otro día estaba aburrido e hice el mítico juego del 3 en raya en Delphi. Aún se echan unos vicios xD

Imagen Enviada

Imagen Enviada

Y aquí tenéis todo el código fuente con el ejecutable compilado:

http://www.megaupload.com/?d=Y0HL5SUW

Saludos ;)
  • 0

#2 esocrates

esocrates

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 102 mensajes
  • LocationArgentina

Escrito 15 agosto 2010 - 09:40

Hola Khronos;
Está muy bueno el juego.
Muchas gracias por compartir el código.
Un saludo
  • 0

#3 cadetill

cadetill

    Advanced Member

  • Moderadores
  • PipPipPip
  • 994 mensajes
  • LocationEspaña

Escrito 15 agosto 2010 - 12:59

Pues yo no he podido descargarlo, Megaupload me dice esto "El archivo al que está intentando acceder está temporalmente desactivado."

No obstante, un par de preguntillas; se juega jugador contra jugador o jugador contra máquina. Si es éste último caso, has implementado algo de IA o son movimientos aleatorios? Si has implementado algo de IA, cómo la has hecho?

Gracias :)

Nos leemos

  • 0

#4 Khronos

Khronos

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 56 mensajes

Escrito 15 agosto 2010 - 01:13

Hola cadetill, subí el archivo .rar a mediafire tambien:
http://www.mediafire...r2686b2y4qyypol

Juegas contra la máquina y sí, tiene cierto nivel de IA pero también algo de movimientos aleatorios, me explico: Empiezas moviendo tu, el PC escanea la tabla:



delphi
  1. FTable: array [1..3, 1..3] of integer;



Si encuentra que la máquina tiene 2 en raya, coloca la tercera y gana la partida. Empieza a jugar para ganar la máquina a toda costa, después, si no encuentra 2 en raya, juega para evitar que el jugador humano gane, poniendo su ficha en la posición para evitar que el jugador humano haga un 3 en raya. Si no se cumple ninguna de estas condiciones, busca una posición aleatoria sin ocupar y pone su ficha allí. Realmente, sólo usa el movimiento aleatorio en la primera y segunda jugada, o cuando se queda sin opciones, luego juega a ganar la máquina y si no evita que el jugador humano gane. El código es algo complicado, son muchísimos bucles y muchos condicionales.

Saludos.
  • 0

#5 Delphius

Delphius

    Advanced Member

  • Administrador
  • 5.825 mensajes
  • LocationArgentina

Escrito 15 agosto 2010 - 01:24

Hola, no vi el código pero parece tener buena pinta.

Creo que a lo que Cadetill apuntaba es si ponías en práctica conceptos vistos en Sistemas Expertos. Uno de ellos, y que por lo general se lo explica casualmente con el tic-tac-toe o tres en raya o ta-te-ti es el algoritmo Minimax o Min-Max.

El algoritmo consiste en armar un árbol con las posibles jugadas. Se van intercalando las jugadas de ambos oponentes en cada rama. Luego basándose en alguna heurística se obtienen los máximos y mínimos: se busca minimizar la máxima pérdida. En términos simples: se busca la mejor jugada del oponente a fin de minimizarla.

Como estos árboles son muy costosos, e impráctico recorrerlos a todas las ramas, se acompaña a este algoritmo con una poda denominada poda alfa-beta. Básicamente la idea es "podar" el árbol y no recorrer las ramas por las que se sabe que ya no conducen a alguna ventaja.

Saludos,
  • 0

#6 cadetill

cadetill

    Advanced Member

  • Moderadores
  • PipPipPip
  • 994 mensajes
  • LocationEspaña

Escrito 15 agosto 2010 - 01:45

Buenas,

Sí, efectivamente, me refería a algo así Delphius. Además, y para acelerar estos árboles, cada rama suele hacerse en un hilo de ejecución independiente. Esto hace que el proceso consuma muchos recursos, sobre todo si se baja en muchos niveles en el árbol, de ahí que los buenos programas de este tipo (ajedrez, 3 en ralla, .....) necesiten de grandes máquinas para su buen funcionamiento.

Yo recuerdo en mi época de estudiante haber realizado este juego con 3 niveles en el árbol, en C en linux :) Qué tiempos aquellos!! jejejeje Ahora ya no sabría ni cómo empezar :D

No obstante, el planteamiento es bueno y simula una especie de IA :)

Gracias por compartirlo ;)

Nos leemos

  • 0

#7 Khronos

Khronos

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 56 mensajes

Escrito 15 agosto 2010 - 02:08

Suena muy interesante lo que comentáis, pero parece muy complejo, no creo que mi cabeza de para tanto  :

Saludos.
  • 0

#8 Delphius

Delphius

    Advanced Member

  • Administrador
  • 5.825 mensajes
  • LocationArgentina

Escrito 15 agosto 2010 - 05:44

Suena muy interesante lo que comentáis, pero parece muy complejo, no creo que mi cabeza de para tanto  :

Saludos.

No te preocupes, no eres el único. Yo también batallé con los conceptos. Al comienzo todo suena a japonés, pero una vez que lo lees unas 20 veces ya empiezas a hablarlo... sushi, wasabi, arigató y demás... :D

挨拶、
  • 0

#9 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 13.424 mensajes
  • LocationMéxico

Escrito 15 agosto 2010 - 09:11

Gracias por compartir el programa amigo Khronos. (y)

Salud OS
  • 0