Problem mit dem pygame highscore
Verfasst: Mittwoch 24. Juni 2020, 20:55
Hey Leute! Ich habe gerade neu mit Python begonnen. Für ein Schuleprojekt versuchen wir jetzt(halb selber und die komplizierten Sachen aus dem Internet)ein Spiel zu machen. Also besser gesagt Snake. Eigentlich lief ja alles ganz gut - bis auf den highscore. Zuerst hat er nie reagiert, wenn man ihn geknackt hat und jetzt, wo er endlich mal reagiert, wird einfach eine Null über den Highscore geschrieben und er wir nicht ersetzt. Ebenso wie die highscore Text Datei, welch auch nicht verändert wird. Ich würde mich freuen, wenn jemand eine Lösung für das Problem hat.
Liebe Grüsse
luug22
PS: Wenn ihr den Code bei euch ausführen wollt, müsst ihr euch die highscore Textdatei noch erstellen.
Liebe Grüsse
luug22
PS: Wenn ihr den Code bei euch ausführen wollt, müsst ihr euch die highscore Textdatei noch erstellen.
Code: Alles auswählen
import random
import pygame
pygame.init()
white = (255, 255, 255)
yellow = (255, 255, 102)
black = (0, 0, 0)
red = (213, 50, 80)
green = (0, 255, 0)
blue = (0, 0, 136)
gold = (212, 175, 55)
dis_width = 1500
dis_height = 800
dis_width2 = 1500
dis_height2 = 1000
dis_width3 = 1500
dis_height3 = 1200
dis = pygame.display.set_mode((dis_width, dis_height))
pygame.display.set_caption('Snake')
clock = pygame.time.Clock()
snake_block = 50
snake_speed = 10
font_style = pygame.font.SysFont("bahnschrift", 50)
score_font = pygame.font.SysFont("comicsansms", 40)
def highscore(score):
with open('highscore', 'r+') as hs:
try:
hs_score = int(hs.read())
value = score_font.render("Highscore: " + str(hs_score), True, gold)
dis.blit(value, [0, 60])
if score > hs_score:
hs_score = score
hs.write(hs_score)
except:
hs_score = 0
value = score_font.render("Highscore: " + str(hs_score), True, gold)
dis.blit(value, [0, 60])
return hs_score
def Your_score(score):
user_score = score
value = score_font.render("Score: " + str(score), True, white)
dis.blit(value, [0, 0])
def our_snake(snake_block, snake_list):
for x in snake_list:
pygame.draw.rect(dis, green, [x[0], x[1], snake_block, snake_block])
def message(msg, color):
mesg = font_style.render(msg, True, color)
dis.blit(mesg, [dis_width / 6, dis_height / 3])
def message2(msg, color):
mesg = font_style.render(msg, True, color)
dis.blit(mesg, [dis_width2 / 6, dis_height2 / 3])
def message3(msg, color):
mesg = font_style.render(msg, True, color)
dis.blit(mesg, [dis_width3 / 6, dis_height3 / 3])
def gameLoop():
game_over = False
game_close = False
x1 = dis_width / 2
y1 = dis_height / 2
x1_change = 0
y1_change = 0
snake_List = []
Length_of_snake = 1
foodx = round(random.randrange(0, dis_width - snake_block) / 50.0) * 50.0
foody = round(random.randrange(0, dis_height - snake_block) / 50.0) * 50.0
while not game_over:
while game_close == True:
pygame.mixer.music.stop()
dis.fill(blue)
message("Du hast verloren!", red)
message2("\"C\" um nochmal zu spielen", white)
message3("\"Q\" um das Spiel zu verlassen", white)
Your_score(Length_of_snake - 1)
highscore(Length_of_snake - 1)
pygame.display.update()
for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_q:
game_over = True
game_close = False
if event.key == pygame.K_c:
gameLoop()
for event in pygame.event.get():
if event.type == pygame.QUIT:
game_over = True
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
x1_change = -snake_block
y1_change = 0
elif event.key == pygame.K_RIGHT:
x1_change = snake_block
y1_change = 0
elif event.key == pygame.K_UP:
y1_change = -snake_block
x1_change = 0
elif event.key == pygame.K_DOWN:
y1_change = snake_block
x1_change = 0
if x1 >= dis_width or x1 < 0 or y1 >= dis_height or y1 < 0:
game_close = True
x1 += x1_change
y1 += y1_change
dis.fill(blue)
pygame.draw.rect(dis, red, [foodx, foody, snake_block, snake_block])
snake_Head = []
snake_Head.append(x1)
snake_Head.append(y1)
snake_List.append(snake_Head)
if len(snake_List) > Length_of_snake:
del snake_List[0]
for x in snake_List[:-1]:
if x == snake_Head:
game_close = True
our_snake(snake_block, snake_List)
Your_score(Length_of_snake - 1)
highscore(Length_of_snake - 1)
pygame.display.update()
if x1 == foodx and y1 == foody:
foodx = round(random.randrange(0, dis_width - snake_block) / 50.0) * 50.0
foody = round(random.randrange(0, dis_height - snake_block) / 50.0) * 50.0
Length_of_snake += 1
clock.tick(snake_speed)
pygame.quit()
quit()
gameLoop()