Exemple #1
0
 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);
Exemple #2
0
        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);
            }
        }
Exemple #3
0
        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();
            }
        }
Exemple #4
0
        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);
        }