private void UpdateGhostLocation(IMoveEvaluatorContext moveEvaluatorContext, MoveEvaluationResult result) { if (!GhostLocations.Any()) { //Find the ghost location for (int i = 0; i < moveEvaluatorContext.FieldMap.Count; i++) { for (int j = 0; j < moveEvaluatorContext.FieldMap[i].Count; j++) { if (moveEvaluatorContext.FieldMap[i][j].DisplayText == "G") { GhostLocations.Add((Row: i, Column: j, MapEntity: moveEvaluatorContext.FieldMap[i][j])); } } } } else { var changedLocations = 0; for (int i = 0; i < moveEvaluatorContext.FieldMap.Count; i++) { for (int j = 0; j < moveEvaluatorContext.FieldMap[i].Count; j++) { if (moveEvaluatorContext.FieldMap[i][j].DisplayText == "" && i != moveEvaluatorContext.NextRow && j != moveEvaluatorContext.NextColumn) { result.UpdatdEntities.Add((Row: i, Column: j, UpdatedEntity: GhostLocations[changedLocations].MapEntity)); result.UpdatdEntities.Add((Row: GhostLocations[changedLocations].Row, Column: GhostLocations[changedLocations].Column, UpdatedEntity: new MapEntity())); GhostLocations[changedLocations] = (i, j, GhostLocations[changedLocations].MapEntity);
private void OnInputReceived(GameInputEventArgs gameInputEventArgs) { if (!AreCoordinatesValid(gameInputEventArgs)) { return; } MoveEvaluationResult result = myScoreEvaluator.EvaluateScore(new ScoreEvaluationContext { CurrentColumn = myCurrentColumn, CurrentRow = myCurrentRow, CurrentScore = myScore, FieldMap = myFieldMap, NextColumn = myNextColumn, NextRow = myNextRow, RouteMap = myRouteMap, }); if (result.IsMovePossible) { myScore = result.EvaluatedScore; myFieldMap[myCurrentRow][myCurrentColumn].IsActive = false; //After evaluation and scoring update the coordinates and display myCurrentColumn = myNextColumn; myCurrentRow = myNextRow; myFieldMap[myCurrentRow][myCurrentColumn].IsActive = true; myDisplayAdapter.DisplayScore(myScore); myRouteMap.Steps.Add(new RouteMapEntry { Column = myCurrentColumn, Row = myCurrentRow, MapEntity = myFieldMap[myCurrentRow][myCurrentColumn], Score = myScore }); } if (result.IsGameWon) { myDisplayAdapter.DisplayScore(result.EvaluatedScore); myDisplayAdapter.DisplayMessage("You won!!"); myGameOver = true; myGame.Reset(); myKeyPressCommand.EnableEvents(false); return; } if (!myGameOver && myScore <= 0) { myDisplayAdapter.DisplayScore(0); myDisplayAdapter.DisplayMessage("Game Over, you lost!!!"); myGameOver = true; myGame.Reset(); myKeyPressCommand.EnableEvents(false); } }
private void OnInputReceived(GameInputEventArgs gameInputEventArgs) { if (!AreCoordinatesValid(gameInputEventArgs)) { return; } //Do scoring //Evaluate what is th score //If possible to move ? //Yes //Is score > 0 //YES MoveEvaluationResult result = myScoreEvaluator.EvaluateScore(new ScoreEvaluationContext { CurrentColumn = myCurrentColumn, CurrentRow = myCurrentRow, CurrentScore = myScore, FieldMap = myFieldMap, NextColumn = myNextColumn, NextRow = myNextRow, RouteMap = myRouteMap, }); if (result.IsMovePossible) { myScore = result.EvaluatedScore; //After evaluation and scoring update the coordinates and display myCurrentColumn = myNextColumn; myCurrentRow = myNextRow; myDisplayAdapter.DrawSubject(myCurrentRow, myCurrentColumn); myDisplayAdapter.DisplayScore(myScore); myRouteMap.Steps.Add(new RouteMapEntry { Column = myCurrentColumn, Row = myCurrentRow, MapEntity = myFieldMap[myCurrentRow, myCurrentColumn], Score = myScore }); } if (!myGameOver && myScore <= 0) { myDisplayAdapter.DisplayScore(0); myDisplayAdapter.DisplayMessage("Game Over, you lost!!!"); myGameOver = true; base.Stop(); } }
public MoveEvaluationResult EvaluateMove(IMoveEvaluatorContext moveEvaluatorContext) { var result = new MoveEvaluationResult(); var nextEntity = moveEvaluatorContext.FieldMap[moveEvaluatorContext.NextRow][moveEvaluatorContext.NextColumn]; if (nextEntity.IsMoveAllowedOnThis) { if (nextEntity.DisplayText == "X") { if (!HasWeapon) { result.UpdatdEntities.Add((Row: moveEvaluatorContext.NextRow, Column: moveEvaluatorContext.NextColumn, UpdatedEntity: new MapEntity())); HasWeapon = true; } result.EvaluatedScore = moveEvaluatorContext.CurrentScore; result.IsMovePossible = true; } else if (nextEntity.DisplayText == "G" || nextEntity.DisplayText == "Z") { if (HasWeapon) { result.UpdatdEntities.Add((Row: moveEvaluatorContext.NextRow, Column: moveEvaluatorContext.NextColumn, UpdatedEntity: new MapEntity())); result.EvaluatedScore = nextEntity.DisplayText == "Z" ? moveEvaluatorContext.CurrentScore + 10 : moveEvaluatorContext.CurrentScore + 20; HasWeapon = false; } else { result.EvaluatedScore = 0; } result.IsMovePossible = true; } else if (nextEntity.DisplayText == "Ex") { result.IsMovePossible = true; result.EvaluatedScore = moveEvaluatorContext.CurrentScore; result.IsGameWon = true; } else if (nextEntity.DisplayText == "") { result.IsMovePossible = true; result.EvaluatedScore = moveEvaluatorContext.CurrentScore; } } else { if (nextEntity.DisplayText == "W") { result.IsMovePossible = false; result.EvaluatedScore = moveEvaluatorContext.CurrentScore; } else { throw new InvalidOperationException(); } } UpdateGhostLocation(moveEvaluatorContext, result); return(result); }