Popular Posts
Enable SSL connection for Jsoup import org.jsoup.Connection; import org.jsoup.Jsoup; import javax.net.ssl.*; import java.io.IOException; import java.security.KeyManagement... Join related table and count rows or sum sql server 2005 count rows: SELECT * FROM Table1 LEFT JOIN     (SELECT Level1ID, COUNT(Level2ID) AS Total FROM Table2 GROUP BY Level1ID) AS... Append soap header into axis When axis generate classese of web service, it won't include the request of soap header. Here is a way to append soap header manually i...
Stats
Bomb Sweeper
<html>
<head>
    <title>Bomb Sweeper</title>
    <style type="text/css">
        body
        {
            background-color: #95B7DF;
        }
        #tableContainer td
        {
            width: 20px;
            height: 20px;
            text-align: center;
            vertical-align: middle;
            -moz-border-radius: 5px;
            -khtml-border-radius: 5px;
            -webkit-border-radius: 5px;
        }
    </style>

    <script type="text/javascript" src="jquery.js"></script>

    <script type="text/javascript">
        var BombSweeper = {
            result: true,
            bombMap: false,
            colSize: 0,
            rowSize: 0,
            locateBomb: function(rowSize, colSize, bombCount) {
                var bombArr = new Array(colSize * rowSize);
                var count = 0;
                var index;
                while (count < bombCount) {
                    index = Math.floor(Math.random() * bombArr.length);
                    if (!bombArr[index]) {
                        count++;
                        bombArr[index] = true;
                    }
                }
                this.colSize = colSize;
                this.rowSize = rowSize;
                this.bombMap = bombArr;
            },
            getSurroundedIndex: function(x, y) {
                var indexArr = [];
                for (var i = x - 1; i <= x + 1; i++) {
                    if (i >= 0 && i < this.colSize) {
                        for (var j = y - 1; j <= y + 1; j++) {
                            if (j >= 0 && j < this.rowSize) {
                                indexArr.push(i * this.colSize + j);
                            }
                        }
                    }
                }
                return indexArr;
            },
            getSurroundedBombCount: function(arr) {
                var count = 0;
                for (var i in arr) {
                    if (this.bombMap[arr[i]]) count++;
                }
                return count;
            },
            getTips: function(x, y) {
                var _x = parseInt(x, 10);
                var _y = parseInt(y, 10);
                if (this.bombMap[_x * this.colSize + _y]) {
                    return -1;
                } else {
                    return this.getSurroundedBombCount(this.getSurroundedIndex(_x, _y));
                }
            },
            isBomb: function(x, y) {
                var _x = parseInt(x, 10);
                var _y = parseInt(y, 10);
                return this.bombMap[_x * this.colSize + _y] == true;
            }
        };
        $(document).ready(function() {
            $("#generateTable").bind("click", function() {
                var colSize = parseInt($("#colSize").val(), 10);
                var rowSize = parseInt($("#rowSize").val(), 10);
                var bombCount = parseInt($("#bombCount").val(), 10);

                if (isNaN(colSize) || isNaN(rowSize)) {
                    $("#tableContainer").text("Not availible size.");
                } else {
                    BombSweeper.locateBomb(colSize, rowSize, bombCount);

                    // rewrite value
                    $("#colSize").val(colSize);
                    $("#rowSize").val(rowSize);
                    $("#col").text(colSize);
                    $("#row").text(rowSize);
                    $("#bomb").text(0);
                    $("#bombEmbed").text(bombCount);


                    // create bomb table
                    $("#tableContainer").html("");
                    $("<table/>").attr({
                        border: 0,
                        align: "center"
                    }).appendTo("#tableContainer");

                    for (var i = 0; i < rowSize; i++) {
                        var currentRow = $("<tr/>").appendTo("#tableContainer table");

                        for (var j = 0; j < colSize; j++) {
                            var currentCell = $("<td/>").css({
                                //textAlign: "center",
                                //verticalAlign: "middle",
                                //fontSize: "12pt",
                                border: "2px outset black",
                                //width: "20px",
                                //height: "20px",
                                backgroundColor: "gray"
                            }).attr({ x: i, y: j })
                            .html("&nbsp;")
                            //.html(BombSweeper.bombMap[i * colSize + j] ? "X" : "&nbsp;")
                            .click(function(e) {
                                if (e.ctrlKey && $(this).attr("x") && $(this).attr("y")) {
                                    if ($(this).attr("marked") == "true") {
                                        $(this).removeAttr("marked")
                                        .css({
                                            color: "black",
                                            fontWeight: "normal"
                                        })
                                        .html("&nbsp;");
                                        $("#bomb").text(parseInt($("#bomb").text(), 10) - 1);
                                    } else {
                                        if (parseInt($("#bomb").text(), 10) < parseInt($("#bombEmbed").text(), 10)) {
                                            $(this).css({
                                                color: "blue",
                                                fontWeight: "bold"
                                            })
                                            .attr("marked", true)
                                            .text("P");
                                            $("#bomb").text(parseInt($("#bomb").text(), 10) + 1);
                                            if (parseInt($("#bomb").text(), 10) == parseInt($("#bombEmbed").text(), 10)) {
                                                var marked = $("#tableContainer td[marked]");
                                                for (var i = 0; i < marked.length; i++) {
                                                    if (!BombSweeper.isBomb($(marked.get(i)).attr("x"), $(marked.get(i)).attr("y"))) return;
                                                }

                                                // unbind all click event
                                                $("#tableContainer td").unbind("click");
                                                // finish game
                                                if (confirm("Congratulations!\nYou finish this game.\nWould you like to play again?")) {
                                                    $("#generateTable").click();
                                                }
                                            }
                                        }
                                    }
                                } else {
                                    if (!$(this).attr("marked") && $(this).attr("x") && $(this).attr("y")) {
                                        var x = parseInt($(this).attr("x"), 10);
                                        var y = parseInt($(this).attr("y"), 10);
                                        var tips = BombSweeper.getTips(x, y);

                                        if (tips == -1) {
                                            $(this).css({
                                                border: "2px inset black",
                                                backgroundColor: "transparent",
                                                color: "red"
                                            })
                                            .text("X")
                                            .removeAttr("x")
                                            .removeAttr("y");

                                            // unbind all click event
                                            $("#tableContainer td").unbind("click");
                                            if (confirm("Sorry, you lose this game.\nWould you like to play again?")) {
                                                $("#generateTable").click();
                                            }
                                        } else {
                                            $(this).css({
                                                border: "2px inset black",
                                                backgroundColor: "white"
                                            })
                                            .html(tips == 0 ? "&nbsp;" : tips)
                                            .removeAttr("x")
                                            .removeAttr("y");

                                            // extended action
                                            if (tips == 0) {
                                                $("#tableContainer td[x][y][marked!='true']")
                                                .filter(function(index) {
                                                    return ($(this).attr("x") == x - 1 || $(this).attr("x") == x || $(this).attr("x") == x + 1)
                                                    && ($(this).attr("y") == y - 1 || $(this).attr("y") == y || $(this).attr("y") == y + 1);
                                                })
                                                .each(function(index) {
                                                    $(this).click();
                                                });
                                            }
                                        }
                                    }
                                }
                            })
                            .appendTo(currentRow);
                        }
                    }
                }
            });
        });
    </script>

</head>
<body>
    <div style="text-align: center;">
        <input id="colSize" type="text" size="5" value="10" />
        x
        <input id="rowSize" type="text" size="5" value="10" />
        @
        <input id="bombCount" type="text" size="5" value="30" />
        <input id="generateTable" type="button" value="New Game" />
    </div>
    <div style="text-align: center;">
        Size of grid : <span id="col">0</span>/ <span id="row">0</span>
        <br />
        Marked bombs : <span id="bomb">0</span> / <span id="bombEmbed">0</span>
    </div>
    <div id="tableContainer">
    </div>
    <div style="text-align: center; font-size: 9pt;">
        (To mark bomb, press ctrl key and click.)</div>
</body>
</html>