请用python语言实现上传资料中Hanoi.exe(Windows系统运行)的效果: 1.实现控制台的显示部分 2.实现turtle部分 (不必封装为exe)
时间: 2024-01-28 12:05:31 浏览: 99
hanoi.exe
好的,以下是实现控制台显示和turtle部分的Python代码:
```python
import turtle
# 控制台显示部分
print("Hanoi Tower Game")
# 获取用户输入
n = int(input("请输入盘子的个数:"))
# 初始化三个柱子
a = list(range(n, 0, -1))
b, c = [], []
# 定义移动函数
def move(n, source, target, auxiliary):
if n > 0:
# 移动 n-1 个盘子到辅助柱子
move(n-1, source, auxiliary, target)
# 将最大的盘子移动到目标柱子
target.append(source.pop())
# 显示移动过程
print("Move disk", n, "from", source, "to", target)
# 移动 n-1 个盘子从辅助柱子到目标柱子
move(n-1, auxiliary, target, source)
# 开始移动
move(n, a, c, b)
# turtle部分
screen = turtle.Screen()
screen.setup(600, 600)
screen.bgcolor("white")
# 绘制柱子
pole1 = turtle.Turtle()
pole1.hideturtle()
pole1.speed(0)
pole1.penup()
pole1.goto(-150, -200)
pole1.pendown()
pole1.width(5)
pole1.color("black")
pole1.left(90)
pole1.forward(400)
pole2 = pole1.clone()
pole2.penup()
pole2.goto(0, -200)
pole2.pendown()
pole2.forward(400)
pole3 = pole1.clone()
pole3.penup()
pole3.goto(150, -200)
pole3.pendown()
pole3.forward(400)
# 绘制盘子
colors = ["red", "green", "blue", "yellow", "purple", "orange"]
turtles = []
for i in range(n):
t = turtle.Turtle()
t.hideturtle()
t.shape("square")
t.color(colors[i%6])
t.shapesize(1, (n-i)*2, 1)
t.penup()
t.goto(-150, -200+(i+1)*20)
t.pendown()
turtles.append(t)
# 移动盘子
def move_turtle(disk, source, target):
disk.penup()
disk.goto(source, 200)
disk.pendown()
disk.goto(target, 200)
disk.goto(target, -200+len(target)*20)
# 开始移动
for i in range(2**n-1):
disk = turtles[a.index(n-i)]
move_turtle(disk, disk.xcor(), -150)
a.remove(n-i)
b.append(n-i)
disk_index = a.index(n-i-1) if (n-i-1) in a else b.index(n-i-1)
disk = turtles[disk_index]
move_turtle(disk, disk.xcor(), pole_positions[disk_index])
if (n-i-1) in a:
a.remove(n-i-1)
else:
b.remove(n-i-1)
c.append(n-i-1)
disk_index = a.index(n-i) if (n-i) in a else b.index(n-i)
disk = turtles[disk_index]
move_turtle(disk, disk.xcor(), pole_positions[disk_index])
if (n-i) in a:
a.remove(n-i)
else:
b.remove(n-i)
c.append(n-i)
# 等待用户关闭窗口
screen.mainloop()
```
其中,控制台部分的代码实现了汉诺塔游戏的核心逻辑,将盘子从一个柱子移动到另一个柱子,并在控制台显示移动过程。而turtle部分的代码则使用turtle库绘制了汉诺塔的图形化界面,并将盘子移动的过程可视化出来。在绘制盘子时,我们使用了turtle.Turtle()来创建多个小海龟,并给每个小海龟设置不同的形状、大小和颜色。在移动盘子时,我们使用了小海龟的goto()方法将它们从一个位置移动到另一个位置。最后,我们使用screen.mainloop()等待用户关闭窗口。
阅读全文