Example #1
0
        public void TestRightDiagonalLine()
        {
            Field field = new Field(10, 10);
            int   length;

            Cell[] lineElements;

            field[5, 1].Contain = BubbleSize.Big;
            field[5, 1].Color   = BubbleColor.Red;
            field[4, 2].Contain = BubbleSize.Big;
            field[4, 2].Color   = BubbleColor.Red;
            field[3, 3].Contain = BubbleSize.Big;
            field[3, 3].Color   = BubbleColor.Red;
            field[2, 4].Contain = BubbleSize.Big;
            field[2, 4].Color   = BubbleColor.Red;
            field[1, 5].Contain = BubbleSize.Big;
            field[1, 5].Color   = BubbleColor.Red;

            LineChecker lineChecker = new LineChecker(field, field[2, 4]);

            Assert.IsTrue(lineChecker.RightDiagonalLine(out length, out lineElements));
            Assert.AreEqual(length, 5);
            Assert.AreSame(lineElements[1], field[1, 5]);
            Assert.AreSame(lineElements[4], field[5, 1]);
        }
 public NineSquareGridWinningLineChecker(LineChecker diagonal_winning_line_checker,
                                         LineChecker column_winning_line_checker,
                                         LineChecker row_winning_line_checker)
 {
     _diagonal_winning_line_checker = diagonal_winning_line_checker;
     _column_winning_line_checker = column_winning_line_checker;
     _row_winning_line_checker = row_winning_line_checker;
 }
Example #3
0
        public void MoveBubble(Cell currentCell)
        {
            _lineChecker = new LineChecker(Field, currentCell);
            _lineChecker.ScoreChangedEventHandler += OnScoreChange;
            _lineChecker.DestroyLinesEventHandler += OnDestroyLines;

            if (currentCell.Contain == null)
            {
                if (TryMoveBubble(SelectedCell, currentCell))
                {
                    SelectedCell = null;

                    if (!_lineChecker.Check())
                    {
                        NextTurn(true);
                    }
                    else
                    {
                        Field.EmptyCells += _lineChecker.LineLength;
                        NextTurn(false);
                    }
                }
            }
            else
            {
                if (currentCell.Contain == BubbleSize.Small)
                {
                    Cell CurrentCellDuplicate = new Cell(currentCell);

                    if (TryMoveBubble(SelectedCell, currentCell))
                    {
                        SelectedCell = null;

                        if (!_lineChecker.Check())
                        {
                            Cell newBubble = _bubbleGenerationStrategy.GenerateBubble(Field, BubbleSize.Small, CurrentCellDuplicate.Color);
                            Field[newBubble.Row, newBubble.Column].Contain = newBubble.Contain;
                            Field[newBubble.Row, newBubble.Column].Color   = newBubble.Color;
                            NextTurn(true);
                        }
                        else
                        {
                            Field.EmptyCells += _lineChecker.LineLength;
                            Field[currentCell.Row, currentCell.Column] = CurrentCellDuplicate;
                            NextTurn(false);
                        }
                    }
                }
                else
                {
                    SelectBubble(currentCell);
                }
            }
        }
Example #4
0
 public static void InitializeGenerators(SpeakingLineGenerator speakingLineGenerator, ExpressionLineGenerator expressionLineGenerator,
                                         ChoiceLineGenerator choiceLineGenerator, InstructionLineGenerator instructionLineGenerator,
                                         StallLineGenerator stallLineGenerator, LineChecker isLineValid)
 {
     GenerateSpeakingLine    = speakingLineGenerator;
     GenerateExperssionLine  = expressionLineGenerator;
     GenerateChoiceLine      = choiceLineGenerator;
     GenerateInstructionLine = instructionLineGenerator;
     GenerateStallLine       = stallLineGenerator;
     IsLineValid             = isLineValid;
     initialized             = true;
 }
Example #5
0
        public void TestCheckMethod_RightDiagonalLine()
        {
            Field field = new Field(10, 10);

            field[5, 1].Contain = BubbleSize.Big;
            field[5, 1].Color   = BubbleColor.Red;
            field[4, 2].Contain = BubbleSize.Big;
            field[4, 2].Color   = BubbleColor.Red;
            field[3, 3].Contain = BubbleSize.Big;
            field[3, 3].Color   = BubbleColor.Red;
            field[2, 4].Contain = BubbleSize.Big;
            field[2, 4].Color   = BubbleColor.Red;
            field[1, 5].Contain = BubbleSize.Big;
            field[1, 5].Color   = BubbleColor.Red;

            LineChecker lineChecker = new LineChecker(field, field[2, 4]);

            Assert.IsTrue(lineChecker.Check());
        }
