2017-10-07 29 views
1

我想在我的遊戲中使用成就係統。遊戲就像曲奇一樣,除非你一遍又一遍地輸入字母「L」,並且可以升級每種類型的效果。我試圖做到這一點,當你得到一定數量的硬幣,比如1000時,它會顯示你已經達到了1000枚硬幣的成就,但它似乎並不奏效。下面是代碼:使用pycharm和IDLE python遊戲的成就係統

if coins == 1000: 
    print("") 
    print("You have a new achievement!") 
    print("[✔] - Earn 1,000 points") 
    print("You have 1/6 coin achievements") 
    print("") 
if coins == 10000: 
    print("") 
    print("You have a new achievement!") 
    print("[✔] - Earn 10,000 points") 
    print("You have 2/6 coin achievements") 
    print("") 
+0

你有沒有正確的代碼? – JClassic

+0

你是什麼意思,不起作用。你在這裏縮進嗎? –

+0

我有一個像你的縮進,但它複製粘貼不正確。我沒有得到一個錯誤,它只是在遊戲中不起作用。我設置它的方式,只打印:「[✔] - 賺取10,000點」,當你得到正確的1000分,這並不總是工作,因爲說我有980分,我可以跳到1001,它會跳過消息。所以我嘗試了大於或等於1000,但是它會打印:「[✔] - 賺取10,000點」,每次贏得更多積分。有沒有辦法顯示:「[✔] - 賺取10000點」一旦我得到1000點或更多的點,只顯示一次? –

回答

0

編輯:後,OP添加註釋的問題有一個更加清楚一點給我。也許你可以試試下面的(這當然只是一個例子作爲OP沒有提供最少的代碼運行和平):

# -*- coding: utf-8 -*- 

numCoinAchievements = 0 
nextCoinLevel = 1000 

for coins in range(0, 100000, 33): 
    if coins >= nextCoinLevel: 
     numCoinAchievements += 1 

     if numCoinAchievements == 1: 
      nextCoinLevel = 10000 
     elif numCoinAchievements == 2: 
      nextCoinLevel = 15000 
     else: 
      break 
    print("") 
    print("You have a new achievement!") 
    print("[✔] - Earn %d points" % nextCoinLevel) 
    print("You have %d/6 coin achievements" % numCoinAchievements) 
    print("") 

當然,你必須將代碼ADEPT您的需求,但它應該明確問題!

1

您的具體問題是您使用了錯誤的比較器。如果您使用==。你正在檢查值是否完全相等。您對何時玩家「達到」價值感興趣,因此請將您的比較器換成>=。這樣,當玩家從980分到1001分時,1001 >= 1000評估爲True

注意這將每次檢查時間打印文本,即使他們已經有了成就,因此,或許像下面將是有益的:

has_1000_achievement = False 
has_10000_achievement = False 

if coins >= 1000 and not has_1000_achievement: 
    has_1000_achievement = True 
    print("") 
    ... 

用P提供的解決方案,我無疑會工作,但我相信這不是你準備好流利地瞭解你目前的水平。

+0

但是,如果它> 10000,它仍然是...所以你還需要比較<10000 –

+0

好點,我會更新我的答案。 –

+0

複雜性不是很相似嗎? –