Пример #1
0
        public void HoldPiece()
        {
            if (cGameState == GameState.Running)
            {
                if (hPiece.GetTetraType().Equals(Tetramino.TetraType.Empty))
                {
                    hPiece = cPiece.Hold();
                    cPiece = nPiece.Activate(StartPos);
                    nPiece = Tetramino.NextPiece();
                }
                else
                {
                    Tetramino tmpPiece = hPiece;
                    hPiece = cPiece.Hold();
                    cPiece = tmpPiece.Activate(cPiece.GetLocation());

                    // FIX
                    while (MoveCollision(new Point(0, 0)))
                    {
                        RotatePiece();
                        if (MoveCollision(new Point(0, 0)))
                        {
                            RotatePiece();
                        }
                        else
                        {
                            return;
                        }
                        if (MoveCollision(new Point(0, 0)))
                        {
                            RotatePiece();
                        }
                        else
                        {
                            return;
                        }
                        if (MoveCollision(new Point(0, 0)))
                        {
                            RotatePiece();
                        }
                        else
                        {
                            return;
                        }
                        cPiece.MoveUp();
                    }
                }
            }
        }
Пример #2
0
        // Start function
        public void Start()
        {
            // Set up well dimensions
            int WellW = Canvas.Width / 4;
            int WellH = Canvas.Height - (Canvas.Height / 5);
            int WellX = Canvas.Width / 2 - WellW / 2;
            int WellY = Canvas.Height / 10;

            WellRect = new Rectangle[210];
            // Start at the bottom of the well
            for (int i = 0; i < 210; i++)
            {
                WellColor[i] = BlackBrush;
                WellRect[i]  = new Rectangle(WellX + (WellW / 10 * (i % 10)), WellH + (WellH / 21) - ((WellH / 21) * (i / 10)), WellW / 10, WellH / 21);
            }

            int nextX     = WellX + WellW + 20;
            int nextholdY = WellY + 20 + 3 * PreviewCellSize;
            int holdX     = WellX - 20 - 4 * PreviewCellSize;

            NextRect = new Rectangle[16];
            HoldRect = new Rectangle[16];
            // Rectangles for preview
            for (int i = 0; i < 16; i++)
            {
                NextRect[i] = new Rectangle(nextX + (i % 4) * PreviewCellSize, nextholdY - (PreviewCellSize * (i / 4)), PreviewCellSize, PreviewCellSize);
                HoldRect[i] = new Rectangle(holdX + (i % 4) * PreviewCellSize, nextholdY - (PreviewCellSize * (i / 4)), PreviewCellSize, PreviewCellSize);
            }

            // Setup for Game over and Paused screen
            BigTextLoc     = new PointF(WellX + WellW / 4, WellY + 4 * WellH / 12);
            BackgroundRect = new Rectangle(WellX - 20, WellY + WellH / 4, WellW + 40, WellH / 3);

            scoreLoc = new PointF(WellX + WellW + 20, WellY + 40 + 4 * PreviewCellSize);
            score    = 0;

            // Add tetromino piece
            cPiece = new Tetramino(Tetramino.GetRandomType(0), StartPos, Tetramino.PieceState.active);
            nPiece = new Tetramino(Tetramino.GetRandomType(1), new Point(), Tetramino.PieceState.next);
            hPiece = new Tetramino(Tetramino.TetraType.Empty, new Point(), Tetramino.PieceState.hold);

            GameThread = new Thread(GameTick);
            cGameState = GameState.Running;
            GameThread.Start();
        }
Пример #3
0
 private void NextPiece()
 {
     cPiece = nPiece.Activate(StartPos);
     nPiece = Tetramino.NextPiece();
 }