//fragen wieso point und logik von rendershape top sowie rotation erklären public override void RotateTetromino(RotationState currentRotationState) { Point oldLocation = new Point(Shape[0].Left, Shape[0].Top); if (currentRotationState == RotationState.Default) { if (Shape[0].Left + TetrisConfig.BlockSize * 3 < TetrisConfig.getFieldWidth()) { for (int i = 1; i < Shape.Length; i++) { Shape[i].Top = oldLocation.Y; Shape[i].Left = oldLocation.X + i * TetrisConfig.BlockSize; } this.RotationState = RotationState.Left; } } else { for (int i = 1; i < Shape.Length; i++) { Shape[i].Left = oldLocation.X; Shape[i].Top = oldLocation.Y + i * TetrisConfig.BlockSize; } this.RotationState = RotationState.Default; } }
public override void RotateTetromino(RotationState currentRotationState) { Point oldLocation = new Point(Shape[0].Left, Shape[0].Top); if (currentRotationState == RotationState.Default) { if (Shape[0].Left >= TetrisConfig.BlockSize) { for (int i = 0; i < Shape.Length; i++) { Shape[i].Top = oldLocation.Y + (i - 1) * TetrisConfig.BlockSize; if (i >= 2) { Shape[i].Top = oldLocation.Y + (i - 2) * TetrisConfig.BlockSize; } Shape[i].Left = oldLocation.X; if (i >= 2) { Shape[i].Left = oldLocation.X - TetrisConfig.BlockSize; } } this.RotationState = RotationState.Left; } } else { if (Shape[0].Left + TetrisConfig.BlockSize * 2 <= TetrisConfig.getFieldWidth()) { for (int i = 0; i < Shape.Length; i++) { Shape[i].Left = oldLocation.X - i * TetrisConfig.BlockSize; if (i >= 2) { Shape[i].Left = oldLocation.X + (i - 2) * TetrisConfig.BlockSize; } Shape[i].Top = oldLocation.Y + TetrisConfig.BlockSize; if (i >= 2) { Shape[i].Top = oldLocation.Y + 2 * TetrisConfig.BlockSize; } } this.RotationState = RotationState.Default; } } }
public void MoveTetromino(MovingDirections movingDirection) { switch (movingDirection) { case MovingDirections.Left: bool allowMovementLeft = true; foreach (Block block in Shape) { if (block.Left <= 0) { allowMovementLeft = false; } } if (!allowMovementLeft) { return; } else { foreach (Block block in Shape) { block.MoveBlock(movingDirection); } } break; case MovingDirections.Right: bool allowMovementRight = true; foreach (Block block in Shape) { if (block.Right >= TetrisConfig.getFieldWidth()) { allowMovementRight = false; } } if (!allowMovementRight) { return; } else { foreach (Block block in Shape) { block.MoveBlock(movingDirection); } } break; case MovingDirections.Down: bool allowMovementDown = true; foreach (Block block in Shape) { if (block.Bottom >= TetrisConfig.getFieldHeight()) { allowMovementDown = false; } } if (!allowMovementDown) { TetrominoDocked?.Invoke(this); return; } else { foreach (Block block in Shape) { block.MoveBlock(movingDirection); } } break; default: break; } }
public override void RotateTetromino(RotationState currentRotationState) { Point oldLocation = new Point(Shape[0].Left, Shape[0].Top); if (currentRotationState == RotationState.Default) { if (Shape[0].Left + TetrisConfig.BlockSize < TetrisConfig.getFieldWidth()) { for (int i = 0; i < Shape.Length; i++) { Shape[i].Left = oldLocation.X + (i - 1) * TetrisConfig.BlockSize; Shape[i].Top = oldLocation.Y + TetrisConfig.BlockSize; if (i == 3) { Shape[i].Left = oldLocation.X - TetrisConfig.BlockSize; Shape[i].Top = oldLocation.Y; } } this.RotationState = RotationState.Right; } } else if (currentRotationState == RotationState.Right) { for (int i = 0; i < Shape.Length; i++) { Shape[i].Left = oldLocation.X + TetrisConfig.BlockSize; Shape[i].Top = oldLocation.Y + (i - 1) * TetrisConfig.BlockSize; if (i == 3) { Shape[i].Left = oldLocation.X + 2 * TetrisConfig.BlockSize; Shape[i].Top = oldLocation.Y - TetrisConfig.BlockSize; } } this.RotationState = RotationState.Down; } else if (currentRotationState == RotationState.Down) { if (Shape[0].Left - TetrisConfig.BlockSize >= 0) { for (int i = 0; i < Shape.Length; i++) { Shape[i].Left = oldLocation.X + (i - 1) * TetrisConfig.BlockSize; Shape[i].Top = oldLocation.Y + TetrisConfig.BlockSize; if (i == 3) { Shape[i].Left = oldLocation.X + TetrisConfig.BlockSize; Shape[i].Top = oldLocation.Y + 2 * TetrisConfig.BlockSize; } } this.RotationState = RotationState.Left; } } else { for (int i = 0; i < Shape.Length; i++) { Shape[i].Top = oldLocation.Y + (i - 1) * TetrisConfig.BlockSize; Shape[i].Left = oldLocation.X + TetrisConfig.BlockSize; if (i == 3) { Shape[i].Left = oldLocation.X; Shape[i].Top = oldLocation.Y + TetrisConfig.BlockSize; } } this.RotationState = RotationState.Default; } }