Esempio n. 1
0
        private bool CheckForObstruction(int id, TetronimoMovement move)
        {
            if (CheckForLeftAndRightBounds(id, move))
            {
                return(true);
            }
            GameTile neighboringGameTile;

            if (move == TetronimoMovement.Left)
            {
                neighboringGameTile = FindGameTileByID(id - 1);
            }
            else if (move == TetronimoMovement.Right)
            {
                neighboringGameTile = FindGameTileByID(id + 1);
            }
            else
            {
                throw new ArgumentException();
            }

            if (neighboringGameTile.HasReachedGround)
            {
                return(true);
            }
            else
            {
                return(false);
            }
        }
Esempio n. 2
0
        private void MoveTetronimo(TetronimoMovement leftOrRight)
        {
            switch (leftOrRight)
            {
            case TetronimoMovement.Left:
                MoveTetronimo(BlockMovement.Left);
                break;

            case TetronimoMovement.Right:
                MoveTetronimo(BlockMovement.Right);
                break;

            default:
                throw new ArgumentException();
            }
        }
Esempio n. 3
0
        private bool CheckForLeftAndRightBounds(int id, TetronimoMovement move)
        {
            var row = GameTile.GetRowFromID(id);

            if (move == TetronimoMovement.Left && row == -0)
            {
                return(true);
            }
            else if (move == TetronimoMovement.Right && row == 9)
            {
                return(true);
            }
            else
            {
                return(false);
            }
        }
        private TetronimoRotationState NextState(TetronimoMovement move)
        {
            if (move == TetronimoMovement.RollRight)
            {
                switch (m_RotationState)
                {
                case TetronimoRotationState.Eins:
                    return(TetronimoRotationState.Vier);

                case TetronimoRotationState.Zwei:
                    return(TetronimoRotationState.Eins);

                case TetronimoRotationState.Drei:
                    return(TetronimoRotationState.Zwei);

                case TetronimoRotationState.Vier:
                    return(TetronimoRotationState.Drei);

                default:
                    return(TetronimoRotationState.Error);
                }
            }
            else if (move == TetronimoMovement.RollLeft)
            {
                switch (m_RotationState)
                {
                case TetronimoRotationState.Eins:
                    return(TetronimoRotationState.Zwei);

                case TetronimoRotationState.Zwei:
                    return(TetronimoRotationState.Drei);

                case TetronimoRotationState.Drei:
                    return(TetronimoRotationState.Vier);

                case TetronimoRotationState.Vier:
                    return(TetronimoRotationState.Eins);

                default:
                    return(TetronimoRotationState.Error);
                }
            }
            return(TetronimoRotationState.Error);
        }
        private void RotateTetronimo(TetronimoMovement move)
        {
            if (m_Tetronimo != null && m_Tetronimo.Count == 4)
            {
                switch (m_TetronimoType)
                {
                case TetronimoType.I:
                    RotateI(move);
                    break;

                case TetronimoType.J:
                    RotateJ(move);
                    break;

                case TetronimoType.L:
                    RotateL(move);
                    break;

                case TetronimoType.O:
                    break;

                case TetronimoType.S:
                    RotateS(move);
                    break;

                case TetronimoType.T:
                    RotateT(move);
                    break;

                case TetronimoType.Z:
                    RotateZ(move);
                    break;

                case TetronimoType.Unknown:
                    break;

                default:
                    break;
                }
            }
        }
