目錄遊戲介面
實現效果
其他遇到的坑
實現漢諾塔,主要需要實現的乙個功能是 元素元件的拖拽,關於元素拖拽在這篇部落格中已經有描述:
接下來就是把各式各樣的拖動後的邏輯 將其實現,然後體現在介面上;
首頁元素:
一張標題
輸入框開始遊戲 按鈕
實現功能:
輸入個數,然後點選按鈕跳轉到漢諾塔介面,生成相應資料量的木條數
xwml **
}
表單提交formsubmit(e) )
}
介面元素:
操作次數
三個區域
木條(stick)
返回按鈕
實現功能:
木條初始化,擺放
木條拖拽
木條拖拽後校驗是否可放入指定位置
操作次數累計
遊戲完成校驗
wxml
操作次數:}
} }}
返回
id="item}" data-id="}" data-index="}"
用於事件處理時能找到木條id資料
js 初始化資料
data: ,
js 生成初始化木條onload: function (options) )
})var tempsticklist = ;
var tempstickidinlist = ;
// 構造木條
for (var i = 0; i < options.count; i++) ;// id、寬度20遞減、高度25、bottompos位置0->25->50;木條名稱
tempsticklist.push(stick);
tempstickidinlist.push(1);// 一開始 都在 1 : lsita
}this.setdata()
},
js木條拖動// 開始觸控
touchstart: function (e)
else if (this.data.stickidinlist[id] == 3)
// 校驗拖動的是不是頂部木條
if (tempsticklist[tempsticklist.length - 1].id != id) )
console.log("can not move, because it is not top stick");
return
}tempdargoriginbottompos = tempsticklist[tempsticklist.length - 1].bottompos; // 獲取原始bottom座標值
// 準備好開始觸控的資訊
this.setdata();
},// 觸控移動
touchmove: function (e) );
},// 觸控結束
touchend: function (e)
else if (this.data.movefromlist == 3)
var sticklen = tempoldsticklist[tempoldsticklist.length - 1].width;
var stickmidposx = this.data.movingposx + sticklen / 2.0; // 得到中心位置
var _this = this;
var inlist = this.data.movefromlist;
// 可以放入的區域
if (stickmidposx < this.data.screenwidth / 3.0) // 放置在左側
else if (stickmidposx < this.data.screenwidth * 2.0 / 3.0 && this.data.screenwidth / 3.0 <= stickmidposx) // 放置在中間
else // 放置在 右側
// 資料恢復
this.setdata();
// 檢查是否完成
this.checkfinish()
},
其餘函式// 根據木條id查詢當前(觸控的)木條的資訊,並更新
querymultiplenodes: function (id) )
})},
// 木條的移動,將stick從oldlist取出,放入newsticklist,並計算得到新的bottompos
movesticklist: function (oldlist, newlist, oldsticklist, newsticklist)
else
else
}var tempstickidinlist = this.data.stickidinlist;
tempstickidinlist[this.data.movingid] = newlist;
if (oldlist == 1) )
} else if (oldlist == 2) )
}else if (oldlist == 3) )
}if (newlist == 1) )
} else if (newlist == 2) )
}else if (newlist == 3) )
}var opcount = this.data.operatecount + 1;
this.setdata()
},// 檢查是否完成
漢諾塔的實現
漢諾塔是大學遇見的第乙個使用遞迴的問題。這個問題的解決方法充分展示了遞迴給程式帶來的遍歷 如果不使用遞迴的話,那麼就需要細緻的分析。這裡不談非遞迴的解法。漢諾塔問題介紹 在印度,有這麼乙個古老的傳說 在世界中心貝拿勒斯 在印度北部 的聖廟裡,一塊黃銅板上插著三根寶石針。印度教的主神梵天在創造世界的時...
漢諾塔的實現
漢諾塔的演算法就3個步驟 第一,把a上的n 1個盤通過c移動到b。第二,把a上的最下面的盤移到c。第三,因為n 1個盤全在b上了,所以把b當做a重複以上步驟就好了。所以演算法看起來就簡單多了。不過,思考過程還是很痛苦的,難以理解。遞迴中會儲存資料的好處在這裡又得到體現,太神奇了。include in...
漢諾塔的java實現
漢諾塔問題描述 假設有三個命名為x tower 1 y tower 2 z tower 3 的塔座,在塔座x上有n個直徑大小各不相同,依次從小到大編號為1,2,3,n的圓盤。現要求將x塔座上的n個圓盤移到z塔座上並按同樣順序疊排,圓盤移動時必須遵循下列規則 1 每次只能移動乙個圓盤 2 圓盤可以插在...