Sto provando a dare una struttura sonora a un'applicazione PyQt che implementa un gioco di carte. Finora ho le seguenti classi:
-
Ui_Game: questo descrive l'interfaccia utente ed è responsabile di reagendo agli eventi emessi dalle istanze di CardWidget
-
MainController: questo è responsabile della gestione del tutto applicazione: configurazione e tutti gli stati successivi dell'applicazione (come iniziare una nuova mano, visualizzare la notifica di stato cambia sull'interfaccia utente o termina il gioco)
-
GameEngine: questo è un insieme di classi che implementano l'intero gioco logica
Ora, il modo in cui l'ho codificato concretamente in Python è il seguente:
class CardWidget(QtGui.QLabel):
def __init__(self, filename, *args, **kwargs):
QtGui.QLabel.__init__(self, *args, **kwargs)
self.setPixmap(QtGui.QPixmap(':/res/res/' + filename))
def mouseReleaseEvent(self, ev):
self.emit(QtCore.SIGNAL('card_clicked'), self)
class Ui_Game(QtGui.QWidget):
def __init__(self, window, *args, **kwargs):
QtGui.QWidget.__init__(self, *args, **kwargs)
self.setupUi(window)
self.controller = None
def place_card(self, card):
cards_on_table = self.played_cards.count() + 1
print cards_on_table
if cards_on_table <= 2:
self.played_cards.addWidget(card)
if cards_on_table == 2:
self.controller.play_hand()
class MainController(object):
def __init__(self):
self.app = QtGui.QApplication(sys.argv)
self.window = QtGui.QMainWindow()
self.ui = Ui_Game(self.window)
self.ui.controller = self
self.game_setup()
C'è un modo migliore oltre a iniettare il controller nella classe Ui_Game in Ui_Game.controller? O sono totalmente fuori strada?