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); } }
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(); } }
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; } } }
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; }