我正在用Python编写一个非常简单的农业游戏,使用curses。在这一点上,我已经成功地允许玩家(只是一个“@”字符)在窗口中移动。在
我有一些ascii艺术的文件,我打印到窗口,作为填充世界的东西,在其中玩家可以移动。例如,我有一个名为“house”的文件,其中包含:
_ . ^ . _
/____.____\
| |
| ## _ ## |
|_""_H_""_|
我有一个事物类,如下所示:
^{pr2}$因此,Thing类的构造函数将文件名作为参数(looksLike),draw方法打开文件,读取文件,并将其内容打印到窗口中。然后,我可以创建一个house对象,将我的“house”文件作为参数传递,我的ascii house将被打印到窗口中。在
问题是一旦对象被打印到窗口,当我将播放器移到打印对象的右侧时,播放器就会消失。然而,在打印对象的上方、下方和左侧,播放机始终处于视野中。例如
_ . ^ . _
/____.____\
| |
| ## _ ## |
|_""_H_""_|
@
在这个位置“@”字符是可见的,但是如果我向上移动一个空格,它就会消失。如果我继续向上移动播放器,“@”会在它移动到房子最上面的角色之后重新出现。在
我假设这个问题是由于addstr()和addch()在窗口结束之前都打印空白的特性造成的,但是我找不到任何关于这个的文档。在
我考虑过为每个打印的对象创建一个新窗口,但是当多个对象被打印到窗口时,这似乎会变得非常麻烦。另外,我希望在屏幕上打印的对象周围定义边框,而不是正方形或矩形。在
有没有办法从一个文件打印到窗口,而不需要为每个打印对象创建一个新窗口?在
你为什么这么想?在
首先,在您展示给我们的代码中,您从未实际调用
addstr
,因此不可能是这样。在至于
addch
,它绝对不应该像你看到的那样做,比如从右向左画。或者运行这个简单的测试代码:如果您在测试程序中没有看到
a
,则说明您的终端有问题。但如果你是,那么你的假设是错误的,它与addch
无关。在几乎可以肯定的是,您的家庭文件中实际上有空格。在诅咒中,如果你在另一个字符上画一个字符,它会替换原来的字符,它不会试图合并它们,也不会将它们重写或类似的事情。(这很好,因为大多数游戏机都没有办法做到这一点……)
如果新字符是空格,它只是用空格替换旧字符。就像你看到的一样。在
所以,解决方法是删除每行末尾的空格,对吗?好吧,你可以的。或者你可以每行
rstrip()
。(您不需要\n
;您可以通过遍历整行来判断您已经到达了一行的末尾,对吗?好吧,你可以在你的file = open(…).readlines()
代码中,或者在那些不需要readlines()
的代码中循环;你不能在不同的file = open(…).read()
代码中使用,但是我不知道你为什么在一开始就用不同的方法来做。)或者,由于您的
find_boundries
函数非常小心地跳过空格,所以您可能想在draw
中执行相同的操作,但却忘记了?如果是这样,只需编写您打算跳过空格的代码。在但是对于整个问题有一个更简单的解决方案:只要在房子后面画
@
,而不是在房子前面,这根本就不是问题。当然,这意味着如果玩家和房子在同一个地方,他会出现在房子的“外面”,而不是隐藏在“里面”-但是你似乎已经有了防止这种情况发生的代码,所以如果发生这种情况,它看起来像谁并不重要。在幸运的是我从来没用过咒语,而且我看不到你的玩家等级。在
尽管如此,这个片段可能会给你一些想法(按“x”退出游戏)(使用WASD移动播放器)(需要启用ANSI的控制台:
这里有一个屏幕截图:
{1美元^
相关问题 更多 >
编程相关推荐