Esempio n. 1
0
        public void DoubleSelfTackleAddsTwoBeers()
        {
            var pos = getStartPositions();
            pos[0] = Position.Green5;
            pos[1] = Position.Green5;
            pos[4] = Position.RedStart;

            var sit = new Situation(pos);
            var moves = sit.GetMoves(Piece.Green, 2);
            sit.ApplyMove(moves[0]);

            Assert.AreEqual(2, sit.beers[(int)Piece.Green]);
        }
Esempio n. 2
0
        public void MoveToGoalIfPossible()
        {
            var pos = getStartPositions();
            pos[0] = Position.Yellow6;
            pos[1] = Position.Green1;

            var sit = new Situation(pos);
            var moves = sit.GetMoves(Piece.Green, 2);

            int selected = p.SelectMove(sit, moves, Piece.Green, 2);
            var selectedMove = moves[selected];
            Assert.AreEqual(Position.Yellow6, selectedMove.StartPosition);
        }
Esempio n. 3
0
        public void GetOutOfHomeIfPossible()
        {
            var pos = getStartPositions();
            pos[0] = Position.Blue2;

            var sit = new Situation(pos);
            var moves = sit.GetMoves(Piece.Green, 6);

            int selected = p.SelectMove(sit, moves, Piece.Green, 6);
            var selectedMove = moves[selected];

            Assert.AreEqual(Position.GreenStart, selectedMove.EndPosition);
        }
Esempio n. 4
0
        public void EatIfYouCan()
        {
            var pos = getStartPositions();
            pos[0] = Position.Blue1;
            pos[1] = Position.Green1;
            pos[4] = Position.Green3;

            var sit = new Situation(pos);
            var moves = sit.GetMoves(Piece.Green, 2);

            int selected = p.SelectMove(sit, moves, Piece.Green, 2);
            var selectedMove = moves[selected];
            Assert.AreEqual(Position.Green1, selectedMove.StartPosition);
        }
Esempio n. 5
0
        public void DoubleUnfoldsToStartPosition()
        {
            var pos = getStartPositions();
            pos[4] = pos[5] = Position.RedGoal1;

            var sit = new Situation(pos);
            var moves = sit.GetMoves(Piece.Red, 3);

            Assert.AreEqual(1, moves.Length);

            sit.ApplyMove(moves[0]);

            Assert.AreEqual(Piece.Red, sit.board[(int)Position.RedGoal1]);
            Assert.AreEqual(Piece.None, sit.board[(int)Position.RedGoal2]);
            Assert.AreEqual(Piece.None, sit.board[(int)Position.RedGoal3]);
            Assert.AreEqual(Piece.Red, sit.board[(int)Position.RedGoal4]);
        }
Esempio n. 6
0
        public void TestGreenShouldGetToGoal()
        {
            Position[] pos = getStartPositions();
            pos[0] = Position.Yellow6;
            Situation start = new Situation(pos);

            Move[] moves = start.GetMoves(Piece.Green, 1);
            Assert.AreEqual(1, moves.Length);
            Assert.AreEqual(Position.Yellow6, moves[0].StartPosition);
            Assert.AreEqual(Position.GreenGoal1, moves[0].EndPosition);

            moves = start.GetMoves(Piece.Green, 2);
            Assert.AreEqual(1, moves.Length);
            Assert.AreEqual(Position.Yellow6, moves[0].StartPosition);
            Assert.AreEqual(Position.GreenGoal2, moves[0].EndPosition);

            moves = start.GetMoves(Piece.Green, 3);
            Assert.AreEqual(1, moves.Length);
            Assert.AreEqual(Position.Yellow6, moves[0].StartPosition);
            Assert.AreEqual(Position.GreenGoal3, moves[0].EndPosition);

            moves = start.GetMoves(Piece.Green, 4);
            Assert.AreEqual(1, moves.Length);
            Assert.AreEqual(Position.Yellow6, moves[0].StartPosition);
            Assert.AreEqual(Position.GreenGoal4, moves[0].EndPosition);

            moves = start.GetMoves(Piece.Green, 5);
            Assert.AreEqual(0, moves.Length);
        }
