private void RemoveNormalPiece(NormalPiece piece, Action act) { act?.Invoke(); piece.Line[piece.Index] = null; foreach (var pConnection in piece.Connections) { RefreshPieceConnections(pConnection); } }
private void RecursiveFall(NormalPiece piece) { RemoveNormalPiece(piece, piece.Fall); foreach (var pieceConnection in piece.NotHoldConnections) { if (pieceConnection.isActive) { RecursiveFall((NormalPiece)pieceConnection); } } }
private List <NormalPiece> GetNeighborPiecesSameType(NormalPiece piece, List <NormalPiece> list) { foreach (var pieceConnection in piece.Connections.ConvertAll(x => (NormalPiece)x)) { if (pieceConnection.Compare(piece) && !list.Contains(pieceConnection)) { list.Add(pieceConnection); GetNeighborPiecesSameType(pieceConnection, list); } } return(list); }
private void TryBreaking(NormalPiece piece) { var piecesToBreak = GetNeighborPiecesSameType(piece, new List <NormalPiece>()); if (piecesToBreak.Count >= MIN_AMOUNT_TO_BREAK) { foreach (var p in piecesToBreak) { RemoveNormalPiece(p, p.Break); } CheckFallingPieces(); } }
private void CreateBoard() { for (var i = 0; i < MAX_LINES; i++) { var line = new PiecesLine(i, (i % 2 != 0), i == 0); var lineAmount = MAX_PIECES_PER_LINE - (line.IsShortLine ? 1 : 0); for (var j = 0; j < lineAmount; j++) { var pieceToAdd = i < INITIAL_LINE_AMOUNT?NormalPiece.GetRandom() : null; pieceToAdd?.UpdatePosition(line, j); pieceToAdd?.Lock(); line.Add(pieceToAdd); } lines.Add(line); } UpdateConnections(); Dump(); }
public Piece GetNextPiece() { var piece = NormalPiece.GetRandom(); return(piece); }