在python中清除基于文本的rpg屏幕

Posted

技术标签:

【中文标题】在python中清除基于文本的rpg屏幕【英文标题】:Clearing the screen for text based rpg in python 【发布时间】:2020-02-13 19:45:10 【问题描述】:

我正在尝试在 python 中制作基于文本的 rpg 游戏。我刚开始,这是我的代码到目前为止的样子:

class Game:
    def __init__(self):
        self.map = [[" " for i in range(50)]for i in range(30)]

    def draw_map(self):
        for i in range(len(self.map)):
            print(self.map[i])


    def add_stuff(self, thing, x, y):
        self.map[y][x] = thing

game = Game()

class Player:
    def __init__(self):
        self.x = 1
        self.y = 1
        self.player = "ME"

    def draw(self):
        game.add_stuff(self.player, self.x, self.y)

    def move(self):
        pass

player = Player()
player.draw()
game.draw_map()

我试图找到一种以某种方式实现游戏循环的方法。为此,我正在考虑运行draw_map() 并立即清除屏幕并再次打印地图,有点像真正的游戏循环。但是我在这样做时遇到了问题。基于其他类似问题的其他答案,我设法生成了以下代码(它只显示了主循环和子进程作为 sp 导入)。

while True:
    game.draw_map()
    sp.call("cls", shell = True)

但是这对我不起作用。它只是不做任何事情。我还尝试以类似的方式使用 clear_screen` 模块中的clear 函数,但我无法弄清楚为什么这不起作用。感谢您的帮助

【问题讨论】:

您的 print-clear 循环对我来说效果很好(虽然有点不稳定)。这可能是特定于操作系统的,因为我在 Linux 上使用 subprocess.call('clear') 嗯,这真的很奇怪。也许问题出在“cls”命令上? 但是我使用的是 windows,我之前看到的答案说它是 windows 的“cls” Yes cls 是在 Windows 中清除屏幕的正确命令。我的(相当弱的)假设是,在内部,Windows 处理子进程调用的方式与我在 Linux 上测试的不同。 我认为这是***.com/questions/517970/…的副本。 【参考方案1】:

因此,根据您以前的 cmets,您希望在 Python 解释器中清除屏幕。没有像这样清除屏幕的“命令”。但是您可以使用循环打印一些新行,直到您的屏幕再次空白。

def clear(lines):
    for l in range(lines):
        print()

while True:
    game.draw_map()
    clear(35)
    time.sleep(0.05)

您可能需要增加或减少清除的行数。我希望这对你有用。 P.S.:我会使用普通的控制台。

https://en.wikipedia.org/wiki/Interpreter_(computing)#Efficiency:

效率: 解释器的主要缺点是解释程序的运行速度通常比编译程序慢。速度差异可能很小或很大;通常是一个数量级,有时甚至更多。在解释器下运行程序通常比运行已编译的代码需要更长的时间,但解释它所花费的时间可能比编译和运行它所需的总时间要少。当编辑-解释-调试周期通常比编辑-编译-运行-调试周期短得多时,这在原型设计和测试代码时尤其重要。

【讨论】:

【参考方案2】:

如果您的问题是清除控制台窗口,您可以使用

import os

os.system('cls')

代替

sp.call("cls", shell = True)

(假设您在 Windows 上工作)

为清楚起见进行编辑:

这是更改后的新循环:

while True:
game.draw_map()
os.system('cls')

【讨论】:

我在 Windows 上工作,但如果我删除 shell = True,我会收到此错误:FileNotFoundError: [WinError 2] 系统找不到指定的文件 是的,我的解决方案不是从 sp.call("cls", shell = True) 中删除 shell=True,而是将整行替换为 os.system('cls')。 啊,我的错。但仍然不能解决问题。它只是暂停打印几毫秒然后继续 您是在解释器中还是在控制台中运行脚本?这不会从解释器中清除文本 哦,我用的是解释器。有没有办法清除口译员?因为在控制台上缩放地图对我来说有点困难

以上是关于在python中清除基于文本的rpg屏幕的主要内容,如果未能解决你的问题,请参考以下文章

基于 Python 文本的 rpg 类统计

在 C++ 中制作基于文本的 RPG 游戏/模板时出现问题 [关闭]

为基于文本的 RPG 创建更一致、随机生成的世界空间

使用基于 XIB 的选项卡栏应用程序在所有视图中“清除所有”文本字段中的值的最佳方式

如何截取基于文本的用户界面的屏幕截图?

简单RPG的数据库表结构