Pygame:写多行

时间:2013-12-26 23:30:11

标签: python python-2.7 pygame

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

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

以下是我想要的内容:

Name1
Name2
Name3

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

我可以添加多个名称但是会发生以下情况: enter image description here 文本文件正确显示但在pygame中显示不正确。我希望它在文本文件之类的单独行上。

2 个答案:

答案 0 :(得分:2)

@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)
#...

结果如下:

答案 1 :(得分:1)

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

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