Esempio n. 7
0
        public void TestDoubleGetsEatenAndGetsOut()
        {
            var pos = getStartPositions();
            pos[0] = pos[1] = Position.RedStart;
            var sit = new Situation(pos);
            var moves = sit.GetMoves(Piece.Red, 6);
            sit.ApplyMove(moves[0]);
            moves = sit.GetMoves(Piece.Green, 6);
            sit.ApplyMove(moves[0]);

            Assert.AreEqual(Piece.Green, sit.board[(int)Position.GreenStart]);
            Assert.AreEqual(Piece.None, sit.board[(int)Position.GreenHome1]);
            Assert.AreEqual(Piece.Green, sit.board[(int)Position.GreenHome2]);
            Assert.AreEqual(Piece.Green, sit.board[(int)Position.GreenHome3]);
            Assert.AreEqual(Piece.Green, sit.board[(int)Position.GreenHome4]);
            Assert.IsTrue(sit.Validate());
        }
Esempio n. 8
0
        public void TestAfterEatingHomePiecesShouldBeLastInPieceList()
        {
            Position[] pos = getStartPositions();
            pos[0] = Position.Yellow1;
            pos[4] = Position.GreenStart;
            pos[5] = Position.Yellow3;
            pos[6] = Position.Red2;
            Situation start = new Situation(pos);

            Move[] moves = start.GetMoves(Piece.Green, 2);
            start.ApplyMove(moves[0]);

            Assert.AreEqual(Position.GreenStart, start.pieces[4]);
            Assert.AreEqual(Position.Red2, start.pieces[5]);
            Assert.AreEqual(Position.RedHome3, start.pieces[6]);
            Assert.AreEqual(Position.RedHome4, start.pieces[7]);
        }
Esempio n. 9
0
        public void Test2DoublePieces()
        {
            var pos = getStartPositions();
            pos[0] = pos[1] = Position.Yellow2;
            pos[2] = pos[3] = Position.Red2;

            var sit = new Situation(pos);
            var moves = sit.GetMoves(Piece.Green, 4);
            sit.ApplyMove(moves[1]);

            Assert.AreEqual(2, moves.Length);
            Assert.AreEqual(0, moves[0].Piece);
            Assert.AreEqual(Position.Yellow2, moves[0].StartPosition);
            Assert.AreEqual(Position.Yellow6, moves[0].EndPosition);
            Assert.AreEqual(2, moves[1].Piece);
            Assert.AreEqual(Position.Red2, moves[1].StartPosition);
            Assert.AreEqual(Position.Red6, moves[1].EndPosition);

            Assert.AreEqual(Position.Red6, sit.pieces[2]);
            Assert.AreEqual(Position.Red6, sit.pieces[3]);
            Assert.AreEqual(Piece.None, sit.board[(int)Position.Red2]);
            Assert.AreEqual(Piece.Green, sit.board[(int)Position.Red6]);
        }
Esempio n. 10
0
        public void TestYouCannotMoveOntoYourOwnPiece()
        {
            Position[] pos = getStartPositions();
            pos[0] = Position.Green6;
            pos[1] = Position.Green4;
            pos[2] = Position.Green2;
            Situation start = new Situation(pos);

            Move[] moves = start.GetMoves(Piece.Green, 2);
            Assert.AreEqual(1, moves.Length, "Should only have 1 option, as others move onto your own piece");
            Assert.AreEqual(Position.Green6, moves[0].StartPosition);
            Assert.AreEqual(Position.Red1, moves[0].EndPosition);
        }
Esempio n. 11
0
        public void TestBasicMove()
        {
            Position[] pos = getStartPositions();
            pos[0] = Position.GreenStart;
            Situation start = new Situation(pos);
            Move[] moves;
            for (int i = 1; i < 6; i++)
            {
                moves = start.GetMoves(Piece.Green, i);
                Assert.AreEqual(1, moves.Length, "Should have 1 option for roll " + i);
                Assert.AreEqual((Position)((byte)Position.GreenStart + i), moves[0].EndPosition, "Should move correct amount");
            }

            moves = start.GetMoves(Piece.Green, 6);
            Assert.AreEqual(2, moves.Length, "Should have 2 options for 6");
        }