Example #6
0
        public void TestCheckMethod_VerticalLine()
        {
            Field field = new Field(10, 10);

            field[1, 1].Contain = BubbleSize.Big;
            field[1, 1].Color   = BubbleColor.Red;
            field[2, 1].Contain = BubbleSize.Big;
            field[2, 1].Color   = BubbleColor.Red;
            field[3, 1].Contain = BubbleSize.Big;
            field[3, 1].Color   = BubbleColor.Red;
            field[4, 1].Contain = BubbleSize.Big;
            field[4, 1].Color   = BubbleColor.Red;
            field[5, 1].Contain = BubbleSize.Big;
            field[5, 1].Color   = BubbleColor.Red;

            LineChecker lineChecker = new LineChecker(field, field[2, 1]);

            Assert.IsTrue(lineChecker.Check());
        }
Example #7
0
        public void TestCheckMethod_HorizontalLine()
        {
            Field field = new Field(10, 10);

            field[1, 1].Contain = BubbleSize.Big;
            field[1, 1].Color   = BubbleColor.Red;
            field[1, 2].Contain = BubbleSize.Big;
            field[1, 2].Color   = BubbleColor.Red;
            field[1, 3].Contain = BubbleSize.Big;
            field[1, 3].Color   = BubbleColor.Red;
            field[1, 4].Contain = BubbleSize.Big;
            field[1, 4].Color   = BubbleColor.Red;
            field[1, 5].Contain = BubbleSize.Big;
            field[1, 5].Color   = BubbleColor.Red;

            LineChecker lineChecker = new LineChecker(field, field[1, 3]);

            Assert.IsTrue(lineChecker.Check());
        }
Example #8
0
        public void TestDoubleLine()
        {
            Field field = new Field(10, 10);
            int   line1Length;

            Cell[] line1Elements;
            int    line2Length;

            Cell[] line2Elements;

            //left diagonal line
            field[1, 1].Contain = BubbleSize.Big;
            field[1, 1].Color   = BubbleColor.Red;
            field[2, 2].Contain = BubbleSize.Big;
            field[2, 2].Color   = BubbleColor.Red;
            field[3, 3].Contain = BubbleSize.Big;
            field[3, 3].Color   = BubbleColor.Red;
            field[4, 4].Contain = BubbleSize.Big;
            field[4, 4].Color   = BubbleColor.Red;
            field[5, 5].Contain = BubbleSize.Big;
            field[5, 5].Color   = BubbleColor.Red;
            //+ vertical line
            field[2, 1].Contain = BubbleSize.Big;
            field[2, 1].Color   = BubbleColor.Red;
            field[3, 1].Contain = BubbleSize.Big;
            field[3, 1].Color   = BubbleColor.Red;
            field[4, 1].Contain = BubbleSize.Big;
            field[4, 1].Color   = BubbleColor.Red;
            field[5, 1].Contain = BubbleSize.Big;
            field[5, 1].Color   = BubbleColor.Red;

            LineChecker lineChecker = new LineChecker(field, field[1, 1]);

            Assert.IsTrue(lineChecker.LeftDiagonalLine(out line1Length, out line1Elements));
            Assert.AreEqual(line1Length, 5);
            Assert.AreSame(line1Elements[0], field[1, 1]);
            Assert.AreSame(line1Elements[4], field[5, 5]);

            Assert.IsTrue(lineChecker.VerticalLine(out line2Length, out line2Elements));
            Assert.AreEqual(line2Length, 5);
            Assert.AreSame(line2Elements[0], field[1, 1]);
            Assert.AreSame(line2Elements[4], field[5, 1]);
        }
Example #9
0
        public void Line_Positive()
        {
            FileAsObject o           = new FileAsObject();
            LineChecker  lineChecker = new LineChecker();

            lineChecker.SetInternalCircuitNamesForTests(new string[] { "INPUT_HIGH", "INPUT_LOW", "PROBE", "NAND" });

            o.Attach(new NodeLine("A:	INPUT_HIGH;"));
            o.Attach(new NodeLine("B:	INPUT_HIGH;"));
            o.Attach(new NodeLine("S:	PROBE;"));
            o.Attach(new NodeLine("NODE1:	NAND;"));

            o.Attach(new ConnectionLine("A:	NODE1;"));
            o.Attach(new ConnectionLine("B:	NODE1;"));
            o.Attach(new ConnectionLine("NODE1:	S;"));

            (bool success, string validationError)res = o.Accept(lineChecker);
            Assert.AreEqual(true, res.success);
        }
