如何覆盖同一玩家名称的保存值?

时间:2014-12-12 18:35:31

标签: python python-3.x pygame

努力让一个正常运作的高分班上班。这是我目前的代码。如果我添加更多玩家对象,则列表会变得更大,看起来像John [1] booboomcgoo [1],其中[1]是赢得的游戏数量。但是,我现在陷入困境,因为当同一个玩家再次玩时,我无法弄清楚如何通过在文本文件中搜索字符串来替换以更高价值赢得的游戏,如果它与先前输入的那个相匹配,那么它将游戏增加1个值。

我甚至不确定这种方法是否可行,或者我对此问题的一般方法是否错误。任何帮助表示赞赏。 PS我已经注释掉了稍后我会用来在屏幕上显示信息的代码,请忽略。

class display_top_scores():


        def __init__(self, players_name, gameswon):
                self.players_name = players_name
                self.gameswon = gameswon
                self.scores_list = []
                self.times_won = []

        def show_scores(self):
                text_file = open("topscores.txt", "w+")
                self.scores_list.append(self.players_name)
                text_file.writelines(self.scores_list)

                #print(scores_list)

                self.times_won.append(self.gameswon)
                s = str(self.times_won)
                text_file.writelines(s)
                text_file.close()
                text_file = open("topscores.txt", "r+")
                for line in text_file:
                    print(line)

                #print(times_won)
                #print("I am here1")
                #font = pygame.font.SysFont("Arial", 30)
                #print("I am here2")
                #screen.blit(menu_background, [0, 0])
                #print("Iam here3")
##                textonscreen = drawText('Here are the top scores for easy mode:', font, screen, 600, 400, colors.Colors.wheat)
##                #print("Iam here4")
##                textonscreen.draw_menu_text()
##                #print("Iam here5")
##                pygame.display.update()
##                #print("Iam here6")
##                textonscreen = drawText('%s has won %d times.' % (self.players_name, self.gameswon), font, screen, 600, 450, colors.Colors.wheat)
##                #print("Iam here4")
##                textonscreen.draw_menu_text()
##                #print("Iam here5")
##                pygame.display.update()
##                #print("Iam here6")


players_name = "boboomcgoo"
showscore = display_top_scores(players_name, 1)
showscore.show_scores()

players_name = "John"
showscore = display_top_scores(players_name, 1)
showscore.show_scores()

players_name = "booboomcgoo"
showscore = display_top_scores(players_name, 1)
showscore.show_scores()

1 个答案:

答案 0 :(得分:1)

除非你的存储空间受到极大的限制,否则你不需要进入并编辑每场比赛后玩的游戏数量。相反,只需在每场比赛后添加一个日志条目。在文件中,为每个游戏的日期,其规则集(如果需要),其玩家及其结果存储条目。您可以将此日志存储为JSON对象(import json),CSV行(import csv),SQLite数据库(import sqlite3)或其他任何格式。

  • 每当玩游戏时,以追加模式(open(filename, 'a'))打开日志文件,写出新结果,然后关闭文件。追加模式可确保旧游戏的记录不会被覆盖。或者在SQLite中,INSERT INTO您的日志表。
  • 要计算玩家或玩家对的输赢记录,请在阅读模式下打开日志文件,解析每个游戏的记录,如果玩家名称符合您的预期,请添加一个或一个失利。如果扫描大型日志导致应用程序暂时冻结,您可能希望为此计算生成一个工作线程({3}}或{3.2}或更高版本中的import threading),这样它就不会阻止您的事件处理线程。或者,您可以选择将它们全部解析为from concurrent import futures,并对此list执行各种sum操作。实际上,SQLite可以使用list为您执行此操作。