【问题标题】:Pygame: Writing Multiple LinesPygame:编写多行
【发布时间】:2013-12-26 23:30:11
【问题描述】:

我正在为我的游戏开发记分牌功能,玩家在其中输入名称,然后将其作为分数写入文本文件。我已经设法写入文件并再次显示它。但它只写入一个当前每次输入新名称时都会被覆盖的名称。那么我将如何解决这个问题?我试过这样做:

f = open('names.txt')
f.writeline(str(name))
f.close()

这是我想要得到的:

Name1
Name2
Name3

那么我该如何为每个名字做不同的行呢? 谢谢

我可以添加多个名称,但会发生以下情况: 文本文件显示正确,但在 pygame 中显示不正确。我希望它像文本文件一样位于单独的行上。

【问题讨论】:

标签: python python-2.7 pygame


【解决方案1】:

@Maxime Lorant 的答案就是你想要的。假设您有一个包含您的姓名的列表。

names = ["Name1", "Name2", "Name3"]
f = open("names.txt", "a")
for i in names:
    f.write(i + "\n")
f.close()

如果 names.txt 是一个空白文件,现在它的内容应该是:

Name1
Name2
Name3

编辑

现在我看到了你想要达到的目标。请看这个链接: http://sivasantosh.wordpress.com/2012/07/18/displaying-text-in-pygame/

基本上,换行符在 pygame 中不起作用 - 您必须更改文本矩形的坐标。我对 pygame 有点陌生,但我设法做你想做的事,这是我天真的方法(我从上面的链接编辑了代码):

#...
f = open("t.txt")
lines = f.readlines()
f.close()

basicfont = pygame.font.SysFont(None, 48)
text = basicfont.render('Hello World!', True, (255, 0, 0), (255, 255, 255))
textrect = text.get_rect()
textrect.centerx = screen.get_rect().centerx
textrect.centery = screen.get_rect().centery

screen.fill((255, 255, 255))
for i in lines:
    # each i has a newline character, so by i[:-1] we will get rid of it
    text = basicfont.render(i[:-1], True, (255, 0, 0), (255, 255, 255))
    # by changing the y coordinate each i from lines will appear just
    # below the previous i
    textrect.centery += 50
    screen.blit(text, textrect)
#...

结果如下:

【讨论】:

  • 我会试试这个,看看是否有什么不同。
  • 介意我给你看我当前的代码,看看你能不能帮我适应这个?
  • 当然。我想我会处理的:)
  • 代码:gist.github.com/GhostFrag1/8ea8e610e3af9e4aff9e 如您所见,如果您运行它,您可以输入您的姓名,然后将其保存到文本文件中。关闭后重新打开时,名称将位于左上角。
  • 检查一下:gist.github.com/macfij/8162008 如果您还有其他问题,请随时问我。
【解决方案2】:

与许多编程语言一样,您可以以追加模式打开文件,将其写入当前文件的末尾。这可以通过在open 中添加第二个参数来实现,即模式:

f = open('names.txt', 'a')
f.write(str(name) + '\n')
f.close()

【讨论】:

  • 我可以打开文本,但我正在尝试写入多行信息而不覆盖当前文本。
  • 正如我所说,a 模式不会覆盖打开文件的内容。您将在文件中写入的所有内容都将放在最后一行之后。
  • 好的,但是我如何将最新的输入放在当前文本下?
  • 不明白你想要什么。请使用具体示例来编辑您的问题,以说明您想要实现的目标。谢谢。
  • 刚刚编辑了这个问题,并举了一个我想要实现的例子。
猜你喜欢
  • 2014-06-17
  • 1970-01-01
  • 2015-11-11
  • 1970-01-01
  • 1970-01-01
  • 2010-10-10
  • 2016-12-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多