设为首页收藏本站 国外访客:

 找回密码
 立即注册
搜索
查看: 96|回复: 0

100行代码实现的JS扫雷小游戏

[复制链接]
  • 打卡等级:暂无等级
  • 打卡总天数:285
  • 打卡月天数:23
  • 打卡总奖励:241
  • 最近打卡:2026-03-26 00:05:18
灌水成绩
17075
64
17318
主题
帖子
积分

等级头衔

ID : 1

管理员

积分成就 威望 : 9
贡献 : 9
下载币 : 152
在线时间 : 1425 小时
注册时间 : 2013-9-5
最后登录 : 2026-3-26

发表于 4 小时前 | 显示全部楼层 |阅读模式
免责
使用简单的三段100行代码来实现以前好玩的扫雷小游戏。效果图如下:

100行代码实现的JS扫雷小游戏插图
有基础会网页的应该都知道咋操作,可以忽略说明了。

小白说明:本地新建一个空白.txt文件,将下面完整代码全部复制到里面保存,然后更改后缀名为.html网页格式的文件,然后双击打开即可实现扫雷小游戏。
  1. <!DOCTYPE html>
  2. <html lang="zh">
  3. <head>
  4.   <meta charset="UTF-8">
  5.   <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6.   <meta http-equiv="X-UA-Compatible" content="ie=edge">
  7.   <title></title>
  8.   <style type="text/css">
  9.     body {
  10.         background: black;
  11.         color: #DDDDDD;
  12.         font-family: courier new;
  13.         text-align: center;
  14.         margin: 0;
  15.     }
  16.     H1 {
  17.         text-align: center;
  18.         font-size: 14pt;
  19.         font-weight: normal;
  20.     }
  21.     #grid {
  22.         margin-left: auto;
  23.         margin-right: auto;
  24.     }
  25.     #grid TR TD {
  26.         border: 1px solid white;
  27.         background: #999999;
  28.         width: 16px;
  29.         height: 16px;
  30.         text-align: center;
  31.     }
  32.     #grid TR TD.clicked {
  33.         background: #333333;
  34.     }
  35.     #grid TR TD.mine {
  36.         background: #FF0000;
  37.     }
  38.     BUTTON {
  39.         margin: 12px;
  40.     }
  41.   </style>
  42. </head>
  43. <body>
  44.   <H1>扫雷(Minesweeper)</H1>
  45.   <table id=grid>
  46.   </table>
  47.   <BUTTON onclick="generateGrid();">重置(Reset)</BUTTON>
  48.   
  49.   <script type="text/javascript">
  50.     var grid = document.getElementById("grid");
  51.     var testMode = false; //Turn this variable to true to see where the mines are
  52.     var gameLevel = 1;
  53.     var colNumber = 10;
  54.     var rowNumber = 10;
  55.     generateGrid();
  56.    
  57.     function generateGrid() {
  58.         //generate row*col grid
  59.         grid.innerHTML = "";
  60.         for (var i = 0; i < rowNumber; i++) {
  61.             row = grid.insertRow(i);
  62.             for (var j = 0; j < colNumber; j++) {
  63.                 cell = row.insertCell(j);
  64.                 cell.onclick = function() {
  65.                     clickCell(this);
  66.                 };
  67.                 var mine = document.createAttribute("data-mine");
  68.                 mine.value = "false";
  69.                 cell.setAttributeNode(mine);
  70.             }
  71.         }
  72.         addMines();
  73.     }
  74.    
  75.     function addMines() {
  76.         //Add mines randomly
  77.         for (var i = 0; i < gameLevel * 10; i++) {
  78.             var row = Math.floor(Math.random() * rowNumber);
  79.             var col = Math.floor(Math.random() * colNumber);
  80.             var cell = grid.rows[row].cells[col];
  81.             cell.setAttribute("data-mine", "true");
  82.             if (testMode) cell.innerHTML = "X";
  83.         }
  84.     }
  85.    
  86.     function revealMines() {
  87.         //Highlight all mines in red
  88.         for (var i = 0; i < rowNumber; i++) {
  89.             for (var j = 0; j < colNumber; j++) {
  90.                 var cell = grid.rows[i].cells[j];
  91.                 if (cell.getAttribute("data-mine") == "true") cell.className = "mine";
  92.             }
  93.         }
  94.     }
  95.    
  96.     function checkLevelCompletion() {
  97.         var levelComplete = true;
  98.         for (var i = 0; i < rowNumber; i++) {
  99.             for (var j = 0; j < colNumber; j++) {
  100.                 if ((grid.rows[i].cells[j].getAttribute("data-mine") == "false") && (grid.rows[i].cells[j].innerHTML == "")) levelComplete = false;
  101.             }
  102.         }
  103.         if (levelComplete) {
  104.             alert("You Win!");
  105.             revealMines();
  106.    
  107.             // you can add level up codes here after...      
  108.         }
  109.     }
  110.    
  111.     function clickCell(cell) {
  112.         //Check if the end-user clicked on a mine
  113.         if (cell.getAttribute("data-mine") == "true") {
  114.             revealMines();
  115.             alert("Game Over");
  116.         } else {
  117.             cell.className = "clicked";
  118.             //Count and display the number of adjacent mines
  119.             var mineCount = 0;
  120.             var cellRow = cell.parentNode.rowIndex;
  121.             var cellCol = cell.cellIndex;
  122.             //alert(cellRow + " " + cellCol);
  123.             for (var i = Math.max(cellRow - 1, 0); i <= Math.min(cellRow + 1, rowNumber - 1); i++) {
  124.                 for (var j = Math.max(cellCol - 1, 0); j <= Math.min(cellCol + 1, colNumber - 1); j++) {
  125.                     if (grid.rows[i].cells[j].getAttribute("data-mine") == "true") mineCount++;
  126.                 }
  127.             }
  128.             cell.innerHTML = mineCount;
  129.             if (mineCount == 0) {
  130.                 //Reveal all adjacent cells as they do not have a mine
  131.                 for (var i = Math.max(cellRow - 1, 0); i <= Math.min(cellRow + 1, rowNumber - 1); i++) {
  132.                     for (var j = Math.max(cellCol - 1, 0); j <= Math.min(cellCol + 1, colNumber - 1); j++) {
  133.                         //Recursive Call
  134.                         if (grid.rows[i].cells[j].innerHTML == "") clickCell(grid.rows[i].cells[j]);
  135.                     }
  136.                 }
  137.             }
  138.             checkLevelCompletion();
  139.         }
  140.     }
  141.   </script>
  142. </body>
  143. </html>
复制代码


免责
帖子地址打造全网最多免费游戏网站,部分资源失效,私聊站长补
今日来客 列表模式
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|蔡州手游 |网站地图 wapmz.com

GMT+8, 2026-3-26 04:33