【发布时间】:2015-03-12 23:01:14
【问题描述】:
我编写了一个简单的控制台游戏,它允许我将我的玩家移动到一个有墙壁和空白区域的小关卡内。只需使用几个简单的函数即可完成所有操作。
我对 Python 比较陌生,但接下来我想学习 OOP,如果我想让这个游戏面向对象,我将如何继续?
我理解类和对象相当很好,但如果我不理解所有答案,请耐心等待。
这是当前的游戏:
LEVEL = [
'xxxxxx',
'x x',
'x i x',
'x x',
'x x',
'xxxxxx'
]
def get_block(x, y):
"""Gets a block at the given coordinates."""
try:
return LEVEL[y][x]
except IndexError:
return None
def set_block(x, y, block):
"""Sets a block at the given coordinates."""
try:
LEVEL[y] = LEVEL[y][:x] + block + LEVEL[y][x + 1:]
except IndexError:
pass
def get_player_position():
"""Gets player's position."""
for y, row in enumerate(LEVEL):
for x, column in enumerate(row):
if column == 'i':
return x, y
def set_player_position(x, y):
"""Sets player's position."""
block = get_block(x, y)
if block == ' ':
px, py = get_player_position()
set_block(px, py, ' ')
set_block(x, y, 'i')
def main():
"""Entry point for the program."""
cmd = ''
while cmd.lower() not in ('quit', 'q'):
print('\n' * 30)
for row in LEVEL:
print(row)
cmd = input('Command: ').lower()
px, py = get_player_position()
if cmd == 'w':
set_player_position(px, py - 1)
elif cmd == 's':
set_player_position(px, py + 1)
elif cmd == 'a':
set_player_position(px - 1, py)
elif cmd == 'd':
set_player_position(px + 1, py)
print('Bye.')
if __name__ == '__main__':
main()
【问题讨论】:
-
您到底想做什么?如果你有一个精确的编程问题,那很好,但是一个模糊的问题,问我如何改变我的代码来做一些不同的事情,我相信,这里是题外话。
-
@AdrianHHH 我正在尝试练习 OOP,我对此非常陌生。我希望在将此代码转换为使用类(例如
Player类或Level类?)方面获得一些帮助。我知道如果问错了地方,你能推荐任何“正确”的地方吗? -
查看每个 Stackoverflow 页面顶部链接的帮助页面,了解此处主题的详细信息。我不知道 Python,但网络上其他地方可能有很多教程和帮助论坛。如果您有明确的问题,请返回此处,我相信 Python 社区会很乐意提供帮助。
-
@AdrianHHH 感谢您的指导 :)
标签: python class oop object python-3.x