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(); } } } }
// 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(); }
private void NextPiece() { cPiece = nPiece.Activate(StartPos); nPiece = Tetramino.NextPiece(); }