<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
本文範例為大家分享了js實現簡單拼圖遊戲的具體程式碼,供大家參考,具體內容如下
HTML僅有一個id為game的div,並且沒有編寫css樣式,只需要在img資料夾中放置一個圖片檔案就行,此處我放置的是LOL皇子的圖片,圖片名為'lol.png'
<div id="game"> </div>
以下為實現後的效果圖
多的不說,直接上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); } /** * 小方塊的建構函式 * @param {*} left * @param {*} top * @param {*} isVisible 是否可見 */ 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"; }); } } /** * 亂數,能取到最大值 * @param {*} min * @param {*} max */ function getRandom(min, max) { return Math.floor(Math.random() * (max + 1 - min) + min); } /** * 交換兩個方塊的left和top * @param {*} b1 * @param {*} b2 */ 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(); } /** * 給blocks陣列洗牌 */ 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();
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45