前言

前两天公司办活动,有一个游戏是在一分钟内完成数字华容道小游戏。

感觉还挺有趣,就在想如果要自己代码实现,要如何实现呢?

在线体验

游戏已经写好,在线版本:

https://houbb.github.io/games/slidingPuzzle/

游戏音效

推荐一些免费音效资源网站,你可以从这些网站上找到适合用作游戏音效的音频文件。

  1. Freesound
    • Freesound 是一个非常流行的社区驱动的音效库,里面有各种各样的音效,你可以找到适合游戏中的移动音效和胜利音效。
    • 搜索关键词:move, click, victory, win 等。
  2. ZapSplat
    • ZapSplat 提供免费的音效,支持用于游戏和应用开发。你可以找到各种类型的音效,包括步进音效和胜利音效。
    • 你可以创建一个免费账户,下载音效并使用。
  3. Free Music Archive (FMA)
    • 这里主要提供音乐,但也有很多适合用于游戏中的短小音效。你可以找到一些合适的背景音乐或者成功时的庆祝音效。
  4. SoundBible
    • 提供许多免费的音效,包括与游戏相关的音效。你可以查找和下载适合的音效,通常可以直接下载MP3格式。
  5. OpenGameArt
    • 这个网站提供各种免费的游戏资源,包括音效、音乐、图像等。你可以找到适合游戏的音效。

如何使用这些音效:

  • 从这些网站下载音效文件,保存为 .mp3.ogg 格式。
  • 将下载的音效文件上传到你的网站或者本地项目目录中。
  • 在 HTML 代码中,将 audio 标签的 src 属性指向正确的文件路径。

例如:

  [html]
1
2
<audio id="move-sound" src="path/to/your/move-sound.mp3" preload="auto"></audio> <audio id="victory-sound" src="path/to/your/victory-sound.mp3" preload="auto"></audio>

如何让其更加有趣?

要让这个数字华容道游戏更具吸引力和娱乐性,可以考虑以下几个元素:

1. 计时器和排行榜

  • 计时器:增加一个计时器来记录玩家完成游戏所用的时间,可以让玩家挑战自己和其他玩家的记录。
  • 排行榜:如果支持多人模式或者数据持久化,可以添加一个排行榜,显示最短时间、最快完成的玩家等。这样可以激励玩家不断挑战自己的速度。

示例:

  [html]
1
<div id="timer">时间:<span id="time"></span></div>

JavaScript:

  [javascript]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
let startTime; let timerInterval; function startTimer() { startTime = Date.now(); timerInterval = setInterval(updateTimer, 1000); } function stopTimer() { clearInterval(timerInterval); } function updateTimer() { const elapsed = Math.floor((Date.now() - startTime) / 1000); document.getElementById('time').textContent = elapsed + ""; }

2. 不同的主题和皮肤

  • 主题切换:为游戏提供多个皮肤或主题,如经典风格、暗黑风格、未来科技风格等。玩家可以选择不同的主题,使游戏看起来更加有趣和个性化。
  • 背景音乐:根据主题,提供不同的背景音乐,也可以在胜利或失败时播放专门的音效,提升游戏氛围。

示例:

  [html]
1
2
3
4
5
<select id="theme-select"> <option value="classic">经典</option> <option value="dark">黑暗</option> <option value="space">太空</option> </select>

JavaScript:

  [javascript]
1
2
3
4
5
6
7
8
9
document.getElementById('theme-select').addEventListener('change', function() { changeTheme(this.value); }); function changeTheme(theme) { document.body.classList.remove('classic', 'dark', 'space'); document.body.classList.add(theme); // 可以根据选择的主题修改背景色、字体、音效等 }

3. 动画效果

  • 在游戏过程中为每个数字块的移动添加平滑的动画效果,使游戏看起来更加流畅和生动。
  • 可以在每个块的交换时添加动画,例如滑动或者淡入淡出。

示例:

  [css]
1
2
3
.tile { transition: transform 0.3s ease; }

在 JavaScript 中添加动画:

  [javascript]
1
2
3
4
5
6
7
function swapTilesWithAnimation(row, col) { const tile = document.querySelector(`.tile[data-row="${row}"][data-col="${col}"]`); tile.style.transform = 'scale(0.8)'; setTimeout(() => { tile.style.transform = 'scale(1)'; }, 300); }

4. 提示功能

  • 提示按钮:提供一个“提示”按钮,当玩家陷入困境时,可以按下此按钮得到一个有效的移动建议。可以显示出最短路径的提示。
  • 撤销按钮:允许玩家撤销上一步操作,尤其是如果玩家犯错或想重新尝试时,这个功能会非常有用。

示例:

  [html]
1
<button onclick="showHint()">提示</button>

JavaScript:

  [javascript]
1
2
3
4
function showHint() { // 显示一个可行的移动提示 alert("你可以移动的一个数字是:..."); }

5. 关卡设计和进度

  • 关卡模式:可以设计多个关卡,逐步提高难度。例如,开始是3x3的简单模式,逐渐增加到4x4、5x5甚至更高。
  • 进度条:展示玩家当前的进度,例如多少步骤完成,或者剩余多少步骤。

示例:

  [html]
1
2
3
<div id="level-progress"> <progress value="0" max="100" id="level-bar"></progress> </div>

JavaScript:

  [javascript]
1
2
3
4
function updateProgressBar(stepCount) { const progressBar = document.getElementById('level-bar'); progressBar.value = stepCount; }

6. 成就系统

  • 成就解锁:根据玩家的表现,解锁不同的成就。例如,完成游戏的最快时间、连续完成多次等。
  • 这些成就可以在游戏结束时显示,增加玩家的成就感。

示例:

  [html]
1
2
3
4
5
6
7
8
<div id="achievements"> <p>解锁成就:</p> <ul id="achievement-list"> <li>完成3x3关卡</li> <li>用时小于3分钟</li> <!-- 动态更新成就 --> </ul> </div>

7. 自定义功能

  • 玩家自定义关卡:允许玩家自己设计一个关卡,设定起始状态和目标状态,然后让其他玩家挑战。
  • 社交分享:完成关卡后,提供一个按钮,让玩家能够将他们的成绩或者游戏截图分享到社交媒体平台。

8. AI对战模式

  • 与AI对战:可以设计一个与AI对战的模式,AI会智能地进行移动,玩家需要与AI进行比拼,看看谁能更快完成华容道。

总结:

通过添加这些功能,可以让游戏变得更加丰富、互动和富有挑战性。

玩家不仅可以体验传统的数字华容道,还能通过计时、成就、主题、提示和AI对战等元素获得更大的乐趣。如果你对其中某个功能有特别的兴趣,我可以帮助你进一步细化实现!

Step1:计时器与步数

说明

在原来实现的基础上,添加下面的功能:计时器,记录游戏开始发生的时间;移动步数,每移动一次,增加一次。点击【重置】之后,移动次数清零,计时器时间从头开始

实现

  [js]
1
2
3
4
5
let moves = 0; let startTime; let timerInterval;

参考资料