Esempio n. 12
0
        public void TestRedShouldGetToGoal()
        {
            Position[] pos = getStartPositions();
            pos[4] = Position.Green5;
            Situation start = new Situation(pos);

            Move[] moves = start.GetMoves(Piece.Red, 1);
            Assert.AreEqual(1, moves.Length);
            Assert.AreEqual(Position.Green5, moves[0].StartPosition);
            Assert.AreEqual(Position.Green6, moves[0].EndPosition);

            moves = start.GetMoves(Piece.Red, 2);
            Assert.AreEqual(1, moves.Length);
            Assert.AreEqual(Position.Green5, moves[0].StartPosition);
            Assert.AreEqual(Position.RedGoal1, moves[0].EndPosition);

            moves = start.GetMoves(Piece.Red, 3);
            Assert.AreEqual(1, moves.Length);
            Assert.AreEqual(Position.Green5, moves[0].StartPosition);
            Assert.AreEqual(Position.RedGoal2, moves[0].EndPosition);

            moves = start.GetMoves(Piece.Red, 4);
            Assert.AreEqual(1, moves.Length);
            Assert.AreEqual(Position.Green5, moves[0].StartPosition);
            Assert.AreEqual(Position.RedGoal3, moves[0].EndPosition);

            moves = start.GetMoves(Piece.Red, 5);
            Assert.AreEqual(1, moves.Length);
            Assert.AreEqual(Position.Green5, moves[0].StartPosition);
            Assert.AreEqual(Position.RedGoal4, moves[0].EndPosition);

            moves = start.GetMoves(Piece.Red, 6);
            Assert.AreEqual(1, moves.Length);
            Assert.AreEqual(Position.RedHome2, moves[0].StartPosition);
            Assert.AreEqual(Position.RedStart, moves[0].EndPosition);
        }
Esempio n. 13
0
        public void DoubleUnfoldsWhenPiecesBeforeItAreFilled()
        {
            var pos = getStartPositions();
            pos[0] = Position.GreenGoal4;
            pos[1] = pos[2] = Position.GreenGoal2;
            pos[3] = Position.GreenGoal1;

            var sit = new Situation(pos);
            var moves = sit.GetMoves(Piece.Green, 2);

            sit.ApplyMove(moves[0]);

            Assert.AreEqual(Piece.Green, sit.board[(int)Position.GreenGoal1]);
            Assert.AreEqual(Piece.Green, sit.board[(int)Position.GreenGoal2]);
            Assert.AreEqual(Piece.Green, sit.board[(int)Position.GreenGoal3]);
            Assert.AreEqual(Piece.Green, sit.board[(int)Position.GreenGoal4]);

            Assert.AreEqual(Piece.Green, sit.GetWinner());
        }
Esempio n. 14
0
        public void TestRedCanQuadruple()
        {
            Position[] pos = getStartPositions();
            pos[4] = Position.RedStart;
            pos[5] = Position.RedStart;
            pos[6] = Position.RedStart;

            Situation sit = new Situation(pos);
            for (int i = 4; i < 7; i++)
            {
                Assert.AreEqual(Position.RedStart, sit.pieces[i]);
            }

            Move[] moves = sit.GetMoves(Piece.Red, 6);
            Assert.AreEqual(2, moves.Length);
            Assert.AreEqual(Position.RedStart, moves[0].StartPosition);
            Assert.AreEqual(Position.Red6, moves[0].EndPosition);
            Assert.AreEqual(Position.RedHome4, moves[1].StartPosition);
            Assert.AreEqual(Position.RedStart, moves[1].EndPosition);
            Assert.AreEqual(MoveType.DoubleUp, moves[1].Type);

            sit.ApplyMove(moves[1]);
            for (int i = 4; i < 8; i++)
            {
                Assert.AreEqual(Position.RedStart, sit.pieces[i]);
            }

            moves = sit.GetMoves(Piece.Red, 3);
            Assert.AreEqual(1, moves.Length);

            sit.ApplyMove(moves[0]);
            for (int i = 4; i < 8; i++)
            {
                Assert.AreEqual(Position.Red3, sit.pieces[i]);
            }
            Assert.AreEqual(Piece.None, sit.board[(int)Position.RedStart]);
            Assert.AreEqual(Piece.Red, sit.board[(int)Position.Red3]);
        }
Esempio n. 15
0
        public void TestDoubleArrivesToGoalWithPieceAlreadyInGoal()
        {
            var pos = getStartPositions();
            pos[0] = Position.GreenGoal1;
            pos[1] = pos[2] = Position.Yellow6;

            var sit = new Situation(pos);
            var moves = sit.GetMoves(Piece.Green, 4);
            sit.ApplyMove(moves[0]);

            Assert.AreEqual(1, moves.Length);
            Assert.AreEqual(Position.GreenGoal4, moves[0].EndPosition);
            Assert.AreEqual(Piece.Green, sit.board[(int)Position.GreenGoal2]);
            Assert.AreEqual(Piece.None, sit.board[(int)Position.GreenGoal3]);
            Assert.AreEqual(Piece.Green, sit.board[(int)Position.GreenGoal4]);
        }
