2014-12-18 181 views
-1

我有一個小遊戲,有一個小客戶端,遊戲接收來自服務器的數據。客戶端在一個模塊中,遊戲在另一個模塊中。問題在於客戶端從服務器接收數據,但要執行遊戲中的操作,客戶端需要訪問遊戲方法(類MyGame),並使用這樣的代碼,我得到一個錯誤:遊戲客戶端交互

模塊客戶端:

class MyClient: 
    #receives data from the server 
    #It is a task, always listening 
    def readerConnection: 
     #if a data arrives from the server... 
     if newData: 
      #call dataOnScreen of class MyGame 
      ...dataOnScreen() 

模塊遊戲:

from client import MyClient 

class MyGame: 
    def _init_(self, client): 
     #begin to receive data from the server 
     self.c = client 

    #print data received from the server on screen 
    def dataOnScreen(self): 
     ............ 
#the game begins   
MyGame(MyClient()) 
當然

,因爲該方法dataOnScreen未在類定義MyClient發生錯誤。 如果我這樣做,一切工作正常(寫客戶端進入遊戲):

class MyGame: 
    def _init_(self): 
     ......... 
    #receives data from the server 
    #It is a task, always listening 
    def readerConnection: 
     #if a data arrives from the server... 
     if newData: 
      #call dataOnScreen 
      self.dataOnScreen() 

    #print data received from the server on screen 
    def dataOnScreen(self): 
     ............ 
#the game begins   
MyGame() 

但這不是我想要的。我想要的是讓遊戲和客戶處於不同的階級。

感謝您的幫助。

+0

我假設您希望客戶端和服務器通過網絡進行通信。在這種情況下,你不能簡單地從一個方向調用一個函數,你需要使用某種網絡協議從一個到另一個進行通信。 – 2014-12-18 22:43:23

+0

我認爲他們可以用服務器/客戶端通信,這是實際遊戲和客戶端類的聯繫/分離,這是問題(我認爲)。 – 2014-12-18 22:46:42

回答

0

也許你可以做一些事情,比如將函數或MyGame對象傳遞給客戶端,這樣它就知道在接收數據時該怎麼做。

喜歡的東西

class MyGame: 
    def _init_(self, client): 
     #begin to receive data from the server 
     self.c = client 
     client.game = self 


class MyClient: 
    #receives data from the server 
    #It is a task, always listening 
    def readerConnection: 
     #if a data arrives from the server... 
     if newData: 
      #call dataOnScreen of class MyGame 
      self.game.dataOnScreen() 

有點像客戶端環境或回調,如果你在一個函數中傳遞。