利用JavaScript实现网页版2048小游戏

JavaScript/前端
304
0
0
2023-06-18
目录
  • 项目基本结构
  • HTML源码
  • CSS 源码
  • JS 源码

项目基本结构

目录结构如下:

本节教程我会带大家使用 HTML 、CSS和 JS 来制作一个 2048网页版小游戏

本节示例将会实现如下所示的效果:

HTML源码

使用<header></header>添加头部2048标题

<header>
    <div class="container">
        <h><span>2</span><span>0</span><span>4</span><span>8</span></h1>
        <p class="inspired">by <a href="https://blog.csdn.net/qq_" rel="external nofollow"  target="_blank">海拥✘</a></p>
    </div>
</header>

效果:

添加一个 container 容器

<div class="container">
</div>

添加游戏的主体部分

<div class="directions">
        <p id="haiyong" class="haiyong"><strong>如何玩:</strong> 使用键盘方向键键移动数字方块。相邻的两个方块数字相同,它们可合并成一个!</p>
    </div>
    <div class="scores">
        <div class="score-container best-score">
            历史最佳:
            <div class="score">
                <div id="bestScore"></div>
            </div>
        </div>
        <div class="score-container">
            分数:
            <div class="score">
                <div id="score"></div>
                <div class="add" id="add"></div>
            </div>
        </div>
    </div>
    <div class="game">
        <div id="tile-container" class="tile-container"></div>
        <div class="end" id="end">游戏结束<div class="monkey">🙈</div><button class="btn not-recommended__item js-restart-btn"
             id="try-again">再试一次</button></div>
    </div>

效果:

重新启动游戏

<div class="not-recommended">
        <button class="btn not-recommended__item js-restart-btn" id="restart">重新启动游戏</button>
        <span class="not-recommended__annotation"></span>
    </div>

底部导航栏

<footer>
  <span class="author">Created by <a href="https://haiyong.site/about" rel="external nofollow" >Haiyong</a></span>        
  <span class="center"></span>        
  <span class="opposite">更多游戏:<a href="https://code.haiyong.site/moyu" rel="external nofollow" >摸鱼</a></span>
</footer>

效果:

CSS 源码

header 部分

header {
    color: #FFFE5;
    text-align: center;
}

header span {
    display: inline-block;
    box-sizing: border-box;
    width:rem;
    height:rem;
    line-height:rem;
    margin: 0.4rem;
    background: #FFCD;
}

媒体查询:

@media screen and (max-width:px) {
  header span {
      width:rem;
      height:rem;
      line-height:rem;
  }
}
@media screen and (max-width:px) {
  header span {
      width:.5rem;
      height:.5rem;
      line-height:.5rem;
  }
}

container 容器

.container {
    margin: auto;
    padding-bottom:.5rem;
    -webkit-box-flex:;
    -ms-flex:;
    flex:;
    width:%;
    max-width:px;
    text-align: center;
}

header .container {
    padding:;
    padding:rem 4rem;
    max-width:px;
}
@media screen and (max-width:px) {
    header .container {
        padding:rem 2rem;
    }
}

底部导航栏

footer {
  background-color: #ca5;
  bottom:;
  box-shadow:px 0px 10px 5px rgba(0, 0, 0, 0.5);
  color: white;
  display: flex;
  justify-content: space-around;
  left:;
  padding:px;
  position: fixed;
  right:;
}
footer a {
  color: white;
}
footer .center {
  justify-content: center;
}

JS 源码

js 代码较多,这里提供部分

function handleKeypress(evt) {
  var modifiers = event.altKey || event.ctrlKey || event.metaKey || event.shiftKey;
  var whichKey = event.which;

  var prevGame = [].concat(game);

  if (!modifiers) {
    event.preventDefault();
    switch (whichKey) {
      case:
        game = shiftGameLeft(game);
        break;
      case:
        game = shiftGameUp(game);
        break;
      case:
        game = shiftGameRight(game);
        break;
      case:
        game = shiftGameDown(game);
        break;
    }
    game = game.map(function (tile, index) {
      if (tile) {
        return _extends({}, tile, {
          index: index
        });
      } else {
        return null;
      }
    });
    addRandomNumber();
    updateDOM(prevGame, game);
    if (gameOver()) {
      setTimeout(function () {
        endDiv.classList.add('active');
      },);
      return;
    }
  }
}

function newGameStart() {
  document.getElementById('tile-container').innerHTML = '';
  endDiv.classList.remove('active');
  score =;
  scoreDiv.innerHTML = score;
  initGame();
  drawBackground();
  var previousGame = [].concat(game);
  addRandomNumber();
  addRandomNumber();
  updateDOM(previousGame, game);
}

newGameStart();