Esempio n. 16
0
        public void TestDoubleArrivesToGoal3()
        {
            var pos = getStartPositions();
            pos[0] = pos[1] = Position.Yellow6;

            var sit = new Situation(pos);
            var moves = sit.GetMoves(Piece.Green, 3);
            sit.ApplyMove(moves[0]);

            Assert.AreEqual(1, moves.Length);
            Assert.AreEqual(Position.GreenGoal3, moves[0].EndPosition);
            Assert.AreEqual(Piece.Green, sit.board[(int)Position.GreenGoal1]);
            Assert.AreEqual(Piece.None, sit.board[(int)Position.GreenGoal2]);
            Assert.AreEqual(Piece.Green, sit.board[(int)Position.GreenGoal3]);
            Assert.AreEqual(Piece.None, sit.board[(int)Position.GreenGoal4]);
            Assert.IsTrue(sit.Validate());
        }
Esempio n. 17
0
        public void TestBlueShouldGetToGoal()
        {
            Position[] pos = getStartPositions();
            pos[8] = Position.Red4;
            Situation start = new Situation(pos);

            Move[] moves = start.GetMoves(Piece.Blue, 1);
            Assert.AreEqual(1, moves.Length);
            Assert.AreEqual(Position.Red4, moves[0].StartPosition);
            Assert.AreEqual(Position.Red5, moves[0].EndPosition);

            moves = start.GetMoves(Piece.Blue, 2);
            Assert.AreEqual(1, moves.Length);
            Assert.AreEqual(Position.Red4, moves[0].StartPosition);
            Assert.AreEqual(Position.Red6, moves[0].EndPosition);

            moves = start.GetMoves(Piece.Blue, 3);
            Assert.AreEqual(1, moves.Length);
            Assert.AreEqual(Position.Red4, moves[0].StartPosition);
            Assert.AreEqual(Position.BlueGoal1, moves[0].EndPosition);

            moves = start.GetMoves(Piece.Blue, 4);
            Assert.AreEqual(1, moves.Length);
            Assert.AreEqual(Position.Red4, moves[0].StartPosition);
            Assert.AreEqual(Position.BlueGoal2, moves[0].EndPosition);

            moves = start.GetMoves(Piece.Blue, 5);
            Assert.AreEqual(1, moves.Length);
            Assert.AreEqual(Position.Red4, moves[0].StartPosition);
            Assert.AreEqual(Position.BlueGoal3, moves[0].EndPosition);

            moves = start.GetMoves(Piece.Blue, 6);
            Assert.AreEqual(2, moves.Length);
            Assert.AreEqual(Position.Red4, moves[0].StartPosition);
            Assert.AreEqual(Position.BlueGoal4, moves[0].EndPosition);
            Assert.AreEqual(Position.BlueHome2, moves[1].StartPosition);
            Assert.AreEqual(Position.BlueStart, moves[1].EndPosition);
        }
Esempio n. 18
0
        public void TestCannotEatAPieceInStartPosition()
        {
            Position[] pos = getStartPositions();
            pos[0] = Position.Green6;
            pos[4] = Position.RedStart;

            Situation sit = new Situation(pos);

            Move[] moves = sit.GetMoves(Piece.Green, 1);
            Assert.AreEqual(1, moves.Length);
            Assert.AreEqual(Position.Green6, moves[0].StartPosition);
            Assert.AreEqual(Position.GreenHome1, moves[0].EndPosition);
        }
Esempio n. 19
0
        public void TestRedCanTriple()
        {
            Position[] pos = getStartPositions();
            pos[4] = Position.RedStart;
            pos[5] = Position.RedStart;

            Situation sit = new Situation(pos);
            Move[] moves = sit.GetMoves(Piece.Red, 6);
            Assert.AreEqual(2, moves.Length);
            Assert.AreEqual(Position.RedStart, moves[0].StartPosition);
            Assert.AreEqual(Position.Red6, moves[0].EndPosition);
            Assert.AreEqual(Position.RedHome3, moves[1].StartPosition);
            Assert.AreEqual(Position.RedStart, moves[1].EndPosition);
            Assert.AreEqual(MoveType.DoubleUp, moves[1].Type);
        }
