国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

展示js簡單拼圖游戲

3403771864 / 416人閱讀

  我們看看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();


文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/128176.html

相關文章

  • 利用Vue.js實現拼圖游戲

    摘要:之前寫過一篇基于的表格分頁組件的文章,主要介紹了組件的編寫方法,有興趣的可以訪問這里進行閱讀前言為了進一步讓大家了解的神奇魅力,了解的一種以數據為驅動的理念,本文主要利用實現了一個數字拼圖游戲,其原理并不是很復雜,效果圖如下展示地址為有能力 之前寫過一篇《基于Vue.js的表格分頁組件》的文章,主要介紹了Vue組件的編寫方法,有興趣的可以訪問這里進行閱讀:https://segment...

    wh469012917 評論0 收藏0
  • 拼圖游戲

    摘要:學習小游戲開發中最常用的碰撞檢測狀態監控刷新保持狀態的處理方法。保存縮略圖的信息是當游戲結束后顯示源縮略圖時,根據中的內容展示圖片。 如果您想要綜合使用javascript中canvas、原生拖拽、本地存儲等多種技術完成一個有趣的項目,那么這篇博文將非常適合您,水平有限,還望感興趣的開發人員給予更多代碼優化建議。 1 簡介和源碼 該項目中的拼圖小游戲使用javascript原創,相比于...

    svtter 評論0 收藏0
  • js實現數字拼圖代碼展示

      話不多說,直接開干。  重點:  下圖我們可以看到,游戲區分為8個div,進行游戲時需要判斷點擊的div是否可移動,移動后判斷游戲是否結束。  解決思路:將游戲界面看作一個div大盒子,將大盒子分為9個區域進行編號,這9個區域的位置始終不變;8個div以定位top和left控制其位置,設置9個區域的div分別可以往哪個區域移動,點擊時判斷可移動的編號區域內是否有div,若有,則無法向該方向移動...

    3403771864 評論0 收藏0

發表評論

0條評論

3403771864

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<