public Winboard() { commandConsumer = new BlockingCollection <string>(); GameHistory = new Stack <Move>(); engine = new Engine(new Board(), this); timer = new ChessClock(0, 0, 10); force = true; }
/// <summary> /// Process incoming commands /// </summary> /// <param name="input">Incoming string from interface</param> public void Comunication(string input) { string command = input.Split(' ').First(); string messageBody = input.Substring(command.Length).Trim(); switch (command) { case "protover": { if (messageBody == "2") { Console.WriteLine(@"feature setboard=1 usermove=1 colors=0 reuse=1 time=1 myname=""The Turk"" name=1 done=1"); } break; } case "force": { force = force ? false : true; break; } case "new": { engine.Board.SetUpBoard(); GameHistory.Clear(); force = true; break; } case "setboard": { engine.Board.Fen = messageBody; GameHistory.Clear(); break; } case "quit": { Environment.Exit(Environment.ExitCode); break; } case "usermove": { ReceivedMove(messageBody); if (force) //Make move after received a move { Console.WriteLine("force mode is on"); var result = engine.Search(timer.timeForPerMove); Console.WriteLine("move " + result.BestLine.First().IONotation()); engine.Board.MakeMove(result.BestLine.First()); GameHistory.Push(result.BestLine.First()); } break; } case "go": { force = true; var result = engine.Search(timer.timeForPerMove); Console.WriteLine("move " + result.BestLine.First().IONotation()); engine.Board.MakeMove(result.BestLine.First()); GameHistory.Push(result.BestLine.First()); break; } case "undo": { engine.Board.TakeBackMove(GameHistory.Pop()); break; } case "level": { timer = new ChessClock(messageBody); break; } case "st": { timer = new ChessClock("0 0 " + messageBody); break; } case "fen": //just for testing purposes { engine.Board.Fen = "rn4kr/4p1bp/2pp4/1p3P1Q/2P1P3/6R1/PBp3PP/RN4K1 w - - 0 24 "; GameHistory.Clear(); break; } case "score": //just for testing purposes { var score = Evaluation.Evaluate(engine.Board); engine.Board.ShowBoard(); Console.WriteLine("score : " + score); break; } case "show": //just for testing purposes { engine.Board.ShowBoard(); break; } } }