Esempio n. 20
0
        public void TestDoublePieceMovesTogether()
        {
            Position[] pos = getStartPositions();
            pos[0] = Position.GreenStart;
            pos[1] = Position.GreenStart;

            Situation sit = new Situation(pos);
            Move[] moves = sit.GetMoves(Piece.Green, 3);
            Assert.AreEqual(1, moves.Length);
            sit.ApplyMove(moves[0]);
            Assert.AreEqual(Piece.None, sit.board[(int)Position.GreenStart]);
            Assert.AreEqual(Piece.Green, sit.board[(int)Position.Green3]);
            Assert.AreEqual(Position.Green3, sit.pieces[0]);
            Assert.AreEqual(Position.Green3, sit.pieces[1]);
        }
Esempio n. 21
0
        public void TestTripleGetEaten()
        {
            var pos = getStartPositions();
            pos[0] = Position.GreenGoal1;
            pos[1] = pos[2] = pos[3] = Position.Yellow6;
            pos[4] = Position.Yellow3;

            var sit = new Situation(pos);
            var moves = sit.GetMoves(Piece.Red, 3);
            sit.ApplyMove(moves[0]);

            Assert.AreEqual(1, moves.Length);
            Assert.AreEqual(Position.Yellow6, moves[0].EndPosition);
            Assert.AreEqual(Piece.None, sit.board[(int)Position.GreenHome1]);
            Assert.AreEqual(Piece.Green, sit.board[(int)Position.GreenHome2]);
            Assert.AreEqual(Piece.Green, sit.board[(int)Position.GreenHome3]);
            Assert.AreEqual(Piece.Green, sit.board[(int)Position.GreenHome4]);

            Assert.AreEqual(Position.GreenGoal1, sit.pieces[0]);
            Assert.AreEqual(Position.GreenHome2, sit.pieces[1]);
            Assert.AreEqual(Position.GreenHome3, sit.pieces[2]);
            Assert.AreEqual(Position.GreenHome4, sit.pieces[3]);
        }
Esempio n. 22
0
        public void TestEating()
        {
            Position[] pos = getStartPositions();
            pos[0] = Position.Red1;
            pos[4] = Position.Red4;
            Situation start = new Situation(pos);

            Move[] moves = start.GetMoves(Piece.Green, 3);
            Assert.AreEqual(1, moves.Length);
            Assert.AreEqual(Position.Red1, moves[0].StartPosition);
            Assert.AreEqual(Position.Red4, moves[0].EndPosition);

            start.ApplyMove(moves[0]);
            Assert.AreEqual(Piece.None, start.board[(int)Position.Red1]);
            Assert.AreEqual(Piece.Green, start.board[(int)Position.Red4]);
            Assert.AreEqual(Piece.Red, start.board[(int)Position.RedHome1]);
            Assert.AreEqual(Piece.Red, start.board[(int)Position.RedHome2]);
            Assert.AreEqual(Piece.Red, start.board[(int)Position.RedHome4]);
            Assert.AreEqual(Piece.Red, start.board[(int)Position.RedHome3]);

            Assert.AreEqual(Position.RedHome1, start.pieces[4]);
        }
Esempio n. 23
0
        public void TestYellowShouldGetToGoal()
        {
            Position[] pos = getStartPositions();
            pos[12] = Position.Blue3;
            Situation start = new Situation(pos);

            Move[] moves = start.GetMoves(Piece.Yellow, 1);
            Assert.AreEqual(1, moves.Length);
            Assert.AreEqual(Position.Blue3, moves[0].StartPosition);
            Assert.AreEqual(Position.Blue4, moves[0].EndPosition);

            moves = start.GetMoves(Piece.Yellow, 2);
            Assert.AreEqual(1, moves.Length);
            Assert.AreEqual(Position.Blue3, moves[0].StartPosition);
            Assert.AreEqual(Position.Blue5, moves[0].EndPosition);

            moves = start.GetMoves(Piece.Yellow, 3);
            Assert.AreEqual(1, moves.Length);
            Assert.AreEqual(Position.Blue3, moves[0].StartPosition);
            Assert.AreEqual(Position.Blue6, moves[0].EndPosition);

            moves = start.GetMoves(Piece.Yellow, 4);
            Assert.AreEqual(1, moves.Length);
            Assert.AreEqual(Position.Blue3, moves[0].StartPosition);
            Assert.AreEqual(Position.YellowGoal1, moves[0].EndPosition);

            moves = start.GetMoves(Piece.Yellow, 5);
            Assert.AreEqual(1, moves.Length);
            Assert.AreEqual(Position.Blue3, moves[0].StartPosition);
            Assert.AreEqual(Position.YellowGoal2, moves[0].EndPosition);

            moves = start.GetMoves(Piece.Yellow, 6);
            Assert.AreEqual(2, moves.Length);
            Assert.AreEqual(Position.Blue3, moves[0].StartPosition);
            Assert.AreEqual(Position.YellowGoal3, moves[0].EndPosition);
            Assert.AreEqual(Position.YellowHome2, moves[1].StartPosition);
            Assert.AreEqual(Position.YellowStart, moves[1].EndPosition);
        }
