我目前正在创建一个冒险游戏,你通过输入命令(北,南)通过一个地牢的房间移动。所以我试图用字典把每个房间连接在一起,这样我就可以用“北”、“南”等键来移动这些房间。但我似乎不明白。有什么想法吗?
你的想法有几个优点和缺点:
如果你想要一个经典的“类似流氓的”移动(在一个带有某种瓦片的2d网格中),你将在图形地牢表示方面遇到很多问题(实际上你现在正在使用图形)。让我们看看这个地牢:
ROOM1 > ROOM2 > NORTH
ROOM2 > ROOM3 > NORTH
ROOM3 > ROOM1 > NORTH
你会有一个房间戒指。它不好,但你可以做类似的事情:
ROOM1 > ROOM2 > NORTH
ROOM1 > ROOM2 > SOUTH
这真的很让人困惑,因为你可以朝不同的方向移动,去一个房间。为了通过设计防止这些情况,您可以将您的地下城表示为一个公平的二维网格,如下所示:
rooms_mask = [
[0,1,0,0,1],
[1,1,1,0,1],
[0,0,1,1,1],
[1,1,1,0,0],
[1,0,0,0,0]
]
您的操作将仅从当前位置的x或y坐标添加或细分1。下面是简单的示例代码:
class Room(object):
def __init__(self, x, y):
self.x = x
self.y = y
def __str__(self):
if self.y < 3:
return 'It is a dark and gloomy room: ({}, {})'.format(self.x, self.y)
else:
return 'It is a light and shining room: ({}, {})'.format(self.x, self.y)
rooms_mask = [
[0,1,0,0,1],
[1,1,1,0,1],
[0,0,1,1,1],
[1,1,1,0,0],
[1,0,0,0,0]
]
rooms = [[Room(j, i) for j, _ in enumerate(rm)] for i, rm in enumerate(rooms_mask)]
x = 2
y = 2
while True:
action = input()
if action == 'q':
break
elif action == 'n':
if y > 0 and rooms_mask[y-1][x] == 1:
y -= 1
print(rooms[y][x])
elif action == 's':
if y < len(rooms_mask) - 1 and rooms_mask[y+1][x] == 1:
y += 1
print(rooms[y][x])
elif action == 'e':
if x < len(rooms[0]) - 1 and rooms_mask[y][x+1] == 1:
x += 1
print(rooms[y][x])
elif action == 'w':
if x > 0 and rooms_mask[y][x-1] == 1:
x -= 1
print(rooms[y][x])
但是如果你真的想把你的地下城表示成图形,你可以使用下面的代码:
from collections import defaultdict
raw_rooms = [
[1,2,'n'],
[2,3,'w'],
[1,4,'s']
]
rooms = defaultdict(list)
for source, target, direction in raw_rooms:
rooms[source].append([target, direction])
current_room = 1
while True:
action = input()
if action == 'q':
break
else:
for target, direction in rooms[current_room]:
if direction == action:
print('I am in room {}'.format(target))
current_room = target
此代码使用defaultdicts存储房间图形。您还可以使用networkx使用真实图形并使用它们。
在我的游戏中有几个类我写过,包括房间,灯,胸,爪哇,玩家,钥匙和地图。这些都经过了测试,并且是正确的,所以现在我正在编写我的adventure类,它是程序的驱动程序。我需要设置球员的房间位置[0][0],但我不知道怎么做。这是我到目前为止在我的房间和冒险课。
我正在为一个C项目做一个冒险游戏。目标基本上是拥有一组由类定义的房间。然后使用地图将它们链接在一起。除了检查是否没有房间和确保没有为空房间接受输入之外,我的一切都正常工作。例如,它会说“那里什么都没有”,然后重新提示用户移动的方向。当前,如果某个方向上没有空间,并且选择了该方向,我的程序就会崩溃。我现在已经设置好了它,至少确保输入了一个有效的方向(北、南、东或西),但它没有检查这个方向是否可用。有
所以我是Java编码的新手,我对C#有很好的经验,我知道它们非常相似。我目前正在通过创建一个文本冒险游戏来处理Java,游戏使用案例(案例1、案例2、默认等),目前我正在开发一个保存和加载功能,但我不知道如何保存一个使用案例来进一步编码的分支游戏,有人有什么想法吗?
问题内容: 我对Java中的一些中间概念还很陌生。最近,我制作了一款名为DazzleQuest的文字冒险游戏,该游戏完全在开发者控制台/终端中运行。它以我的朋友为角色,因此我想向他们展示它,并通过将命令行和控制台的输出功能转移到一个简单的Swing界面(包括一个用于显示游戏输出的a和一个带有,处理来自用户的命令。 我的主类包含名为和的方法,我认为我需要将其与我的类及其子类[扩展] 集成在一起。 总
我正在Java制作一个基于文本的冒险游戏。我需要让用户能够拿起物品并将其放入库存中,但我不确定如何做到! 这是我的项目当前的设置方式: 我需要能够在某些房间里有特定的物品。有人有什么建议吗?
您好,我是新来的编码和创建一个基于文本的游戏在python中。我正在写代码从一个房间搬到另一个房间。我需要一些人帮我清理目前为止所做的事情。我运行了一个即时反馈程序,得到了以下提示,但不确定如何纠正: 大厅字符串是主字典中的一个关键字。修改代码,使其不是主字典中的关键字。 它说它不能分类我的代码(不确定那是什么意思) 将多个打印命令合并到一个函数中 使用非复杂条件使条件更简单 更好地练习在True