原生js实现一个简单的扫雷游戏代码

代码语言:html

所属分类:游戏

代码描述:原生js实现一个简单的扫雷游戏代码

代码标签: 扫雷 游戏

下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">


    <link href="https://fonts.googleapis.com/css?family=VT323&display=swap" rel="stylesheet">



    <style>
        :root {
          --tileSize: 60px;
          --boardSize: 0px;
        }
        
        * {
          margin: 0;
          padding: 0;
          box-sizing: border-box;
          font-family: "VT323", monospace;
        }
        *::-moz-selection {
          background: rgba(127, 140, 141, 0.6);
        }
        *::selection {
          background: rgba(127, 140, 141, 0.6);
        }
        
        html {
          width: 100%;
          height: 100%;
        }
        
        body {
          width: 100%;
          min-height: 100%;
          display: flex;
          flex-direction: column;
          justify-content: center;
          align-items: center;
          background: #ffebc5;
        }
        
        .btn {
          background: #c9c9c9;
          padding: 0.5rem 1rem;
          text-decoration: none;
          color: #969696;
          font-size: 1.5rem;
          text-transform: uppercase;
          -webkit-user-select: none;
             -moz-user-select: none;
              -ms-user-select: none;
                  user-select: none;
          transition: background 0.2s ease, transform 0.2s ease;
          box-shadow: inset 0 2px 0 #e7e7e7, inset 0 -2px 0 #bcbcbc, inset 2px 0 0 #e7e7e7, inset -2px 0 0 #bcbcbc;
          text-shadow: 0 1px 0 #efefef, 0 -1px 0 #7c7c7c;
        }
        .btn:hover {
          background: #d5d5d5;
          transform: translateY(-1px);
        }
        .btn:active {
          background: #bcbcbc;
          transform: translateY(1px);
        }
        
        .endscreen {
          position: fixed;
          background: #e2e2e2;
          padding: 1rem 2rem;
          font-size: 40px;
          display: none;
          box-shadow: inset 0 2px 0 #e7e7e7, inset 0 -2px 0 #bcbcbc, inset 2px 0 0 #e7e7e7, inset -2px 0 0 #bcbcbc, 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 16px 32px 0 rgba(0, 0, 0, 0.2);
          text-shadow: 0 1px 0 #efefef, 0 -1px 0 #7c7c7c;
        }
        .endscreen.show {
          display: block;
        }
        .endscreen span {
          color: #2ecc71;
        }
        
        .board {
          background: #e2e2e2;
          position: relative;
          display: flex;
          flex-direction: row;
          flex-wrap: wrap;
          margin-bottom: 2rem;
          border: 10px solid #d5d5d5;
          box-sizing: content-box;
          box-shadow: 0 6px 0 #bcbcbc, 0 -6px 0 #e7e7e7, 6px 0 0 #bcbcbc, -6px 0 0 #e7e7e7;
        }
        .board:before {
          content: "";
          position: absolute;
          width: 8px;
          height: 6px;
          background: #e2e2e2;
          top: -14px;
          right: -14px;
          transform: rotate(45deg);
          z-index: -1;
          box-shadow: 1px calc(var(--boardSize) * 1.465) 0 #e2e2e2;
        }
        .board:after {
          content: "";
          position: absolute;
          width: 8px;
          height: 6px;
          background: white;
          top: -14px;
          left: -14px;
          transform: rotate(-45deg);
          z-index: -1;
          box-shadow: -1px calc(var(--boardSize) * 1.465) 0 #afafaf;
        }
        .board .tile {
          background: #e2e2e2;
          width: var(--tileSize);
          height: var(--tileSize);
          position: relative;
          display: flex;
          justify-content: center;
          align-items: center;
          font-size: calc(var(--tileSize) * .8);
          cursor: pointer;
          -webkit-user-select: none;
             -moz-user-select: none;
              -ms-user-select: none;
                  user-select: none;
          transition: background 0.2s ease;
          box-shadow: inset 0 2px 0 0 #fcfcfc, inset 2px 0 0 0 #fcfcfc, inset 0 -2px 0 0 #c9c9c9, inset -2px 0 0 0 #c9c9c9;
        }
        .board .tile:hover:not(.tile--checked) {
          background: #efefef;
        }
        .board .tile--checked {
          background: #d5d5d5;
          box-shadow: inset 0 1px 0 0 #c9c9c9, inset 1px 0 0 0 #c9c9c9, inset 0 -1px 0 0 #c9c9c9, inset -1px 0 0 0 #c9c9c9;
        }
        .board .tile--checked.tile--bomb:before, .board .tile--checked.tile--bomb:after {
          opacity: 1;
        }
        .board .tile--checked:hover {
          cursor: default;
        }
        .board .tile--bomb {
          font-size: calc(var(--tileSize) * .5);
        }
        .board .tile--flagged {
          font-size: calc(var(--tileSize) * .5);
        }
        
        .settings {
          position: fixed;
          left: 0;
          top: 0;
          background: rgba(0, 0, 0, 0.1);
          display: flex;
          flex-direction: column;
          padding: 1rem;
        }
        .settings label {
          font-size: 1.2rem;
        }
    </style>

</head>

<body>
    <div class="board"></div>

    <a href="#!" class="btn">New Game</a>

    <div class="endscreen"></div>


    <script>
    console.clear();

let size = 10; // size x size tiles
let bombFrequency = 0.2; // percentage of bombs
let tileSize = 60;

const board = document.querySelectorAll('.board')[0];
let tiles;
let boardSize;

const restartBtn = document.querySelectorAll('.btn')[0];
const endscreen = document.querySelectorAll('.endscreen')[0]

// settings
const boardSizeBtn = document.getElementById('boardSize');
const tileSizeBtn = document.getElementById('tileSize');
const difficultyBtns = document.querySelectorAll('.difficulty');

let bombs = [];
let numbers = [];
let numberColors = ['#3498db', '#2ecc71', '#e74c3c', '#9b59b6', '#f1c40f', '#1abc9c', '#34495e', '#7f8c8d',];
let endscreenContent = {win: '<span>✔</span> you won!', loose: '💣 Booom! Game over.'};

let gameOver = false;

/* clear board */
const clear = () => {
	// console.clear();
	gameOver = false;
	bombs = [];
	numbers = [];
	endscreen.innerHTML = '';
	endscreen.classList.remove('show');
	tiles.forEach(tile => {
		tile.remo.........完整代码请登录后点击上方下载按钮下载查看

网友评论0