如何为基于文本的网格创建 class 的动态实例?

How can I create a dynamic instance of a class for a text based grid?

我正在尝试为 python 中基于文本的基本游戏制作地图的 10x10 网格。 我设法创建了一个 MapTile class 和一个可以在 (x, y) 网格中移动的播放器 class。但是,我不确定如何创建 class 的实例以拥有单独的 MapTiles。我读过为所有 100 个 MapTile 创建 maptile1、maptile2... 等是任意的,但我想不出另一种方法..

这是我得到的!

# This class contains the x and y values for a grid
class MapTile:
    def __init__(self, x, y):
        self.x = x
        self.y = y

# basic char class containing position
class Character:
    def __init__(self, name, hp, x, y):
        self.name = name
        self.hp = hp
        self.x = x
        self.y = y

    # movement func
    def Move(self, Direction):
        if Direction.upper() == "UP":
            if self.y > 1:
                self.y -= 1
        elif Direction.upper() == "LEFT":
            if self.x > 1:
                self.x -= 1
        elif Direction.upper() == "RIGHT":
            if self.x < 10:
                self.x += 1
        elif Direction.upper() == "DOWN":
            if self.y < 10:
                self.y += 1

    def __str__(self):
        return "{}\n========\nHP = {}\nX = {}\nY = {}".format(self.name,
                                                              self.hp,
                                                              self.x,
                                                              self.y)

如果我不清楚,请告诉我。

正如我在评论中所说,我认为您应该使用列表列表或字典作为所有 MapTile 实例的容器。以下是执行这两项操作的方法:

# This class contains the x and y values for a grid
class MapTile:
    def __init__(self, x, y):
        self.x = x
        self.y = y

XDIM, YDIM = 10, 10

# Create a list-of-lists.
grid = [[MapTile(x, y) for y in range(YDIM)] for x in range(XDIM)]

# Create a dictionary with tuple keys.
grid = {(x, y): MapTile(x, y) for x in range(XDIM) for y in range(YDIM)}

做这样的事情使得存储在 MapTile 实例中的 x, y 位置信息有些多余,因为它将被索引或键 隐含 用于引用容器中的每个实例。 例如:

grid[1][2] 包含 MapTile(1, 2)

在第一种情况下,或者

grid[(1, 2)] 包含 MapTile(1, 2)

第二种情况。因此,您可能希望在设计中将其排除在 MapTile class 之外。否则,当它们的 MapTile 实例的位置在您选择使用的任何类型的 grid 容器中发生更改时,您可能需要更新它们。