2014-07-13 62 views
1

它這個遊戲的分數在開始時設置爲0,如果你正確回答問題,就添加到分數中,如果我在玩遊戲時通過打印檢查分數給出正確的值,但當分數顯示在證書上時,無論如何顯示0。導入變量沒有給出想要的值

這裏的第一個文件(遊戲部分)

import pygame, time 
pygame.init() 
WHITE = (255, 255, 255) 
BLACK = (0, 0, 0) 
screen = pygame.display.set_mode((600, 600)) 
ButtonA = pygame.image.load("A.png") 
ButtonB = pygame.image.load("B.png") 
ButtonC = pygame.image.load("C.png") 
a = screen.blit(ButtonA,(50,400)) 
b = screen.blit(ButtonB,(250,400)) 
c = screen.blit(ButtonC,(450,400)) 
pygame.display.flip() 

score = 0 
if __name__ == '__main__': 
    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      sys.exit() 
     if event.type == pygame.MOUSEBUTTONDOWN: 
      pos = pygame.mouse.get_pos() 
      if a.collidepoint(pos): 
       screen.fill(BLACK) 
       Correct = font.render("You are correct!", True, WHITE) 
       Correct_rect = Correct.get_rect() 
       Correct_x = screen.get_width()/2 - Correct_rect.width/2 
       Correct_y = 150 - Correct_rect.height/2 
       screen.blit(Correct, [Correct_x, Correct_y]) 
       pygame.display.flip() 
       score = score + 1 
       print score 
       time.sleep(2) 

的代碼,這裏就是它把對目前拋出了不過數0

證書價值的部分代碼
import pygame, sys, eztext 
from pygame.locals import * 
from eztext import Input 
#Importing the variable score 
from Question1Easy import score 
Name = self.value 
#Setting the variable score (an int) to a string 
Score = str(score) 

如何獲得第二個文件來獲取分數的更新值而不是靜態0?

+0

您粘貼了太多的代碼,您最好只提供足以描述您的問題的代碼片段,這將幫助您獲得幫助。 – WKPlus

+0

道歉,我明顯縮短了解釋我的問題 – user3415453

+0

請在提問之前進行搜索。既然你已經有了犯罪嫌疑人,你可以簡單地在問題中搜索「python if __main__ == __name__」,第一個結果將解決你的問題。 -1沒有研究工作。 – Bakuriu

回答

2

所以我認爲你應該做的是做一個班。一堂課可能聽起來像是一點工作,但絕對值得它習慣,並且以這種方式使用課程非常容易。

#players.py 
class Player(): 
    def __init__(self): 
     self.score = 0 

#games.py 
def checkers(player): 
    #blahblahblah dostuff 
    player.score += 1 
    print(player.score) #if everything goes right, this should print 1 

#main.py 
from players import player 
from games import checkers 
player = Player() 
checkers(player) 
player.score += 1 
print(player.score) #if everything goes right, this should print 2 

的缺點,使用這種方法,是你想去,我認爲你必須通過播放器,幾乎每一個功能的參數,它可以得到一個有點乏味每個功能。然而,玩家可以持有多個變量或其他你想追蹤的數據。你只需要一個玩家變量(現在是對象),只需要在初始化器中添加更多變量。

當我遇到類似的問題時,我發現這是最簡單的解決方案。

2

是的,它一定會給你0

當另一個文件中導入,if __name__ == '__main__'下的代碼不會被執行。

您可以將if __name__ == '__main__'下的邏輯放入第一個py文件的函數中,例如函數start_game。然後在第二個py文件中調用start_game函數讓遊戲運行。除此之外,你需要添加一個功能,在這樣的第一個文件返回分數:

第一個文件:

score = 0 
def start_game(): 
    global score 
    score += 1 

def get_score(): 
    return score 

第二個文件:

from firstfile import get_score, start_game 
print get_score() 
start_game() 
print get_score() 

當您運行第二個文件,您將獲得:

0 
1 

如果您想要獲得靜態值,請使用from firstfile import score動態值時,需要在上面的代碼中添加一個函數(get_score)。

+0

我不希望第二個文件導入其他任何東西,除了分數,這就是爲什麼我的代碼的其餘部分在底下,我怎麼去更新if __name__ =='__main__' – user3415453

+0

我認爲我知道解決您的問題,但是,我無法回覆,因爲有人將此標記爲重複。我的課程涉及上課(很簡單!)。我過去也有你的問題。 –

+0

@ user3415453更新我的答案 – WKPlus