欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

使用vue.js編寫藍色拼圖小游戲

 更新時間:2017年03月17日 10:49:04   作者:purplePassion  
之前在網上看到《藍色拼圖》這款小游戲,作者是用jquery寫的。下面通過本文給大家分享基于vue.js編寫藍色拼圖小游戲,一起看看實現代碼吧

之前在網上看到《藍色拼圖》這款小游戲,作者是用jquery寫的。于是便考慮能不能用vue.js優(yōu)雅簡單的編寫出來呢?

Later equals never!說干就干。首先理解游戲的規(guī)則:第一關為1*1的方塊,第二關為2*2以此類推

該圖為第三關3*3的方塊。點擊一個小方塊,該方塊和它相鄰的方塊的的顏色會從黃色變?yōu)樗{色,全部變?yōu)樗{色就過關了。

現在規(guī)則清楚了,開動吧!

/*style*/
.game_bg{
background: #333;
width: 600px;
height: 600px;
margin: 30px auto;
border-radius: 3px;
}
.card{
background: #E6AB5E;
float: left;
margin: 6px 0 0 6px;
}
.blueCard{
background: #5C90FF;
}
/*html*/
<div id="game">
<div class='game_bg'>
<div></div>
</div>
</div>
/*js*/
var vm=ew Vue({
el:'#game',
data:{
margin:6,//每張卡片間的距離
level:1,//游戲等級
cards:[],//卡片
size:0,//每張卡片的尺寸
},
methods:{},
});

卡片數為等級的平方,而每張卡片有黃色和藍色兩種顏色,并且隨著游戲難度的升級,方塊間的距離也在變小。所以在vue構造函數中添加初始化游戲方法

initGame:function(){//初始化游戲函數
if(this.level<4){
this.margin=12;
}else if(this.level<8){
this.margin=6;
}else if(this.level<16){
this.margin=3;
}else{
this.margin=1;
}
this.cards=[];
this.size=(600-(this.level+1)*this.margin)/this.level;
for(var i=this.level*this.level;i--;){
this.cards.push({
color:false,//false是黃色,true是藍色
})
}
}

<div class='game_bg'></div>中的div進行數據綁定

<div class='card'
:style="{'width':size+'px','height':size+'px','marginTop':margin+'px','marginLeft':margin+'px'}" 
:class="{'blueCard':card.color}" v-for="(index,card) in cards"></div>
</div>

 接下來就是點擊一個方塊進行翻牌的方法。它本身和相鄰的卡片的color屬性取反就行了。而我們注意到:位于該卡片左邊的是下標減1;右邊的是下標加1;上面的是下標減等級;下面的下標加等級。要注意的vm.cards下標不存在的時候和在最左邊或最右邊時雖然下標有可能存在但是相鄰的卡片是可能沒有的。所以加了一個改變相鄰區(qū)域的顏色的方法和在methods中加了一個翻牌子的方法

var changeNeighbor=function(index){
var cards=vm.cards;
if(index>0){//左邊
if(index%vm.level){//不在最左邊
cards[index-1].color=!cards[index-1].color;
}
}
if(index<cards.length-1){//右邊
if((index+1)%vm.level){//不在最右邊
cards[index+1].color=!cards[index+1].color;
}
}
if(index-vm.level>=0){//上面
cards[index-vm.level].color=!cards[index-vm.level].color;
}
if(index+vm.level<cards.length){//下面
cards[index+vm.level].color=!cards[index+vm.level].color;
}
}
/*********************************************************/
flop:function(index){//翻牌
this.cards[index].color=!this.cards[index].color;
changeNeighbor(index);
}

每次點擊后都要判斷本關游戲是否結束。遍歷vm.cards。發(fā)現如果存在color屬性為false的就是沒有過關,反之則關過。

var gameOver=function(){
var cards=vm.cards;
for(var i=cards.length;i--;){
if(!cards[i].color) return false;
}
return true
};

這樣游戲基本的功能就實現了。然后再加上過關之后將等級提高1。并且將等級存到localStorage中。每次進入頁面都去localStorage中查詢等級。過關之后給個提示。將點擊的步驟數顯現出來。加上重置本輪和重置等級的方法。在細節(jié)上進行一些修改和增加最后的代碼就是這樣

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<style type="text/css">
.game_bg{
background: #333;
width: 600px;
height: 600px;
margin: 30px auto;
border-radius: 3px;
}
.card{
background: #E6AB5E;
float: left;
margin: 6px 0 0 6px;
}
.blueCard{
background: #5C90FF;
}
.btn_box{
text-align: center;
}
.info_box{
text-align: center;
}
.info_box span{
padding: 20px;
}
.rule_box{
width: 300px;
position: fixed;
top: 100px;
left: 50px;
color: #333;
}
h1{
margin: 0;
text-align: center;
font-size: 28px;
margin-bottom: 10px;
}
</style>
</body>
<h1>翻牌子游戲</h1>
<div id="game">
<div class="info_box">
<span v-text="'第'+level+'關'"></span>
<span v-text="'點擊'+stepCount+'次'"></span>
</div>
<div class='game_bg'>
<div class='card' @click="flop(index)"
:style="{'width':size+'px','height':size+'px','marginTop':margin+'px','marginLeft':margin+'px'}" 
:class="{'blueCard':card.color}" v-for="(index,card) in cards"></div>
</div>
<div class="rule_box">
<h3>游戲規(guī)則</h3>
<h4>點擊相應的方塊該方塊和它相鄰的方塊的的顏色會發(fā)生變化,全部變?yōu)樗{色就過關了</h4>
</div>
<div class="btn_box">
<button @click="resetLevel">重置等級</button>
<button @click="initGame">重新開始本輪</button>
</div>
</div>
<script src="vue/Vue.min.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript">
/**
* 該函數用來改變點擊的卡片相鄰卡片的顏色
* 位于該卡片左邊的是下標減1;右邊的是下標加1;上面的是下標減等級;下面的下標加等級
*/
var changeNeighbor=function(index){
var cards=vm.cards;
if(index>0){//左邊
if(index%vm.level){//不在最左邊
cards[index-1].color=!cards[index-1].color;
}
}
if(index<cards.length-1){//右邊
if((index+1)%vm.level){//不在最右邊
cards[index+1].color=!cards[index+1].color;
}
}
if(index-vm.level>=0){//上面
cards[index-vm.level].color=!cards[index-vm.level].color;
}
if(index+vm.level<cards.length){//下面
cards[index+vm.level].color=!cards[index+vm.level].color;
}
}
/**
*該函數用來判斷游戲是否結束 
*/
var gameOver=function(){
var cards=vm.cards;
for(var i=cards.length;i--;){
if(!cards[i].color) return false;
}
setLevel(vm.level+1);
vm.stepCount=0;
return true
};
/**
* 將等級儲存止本地
*/
var setLevel=function(level){
localStorage.cardLevel=level;
};
/**
* 得到本地的等級
*/
var getLevel=function(){
if(localStorage.cardLevel) return localStorage.cardLevel*1;
return 0;
};
/**
* 構建vue構造函數
*/
var vm=new Vue({
el:'#game',
data:{
margin:6,//每張卡片間的距離
level:1,//游戲等級
cards:[],//卡片
size:0,//每張卡片的尺寸
stepCount:0,//每輪點擊的次數
},
methods:{
initGame:function(){//初始化游戲函數
var level=getLevel();
if(level){
this.level=level;
}
if(this.level<4){
this.margin=12;
}else if(this.level<8){
this.margin=6;
}else if(this.level<16){
this.margin=3;
}else{
this.margin=1;
}
this.cards=[];
this.size=(600-(this.level+1)*this.margin)/this.level;
for(var i=this.level*this.level;i--;){
this.cards.push({
color:false,//false是黃色,true是藍色
})
}
},
flop:function(index){//翻牌
this.stepCount++;
this.cards[index].color=!this.cards[index].color;
changeNeighbor(index);
if(gameOver()){
setTimeout(function(){
alert('恭喜通過第'+vm.level+'關');
vm.level++;
vm.initGame();
},200)
}
},
resetLevel:function(){//重置等級
this.level=1;
localStorage.cardLevel=1;
vm.initGame();
},
},
});
vm.initGame();
</script>
</html>

別忘了加上vue2.0。就可以玩了。


以上所述是小編給大家介紹的vue.js編寫藍色拼圖小游戲,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網站的支持!

相關文章

  • 詳解Vue3 Composition API中的提取和重用邏輯

    詳解Vue3 Composition API中的提取和重用邏輯

    這篇文章主要介紹了Vue3 Composition API中的提取和重用邏輯,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-04-04
  • 使用vue中的v-for遍歷二維數組的方法

    使用vue中的v-for遍歷二維數組的方法

    下面小編就為大家分享一篇使用vue中的v-for遍歷二維數組的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-03-03
  • vue3項目導入異常Error:@vitejs/PLUGIN-vue?requires?vue?(>=3.2.13)解決辦法

    vue3項目導入異常Error:@vitejs/PLUGIN-vue?requires?vue?(>=3.2.13

    這篇文章主要給大家介紹了關于vue3項目導入異常Error:@vitejs/PLUGIN-vue?requires?vue?(>=3.2.13)的解決辦法,文中將解決辦法介紹的非常詳細,需要的朋友可以參考下
    2024-01-01
  • vue動態(tài)改變背景圖片demo分享

    vue動態(tài)改變背景圖片demo分享

    今天小編就為大家分享一篇vue動態(tài)改變背景圖片demo分享,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-09-09
  • Vue的data為啥只能是函數原理詳解

    Vue的data為啥只能是函數原理詳解

    這篇文章主要為大家介紹了Vue的data為啥只能是函數原理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-10-10
  • vue實現pdf文檔在線預覽功能

    vue實現pdf文檔在線預覽功能

    這篇文章主要為大家詳細介紹了vue實現pdf文檔在線預覽功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-11-11
  • vue3+ts中定義ref變量,設置變量類型方式

    vue3+ts中定義ref變量,設置變量類型方式

    這篇文章主要介紹了vue3+ts中定義ref變量,設置變量類型方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • element plus tree拖動節(jié)點交換位置和改變層級問題(解決方案)

    element plus tree拖動節(jié)點交換位置和改變層級問題(解決方案)

    圖層list里有各種組件,用element plus的tree來渲染,可以把圖片等組件到面板里,面板是容器,非容器組件,比如圖片、文本等,就不能讓其他組件拖進來,這篇文章主要介紹了element plus tree拖動節(jié)點交換位置和改變層級問題(解決方案),需要的朋友可以參考下
    2024-04-04
  • vue實現select下拉顯示隱藏功能

    vue實現select下拉顯示隱藏功能

    這篇文章主要介紹了vue實現select下拉顯示隱藏功能,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-09-09
  • vue中三種不同插槽使用小結

    vue中三種不同插槽使用小結

    本文主要介紹了vue中三種不同插槽使用小結,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-07-07

最新評論