public FieldCoordinate(XField xCoord, YField yCoord) { XCoord = xCoord; YCoord = yCoord; hashCode = new { xCoord, yCoord }.GetHashCode(); }
private static string YCoordToString(YField yCoord) { switch (yCoord) { case YField.One: return("1"); case YField.Two: return("2"); case YField.Three: return("3"); case YField.Four: return("4"); case YField.Five: return("5"); case YField.Six: return("6"); case YField.Seven: return("7"); case YField.Eight: return("8"); case YField.Nine: return("9"); } return("error"); }
private bool TraverseGraph(Node startNode, YField target) { var stack = new Stack <Node>(); stack.Push(startNode); startNode.Visited = true; while (stack.Count != 0) { var nextNode = stack.Peek(); if (nextNode.Coord.YCoord == target) { ClearVisitStatusForNodes(); return(true); } var child = nextNode.Neighbours.FirstOrDefault(n => !n.Visited); if (child == null) { stack.Pop(); } else { child.Visited = true; stack.Push(child); } } ClearVisitStatusForNodes(); return(false); }
public FieldCoordinate?GetNextPositionToMove(YField target) { TraverseGraph(playerNode, 0); var nearestTarget = GetTargetField(target); var reversePath = GetReversePath(new List <Node>(), nearestTarget); var nextField = reversePath.Last().Coord; if (nextField != opponendNode.Coord) { return(nextField); } if (playerNode.Left != null && playerNode.Left != opponendNode) { return(playerNode.Left.Coord); } if (playerNode.Top != null && playerNode.Top != opponendNode) { return(playerNode.Top.Coord); } if (playerNode.Bottom != null && playerNode.Bottom != opponendNode) { return(playerNode.Bottom.Coord); } if (playerNode.Right != null && playerNode.Right != opponendNode) { return(playerNode.Right.Coord); } return(null); }
private Move ComputeNextMove(BoardState currentState, YField target) { var graph = new XGraph(currentState, startPosition); var nextPosition = graph.GetNextPositionToMove(target); return(nextPosition.HasValue ? (Move) new FigureMove(nextPosition.Value) : (Move) new Capitulation()); }
private Node GetTargetField(YField target) { var targets = nodes.Where(fieldPair => fieldPair.Key.YCoord == target); var minCostNode = targets.First().Value; foreach (var keyValuePair in targets) { if (minCostNode.MinConst == -1 || keyValuePair.Value.MinConst < minCostNode.MinConst) { minCostNode = keyValuePair.Value; } } return(minCostNode); }
public void SelectField(YField field) { if (scoreBoardValidFields[(int)field, currentPlayer - 1] != true) { return; // currentPlayer forsøgte at sætte en værdi ind hvor der allerede eksisterende en værdi. } scoreBoardValidFields[(int)field, currentPlayer - 1] = false; switch (field) { case YField.ONES: scoreBoard[(int)YField.ONES, currentPlayer] = ScoreCounter.ScoreSingleSum(1, roll); break; case YField.TWOS: scoreBoard[(int)YField.TWOS, currentPlayer] = ScoreCounter.ScoreSingleSum(2, roll); break; case YField.THREES: scoreBoard[(int)YField.THREES, currentPlayer] = ScoreCounter.ScoreSingleSum(3, roll); break; case YField.FOURS: scoreBoard[(int)YField.FOURS, currentPlayer] = ScoreCounter.ScoreSingleSum(4, roll); break; case YField.FIVES: scoreBoard[(int)YField.FIVES, currentPlayer] = ScoreCounter.ScoreSingleSum(5, roll); break; case YField.SIXES: scoreBoard[(int)YField.SIXES, currentPlayer] = ScoreCounter.ScoreSingleSum(6, roll); break; case YField.KIND_3: scoreBoard[(int)YField.KIND_3, currentPlayer] = ScoreCounter.ScoreKind(3, roll); break; case YField.KIND_4: scoreBoard[(int)YField.KIND_4, currentPlayer] = ScoreCounter.ScoreKind(4, roll); break; case YField.FULL_HOUSE: scoreBoard[(int)YField.FULL_HOUSE, currentPlayer] = ScoreCounter.ScoreFullHouse(roll); break; case YField.S_STRAIGHT: scoreBoard[(int)YField.S_STRAIGHT, currentPlayer] = ScoreCounter.ScoreSmallStraight(roll); break; case YField.L_STRAIGHT: scoreBoard[(int)YField.L_STRAIGHT, currentPlayer] = ScoreCounter.ScoreLargeStraight(roll); break; case YField.CHANCE: scoreBoard[(int)YField.CHANCE, currentPlayer] = ScoreCounter.ScoreChance(roll); break; case YField.YATZEE: scoreBoard[(int)YField.YATZEE, currentPlayer] = ScoreCounter.ScoreYatzee(roll); break; } SumScores(); if (currentPlayer == 1) { SetTurn(2); } else { SetTurn(1); } }