2016-12-26 11 views
1

私は自分のゲームに問題があります。ゲームのスコアが3であるとし、10を超えるスコアを書き込もうとします。試したファイルを書き込みません。修正はしてもらえませんのでご協力ください。私は問題があなたのために何であるかはかなりわからないが、以下では、単にコードファイティングスコアリング - ファイルを開いて書き込む

# Variables within loop 
loop = True 
over = False 
# car 
carx = int(display_w/2 - 20) 
cary = 500 
carwidth = 40 
carheight = 70 
cxchange = 0 
# obstacle 
obx = carx - carwidth 
oby = -200 
obwidth = random.randint(200, 450) 
obheight = random.randint(100, 200) 
obychange = 0 
obstacle_speed = 7 
# score appending 
readhighscore = open("score.txt", "r") 
highscore = readhighscore.read() 
while loop: 
    if over == True: 
     message_to_screen("Game over!", black, -200, "large") 
     message_to_screen("Final Score: " + str(score), black, -130, "small") 
     fire_explosion(carx + int(carwidth/2), cary) 
     if str(score) > str(highscore): 
      writehighscore = open("score.txt", "w") 
      writehighscore.write(str(score)) 
     pygame.display.update() 
    while over: 
     for event in pygame.event.get(): 
      if event.type == pygame.QUIT: 
       pygame.quit() 
       quit() 

    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      pygame.quit() 
      quit() 
     elif event.type == pygame.KEYDOWN: 
      if event.key == pygame.K_RIGHT: 
       cxchange += 4 
      elif event.key == pygame.K_LEFT: 
       cxchange -= 4 
     elif event.type == pygame.KEYUP: 
      if event.key == pygame.K_RIGHT: 
       cxchange = 0 
      elif event.key == pygame.K_LEFT: 
       cxchange = 0 
    # Movement 
    carx += cxchange 
    oby += obychange 
    obychange = obstacle_speed 
# If Statements 
    # end of map and if the car successfully dodges the obstacle 
    if carx >= display_w - carwidth: 
     carx = display_w - carwidth 
    elif carx <= 0: 
     carx = 0 
    if oby > display_h: 
     if score > 16: 
      obwidth = random.randint(300, 450) 
     else: 
      obwidth = random.randint(200, 450) 
     obx = carx - random.randint(0, 100) 
     oby = random.randint(-1000, -500) 
     score += 3 
    # obstacle collision with the car 
    if oby+obheight >= cary and oby <= cary+carheight: 
     if carx+carwidth >= obx and carx <= obx + obwidth: 
      over = True 
      obychange = 0 
    # score concept 
    print(highscore) 
# Drawing 
    # background color 
    gameDisplay.fill(white) 
    # car 
    gameDisplay.blit(car1, [carx, cary]) 
    # obstacle 
    drawobjects(obx, oby, obwidth, obheight, blue) 
    # score 
    drawScore(score) 
    pygame.display.update() 
    clock.tick(FPS) 
+0

あなたは直面している問題は何ですか? 10を超えるスコアは書かれないのですか? – Octo

+1

[mcve]を参照してください。あなたは、あなたが求めている振る舞いを実証するのに関連する部分だけを含むように、コードをトリミングする必要があります。それは時間を無駄にしないだけでなく、途中で無関係な細部がなくてもあなた自身で理解できるかもしれません。ちなみに、ファイルを開くときには本当に 'with'構造体を使うべきです。 – Hurkyl

+0

はい10を超えるスコアは書き込まれません – StrozeR

答えて

1

新Anwserは: 申し訳ありませんが、私は少しのために不活性であったが、とにかく... 問題は、この行にある:

if str(score) > str(highscore): 

あるいは、言い換えれば、あなたが比較されている文字列を。 strの代わりにintを行うと、あなたは大丈夫になります。あなたがこのような状況で弦よりも大きくすることができない理由は複雑です。あなたが説明したい場合は、これを参照してください:String Comparison Technique Used by Python

+0

あなたの時間をありがとうございましたこれは私のanwser上記または任意の答えがあなたの質問を解決した場合、コードの行で無意識の多くの時間を保存した – StrozeR

+0

@ StrozeRチェックマークをクリックして受け入れることを検討してください。これは、あなたが解決策を見つけ出し、回答者とあなた自身の両方に評判を与えていることを広範なコミュニティに示します。これを行う義務はありません – Octo

0

次のコードは、完全にフィン動作するはずの作品です。

with open("score.txt", "w") as f: 
    f.write(str(score)) 

これは私の頭の上からです。
編集:不必要なコードもたくさんあります。 https://stackoverflow.com/help/mcveを読んでください、それらのキーワードは最小ですです。

+0

コードはまだ動作しません。再度説明してください。 スコアが文字列 "10"より低い場合、スコアは6となり、ユーザー/ playerは6のスコアを上回り、10よりも高い文字列の新しいハイスコアを設定するのは、単にPythonを無視してそれを書きません。以前の10スコア未満を使用します。 – StrozeR

関連する問題