0

我正在使用 Python 2.7.3 和 Pyglet 1.1.4 创建一个迷宫/迷宫游戏,我有一个问题和一个问题。

我的代码可以在这里找到:https ://github.com/czarnot/labirynth_py

要启动程序,请使用 python 启动 main.py。

要移动 CPU,请使用“a”按钮。这是我的主要问题。我想让 CPU 在没有用户输入的情况下移动 - 我希望它每 0.5 或 1 秒移动 1 步。

我尝试在 cpu 步骤之间使用 time.sleep() ,它只是在所有步骤中都睡着了,然后传送到最后。我认为这与 Pyglet 相关 - 可能具有绘图功能,因为睡眠运行良好(当有打印时,它会在睡眠后打印)。

这是它现在使用“A”按钮(main.py)工作的代码部分:

    elif symbol == key.A:
        if win == 0:
            #for item in cpu:
                item = cpu[x]
                window.clear()
                player.draw()
                if item == 'North':
                    player.y += fieldlength
                elif item == 'South':
                    player.y -= fieldlength
                elif item == 'East':
                    player.x += fieldlength
                elif item == 'West':
                    player.x -= fieldlength
                x += 1

以及我尝试过的代码(我也尝试了其他几种组合......):

    elif symbol == key.A:
        if win == 0:
            for item in cpu:
                window.clear()
                player.draw()
                if item == 'North':
                    player.y += fieldlength
                elif item == 'South':
                    player.y -= fieldlength
                elif item == 'East':
                    player.x += fieldlength
                elif item == 'West':
                    player.x -= fieldlength
                time.sleep(1)

另一个问题:

我的地图生成算法非常简单 - 它选择随机单元格,然后选择该单元格的随机邻居,从他们的邻居列表中删除该单元格,并将墙壁放入 WallList。

我想制作更好的地图生成算法 - 就像维基百科中的这样:http ://en.wikipedia.org/wiki/Maze_generation_algorithm#Depth-first_search

我不确定我的墙绘制方法是否有效 - 为每个墙组合存储 12 个图像并在 MyMap 值中存储“WallNumber”值不是更好吗?这是 WallNumber 值的示例:http: //imgur.com/DDfL1

我也要求这个,因为我觉得我现在的方法会非常混乱和棘手,为此编写更好的地图生成算法。

@@EDIT @zenpoy:我之前尝试过使用这个功能,但我一定做错了什么,现在我尝试了它并且它有效:)。

4

1 回答 1

1

我没有经验,Pyglet但一般来说,大多数图形应用程序都循环通过两个函数update()draw(). 该draw()函数在每一帧都被调用,并将模型的表示绘制到屏幕上。update()另一方面,调用该函数来更新模型。因此,您应该在update()函数内而不是在draw()函数内进行睡眠。

而不是等待和冻结整个循环,您应该使用clock模块pyglet来安排每次增量的更新:http: //www.pyglet.org/doc/api/pyglet.clock-module.html

clock.schedule_interval(move_player, .5)
于 2012-12-23T12:44:36.490 回答