private static string MoveToString(DecisionMaker.Move move) { string wd = move.Word; string squareOne = move.FirstLetterPos.column + move.FirstLetterPos.row.ToString(); string squareTwo = move.LastLetterPos.column + move.LastLetterPos.row.ToString(); return($"{wd} {squareOne} {squareTwo}".ToLower()); }
private static DecisionMaker.Move ParseMove(string input) { List <string> parts = input.Split(' ').ToList(); string firstPosNumber = Regex.Match(parts[1], @"\d+").Value; string secondPosNumber = Regex.Match(parts[2], @"\d+").Value; var firstPos = (int.Parse(firstPosNumber), parts[1].Replace(firstPosNumber, "").ToCharArray()[0]); var lastPos = (int.Parse(secondPosNumber), parts[2].Replace(secondPosNumber, "").ToCharArray()[0]); //The squares should probably be validated... meh. var move = new DecisionMaker.Move(parts[0], firstPos, lastPos); return(move); }
public static void Load() { using (Stream stream = new FileStream("save.sav", FileMode.Open)) { using (StreamReader reader = new StreamReader(stream)) { Write("Loading letters... ", ConsoleColor.Red); //Read all 7 chars, even if they are spaces. We can remove those after. for (int i = 0; i < 7; i++) { Letters.Add((char)reader.Read()); } Letters.RemoveAll(ch => ch == ' '); Write("Done!", ConsoleColor.DarkCyan); Console.WriteLine(); Write("Loading moves (1/2)... ", ConsoleColor.Red); while (true) { var read = new List <char>(); char ch; StringBuilder wdB = new StringBuilder(); while (char.IsLetter(ch = (char)reader.Read())) { wdB.Append(ch); read.Add(ch); } if (ch == '/') { break; } StringBuilder idxB = new StringBuilder(); while (char.IsDigit(ch = (char)reader.Read())) { idxB.Append(ch); read.Add(ch); } var chs = idxB.ToString().ToCharArray(); int.TryParse(string.Join("", chs.Take(2)), out int idx1); int.TryParse(string.Join("", chs.Skip(2).Take(2)), out int idx2); var move = new DecisionMaker.Move(wdB.ToString(), Board.Squares.Keys.ToArray()[idx1], Board.Squares.Keys.ToArray()[idx2]); OwnMoves.Add(move); if (ch == '/') { break; } if (read.FastContains('/')) { break; } } Write("Done!", ConsoleColor.DarkCyan); Console.WriteLine(); Write("Loading moves (2/2)... ", ConsoleColor.Red); while (true) { var read = new List <char>(); char ch; StringBuilder wdB = new StringBuilder(); while (char.IsLetter(ch = (char)reader.Read())) { wdB.Append(ch); read.Add(ch); } if (ch == '/') { break; } StringBuilder idxB = new StringBuilder(); while (char.IsDigit(ch = (char)reader.Read())) { idxB.Append(ch); read.Add(ch); } var chs = idxB.ToString().ToCharArray(); int.TryParse(string.Join("", chs.Take(2)), out int idx1); int.TryParse(string.Join("", chs.Skip(2).Take(2)), out int idx2); var move = new DecisionMaker.Move(wdB.ToString(), Board.Squares.Keys.ToArray()[idx1], Board.Squares.Keys.ToArray()[idx2]); OpponentMoves.Add(move); if (ch == '/') { break; } if (read.FastContains('/')) { break; } } Write("Done!", ConsoleColor.DarkCyan); Console.WriteLine(); Write("Loading board... ", ConsoleColor.Red); string rows = "ABCDEFGHIJKLMNO"; for (int i = 0; i < 15; i++) { var squares = Board.GetRow(rows[i]); for (int j = 0; j < squares.Count; j++) { var square = squares[j]; char ch; if ((ch = (char)reader.Read()) != ' ') { Board.SetSquareContents(square, ch); } } } Write("Done!", ConsoleColor.DarkCyan); Console.WriteLine(); } } }
public static void Run() { LoadEverything(); Console.Write("How many players are there? (Not including me) "); int.TryParse(Console.ReadLine(), out int peoplePlaying); if (peoplePlaying == 0) { return; } GetLetters(); while (true) { try { for (int i = 0; i < peoplePlaying; i++) { var opponentMove = GetMoveInput(); if (!ScrabbleDictionary.Words.Contains(opponentMove.Word)) { PerformColor(ConsoleColor.DarkRed, () => { Console.WriteLine($"{opponentMove.Word} is not a valid Scrabble word!"); }); i--; } else { Game.Board.ExecuteMove(opponentMove, Board.MoveType.Opponent); PrintBoard(); } } DecisionMaker.Move selfMove = null; int considered = 0; int time = Time(() => { selfMove = Game.Brain.BestMove(out considered); }); PerformColor(ConsoleColor.Magenta, () => { Console.WriteLine($"Considered {considered} moves in {time} seconds."); }); Console.CursorVisible = true; if (selfMove.Equals(DecisionMaker.Move.Err)) { continue; } Game.Board.ExecuteMove(selfMove, Board.MoveType.Self); PrintBoard(); Console.WriteLine(MoveToString(selfMove)); Console.Write($"{selfMove.Word.ToLower()}: "); PerformColor(ConsoleColor.DarkBlue, () => { Console.Write($"'{ScrabbleDictionary.Definitions[selfMove.Word].Trim(null)}'"); }); Console.WriteLine(); GetLetters(); } catch (Exception e) { Console.WriteLine($"DEBUG: Encountered error: {e}"); } } }