private static void RotatePiece(Tetromino.type CurrentType) { counter++; rotating = false; int currentPieceCount = Tetromino.PieceList.Count; if (CurrentType == Tetromino.type.I) { if (LeftCollision || RightCollision) { goto BreakOut; } if (CurrentRotation == 0) { Tetromino.PieceList[currentPieceCount - 1].X += 2; Tetromino.PieceList[currentPieceCount - 1].Y -= 2; Tetromino.PieceList[currentPieceCount - 2].X++; Tetromino.PieceList[currentPieceCount - 2].Y--; Tetromino.PieceList[currentPieceCount - 4].X--; Tetromino.PieceList[currentPieceCount - 4].Y++; CurrentRotation = 90; goto BreakOut; } if (CurrentRotation == 90) { Tetromino.PieceList[currentPieceCount - 1].X -= 2; Tetromino.PieceList[currentPieceCount - 1].Y += 2; Tetromino.PieceList[currentPieceCount - 2].X--; Tetromino.PieceList[currentPieceCount - 2].Y++; Tetromino.PieceList[currentPieceCount - 4].X++; Tetromino.PieceList[currentPieceCount - 4].Y--; CurrentRotation = 0; goto BreakOut; } } if (CurrentType == Tetromino.type.L) { if (LeftCollision || RightCollision) { goto BreakOut; } if (CurrentRotation == 0) { Tetromino.PieceList[currentPieceCount - 1].X -= 2; Tetromino.PieceList[currentPieceCount - 1].Y--; Tetromino.PieceList[currentPieceCount - 2].X--; Tetromino.PieceList[currentPieceCount - 2].Y -= 2; Tetromino.PieceList[currentPieceCount - 3].Y--; Tetromino.PieceList[currentPieceCount - 3].X++; CurrentRotation = 90; goto BreakOut; } if (CurrentRotation == 90) { Tetromino.PieceList[currentPieceCount - 1].Y--; Tetromino.PieceList[currentPieceCount - 2].X++; Tetromino.PieceList[currentPieceCount - 3].Y++; Tetromino.PieceList[currentPieceCount - 3].X--; Tetromino.PieceList[currentPieceCount - 4].Y += 2; CurrentRotation = 180; goto BreakOut; } if (CurrentRotation == 180) { Tetromino.PieceList[currentPieceCount - 1].X += 2; Tetromino.PieceList[currentPieceCount - 2].X++; Tetromino.PieceList[currentPieceCount - 2].Y++; Tetromino.PieceList[currentPieceCount - 4].X--; Tetromino.PieceList[currentPieceCount - 4].Y--; CurrentRotation = 270; goto BreakOut; } if (CurrentRotation == 270) { Tetromino.PieceList[currentPieceCount - 1].Y++; Tetromino.PieceList[currentPieceCount - 2].X--; Tetromino.PieceList[currentPieceCount - 3].Y--; Tetromino.PieceList[currentPieceCount - 4].X++; Tetromino.PieceList[currentPieceCount - 4].Y -= 2; CurrentRotation = 0; goto BreakOut; } } if (CurrentType == Tetromino.type.T) { if (CurrentRotation == 0) { Tetromino.PieceList[currentPieceCount - 1].Y++; Tetromino.PieceList[currentPieceCount - 1].X -= 2; Tetromino.PieceList[currentPieceCount - 2].X--; Tetromino.PieceList[currentPieceCount - 3].Y--; Tetromino.PieceList[currentPieceCount - 4].Y++; CurrentRotation = 90; goto BreakOut; } if (CurrentRotation == 90) { Tetromino.PieceList[currentPieceCount - 1].Y -= 2; Tetromino.PieceList[currentPieceCount - 2].X++; Tetromino.PieceList[currentPieceCount - 2].Y--; Tetromino.PieceList[currentPieceCount - 3].X += 2; CurrentRotation = 180; goto BreakOut; } if (CurrentRotation == 180) { Tetromino.PieceList[currentPieceCount - 1].X += 2; Tetromino.PieceList[currentPieceCount - 2].X++; Tetromino.PieceList[currentPieceCount - 2].Y++; Tetromino.PieceList[currentPieceCount - 3].Y += 2; CurrentRotation = 270; goto BreakOut; } if (CurrentRotation == 270) { Tetromino.PieceList[currentPieceCount - 1].Y += 2; Tetromino.PieceList[currentPieceCount - 2].X--; Tetromino.PieceList[currentPieceCount - 2].Y++; Tetromino.PieceList[currentPieceCount - 3].X -= 2; CurrentRotation = 0; goto BreakOut; } } if (CurrentType == Tetromino.type.J) { if (LeftCollision || RightCollision) { goto BreakOut; } if (CurrentRotation == 0) { Tetromino.PieceList[currentPieceCount - 1].Y -= 2; Tetromino.PieceList[currentPieceCount - 2].X--; Tetromino.PieceList[currentPieceCount - 2].Y--; Tetromino.PieceList[currentPieceCount - 4].Y++; Tetromino.PieceList[currentPieceCount - 4].X++; CurrentRotation = 90; goto BreakOut; } if (CurrentRotation == 90) { Tetromino.PieceList[currentPieceCount - 1].X++; Tetromino.PieceList[currentPieceCount - 2].Y--; Tetromino.PieceList[currentPieceCount - 3].X--; Tetromino.PieceList[currentPieceCount - 4].Y++; Tetromino.PieceList[currentPieceCount - 4].X -= 2; CurrentRotation = 180; goto BreakOut; } if (CurrentRotation == 180) { Tetromino.PieceList[currentPieceCount - 1].X++; Tetromino.PieceList[currentPieceCount - 1].Y++; Tetromino.PieceList[currentPieceCount - 2].X += 2; Tetromino.PieceList[currentPieceCount - 3].X++; Tetromino.PieceList[currentPieceCount - 3].Y--; Tetromino.PieceList[currentPieceCount - 4].Y -= 2; CurrentRotation = 270; goto BreakOut; } if (CurrentRotation == 270) { Tetromino.PieceList[currentPieceCount - 1].X -= 2; Tetromino.PieceList[currentPieceCount - 1].Y++; Tetromino.PieceList[currentPieceCount - 2].X--; Tetromino.PieceList[currentPieceCount - 2].Y += 2; Tetromino.PieceList[currentPieceCount - 3].Y++; Tetromino.PieceList[currentPieceCount - 4].X++; CurrentRotation = 0; goto BreakOut; } } if (CurrentType == Tetromino.type.S) { if (LeftCollision || RightCollision) { goto BreakOut; } if (CurrentRotation == 0) { Tetromino.PieceList[currentPieceCount - 1].Y--; Tetromino.PieceList[currentPieceCount - 2].X--; Tetromino.PieceList[currentPieceCount - 3].Y++; Tetromino.PieceList[currentPieceCount - 4].Y += 2; Tetromino.PieceList[currentPieceCount - 4].X--; CurrentRotation = 90; goto BreakOut; } if (CurrentRotation == 90) { Tetromino.PieceList[currentPieceCount - 1].Y++; Tetromino.PieceList[currentPieceCount - 2].X++; Tetromino.PieceList[currentPieceCount - 3].Y--; Tetromino.PieceList[currentPieceCount - 4].Y -= 2; Tetromino.PieceList[currentPieceCount - 4].X++; CurrentRotation = 0; goto BreakOut; } } if (CurrentType == Tetromino.type.Z) { if (LeftCollision || RightCollision) { goto BreakOut; } if (CurrentRotation == 0) { Tetromino.PieceList[currentPieceCount - 1].Y++; Tetromino.PieceList[currentPieceCount - 1].X -= 2; Tetromino.PieceList[currentPieceCount - 2].X--; Tetromino.PieceList[currentPieceCount - 3].Y++; Tetromino.PieceList[currentPieceCount - 4].X++; CurrentRotation = 90; goto BreakOut; } if (CurrentRotation == 90) { Tetromino.PieceList[currentPieceCount - 1].Y--; Tetromino.PieceList[currentPieceCount - 1].X += 2; Tetromino.PieceList[currentPieceCount - 2].X++; Tetromino.PieceList[currentPieceCount - 3].Y--; Tetromino.PieceList[currentPieceCount - 4].X--; CurrentRotation = 0; goto BreakOut; } } BreakOut :; //JUMP HERE AFTER ROTATION IS CALCULATED! OOOOUUUU I WROTE A GOTO STATEMENT! //if (Tetromino.PieceList.Count > 4) { // for (int i = 1; i < Tetromino.PieceList.Count; i++) // { // for (int j = Tetromino.PieceList.Count - 4; j <= Tetromino.PieceList.Count - 1; j++) // { // if (Tetromino.PieceList[i].X == Tetromino.PieceList[j].X // && Tetromino.PieceList[i].Y == Tetromino.PieceList[j].Y) // { // rotating = true; // RotatePiece(CurrentType); // RotatePiece(CurrentType); // RotatePiece(CurrentType); // counter = 0; // rotating = false; // break; // } // } // } //} }
private static void NewPiece() { //================================TODO: ADD DIFFERENT TYPES OF SHAPES===================== Tetromino.ResetVals(); timer.Change(1000, 200); CheckLine(); if (linecleared) { linecleared = false; Thread.Sleep(200); CheckLine(); if (linecleared) { linecleared = false; Thread.Sleep(200); CheckLine(); if (linecleared) { Thread.Sleep(200); CheckLine(); linecleared = false; } } } linecleared = false; collision = false; int typeInt = random.Next(0, 5); //int typeInt = 6; CurrentRotation = 0; if (typeInt == 0) //I { CurrentPieceType = Tetromino.type.I; Tetromino.PieceList.Add(new Tetromino(4, 0, Color.Tan)); Tetromino.PieceList.Add(new Tetromino(4, 1, Color.Tan)); Tetromino.PieceList.Add(new Tetromino(4, 2, Color.Tan)); Tetromino.PieceList.Add(new Tetromino(4, 3, Color.Tan)); } else if (typeInt == 1) //L { CurrentPieceType = Tetromino.type.L; Tetromino.PieceList.Add(new Tetromino(4, 0, Color.White)); Tetromino.PieceList.Add(new Tetromino(4, 1, Color.White)); Tetromino.PieceList.Add(new Tetromino(4, 2, Color.White)); Tetromino.PieceList.Add(new Tetromino(5, 2, Color.White)); } else if (typeInt == 2) //T { CurrentPieceType = Tetromino.type.T; Tetromino.PieceList.Add(new Tetromino(5, 0, Color.Lavender)); Tetromino.PieceList.Add(new Tetromino(4, 1, Color.Lavender)); Tetromino.PieceList.Add(new Tetromino(5, 1, Color.Lavender)); Tetromino.PieceList.Add(new Tetromino(6, 1, Color.Lavender)); } else if (typeInt == 3) //J { CurrentPieceType = Tetromino.type.J; Tetromino.PieceList.Add(new Tetromino(4, 0, Color.Green)); Tetromino.PieceList.Add(new Tetromino(4, 1, Color.Green)); Tetromino.PieceList.Add(new Tetromino(4, 2, Color.Green)); Tetromino.PieceList.Add(new Tetromino(3, 2, Color.Green)); } else if (typeInt == 4) //O { CurrentPieceType = Tetromino.type.O; Tetromino.PieceList.Add(new Tetromino(4, 0, Color.PaleVioletRed)); Tetromino.PieceList.Add(new Tetromino(4, 1, Color.PaleVioletRed)); Tetromino.PieceList.Add(new Tetromino(5, 0, Color.PaleVioletRed)); Tetromino.PieceList.Add(new Tetromino(5, 1, Color.PaleVioletRed)); } else if (typeInt == 5) //S { CurrentPieceType = Tetromino.type.S; Tetromino.PieceList.Add(new Tetromino(5, 0, Color.LightGreen)); Tetromino.PieceList.Add(new Tetromino(4, 0, Color.LightGreen)); Tetromino.PieceList.Add(new Tetromino(4, 1, Color.LightGreen)); Tetromino.PieceList.Add(new Tetromino(3, 1, Color.LightGreen)); } else if (typeInt == 6) //S { CurrentPieceType = Tetromino.type.Z; Tetromino.PieceList.Add(new Tetromino(4, 0, Color.ForestGreen)); Tetromino.PieceList.Add(new Tetromino(5, 0, Color.ForestGreen)); Tetromino.PieceList.Add(new Tetromino(5, 1, Color.ForestGreen)); Tetromino.PieceList.Add(new Tetromino(6, 1, Color.ForestGreen)); } }