js实现扫雷游戏

使用js实现扫雷游戏的制作

使用原始的js实现扫雷游戏的制作 没有使用canvas

基本功能:

  • 用户进入界面时启动计时功能
  • 游戏难度设置
  • 右键标记地雷,标记之后不能点击
  • 显示剩余雷数(总的雷数减去插旗的数量)
  • 自动连锁点开(当点开某个区块后,如果该区块的数字为 0,也就是九宫格内没有雷,那么将自动点开九宫格内的所有区块)

思路

  1. 地图的生成:采用二维数组的形式,用户点击开始界面 自动生成一个初始状态全为0的二维数组
  2. 地雷的随机生成:直接调用函数库Math 随机 map[x][x],设地雷为9,利用双层for循环嵌套
  3. 将地雷旁边的数字0加1,例如
    [
    [0, 9, 0, 0],
    [0, 0, 9, 0],
    [9, 0, 9, 0],
    [0, 9, 0, 0]
    ]
    转换为
    [
    [1, 9, 2, 1],
    [2, 4, 9, 2],
    [9, 4, 9, 2],
    [2, 9, 2, 1]
    ]

下面将给出js代码

生成一张雷图

var mineSweepingMap = function (r, c, num) {
   
    var map = []
    // 给行数,生成一个 1 维数组
    var row = function (r) {
   
        for (var i = 0; i < r; i++) {
   
            map[i] = new Array()
        }
    }
    // 给列数,生成一个 2 维数组
    var column = function (col) {
   
        for (var i = 0; i < map.length; i++) {
   
            for (var j = 0; j < col; j++) {
   
                map[i][j] = 0
            }
        }
    }
    // 给列数和行数生成空地图
    var blankMap = function (r, col) {
   
        row(r)
        column(col)
    }

    // 给出地雷数量让后随机写入地雷
    var writeInMine = function (num) {
   
        // 随机位置写入
        var randomLocation = function () {
   
            var x = Math.floor(Math.random() * r)
            var y = Math.floor(Math.random() * c)
            // console.log( ':', x, y);
            if (map[x][y] !== 9) {
   
                map[x][y] = 9
            } else {
   
                randomLocation()
            }
        }
        for (var i = 0; i < num; i++) {
   
            randomLocation()
        }
    }

    // 使用循环给雷的边上所有数 +1 , 已经是雷的除外
    var plus = function (array, x, y) {
   
        if (x >= 0 && x < r && y >= 0 && y < c) {
   
            if (array[x][y] !== 9) {
   
                array[x][y] += 1
            }
        }
    }
    var writeInHint = function () {
   
        for (var x = 0; x < map.length; x++) {
   
            for (var y = 0; y < map[0].length; y++) {
   
                if (map[x][y] === 9) {
   
                    // 上下 6 个
                    for (var i = -1; i < 2; i++) {
   
                        plus(map, x - 1, y + i)
                        plus(map, x + 1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值