gpt4 book ai didi

python - 用 Python 编程经典 15 谜题

转载 作者:太空狗 更新时间:2023-10-30 01:29:13 27 4
gpt4 key购买 nike

我是 python 的新手,正在尝试实现 classic 15 puzzle 的非图形用户界面版本在 python 。

目前我有代码随机生成一个列表,其中包含 4 个其他列表,每个列表包含一个从 1 到 16 的数字(我使用 16 作为空格。)

这是生成列表的一个例子:

[['11', '14', '01', '16'], ['02', '13', '09', '06'], ['04', '05', '03', '07'], ['10', '15', '12', '08']]

我的问题是:

  1. 实现切换两个图 block 位置的功能的最佳方法是什么当且仅当它们彼此相邻时?
  2. 我的嵌套列表方法是表示拼图板的最佳方式吗?
  3. 函数式方法还是面向对象的方法更好?我在想每个图 block 都可以用移动方法表示为一个对象。

这是我目前拥有的:

#!/usr/bin/env python3
import random


class game:
def __init__(self, array):
self.array = array
print (array)

def objects(self):
self.objects = []
for i in self.array:
if len(str(i)) == 1:
i = '0'+str(i)
self.objects.append(i)
else:
i = str(i)
self.objects.append(i)
print (self.objects)

def grid(self):
self.grid = [[], [], [], []]
for eachrow in range(4):
print ("row number", eachrow)


for eachobject in range(4):
print ("this is a list of objects before popping:\n{0}".format(self.objects))
k = random.randint(0, len(self.objects)-1)
print (k)
self.grid[eachrow].append(self.objects.pop(k))
print (self.grid)


def main():
array = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]
test = game(array)
test.objects()
test.grid()

if __name__ == "__main__":
main()

最佳答案

将你的大问题拆分成许多小问题,这样推理起来会更容易。

您是否想要实现一个由人类玩游戏的程序?

如果您想询问相邻的方 block ,我建议一种有用的实现方法是,给定一个正方形,为您提供一个包含其所有相邻正方形的列表。

也许您可能还需要一种方法来告诉您当前哪些图 block 可以移动(/交换)。

也许还有一个可以告诉您瓷砖离家有多远的信息。

tiles_to_correct() 方法可以使用它来告诉您仍有多少瓦片需要移动到它们的正确位置(即离它们的家不为 0)。当 tiles_to_correct() 返回 0 时,finished() 可能会返回 True。

实现所有这些可能至少会帮助您思考并着手编写完成的程序,即使它们没有直接帮助也是如此。

在获得工作程序时,二维列表应该可以很好地表示问题。在尝试优化速度之前,我会继续这样做。不过,我不会为图 block 使用字符串,我会使用数字,可能是 0-15。如果你想向玩家显示棋盘,很容易编写输出代码,如果你想显示 1-16,则将数字加 1。

关于python - 用 Python 编程经典 15 谜题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21264232/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com