2014-12-18 2 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

Я предполагаю, что вы хотите, чтобы клиент и сервер обменивались данными по сети. В этом случае вы не можете просто вызвать функцию от одного на другом, вам нужно будет использовать какой-то сетевой протокол для связи от одного к другому. –

+0

Я думаю, что все в порядке с сервером/клиентом, это связь/разделение фактических классов игр и клиентов, это проблема (я думаю). –

ответ

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() 

Вида как контекст для клиента или обратный вызов, если вы прошли в функции.

Смежные вопросы