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); }
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); }
public BlockPair NextBlocks() { BlockPair returnedBlocks = _blocksQueue.Dequeue(); if (_addNewBlock) { BlockPair nextBlocks = new BlockPair(_percentageChanceOfBlock1BeingAPowerBlock, _percentageChanceOfBlock2BeingAPowerBlock); _blocksQueue.Enqueue(nextBlocks); } return returnedBlocks; }
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); } }
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; }
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); } }
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); }
public void CreateAPairOfGreenBlocksDefaultNoRotation() { var currentBlockPair = new BlockPair(Block.BlockTypeEnum.Green, Block.BlockTypeEnum.Green); Assert.AreEqual(currentBlockPair.RotationDirection, BlockPair.RotationEnum.None); }