跳至主要內容

🎮 周末无聊,来玩【智商检测器】标题摘自UP主【GM的秘密基地】

Azil大约 2 分钟

PK创意闹新春,我正在参加「春节创意投稿大赛」,详情请看:春节创意投稿大赛open in new window

前言

刷B站的时候看到【GM的秘密基地open in new window】的这个小游戏,觉得挺有意思的,小小实现一版。

玩法介绍

  • 👆 开局可以任意点击翻开一个棋子
  • 📍 然后点击同一条线上的并且中间空一个位置的没打开的棋子,作为目的地
  • 👆 再点击开局点的棋子,就可以翻开目的地和中间的棋子,开局棋子会还原
  • 👆 然后重复操作,直到最后只剩一个空位置即可获胜
  • 💥 获胜后有烟花哦
  • 😈 教程就到这里,听说IQ低于120的无法获胜 页面内有教程演示按钮

点击链接试玩open in new window

代码实现

✅ 定义一个游戏类、依赖节点、依赖方法

const doc = window.document
const $ = (el) => {
    return doc.querySelector(el)
}
class Game {
    constructor(arg) {
        this.opt = Object.assign({
                el: 'body', // 棋盘节点
                chessboard: 5, // 棋盘行数
                timeCallback() {}, // 计时器回调
                stepSuccess() {}, // 下棋正确
                success() {} // 成功完成游戏
        }, arg)
        this.__recordSteps = [] // 下棋步数记录
        this.el = $(this.opt.el)
    }
}

✅ 绘制棋盘的方法

class Game {
    paint() { // 绘制棋盘
        this.el.innerHTML = ""
        this.__ms = 0
        this.__paintInit = true
        const chessboard = Array.from({length: this.opt.chessboard}).map((row, index) => {
                index = index + 1
                const rowEl = doc.createElement('div')
                rowEl.className = 'game-row'
                this.el.appendChild(rowEl)

                return Array.from({length: index}).map((child, cindex) => {
                        const colEl = doc.createElement('div')
                        colEl.className = 'game-col'
                        rowEl.appendChild(colEl)

                        const chess = doc.createElement('div')
                        const id = `game-chess-${index}-${cindex+1}`
                        chess.id = id
                        chess.className = 'game-chess'
                        colEl.appendChild(chess)
                        const obj = {
                                position: [index, cindex + 1],
                                el: chess,
                                status: false // 默认棋子未打开
                        }
                        chess.addEventListener('click', () => {
                                this.step(obj, chess)
                        })
                        return obj
                })
        })
        this.chessboard = chessboard
    }
}

✅ 其他代码

咱们主要还是玩游戏🎮,代码就不全放了,可以在仓库里查阅

class Game {
    step() { // 绘制棋盘
    }
    toStep(){ // 计算目标位置是否符合游戏规则
    }
    recordStep(){ // 记录步骤
    }
    time(){ // 计时器
    }
    isSucessGame(){ // 是否成功完成游戏
    }
    reset(){ // 重置
    }
}

代码地址

Giteeopen in new window

上次编辑于:
贡献者: Azil