private void NuevaPartida() { Turno = 0; currentNodo = mainNodo; estado = new int[10] { -1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; AsignarCeldas(estado); }
private int CrearArbolJugadas(NodoJuego nodo) { int nJugadasNivel = 9 - nodo.nivel; int celda = 1; int jugador = nodo.nivel % 2 == 0 ? TipoJugador.Humano : TipoJugador.IA; //Thread.Sleep(500); while (nJugadasNivel > 0) { if (nodo.estado[celda] == 0) { NodoJuego nodoHijo = new NodoJuego(nodo); nodo.estado.CopyTo(nodoHijo.estado, 0); nodoHijo.nivel = nodo.nivel + 1; nodoHijo.estado[celda] = jugador; int res = EvaluarEstado(nodoHijo.estado, jugador); if (res == 3) { if (jugador == TipoJugador.Humano) { nodoHijo.valor = 1; } else { nodoHijo.valor = -1; } } nodo.valor += nodoHijo.valor; nodo.nodos.Add(nodoHijo); NumeroNodos++; nJugadasNivel--; CrearArbolJugadas(nodoHijo); } celda++; } if (nodo.nivel < 9 && nodo.nodoPadre != null) { if (jugador == TipoJugador.Humano) { nodo.nodoPadre.valor += nodo.nodos.Max(n => n.valor); } else { nodo.nodoPadre.valor += nodo.nodos.Min(n => n.valor); } } return(0); }
public MainWindowViewModel() { C1Command = new DelegateCommand(ProcesarEstadoMaquina1); C2Command = new DelegateCommand(ProcesarEstadoMaquina2); C3Command = new DelegateCommand(ProcesarEstadoMaquina3); C4Command = new DelegateCommand(ProcesarEstadoMaquina4); C5Command = new DelegateCommand(ProcesarEstadoMaquina5); C6Command = new DelegateCommand(ProcesarEstadoMaquina6); C7Command = new DelegateCommand(ProcesarEstadoMaquina7); C8Command = new DelegateCommand(ProcesarEstadoMaquina8); C9Command = new DelegateCommand(ProcesarEstadoMaquina9); NewCommand = new DelegateCommand(NuevaPartida); mainNodo.nivel = 0; Task.Run(() => CrearArbolJugadas(mainNodo)).ContinueWith(c => currentNodo = mainNodo); }
private void ProcesarEstadoJuego(int v) { int jugador = Turno % 2 == 0 ? 1 : 2; if (jugador == TipoJugador.Humano) // Humano { if (estado[v] == 0) { estado[v] = jugador; Turno++; } else { return; } if (Turno == 9) { AsignarCeldas(estado); return; } } // IA { foreach (var nodo in currentNodo.nodos) { var c = estado.SequenceEqual(nodo.estado); if (c) { currentNodo = nodo.nodos.OrderBy(n => n.valor).First(); currentNodo.estado.CopyTo(estado, 0); break; } } Turno++; } AsignarCeldas(estado); }
public NodoJuego(NodoJuego nPadre) { nodoPadre = nPadre; nodos = new List <NodoJuego>(); }