python - 如何使用python在盒子里移动机器人?
问题描述
我有一个 8x8 尺寸的盒子。
它有一些线表示机器人应该遵循的理想路径。
在该区域周围创建一个边界框,以便机器人无法逃脱。
伪代码
import math
import random
import pygame
direction = {'up': (0, -1), 'down': (0, 1), 'left': (-1, 0), 'right': (1, 0)}
direction = direction['up'] # set a direction
解决方案
你找到了一个有趣的地方去探索!您的问题遗漏了很多细节,因此我将尝试就解决这些一般问题提供一些建议。
- 您正在使用字符网格。采用 '。' 表示空仓;使用空格会导致更长的调试时间。
- 你应该把你的网格变量想象成
grid[line][col]
. 如果您尝试使用[y][x]
,[x][y]
,[row][col]
那么您会感到困惑并为自己制造错误。 - 用许多小步骤制作这个程序。在每个步骤中,您都应该能够运行它并看到一些输出。您可以执行以下步骤:
- 写
make_blank_grid
和print_grid
。您应该能够打印一个空网格。 - 编写
make_grid_from_string
,get_string_from_grid
以便您可以传递一个长字符串来制作不同的网格。将所有这些放在一个 Grid 类中。 - 启动您的机器人类,以便您的机器人知道自己的行和列。写
dump_robot
出来把这些打印出来。 - 开始一个具有机器人和网格的世界级。这个类应该有办法在网格上打印机器人(
dump_world
)。 - 添加一个愚蠢的(无错误检查)
move(delta_line, delta_row)
功能,制作一个简单的循环让您的机器人四处移动(但破坏墙壁)。 - 现在,在网格中实现墙并添加
can_move()
到您的机器人中。通过重新运行循环,如果路径中有墙壁,机器人应该拒绝移动。 - 一旦你掌握了所有这些,你就可以开始添加迷宫、解决迷宫、寻找路径等。如果任何步骤开始变得令人沮丧,就把它分解。
- 写
- 让逻辑首先起作用。我建议使用 I/O 中的简单打印和输入,直到您的 Robot、Grid 和 World 类正常工作。
- 正确初始化您的网格。那就是:
grid = [['.' for col in range(COLS)] for line in range(LINES)]
不是grid = [' ' * COLS]*LINES
继续努力。继续黑客攻击!记笔记。
推荐阅读
- c++ - 如何通过单次运行将多个输入样本提供给 C++ 中的张量流模型
- c++ - SSH 集群上的 MPI 编译问题
- android - 在 Tablayout tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() 方法不起作用
- azure - 在 eu.luis.ai 上创建的 LUIS 应用未显示在我的 Azure 门户上
- android - 检测拨出电话何时开始播放回铃音
- r - 如何在 for 循环中的 Knitr markdown 中绘制 dygraph?knitr_child 不工作
- javascript - ASP.NET:使用右键单击触发用jQuery
- c# - 如何使工具提示具有圆角 - WPF
- sorting - 标准排序使 std::vector 无效
- websocket - 使用HttpClientUpgradeHandler建立Websocket连接?