在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屏幕的主要内容,如果未能解决你的问题,请参考以下文章
在 C++ 中制作基于文本的 RPG 游戏/模板时出现问题 [关闭]