Beispiel #1
0
        public void CreateAPairOfGreenBlocks()
        {
            var currentBlockPair = new BlockPair(Block.BlockTypeEnum.Green, Block.BlockTypeEnum.Green);

            Assert.AreEqual(currentBlockPair.Block1.Type, Block.BlockTypeEnum.Green);
            Assert.AreEqual(currentBlockPair.Block2.Type, Block.BlockTypeEnum.Green);
        }
Beispiel #2
0
        public void BothBlocksInPairStopped()
        {
            var currentBlockPair = new BlockPair(Block.BlockTypeEnum.Green, Block.BlockTypeEnum.Green);

            currentBlockPair.BothBlocksStopped += BothBlocksStopped;

            currentBlockPair.Block1.Status = Block.BlockStatusEnum.Stopped;
            currentBlockPair.Block2.Status = Block.BlockStatusEnum.Stopped;

            Assert.AreEqual(_bothBlocksStoppedTest, true);
        }
Beispiel #3
0
        public BlockPair NextBlocks()
        {
            BlockPair returnedBlocks = _blocksQueue.Dequeue();

            if (_addNewBlock)
            {
                BlockPair nextBlocks = new BlockPair(_percentageChanceOfBlock1BeingAPowerBlock,
                                               _percentageChanceOfBlock2BeingAPowerBlock);

                _blocksQueue.Enqueue(nextBlocks);
            }

            return returnedBlocks;
        }
Beispiel #4
0
        public BlockPairQueue(int queueLength, bool whenRemoveBlocksAddNewBlocksToQueue,
                              int percentageChanceOfBlock1BeingAPowerBlock, int percentageChanceOfBlock2BeingAPowerBlock)
        {
            _addNewBlock = whenRemoveBlocksAddNewBlocksToQueue;
            _percentageChanceOfBlock1BeingAPowerBlock = percentageChanceOfBlock1BeingAPowerBlock;
            _percentageChanceOfBlock2BeingAPowerBlock = percentageChanceOfBlock2BeingAPowerBlock;

            for (var bq = 0; bq < queueLength; bq++)
            {
                BlockPair nextBlocks = new BlockPair(percentageChanceOfBlock1BeingAPowerBlock,
                                               percentageChanceOfBlock2BeingAPowerBlock);

                _blocksQueue.Enqueue(nextBlocks);
            }
        }
Beispiel #5
0
        private bool CanRotate(BlockPair.RotationEnum rotateDirection)
        {
            int testArenaPositionX = 0;
            int testArenaPositionY = 0;
            bool canRotate = false;
            BlockPair.OrentationEnum newOrientation = _currentBlockPair.Orientation;

            if (((_currentBlockPair.Block2.ArenaXPosition > LeftArenaWall) &&
                 (rotateDirection == BlockPair.RotationEnum.Clockwise)) ||
                ((_currentBlockPair.Block2.ArenaXPosition > LeftArenaWall) &&
                 (rotateDirection == BlockPair.RotationEnum.Clockwise)) ||
                ((_currentBlockPair.Block2.ArenaXPosition > LeftArenaWall) &&
                 (rotateDirection == BlockPair.RotationEnum.Clockwise)) ||
                ((_currentBlockPair.Block2.ArenaXPosition < Width) &&
                 (rotateDirection == BlockPair.RotationEnum.AntiClockwise)))
            {
                canRotate = true;
            }

            // if we have passed the arena wall test above, test arena block collision
            if (canRotate)
            {
                if (_currentBlockPair.RotationDirection == BlockPair.RotationEnum.Clockwise)
                {
                    newOrientation += 1;
                    if ((int)newOrientation > (int)BlockPair.OrentationEnum.Above)
                    {
                        newOrientation = BlockPair.OrentationEnum.Right;
                    }
                }
                else
                {
                    newOrientation -= 1;
                    if ((int)_currentBlockPair.Orientation < (int)BlockPair.OrentationEnum.Right)
                    {
                        newOrientation = BlockPair.OrentationEnum.Above;
                    }
                }

                switch (newOrientation)
                {
                    case BlockPair.OrentationEnum.Right:
                        testArenaPositionX = _currentBlockPair.Block1.ArenaXPosition + 1;
                        testArenaPositionY = _currentBlockPair.Block1.ArenaYPosition;
                        break;
                    case BlockPair.OrentationEnum.Below:
                        testArenaPositionX = _currentBlockPair.Block1.ArenaXPosition;
                        testArenaPositionY = _currentBlockPair.Block1.ArenaYPosition - 1;
                        break;
                    case BlockPair.OrentationEnum.Left:
                        testArenaPositionX = _currentBlockPair.Block1.ArenaXPosition - 1;
                        testArenaPositionY = _currentBlockPair.Block1.ArenaYPosition;
                        break;
                    case BlockPair.OrentationEnum.Above:
                        testArenaPositionX = _currentBlockPair.Block1.ArenaXPosition;
                        testArenaPositionY = _currentBlockPair.Block1.ArenaYPosition + 1;
                        break;
                }

                // Check the block we are moving to is empty
                canRotate = GetBlockAtPosition(testArenaPositionX, testArenaPositionY) == null;
            }

            return canRotate;
        }