Example #10
0
 private void RaizeSmallBubbles()
 {
     for (int i = 0; i < Field.Height; i++)
     {
         for (int j = 0; j < Field.Width; j++)
         {
             if (Field[i, j].Contain == BubbleSize.Small)
             {
                 Field.EmptyCells--;
                 Field[i, j].Contain = BubbleSize.Big;
                 // Check if this bubble creates line
                 _lineChecker = new LineChecker(Field, Field[i, j]);
                 _lineChecker.ScoreChangedEventHandler += OnScoreChange;
                 _lineChecker.DestroyLinesEventHandler += OnDestroyLines;
                 _lineChecker.Check();
                 Field.EmptyCells += _lineChecker.LineLength;
             }
         }
     }
 }
Example #11
0
        /// <summary>
        /// проверяем на заполнение вертикальных и горизонтальных линий
        /// проверка сделана таким образом, что может проверять сетку лубой размерности
        /// </summary>
        /// <returns><c>true</c> если есть победитель, <c>false</c> нету</returns>
        bool ChekForWinner()
        {
            if (CheckForDraw())
            {
                DrawGame();
                return(false);
            }

            bool        f = false;
            LineChecker lc = new LineChecker(ref _allCells);
            int         i, j;

            for (i = 0; i < _grid; i++)
            {
                //горизонтальные
                lc.Reset();
                for (j = _grid * i; lc.lineLength < _grid; j++)
                {
                    lc.AddCell(j);
                }
                if (lc.isWinLine)
                {
                    break;
                }
                //вертикальные
                lc.Reset();
                for (j = i; lc.lineLength < _grid; j += _grid)
                {
                    lc.AddCell(j);
                }
                if (lc.isWinLine)
                {
                    break;
                }
            }
            if (lc.hasWinLine)
            {
                WinGame(lc.line);
                f = true;
            }
            else
            {
                lc.Reset();
                //проверяем диагональные линии (слева на право)
                for (i = 0; i < _grid; i++)
                {
                    lc.AddCell(_grid * i + i);
                }
                if (lc.isWinLine)
                {
                    WinGame(lc.line);
                    f = true;
                }
                else
                {
                    lc.Reset();
                    for (i = 0; i < _grid; i++)
                    {
                        lc.AddCell(_grid - 1 + _grid * i - i);
                    }

                    if (lc.isWinLine)
                    {
                        WinGame(lc.line);
                        f = true;
                    }
                }
            }
            return(f);
        }
Example #12
0
        public static (bool success, string validationError) Validate(string content)
        {
            FileAsObject o = new FileAsObject();

            using (StringReader reader = new StringReader(content))
            {
                bool   blockOne = true;
                string line;
                while ((line = reader.ReadLine()) != null)
                {
                    if (line.StartsWith("#"))
                    {
                        continue;
                    }
                    if (line.Equals(""))
                    {
                        blockOne = false; continue;
                    }

                    if (blockOne)
                    {
                        o.Attach(new NodeLine(line));
                    }
                    else
                    {
                        o.Attach(new ConnectionLine(line));
                    }
                }
            }

            FormatChecker formatChecker = new FormatChecker(content);
            LineChecker   lineChecker   = new LineChecker();

            if (InternalCircuitNamesForTests != null)
            {
                lineChecker.SetInternalCircuitNamesForTests(InternalCircuitNamesForTests);
            }
            LoopChecker loopChecker = new LoopChecker(content);
            HangingConnectionChecker hangingConnectionChecker = new HangingConnectionChecker(content);

            (bool success, string validationError)res;
            if (!(res = o.Accept(formatChecker)).success)
            {
                return(res);
            }
            if (!(res = o.Accept(lineChecker)).success)
            {
                return(res);
            }
            if (!(res = o.Accept(hangingConnectionChecker)).success)
            {
                return(res);
            }
            if (!(res = o.Accept(loopChecker)).success)
            {
                return(res);
            }

            return(
                success : true,
                validationError : ""
                );
        }
Example #13
0
 public TicTacToe(PlayerTracker player_tracker, Grid grid, LineChecker line_checker)
 {
     _player_tracker = player_tracker;
     _grid = grid;
     _line_checker = line_checker;
 }