Esempio n. 6
0
        private void MoveTetronimoLeftRight(TetronimoMovement leftOrRight)
        {
            if (leftOrRight != TetronimoMovement.Left && leftOrRight != TetronimoMovement.Right)
            {
                throw new ArgumentException("Diese Methode bewegt den Tetronimo nur nach Links und Rechts andere TetronimoMovements sind unzulässig als Input");
            }


            var unmoveable = false;

            foreach (var item in m_Tetronimo)
            {
                if (CheckForObstruction(item.ID, leftOrRight))
                {
                    unmoveable = true;
                }
            }

            if (!unmoveable)
            {
                MoveTetronimo(leftOrRight);
            }
        }
        private void RotateT(TetronimoMovement move)
        {
            var nextRotationState = NextState(move);

            int[] blockIDs = new int[4];                                            //123
            if (m_RotationState == TetronimoRotationState.Eins)                     // 4
            {                                                                       // 1
                if (nextRotationState == TetronimoRotationState.Vier)               //42
                {                                                                   // 3
                    blockIDs[0] = GetIDRelativFromOldID(m_Tetronimo[0].ID, -1, +1); //eine Reihe nach oben und ein nach rechts
                    blockIDs[1] = m_Tetronimo[1].ID;
                    blockIDs[2] = GetIDRelativFromOldID(m_Tetronimo[2].ID, +1, -1); //eine Reihe nach Unten und ein nach Links
                    blockIDs[3] = GetIDRelativFromOldID(m_Tetronimo[3].ID, -1, -1); //eine reihe hoch und ein nach links
                }                                                                   //  3
                else//rotationstate.Zwei  24
                {                                                                   //    1
                    blockIDs[0] = GetIDRelativFromOldID(m_Tetronimo[0].ID, +1, +1); //eine Reihe runter und nach Rechts
                    blockIDs[1] = m_Tetronimo[1].ID;
                    blockIDs[2] = GetIDRelativFromOldID(m_Tetronimo[2].ID, -1, -1); //eine reihe hoch und ein nach links
                    blockIDs[3] = GetIDRelativFromOldID(m_Tetronimo[3].ID, -1, +1); //eine Reihe nach oben und ein nach rechts
                }
            }
            else if (m_RotationState == TetronimoRotationState.Zwei)
            {
                if (nextRotationState == TetronimoRotationState.Eins)
                {
                    blockIDs[0] = GetIDRelativFromOldID(m_Tetronimo[0].ID, -1, -1);
                    blockIDs[1] = m_Tetronimo[1].ID;
                    blockIDs[2] = GetIDRelativFromOldID(m_Tetronimo[2].ID, +1, +1);
                    blockIDs[3] = GetIDRelativFromOldID(m_Tetronimo[3].ID, +1, -1);
                }                       // 4
                else//TetronimoRotationstate.Drei 321
                {
                    blockIDs[0] = GetIDRelativFromOldID(m_Tetronimo[0].ID, -1, +1);
                    blockIDs[1] = m_Tetronimo[1].ID;
                    blockIDs[2] = GetIDRelativFromOldID(m_Tetronimo[2].ID, +1, -1);
                    blockIDs[3] = GetIDRelativFromOldID(m_Tetronimo[3].ID, -1, -1);
                }
            }
            else if (m_RotationState == TetronimoRotationState.Drei)
            {
                if (nextRotationState == TetronimoRotationState.Zwei)
                {
                    blockIDs[0] = GetIDRelativFromOldID(m_Tetronimo[0].ID, +1, -1);
                    blockIDs[1] = m_Tetronimo[1].ID;
                    blockIDs[2] = GetIDRelativFromOldID(m_Tetronimo[2].ID, -1, +1);
                    blockIDs[3] = GetIDRelativFromOldID(m_Tetronimo[3].ID, +1, +1);
                }
                else//Rotationstate.Vier
                {
                    blockIDs[0] = GetIDRelativFromOldID(m_Tetronimo[0].ID, -1, -1);
                    blockIDs[1] = m_Tetronimo[1].ID;
                    blockIDs[2] = GetIDRelativFromOldID(m_Tetronimo[2].ID, +1, +1);
                    blockIDs[3] = GetIDRelativFromOldID(m_Tetronimo[3].ID, +1, -1);
                }
            }
            else if (m_RotationState == TetronimoRotationState.Vier)
            {
                if (nextRotationState == TetronimoRotationState.Drei)
                {
                    blockIDs[0] = GetIDRelativFromOldID(m_Tetronimo[0].ID, +1, +1);
                    blockIDs[1] = m_Tetronimo[1].ID;
                    blockIDs[2] = GetIDRelativFromOldID(m_Tetronimo[2].ID, -1, -1);
                    blockIDs[3] = GetIDRelativFromOldID(m_Tetronimo[3].ID, -1, +1);
                }
                else//Rotationstate.eins
                {
                    blockIDs[0] = GetIDRelativFromOldID(m_Tetronimo[0].ID, +1, -1);
                    blockIDs[1] = m_Tetronimo[1].ID;
                    blockIDs[2] = GetIDRelativFromOldID(m_Tetronimo[2].ID, -1, +1);
                    blockIDs[3] = GetIDRelativFromOldID(m_Tetronimo[3].ID, +1, +1);
                }
            }
            else
            {
                throw new ArgumentException();
            }
            Rotate(nextRotationState, blockIDs);
        }
        private void RotateJ(TetronimoMovement move)
        {
            var nextRotationState = NextState(move);                  // 1

            int[] blockIDs = new int[4];                              // 2
            if (m_RotationState == TetronimoRotationState.Eins)       //43
            {                                                         //4
                if (nextRotationState == TetronimoRotationState.Vier) //321
                {                                                     //
                    blockIDs[0] = GetIDRelativFromOldID(m_Tetronimo[0].ID, +1, +1);
                    blockIDs[1] = m_Tetronimo[1].ID;
                    blockIDs[2] = GetIDRelativFromOldID(m_Tetronimo[2].ID, -1, -1);
                    blockIDs[3] = GetIDRelativFromOldID(m_Tetronimo[3].ID, -2, 0);
                }           //
                else//rotationstate.Zwei 123
                {           //     4
                    blockIDs[0] = GetIDRelativFromOldID(m_Tetronimo[0].ID, +1, -1);
                    blockIDs[1] = m_Tetronimo[1].ID;
                    blockIDs[2] = GetIDRelativFromOldID(m_Tetronimo[2].ID, -1, +1);
                    blockIDs[3] = GetIDRelativFromOldID(m_Tetronimo[3].ID, 0, +2);
                }
            }
            else if (m_RotationState == TetronimoRotationState.Zwei)
            {
                if (nextRotationState == TetronimoRotationState.Eins)
                {
                    blockIDs[0] = GetIDRelativFromOldID(m_Tetronimo[0].ID, -1, +1);
                    blockIDs[1] = m_Tetronimo[1].ID;
                    blockIDs[2] = GetIDRelativFromOldID(m_Tetronimo[2].ID, +1, -1);
                    blockIDs[3] = GetIDRelativFromOldID(m_Tetronimo[3].ID, 0, -2);
                }                      // 34
                else//TetronimoRotationstate.Drei  2
                {                      //  1
                    blockIDs[0] = GetIDRelativFromOldID(m_Tetronimo[0].ID, +1, +1);
                    blockIDs[1] = m_Tetronimo[1].ID;
                    blockIDs[2] = GetIDRelativFromOldID(m_Tetronimo[2].ID, -1, -1);
                    blockIDs[3] = GetIDRelativFromOldID(m_Tetronimo[3].ID, -2, 0);
                }
            }
            else if (m_RotationState == TetronimoRotationState.Drei)
            {
                if (nextRotationState == TetronimoRotationState.Zwei)
                {
                    blockIDs[0] = GetIDRelativFromOldID(m_Tetronimo[0].ID, -1, -1);
                    blockIDs[1] = m_Tetronimo[1].ID;
                    blockIDs[2] = GetIDRelativFromOldID(m_Tetronimo[2].ID, +1, +1);
                    blockIDs[3] = GetIDRelativFromOldID(m_Tetronimo[3].ID, +2, 0);
                }
                else//Rotationstate.Vier
                {
                    blockIDs[0] = GetIDRelativFromOldID(m_Tetronimo[0].ID, -1, +1);
                    blockIDs[1] = m_Tetronimo[1].ID;
                    blockIDs[2] = GetIDRelativFromOldID(m_Tetronimo[2].ID, +1, -1);
                    blockIDs[3] = GetIDRelativFromOldID(m_Tetronimo[3].ID, 0, -2);
                }
            }
            else if (m_RotationState == TetronimoRotationState.Vier)
            {
                if (nextRotationState == TetronimoRotationState.Drei)
                {
                    blockIDs[0] = GetIDRelativFromOldID(m_Tetronimo[0].ID, +1, -1);
                    blockIDs[1] = m_Tetronimo[1].ID;
                    blockIDs[2] = GetIDRelativFromOldID(m_Tetronimo[2].ID, -1, +1);
                    blockIDs[3] = GetIDRelativFromOldID(m_Tetronimo[3].ID, 0, +2);
                }
                else//Rotationstate.eins
                {
                    blockIDs[0] = GetIDRelativFromOldID(m_Tetronimo[0].ID, -1, -1);
                    blockIDs[1] = m_Tetronimo[1].ID;
                    blockIDs[2] = GetIDRelativFromOldID(m_Tetronimo[2].ID, +1, +1);
                    blockIDs[3] = GetIDRelativFromOldID(m_Tetronimo[3].ID, +2, 0);
                }
            }
            else
            {
                throw new ArgumentException();
            }
            Rotate(nextRotationState, blockIDs);
        }
 internal TetronimoMovementEventArgs(TetronimoMovement move)
 {
     TetronimoMove = move;
 }