Saving a record for playing python

I made a very simple game in python using pygame. The score is based on any level reached by the player. I have a level as a variable called score . I want to display the top level at the beginning or end of the game.

I would be even happier to display more than one point, but all the other topics that I saw were too complicated for me to understand, so please try: I'm new, I need only one point.

+5
source share
7 answers

I recommend you use shelve . For instance:

 import shelve d = shelve.open('score.txt') # here you will save the score variable d['score'] = score # thats all, now it is saved on disk. d.close() 

The next time you open your program, use:

 import shelve d = shelve.open('score.txt') score = d['score'] # the score is read from disk 

and it will be read from disk. You can use this technique to save a list of scores, if you wish, in the same way.

+6
source

You can use the pickle module to save the variables to disk, and then reload them.

Example:

 import pickle # load the previous score if it exists try: with open('score.dat', 'rb') as file: score = pickle.load(file) except: score = 0 print "High score: %d" % score # your game code goes here # let say the user scores a new high-score of 10 score = 10; # save the score with open('score.dat', 'wb') as file: pickle.dump(score, file) 

This saves a single score on disk. The best part is that you can easily expand it to save a few points - just change the scores as an array and not just one value. pickle save almost any variable you throw on it.

+7
source

I come from the Java background and my Python is not very good, but I would look at the Python documentation for reading and writing to files: http://docs.python.org/2/tutorial/inputoutput.html

You can write the rating variable to a plaintext file before you finish the game, and then upload the same file the next time you start the game.

Take a look at the read() , readline() and write() methods.

+2
source

First create a highscore.txt file with a null value. Then use the following code:

 hisc=open("highscore.txt","w+") highscore=hisc.read() highscore_in_no=int(highscore) if current_score>highscore_in_no: hisc.write(str(current_score)) highscore_in_no=current_score . . #use the highscore_in_no to print the highscore. . . hisc.close() 

I could make a permanent recorder using this simple method, without shelves or brine.

+1
source

You can use dict to save your record and simply write it to a file:

 def store_highscore_in_file(dictionary, fn = "./high.txt", top_n=0): """Store the dict into a file, only store top_n highest values.""" with open(fn,"w") as f: for idx,(name,pts) in enumerate(sorted(dictionary.items(), key= lambda x:-x[1])): f.write(f"{name}:{pts}\n") if top_n and idx == top_n-1: break def load_highscore_from_file(fn = "./high.txt"): """Retrieve dict from file""" hs = {} try: with open(fn,"r") as f: for line in f: name,_,points = line.partition(":") if name and points: hs[name]=int(points) except FileNotFoundError: return {} return hs 

Usage :

 # file does not exist k = load_highscore_from_file() print(k) # add some highscores to dict k["p"]=10 k["a"]=110 k["k"]=1110 k["l"]=1022 print(k) # store file, only top 3 store_highscore_in_file(k, top_n=3) # load back into new dict kk = load_highscore_from_file() print(kk) 

Output:

 {} # no file {'p': 10, 'a': 110, 'k': 1110, 'l': 1022} # before storing top 3 {'k': 1110, 'l': 1022, 'a': 110} # after loading the top 3 file again 
+1
source

I usually keep the names of players and their records in the form of a list of lists (for example, [['Joe', 50], ['Sarah', 230], ['Carl', 120]] , because you can sort and cut them (for example, if there should be no more than 10 entries). You can save and load the list using the json module ( json.dump and json.load ) or using pickle.

 import json from operator import itemgetter import pygame as pg from pygame import freetype pg.init() BG_COLOR = pg.Color('gray12') BLUE = pg.Color('dodgerblue') FONT = freetype.Font(None, 24) def save(highscores): with open('highscores.json', 'w') as file: json.dump(highscores, file) # Write the list to the json file. def load(): try: with open('highscores.json', 'r') as file: highscores = json.load(file) # Read the json file. except FileNotFoundError: return [] # Return an empty list if the file doesn't exist. # Sorted by the score. return sorted(highscores, key=itemgetter(1), reverse=True) def main(): screen = pg.display.set_mode((640, 480)) clock = pg.time.Clock() highscores = load() # Load the json file. while True: for event in pg.event.get(): if event.type == pg.QUIT: return elif event.type == pg.KEYDOWN: if event.key == pg.K_s: # Save the sorted the list when 's' is pressed. # Append a new high-score (omitted in this example). # highscores.append([name, score]) save(sorted(highscores, key=itemgetter(1), reverse=True)) screen.fill((30, 30, 50)) # Display the high-scores. for y, (hi_name, hi_score) in enumerate(highscores): FONT.render_to(screen, (100, y*30+40), f'{hi_name} {hi_score}', BLUE) pg.display.flip() clock.tick(60) if __name__ == '__main__': main() pg.quit() 

The highscores.json file will look like this:

 [["Sarah", 230], ["Carl", 120], ["Joe", 50]] 
0
source

I would suggest:

 def add(): input_file=open("name.txt","a")#this opens up the file name=input("enter your username: ")#this input asks the user to enter their username score=input("enter your score: ")#this is another input that asks user for their score print(name,file=input_file) print(number,file=input_file)#it prints out the users name and is the commas and speech marks is what is also going to print before the score number is going to print input_file.close() 
-3
source

Source: https://habr.com/ru/post/1482488/


All Articles