所以我一直试图弄清楚类和实例在python中是如何工作的,并且一直在制作一个基于文本的游戏来尝试和第一手了解它。
我知道重复你的话通常意味着你做错了什么,但我就是不知道该怎么做。我的代码如下所示:
win = False
class Rooms(object):
walls = 4
def __init__(self, command, desc, secret, x, y):
self.command = command
self.desc = desc
self.secret = secret
self.x = x
self.y = y
desc是对房间的描述,command是用来访问房间的单词,secret是关于房间的额外信息,x和y是放置在xy轴上的房间
def check(self):
if action == self.command:
player.move_x(self.x)
player.move_y(self.y)
if self.x == player.x and self.y == player.y:
print(self.desc)
我一直在努力解决这个问题,因为我需要它来检查命令,看看它需要移动多少x和y空间,但如果我还需要检查玩家的位置是否与xy轴上的房间位置匹配。
如果我把它们放在一起,那么房间描述仅在您输入特定命令时打印,因此交互将是:“开始游戏文本”
即使从逻辑上讲,你会在你开始的北面房间。尽管如此,它还是会导致其他问题。
class Player(object):
def __init__(self, x, y):
self.x = x
self.y = y
def move_x(self, new_x):
self.x = self.x + new_x
def move_y(self, new_y):
self.y = self.y + new_y
player = Player(0, 0)
default_room = Rooms('start', '...', '...', 0, 0)
north_room = Rooms('north', '...', '...', 0, 1)
south_room = Rooms('south', '...', '...', 0, -1)
west_room = Rooms('west', '...', '...', -1, 0)
east_room = Rooms('east', '...', '...', 1, 0)
print(default_room.desc)
action = input('> ')
while not win:
north_room.check()
south_room.check()
west_room.check()
east_room.check()
default_room.check()
print(player.x, player.y)
action = input('> ')
如前所述,通过检查工作的方式,程序的工作方式就像:“游戏开始”
因为程序总是检查。先北后南,这样它会看到它与北房间位于同一位置,并显示北描述,然后在检查南时,它实际上会将它移动到正确的位置。
最后一件事,我知道使用房间的实际位置作为移动玩家的基础是行不通的,因为一旦你得到一个房间,比如0,-2,那么离开它会让你回到起点。
对不起,如果我问了太多问题,只是我不知道从哪里开始。
我的解决方案:我将所有房间实例(重命名为“房间”)添加到列表中,并在该列表上迭代,检查实例x和y值是否与玩家匹配,例如:
for room in list_of_rooms:
if room.x == player.x and room.y == player.y:
print(room.description)
问题:。。。检查类的每个实例?
不要检查主循环中的所有房间,
因为玩家只能在一个房间中,所以在类玩家中保留一个实际房间的参考。
注意:在本例中,您不能离开房间,因为没有实现门。
考虑以下几点:
class Room(object):
DIMENSION = (5, 5)
def __init__(self, name):
self.name = name
self.pos = (0, 0)
def __str__(self):
return self.name
def move(self, _move):
_pos = (self.pos[0] + _move[0], self.pos[1] + _move[1])
if abs(_pos[0]) == Room.DIMENSION[0] or abs(_pos[1]) == Room.DIMENSION[1]:
return False
self.pos = _pos
return True
class House(object):
def __init__(self, start_room=0):
self.rooms = [Room('Hall'),
Room('Room-1 North'), Room('Room-2 East'),
Room('Room-3 South'), Room('Room-4 West')]
self.room = self.rooms[start_room]
def move(self, _move):
if not self.room.move(_move):
print('Move imposible, you reached the wall!'.format())
return self.room
class Player(object):
def __init__(self, name, house):
self.name = name
self.house = house
self.room = self.house.room()
def move(self, _move):
self.room = self.house.move(_move)
if __name__ == '__main__':
player = Player('Player-1', House(start_room=0))
while True:
print('{}: You are in {} at Position:{}'.format(player.name, player.room, player.room.pos))
action = input('Move to (north, east, south, west)> ')
if action in ["north", "east", "south", "west"]:
player.move({'north': (1, 0), 'east': (0, 1), 'south': (-1, 0), 'west': (0, -1)}[action])
elif action == 'break':
break
else:
print('Unknown Action? {}'.format(action))
输出:
Player-1: You are in Hall at Position:(4, 0)
Move to (north, east, south, west)> north
Move imposible, you reached the wall!
Player-1: You are in Hall at Position:(4, 0)
Move to (north, east, south, west)> south
Player-1: You are in Hall at Position:(3, 0)
Move to (north, east, south, west)> break
我的模型逐渐变慢,速度不可接受(即从每秒200次滴答声到一次滴答声的几秒钟)。我想了解这个问题的原因。最简单的方法是什么来检查模型的哪个部分越来越耗费时间?我以前试过使用其他java探查器,但不好理解。
问题内容: 有没有一种更友好的方法来获取FontMetrics实例,而不是 由于以下示例,我讨厌这种方式: 如果要在游戏中创建菜单,并且希望所有菜单项都位于屏幕中央,则需要字体度量。但是,大多数菜单项都是可单击的。因此,我创建了一个数组,所有矩形都适合这些项目,因此当按下鼠标时,我可以简单地使用 但是要创建矩形,我还需要FontMetrics作为其坐标。因此,这意味着我必须在菜单的绘制方法中构造所
问题内容: 我必须对一个大型Java项目做一个一般性的说明,但是我对它的了解很少,我想知道是否有确定以下内容的准则: 每个包有多少个类可以被认为是正确的,低或高的(这个项目每个包有3.89个类,对我来说似乎太小了), 每个类有多少种方法?(该项目每个类有6.54个方法… 每个方法的行数?(此项目每种方法大约有7行(对我来说似乎不错,也许有点低)) 我应该指出,这个问题仅涉及体积。我有很多来自质量工
对于此示例: 如何检查 是否是 Foo 的实例(但不是其 foo 子类的实例)?那是: checkInstance(qux,Foo.class)=true checkInstance(qux,Bar.class)=false 有没有类似于< code>instanceof的语句来进行这种检查?或者我应该使用< code>qux.getClass()。equals(Foo.class)
我有一个抽象类命令。构造函数如下所示: 每当满足某个条件时,我希望能够打印出每个命令,它是帮助消息和参数。 如果我可以遍历Command子类的实例,我可以为这些属性调用getter函数。但是,我不知道如何存储这样的实例。我一直在阅读泛型,但还没能解决这个问题。 现在,我有另一个具有此代码的类: 但这给了我一个错误: 所需类型:捕获?extends命令 提供:T 如果我能够使用获取单个子类的实例,那
问题内容: 从另一个问题中,我了解到在Java中 可以为Enum的每个实例定义特定的方法 : 让我感到惊讶的是,这甚至是可能的,每个实例专用的“专有方法”是否都有 名称 来查找文档? 另外, 应该如何使用 ?由于下一个未编译: 我应该如何使用这些“专有”方法? 问题答案: 您不能引用这些方法,因为您正在有效地为每个枚举创建匿名(*)类。由于它是匿名的,因此只能从匿名类本身内部或通过反射引用此类方法