Beispiel #6
0
        public void RotateBlocks(BlockPair.RotationEnum rotateDirection)
        {
            if (CanRotate(rotateDirection))
            {
                Log.Instance.Trace("RotateBlocks " + _currentBlockPair.RotationDirection.ToString() + '.');

                if (_currentBlockPair.RotationDirection == BlockPair.RotationEnum.Clockwise)
                {
                    _currentBlockPair.Orientation += 1;
                    if ((int)_currentBlockPair.Orientation > (int)BlockPair.OrentationEnum.Above)
                    {
                        _currentBlockPair.Orientation = BlockPair.OrentationEnum.Right;
                    }
                }
                else
                {
                    _currentBlockPair.Orientation -= 1;
                    if ((int)_currentBlockPair.Orientation < (int)BlockPair.OrentationEnum.Right)
                    {
                        _currentBlockPair.Orientation = BlockPair.OrentationEnum.Above;
                    }
                }

                RemoveBlock(_currentBlockPair.Block2);

                switch (_currentBlockPair.Orientation)
                {
                    case BlockPair.OrentationEnum.Right:
                        _currentBlockPair.Block2.ArenaXPosition = _currentBlockPair.Block1.ArenaXPosition + 1;
                        _currentBlockPair.Block2.ArenaYPosition = _currentBlockPair.Block1.ArenaYPosition;
                        break;
                    case BlockPair.OrentationEnum.Below:
                        _currentBlockPair.Block2.ArenaXPosition = _currentBlockPair.Block1.ArenaXPosition;
                        _currentBlockPair.Block2.ArenaYPosition = _currentBlockPair.Block1.ArenaYPosition - 1;
                        break;
                    case BlockPair.OrentationEnum.Left:
                        _currentBlockPair.Block2.ArenaXPosition = _currentBlockPair.Block1.ArenaXPosition - 1;
                        _currentBlockPair.Block2.ArenaYPosition = _currentBlockPair.Block1.ArenaYPosition;
                        break;
                    case BlockPair.OrentationEnum.Above:
                        _currentBlockPair.Block2.ArenaXPosition = _currentBlockPair.Block1.ArenaXPosition;
                        _currentBlockPair.Block2.ArenaYPosition = _currentBlockPair.Block1.ArenaYPosition + 1;
                        break;
                }

                AddBlock(_currentBlockPair.Block2);
            }
        }
Beispiel #7
0
        public void PutNextBlocksAtArenaStart()
        {
            Log.Instance.Trace("PutNextBlocksAtArenaStart");

            _currentBlockPair = _blockPairQueue.NextBlocks();

            _currentBlockPair.Block1.ArenaXPosition = Block1StartPosition.X;
            _currentBlockPair.Block1.ArenaYPosition = Block1StartPosition.Y;
            _currentBlockPair.Block2.ArenaXPosition = Block2StartPosition.X;
            _currentBlockPair.Block2.ArenaYPosition = Block2StartPosition.Y;

            AddBlock(_currentBlockPair.Block1, Block.BlockStatusEnum.Dropping);
            AddBlock(_currentBlockPair.Block2, Block.BlockStatusEnum.Dropping);
        }
Beispiel #8
0
        public void CreateAPairOfGreenBlocksDefaultNoRotation()
        {
            var currentBlockPair = new BlockPair(Block.BlockTypeEnum.Green, Block.BlockTypeEnum.Green);

            Assert.AreEqual(currentBlockPair.RotationDirection, BlockPair.RotationEnum.None);
        }