Exemplo n.º 1
0
        int scoreBoardTwo(DropResult result)
        {
            int score = result.clears * 4;
            int height = 0;
            for (int y = 0; y < BOARD_HEIGHT; y++) {
                for (int x = 0 ; x < BOARD_WIDTH; x++) {
                    if (result.grid[x,y] == 2) {
                        if (old(result.grid, x - 1, y)) score++;
                        if (old(result.grid, x + 1, y)) score++;
                        if (old(result.grid, x, y - 1)) score++;
                        if (old(result.grid, x, y + 1)) score++;
                        if (!filled(result.grid, x, y - 1)) score -= 5;;
                        height = y;
                    }
                }
            }

            return score - height;
        }
Exemplo n.º 2
0
        DropResult dropPiece(Orientation piece, int column)
        {
            DropResult dr = new DropResult();

            int[,] grid = (int[,])board.Clone();
            int depth = 3;
            bool collision = false;

            while(!collision) {
                depth++;
                for (int y = 0; y < 4; y++) {
                    for (int x = 0; x < piece.width; x++) {
                        if (BOARD_HEIGHT - depth + y < 0 || (grid[column + x, BOARD_HEIGHT - depth + y] != 0 && piece.blocks[x, y])) {
                            collision = true;
                            break;
                        }
                    }
                    if (collision) break;
                }
            }

            depth--; //Return to last acceptable depth

            //TODO: FIX THIS FRIGGEN EXCEPTION!!!
            try {
                // Move the piece into the board
                for (int y = 0; y < 4; y++) {
                    for (int x = 0; x < piece.width; x++) {
                        if (piece.blocks[x, y])
                            grid[column + x, BOARD_HEIGHT - depth + y] = 2;
                    }
                }
            } catch {
                dr.grid = new int[BOARD_WIDTH, BOARD_HEIGHT];
                dr.clears = -100;
                return dr;
            }

            for (int y = 0; y < 4; y++) {
                if (BOARD_HEIGHT - depth + 3 - y >= BOARD_HEIGHT) continue;
                bool clear = true;
                    for (int x = 0; x < BOARD_WIDTH; x++) {

                        if (grid[x, BOARD_HEIGHT - depth + 3 - y] == 0) {
                            clear = false;
                            break;
                        }
                    }

                    if (clear) {
                        dr.clears++;
                        clearLine(grid, BOARD_HEIGHT - depth + 3 - y);
                    }
                }
            dr.grid = grid;
            return dr;
        }