Esempio n. 24
0
        public void TestEatingWithMultiplePiecesOnBoard()
        {
            Position[] pos = getStartPositions();
            pos[0] = Position.Red1;
            pos[4] = Position.GreenStart;
            pos[5] = Position.Yellow3;
            pos[6] = Position.Red2;
            Situation start = new Situation(pos);

            Move[] moves = start.GetMoves(Piece.Green, 1);
            Assert.AreEqual(1, moves.Length);
            Assert.AreEqual(Position.Red1, moves[0].StartPosition);
            Assert.AreEqual(Position.Red2, moves[0].EndPosition);

            start.ApplyMove(moves[0]);
            Assert.AreEqual(Piece.None, start.board[(int)Position.Red1]);
            Assert.AreEqual(Piece.Green, start.board[(int)Position.Red2]);
            Assert.AreEqual(Piece.None, start.board[(int)Position.RedHome1]);
            Assert.AreEqual(Piece.None, start.board[(int)Position.RedHome2]);
            Assert.AreEqual(Piece.Red, start.board[(int)Position.RedHome4]);
            Assert.AreEqual(Piece.Red, start.board[(int)Position.RedHome3]);

            Assert.AreEqual(Position.RedHome3, start.pieces[6]);
        }
Esempio n. 25
0
        public void TripleFinishesOverOwnPiece()
        {
            var pos = getStartPositions();
            pos[0] = Position.GreenGoal2;
            pos[1] = pos[2] = pos[3] = Position.GreenGoal1;

            var sit = new Situation(pos);
            var moves = sit.GetMoves(Piece.Green, 3);

            sit.ApplyMove(moves[0]);

            Assert.AreEqual(Piece.Green, sit.board[(int)Position.GreenGoal1]);
            Assert.AreEqual(Piece.Green, sit.board[(int)Position.GreenGoal2]);
            Assert.AreEqual(Piece.Green, sit.board[(int)Position.GreenGoal3]);
            Assert.AreEqual(Piece.Green, sit.board[(int)Position.GreenGoal4]);

            Assert.AreEqual(Piece.Green, sit.GetWinner());
        }
Esempio n. 26
0
        public void TestGeneratingMovesDoesNotBreakGroupings()
        {
            var pos = getStartPositions();
            pos[8] = pos[9] = Position.BlueGoal1;
            pos[10] = pos[11] = Position.BlueStart;

            var sit = new Situation(pos);

            Move[] moves = sit.GetMoves(Piece.Blue, 3);

            Assert.AreEqual(4, sit.groupingDict.Count);
            foreach (List<int> grouping in sit.groupingDict.Values)
            {
                Assert.AreEqual(2, grouping.Count);
            }
        }
Esempio n. 27
0
        public void TestGreenCanDouble()
        {
            Position[] pos = getStartPositions();
            pos[0] = Position.GreenStart;

            Situation sit = new Situation(pos);

            Move[] moves = sit.GetMoves(Piece.Green, 6);
            Assert.AreEqual(2, moves.Length);
            Assert.AreEqual(Position.GreenStart, moves[0].StartPosition);
            Assert.AreEqual(Position.Green6, moves[0].EndPosition);
            Assert.AreEqual(Position.GreenHome2, moves[1].StartPosition);
            Assert.AreEqual(Position.GreenStart, moves[1].EndPosition);
            Assert.AreEqual(MoveType.DoubleUp, moves[1].Type);
        }
