给我写一份完整的,使用js写一个汉诺塔游戏。初学者要能看懂
时间: 2023-06-06 09:06:24 浏览: 115
好的,请稍等,我正在为你准备代码。
以下是使用JS写的汉诺塔游戏代码,注释已经很详细,相信初学者可以轻松读懂:
```
// 定义游戏对象
var HanoiTower = {
// 定义三根柱子,每根柱子上初始都没有盘子
towerA: [],
towerB: [],
towerC: [],
// 最大盘子数
maxCount: 8,
// 初始化游戏
init: function() {
// 将所有盘子放在第一根柱子上
for (var i = this.maxCount; i > 0; i--) {
this.towerA.push(i);
}
// 打印游戏状态
this.printState();
},
// 打印当前游戏状态
printState: function() {
console.log("\n");
console.log("A:" + this.towerA.join(","));
console.log("B:" + this.towerB.join(","));
console.log("C:" + this.towerC.join(","));
},
// 移动盘子,from表示源柱子,to表示目标柱子
move: function(from, to) {
// 判断源柱子是否为空
if (this[from].length === 0) {
console.log("源柱子为空!");
return;
}
// 判断目标柱子是否为某个盘子的上面
if (this[to].length !== 0 && this[from][this[from].length - 1] > this[to][this[to].length - 1]) {
console.log("不能移动大盘子到小盘子上!");
return;
}
// 取出源柱子上最上面的盘子并放入目标柱子
this[to].push(this[from].pop());
// 打印游戏状态
this.printState();
},
// 汉诺塔算法,将x柱上的n个盘子移动到z柱上,y柱作为辅助
hanoi: function(n, x, y, z) {
if (n === 1) {
this.move(x, z);
return;
}
this.hanoi(n - 1, x, z, y);
this.move(x, z);
this.hanoi(n - 1, y, x, z);
}
};
// 开始游戏
HanoiTower.init();
// 移动汉诺塔
HanoiTower.hanoi(HanoiTower.maxCount, "towerA", "towerB", "towerC");
```
运行以上代码即可在控制台看到汉诺塔游戏的整个过程,给初学者带来更直观的体验。
阅读全文