コード例 #1
0
        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;
            //			}
            //		}
            //	}
            //}
        }
コード例 #2
0
        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));
            }
        }