Esempio n. 28
0
        public void TestGreenGoesToGoal()
        {
            var pos = getStartPositions();
            pos[0] = Position.GreenGoal3;
            pos[1] = Position.Yellow6;

            var sit = new Situation(pos);
            var moves = sit.GetMoves(Piece.Green, 1);

            Assert.AreEqual(2, moves.Length);
            sit.ApplyMove(moves[1]);

            Assert.AreEqual(Position.GreenGoal1, sit.pieces[1]);
            moves = sit.GetMoves(Piece.Green, 2);
            Assert.AreEqual(0, moves.Length);
        }
Esempio n. 29
0
        static void Main(string[] args)
        {
            List<Position> positionList = new List<Position>();
            positionList.AddRange(new Position[] { Position.GreenGoal4, Position.GreenGoal3, Position.GreenGoal2, Position.GreenGoal1});

            for (int p = (int)Position.Yellow6; p >= (int)Position.GreenStart; p--)
            {
                positionList.Add((Position)p);
            }
            positionList.AddRange(new Position[] { Position.GreenHome4, Position.GreenHome3, Position.GreenHome2, Position.GreenHome1 });
            Position[] positionOrder = positionList.ToArray();

            int len = positionOrder.Length;
            int homeStart = len-4;
            bool first = true;

            for (int i = 0; i < len; i++)
            {
                for (int j = Math.Max(i, 1); j < len; j++)
                {
                    if (i == j && i >= homeStart)
                        continue;

                    for (int k = Math.Max(j, 2); k < len; k++)
                    {
                        if (j == k && j >= homeStart)
                            continue;

                        for (int l = Math.Max(k,3); l < len; l++)
                        {
                            if (k == l && k >= homeStart)
                                continue;

                            var pos = getStartPositions();
                            pos[0] = positionOrder[i];
                            pos[1] = positionOrder[j];
                            pos[2] = positionOrder[k];
                            pos[3] = positionOrder[l];

                            Situation sit = new Situation(pos);
                            Situation s2 = new Situation(sit);
                            if (s2.UnfoldMultiples(Piece.Green))
                            {
                                continue;
                            }

                            int nomoves = 0;
                            decimal ev = 0;

                            if (first)
                            {
                                SaveValue(sit, 0);
                                first = false;
                                continue;
                            }

                            for (int roll = 1; roll <= 6; roll++)
                            {
                                Move[] moves = sit.GetMoves(Piece.Green, roll);
                                if (moves.Length == 0)
                                {
                                    nomoves++;
                                }
                                else
                                {
                                    decimal value = Decimal.MaxValue;
                                    foreach(Move move in moves)
                                    {
                                        Situation s = new Situation(sit);
                                        s.ApplyMove(move);
                                        value = Math.Min(value, GetValue(s));
                                    }

                                    ev += value;
                                }
                            }

                            if (sit.GetNumberOfTries(Piece.Green) == 3)
                            {
                                ev = (5 * nomoves * nomoves + (36 + 6 * nomoves + nomoves * nomoves) * ev) / (216 - nomoves * nomoves * nomoves);
                            }
                            else
                            {
                                ev = (5 + ev) / (6 - nomoves);
                            }

                            SaveValue(sit, ev);
                            Console.WriteLine(positionOrder[i] + " "
                                + positionOrder[j] + " "
                                + positionOrder[k] + " "
                                + positionOrder[l] + ": " + ev);
                        }
                    }
                }
            }

            Byte[] bytes = new Byte[6 * dict.Count];
            int offset = 0;
            foreach (KeyValuePair<int, decimal> kvp in dict)
            {
                Array.Copy(System.BitConverter.GetBytes(kvp.Key), 0, bytes, offset, 4);
                offset += 4;
                Array.Copy(System.BitConverter.GetBytes((Int16)(kvp.Value * 256)), 0, bytes, offset, 2);
                offset += 2;
            }

            File.WriteAllBytes("singleplayer.data", bytes);

            Console.ReadLine();
        }
Esempio n. 30
0
        public void RedShouldGetTwoBeersWhenAPieceIsEatenByADouble()
        {
            var pos = getStartPositions();
            pos[0] = Position.Blue1;
            pos[1] = Position.Blue1;
            pos[5] = Position.Blue3;

            var sit = new Situation(pos);
            var moves = sit.GetMoves(Piece.Green, 2);
            sit.ApplyMove(moves[0]);

            Assert.AreEqual(2, sit.beers[(int)Piece.Red]);
        }