文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

js如何实现简单拼图游戏

2023-07-02 17:34

关注

这篇文章主要介绍了js如何实现简单拼图游戏的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇js如何实现简单拼图游戏文章都会有所收获,下面我们一起来看看吧。

HTML仅有一个id为game的div,并且没有编写css样式,只需要在img文件夹中放置一个图片文件就行,此处我放置的是LOL皇子的图片,图片名为'lol.png'

<div id="game"> </div>

以下为实现后的效果图

js如何实现简单拼图游戏

多的不说,直接上js代码

var gameConfig = {    width: 500,    height: 500,    rows: 3, //行数    cols: 3, //列数    isOver: false, //游戏是否结束    imgurl: "img/lol.png", //图片路径,注意:相对的是页面路径    dom: document.getElementById("game") //游戏的dom对象};//每一个小块的宽高gameConfig.pieceWidth = gameConfig.width / gameConfig.cols;gameConfig.pieceHeight = gameConfig.height / gameConfig.rows;//小块的数量gameConfig.pieceNumber = gameConfig.rows * gameConfig.cols; var blocks = []; //包含小方块信息的数组 function isEqual(n1, n2) {    return parseInt(n1) === parseInt(n2);} function Block(left, top, isVisible) {    this.left = left; //当前的横坐标    this.top = top; //当前的纵坐标    this.correctLeft = this.left; //正确的横坐标    this.correctTop = this.top; //正确的纵坐标    this.isVisible = isVisible; //是否可见    this.dom = document.createElement("div");    this.dom.style.width = gameConfig.pieceWidth + "px";    this.dom.style.height = gameConfig.pieceHeight + "px";    this.dom.style.background = `url("${gameConfig.imgurl}") -${this.correctLeft}px -${this.correctTop}px`;    this.dom.style.position = "absolute";    this.dom.style.border = "1px solid #fff";    this.dom.style.boxSizing = "border-box";    this.dom.style.cursor = "pointer";    // this.dom.style.transition = ".5s"; //css属性变化的时候,在0.5秒中内完成    if (!isVisible) {        this.dom.style.display = "none";    }    gameConfig.dom.appendChild(this.dom);     this.show = function () {        //根据当前的left、top,重新设置div的位置        this.dom.style.left = this.left + "px";        this.dom.style.top = this.top + "px";    }    //判断当前方块是否在正确的位置上    this.isCorrect = function () {        return isEqual(this.left, this.correctLeft) && isEqual(this.top, this.correctTop);    }     this.show();} function init() {    //1. 初始化游戏的容器    initGameDom();    //2. 初始化小方块    //2.1 准备好一个数组,数组的每一项是一个对象,记录了每一个小方块的信息    initBlocksArray();    //2.2 数组洗牌    shuffle();    //3. 注册点击事件    regEvent();         function regEvent() {        //找到看不见的方块        var inVisibleBlock = blocks.find(function (b) {            return !b.isVisible;        });        blocks.forEach(function (b) {            b.dom.onclick = function () {                if (gameConfig.isOver) {                    return;                }                //判断是可以交换                if (b.top === inVisibleBlock.top &&                    isEqual(Math.abs(b.left - inVisibleBlock.left), gameConfig.pieceWidth)                    ||                    b.left === inVisibleBlock.left &&                    isEqual(Math.abs(b.top - inVisibleBlock.top), gameConfig.pieceHeight)) {                    //交换当前方块和看不见的方块的坐标位置                    exchange(b, inVisibleBlock);                    //游戏结束判定                    isWin();                }                 //交换当前方块和看不见的方块的坐标位置                // exchange(b, inVisibleBlock);                // //游戏结束判定                // isWin();            }        })    }         function isWin() {        var wrongs = blocks.filter(function (item) {            return !item.isCorrect();        });        if (wrongs.length === 0) {            gameConfig.isOver = true;            //游戏结束,去掉所有边框            blocks.forEach(function (b) {                b.dom.style.border = "none";                b.dom.style.display = "block";            });        }    }         function getRandom(min, max) {        return Math.floor(Math.random() * (max + 1 - min) + min);    }         function exchange(b1, b2) {        var temp = b1.left;        b1.left = b2.left;        b2.left = temp;         temp = b1.top;        b1.top = b2.top;        b2.top = temp;         b1.show();        b2.show();    }         function shuffle() {        for (var i = 0; i < blocks.length - 1; i++) {            //随机产生一个下标            var index = getRandom(0, blocks.length - 2);            //将数组的当前项与随机项交换left和top值            exchange(blocks[i], blocks[index]);        }    }         function initBlocksArray() {        for (var i = 0; i < gameConfig.rows; i++) {            for (var j = 0; j < gameConfig.cols; j++) {                //i 行号,j 列号                var isVisible = true;                if (i === gameConfig.rows - 1 && j === gameConfig.cols - 1) {                    isVisible = false;                }                var b = new Block(j * gameConfig.pieceWidth, i * gameConfig.pieceHeight, isVisible);                blocks.push(b);            }        }    }         function initGameDom() {        gameConfig.dom.style.width = gameConfig.width + "px";        gameConfig.dom.style.height = gameConfig.height + "px";        gameConfig.dom.style.border = "2px solid #ccc";        gameConfig.dom.style.position = "relative";    }} init();

关于“js如何实现简单拼图游戏”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“js如何实现简单拼图游戏”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注编程网行业资讯频道。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