private void CreateIterationStateFile(String folderPath) { var replayFile = new StreamWriter(folderPath + System.IO.Path.DirectorySeparatorChar + Properties.Settings.Default.SettingReplayFolder + System.IO.Path.DirectorySeparatorChar + "iteration" + _iteration + Properties.Settings.Default.SettingStateFileExtension); var mazeForFile = new Maze(_maze); if (_secondMazePlayer == _currentPlayer.GetSymbol()) { mazeForFile.SwapPlayerSymbols(); } replayFile.Write(mazeForFile.ToFlatFormatString()); replayFile.Close(); }
private Player DeterminIfWinner(Enums.GameOutcome gameOutcome, Maze mazeFromPlayer, Player winner) { mazeFromPlayer.SwapPlayerSymbols(); _maze = mazeFromPlayer; if (_maze.FindCoordinateOf(_secondMazePlayer).IsEmpty) { _maze.SetSymbol(Properties.Settings.Default.MazeCenterX, Properties.Settings.Default.MazeCenterY, _secondMazePlayer); } if (gameOutcome != Enums.GameOutcome.ProceedToNextRound) { winner = GameJudge.DetermineWinner(_playerPool, gameOutcome); } return(winner); }
private Maze CreateIterationStateFile(String folderPath) { var replayFile = new StreamWriter(Path.Combine(folderPath, Properties.Settings.Default.SettingReplayFolder, "iteration" + _iteration + Properties.Settings.Default.SettingStateFileExtension)); var mazeForFile = new Maze(_maze); if ((_currentPlayer != null) && (_secondMazePlayer == _currentPlayer.GetSymbol())) { mazeForFile.SwapPlayerSymbols(); } replayFile.Write(mazeForFile.ToFlatFormatString()); replayFile.Close(); return(mazeForFile); }
private Player DeterminIfWinner(Enums.GameOutcome gameOutcome, Maze mazeFromPlayer, Player winner) { mazeFromPlayer.SwapPlayerSymbols(); _maze = mazeFromPlayer; if (gameOutcome != Enums.GameOutcome.ProceedToNextRound) { if (gameOutcome == Enums.GameOutcome.NoScoringMaxed) { winner = _playerPool.GetNextPlayer(); } else { winner = GameJudge.DetermineWinner(_playerPool); } } return(winner); }
private Player DeterminIfWinner(Enums.GameOutcome gameOutcome, Maze mazeFromPlayer, Player winner) { mazeFromPlayer.SwapPlayerSymbols(); _maze = mazeFromPlayer; if (gameOutcome != Enums.GameOutcome.ProceedToNextRound) { if (gameOutcome == Enums.GameOutcome.NoScoringMaxed) { winner = _playerPool.GetNextPlayer(); } else { winner = GameJudge.DetermineWinner(_playerPool); } } return winner; }
private void CreateIterationStateFile(String folderPath) { var replayFile = new StreamWriter(folderPath + "\\" + Properties.Settings.Default.SettingReplayFolder + "\\iteration" + _iteration + Properties.Settings.Default.SettingStateFileExtension); var mazeForFile = new Maze(_maze); if (_secondMazePlayer == _currentPlayer.GetSymbol()) mazeForFile.SwapPlayerSymbols(); replayFile.Write(mazeForFile.ToFlatFormatString()); replayFile.Close(); }
public GameResult Run(String folderPath) { var gamePlayDirectoryPath = Path.Combine(Environment.CurrentDirectory, folderPath); Directory.CreateDirectory(gamePlayDirectoryPath); var outputFilePath = Path.Combine(gamePlayDirectoryPath, Properties.Settings.Default.SettingGamePlayFile); _maze.WriteMaze(outputFilePath); Player winner = null; var gameOutcome = Enums.GameOutcome.ProceedToNextRound; Directory.CreateDirectory(folderPath); Directory.CreateDirectory(Path.Combine(folderPath, Properties.Settings.Default.SettingReplayFolder)); var logFile = new StreamWriter(Path.Combine(folderPath, Properties.Settings.Default.SettingMatchLogFileName)); CreateIterationStateFile(folderPath); logFile.WriteLine("[GAME] : Match started"); _iteration++; while (gameOutcome == Enums.GameOutcome.ProceedToNextRound) { _currentPlayer = _playerPool.GetNextPlayer(); var mazeFromPlayer = _currentPlayer.GetMove(_maze, Path.Combine(gamePlayDirectoryPath, Properties.Settings.Default.SettingGamePlayFile), logFile); if (mazeFromPlayer != null) { var mazeValidationOutcome = GetMazeValidationOutcome(logFile, mazeFromPlayer); if (mazeValidationOutcome == Enums.MazeValidationOutcome.ValidMaze) { var opponentPosition = _maze.FindCoordinateOf(Symbols.SYMBOL_PLAYER_B); var previousPosition = _maze.FindCoordinateOf(Symbols.SYMBOL_PLAYER_A); var currentPosition = mazeFromPlayer.FindCoordinateOf(Symbols.SYMBOL_PLAYER_A); var turnOutcome = GetTurnOutcome(mazeFromPlayer, currentPosition, previousPosition, opponentPosition, logFile); if (turnOutcome != Enums.TurnOutcome.MoveMadeAndDroppedPoisonPillIllegally) { RegenerateOpponentIfDead(opponentPosition, mazeFromPlayer); gameOutcome = GetGameOutcome(mazeFromPlayer, logFile, gameOutcome, turnOutcome); winner = DetermineIfWinner(gameOutcome, winner); } else { gameOutcome = ProcessIllegalMove(logFile, gameOutcome, ref winner); } } else { gameOutcome = ProcessIllegalMove(logFile, gameOutcome, ref winner); } _maze = mazeFromPlayer; _maze.SwapPlayerSymbols(); _maze.WriteMaze(Path.Combine(gamePlayDirectoryPath, Properties.Settings.Default.SettingGamePlayFile)); Maze iterationFileMaze = CreateIterationStateFile(folderPath); _iteration++; foreach (var player in _playerPool.GetPlayers()) { Console.Write(player.GetSymbol() + "," + player.GetPlayerName() + ": " + player.GetScore() + " "); } Console.WriteLine(); iterationFileMaze.Print(); } else { gameOutcome = ProcessIllegalMove(logFile, gameOutcome, ref winner); } } CreateMatchInfo(gameOutcome, winner, logFile); logFile.Close(); var replayMatchOutcome = new StreamWriter(Path.Combine(folderPath, "replay", "matchinfo.out")); CreateMatchInfo(gameOutcome, winner, replayMatchOutcome); replayMatchOutcome.Close(); return(new GameResult { Players = _playerPool.GetPlayers(), Outcome = gameOutcome, Iterations = _iteration - 1, Folder = folderPath }); }
private Player DeterminIfWinner(Enums.GameOutcome gameOutcome, Maze mazeFromPlayer, Player winner) { mazeFromPlayer.SwapPlayerSymbols(); _maze = mazeFromPlayer; if (_maze.FindCoordinateOf(_secondMazePlayer).IsEmpty) { _maze.SetSymbol(Properties.Settings.Default.MazeCenterX, Properties.Settings.Default.MazeCenterY, _secondMazePlayer); } if (gameOutcome != Enums.GameOutcome.ProceedToNextRound) winner = GameJudge.DetermineWinner(_playerPool, gameOutcome); return winner; }
private Maze CreateIterationStateFile(String folderPath) { var replayFile = new StreamWriter(folderPath + System.IO.Path.DirectorySeparatorChar + Properties.Settings.Default.SettingReplayFolder + System.IO.Path.DirectorySeparatorChar + "iteration" + _iteration + Properties.Settings.Default.SettingStateFileExtension); var mazeForFile = new Maze(_maze); if (((_currentPlayer == null) || (_secondMazePlayer == _currentPlayer.GetSymbol())) && (_iteration > 0)) mazeForFile.SwapPlayerSymbols(); replayFile.Write(mazeForFile.ToFlatFormatString()); replayFile.Close(); return mazeForFile; }