Beispiel #1
0
    def decisioneFantino(self, c, f):
        self.sockets[c].stato = "Ready"
        if (f != -1):
            #print self.fase.chi_corre()
            for i in self.fantini:
                to_remove = []
                if (i.indice == f):
                    for j, k in enumerate(i.offerte):
                        if (self.barberi[k.chi].contrada != c):
                            to_remove.append(j)
                else:
                    for j, k in enumerate(i.offerte):
                        if (self.barberi[k.chi].contrada == c):
                            to_remove.append(j)
        
            if (len(to_remove) != 0):
                to_remove.sort(reverse=True)
                for j in to_remove:
                    i.offerte.pop(j)

            for b in self.barberi:
                if (b.contrada == c):
                    self.fantini[f].contrada = c
                    b.fantino = f
                    self.contrade[c].status[2] -= self.fantini[f].prezzo()
                    self.sendMessage(c, ["AggiornaBarbero", b.indice])
                    self.sendMessage(c, ["AggiornaContrada", c])
                    self.sendMessage(c, ["AggiornaFantino", f])
                    break

        if (self.controllaNSocketsPerStato(10, "Ready")):
            for b in self.barberi:
	        #print i.fantino, i.indice
                if (b.fantino == -1):
                    f = fantino.Fantino()
                    self.fantini.append(f)
                    self.sendMessage(b.contrada, ["Message Box", "Per il momento hai coraggiosamente deciso di affidarti al giovane " + f.nomeVero + "."])
                    b.fantino = len(self.fantini) - 1
                    self.fantini[f].contrada = b.contrada
                    self.contrade[c].status[2] -= 10
                    self.sendMessage(b.contrada, ["AggiornaBarbero", b.indice])
                    self.sendMessage(b.contrada, ["AggiornaContrada", c])
                    self.sendMessage(b.contrada, ["AggiornaFantino", f])

            for s in self.sockets:
                if (s.userName != "AI"):
                    t0 = [self.contrade[i].nome for i in b.contrada]
                    t1 = [self.cavalli[i].nome for i in b.cavallo]
                    t2 = []
                    for i in b.fantini:
                        if (self.fantini[i].nome != "-") :
                            t2.append(self.fantini[i].nome)
                        else:
                            t2.append(self.fantini[i].nomeVero)
                    self.sendMessage(s, ["AggiornaTutto", t0, t1, t2])
            #self.saveFile()
            self.fase.nuovaFase()
Beispiel #2
0
 def __init__(self, parent=None):
   super(TDPalioAiClient, self).__init__(parent)
   self.socket = QTcpSocket()
   self.socket.connectToHost("localhost", 1974)
   self.barbero = barbero.Barbero()
   self.contrada = contrada.Contrada()
   self.fantino = fantino.Fantino()
   self.cavallo = cavallo.Cavallo()
   
   self.connect(self.socket, SIGNAL("connected()"), self.ready)
   self.connect(self.socket, SIGNAL("readyRead()"), self.readMessage)
   self.connect(self.socket, SIGNAL("disconnected()"), self.serverHasStopped)
   self.connect(self.socket, SIGNAL("error(QAbstractSocket::SocketError)"), self.serverHasError)
   self.connect(self.socket, SIGNAL("stateChanged (QAbstractSocket::SocketState)"), self.statoSocket)
Beispiel #3
0
    def inizializza(self):  
        # FIXME condizioni iniziali casuali ????
        file = open("data/setup.dat", "r")
        for i in xrange(17):
            c = contrada.Contrada()
            c.caricaDati(file)
            self.contrade.append(c)
      
        for i in xrange(16):
            f = fantino.Fantino()
            f.caricaDati(file)
            self.fantini.append(f)

        for i in xrange(21):
            c = cavallo.Cavallo()
            c.caricaDati(file)
            self.cavalli.append(c)
    
        self.fase.estrazione(-1)
Beispiel #4
0
  def readMessage(self):
    while (self.socket.bytesAvailable() > 0):
      stream = QDataStream(self.socket)
      stream.setVersion(QDataStream.Qt_4_2)
      codice = QString()
      stream >> codice

      if (codice == "SceltaCavalli"):
          cavalli = list()
          for i in xrange(20):
              c = cavallo.Cavallo()
              c.inStreamer(stream)
              cavalli.append(c)
          self.sceltaCavalli(cavalli)
      
      elif (codice == "SceltaFantino"):
          nFantini = stream.readInt16()
          fantini = list()
          for i in xrange(nFantini):
              f = fantino.Fantino()
              f.inStreamer(stream)
              fantini.append(f)
          self.sceltaFantino(fantini)

      elif (codice == "AggiornaBarbero"):
          b = barbero.Barbero()
          b.inStreamer(stream)
          self.barbero = b

      elif (codice == "AggiornaContrada"):
          c = contrada.Contrada()
          c.inStreamer(stream)
          self.contrada = c

      elif (codice == "AggiornaFantino"):
          f = fantino.Fantino()
          f.inStreamer(stream)
          self.fantino = f

      elif (codice == "AggiornaCavallo"):
          c = cavallo.Cavallo()
          c.inStreamer(stream)
          self.cavallo = c
	
      elif (codice == "RispostaFantinoSi"):
          offerte = stream.readInt16()
          off = []
          if (offerte == 0):
              pass
          else:
              for i in xrange(limite):
                  o = fantino.offerta()
                  o.inStream(stream)
                  off.append(o)
          self.decidiFantino(off)

      elif (codice == "Partiti"):
          barberi = []
          for i in xrange(10):
              b = barbero.Barbero().inStream(stream)
              barberi.append(b)
          self.partiti(barberi)

      elif (codice == "RispostePartiti"):
	self.barbero.inStream(stream)
	self.decidiPartito()

      elif (codice == "StrategiaProva"):
	nProva = stream.readInt16()
	self.strategiaProva(nProva)
Beispiel #5
0
                selezioni += 1
                strategia = 3
                if (corsa == "A Vincere"):
                    strategia = 0
                if (corsa == "A Correre"):
                    strategia = 1
                if (corsa == "A Vendere"):
                    strategia = 2

                index = self.model.index(row, 5)
                prezzo = index.data(QtCore.Qt.DisplayRole).toInt()[0]
                o = fantino.Offerta(self.indice, strategia,
                                    self.fantini[row].indice, prezzo)
                self.offerte.append(o)

        if (selezioni <= 3):
            self.done(Qt.QDialog.Accepted)
        else:
            self.offerte = []


if __name__ == '__main__':
    app = QtGui.QApplication(sys.argv)
    fantini = []
    for i in xrange(16):
        f = fantino.Fantino()
        fantini.append(f)
    client = sceltafantino(fantini)
    client.show()
    sys.exit(app.exec_())
Beispiel #6
0
    def readMessage(self):
        while (self.tcpSocket.bytesAvailable() > 0):
            stream = Qt.QDataStream(self.tcpSocket)
            stream.setVersion(Qt.QDataStream.Qt_4_2)
            codice = Qt.QString()
            stream >> codice
            print codice

            if (codice == "SceltaCavalli"):
                cavalli = list()
                for i in xrange(21):
                    c = cavallo.Cavallo()
                    c.inStreamer(stream)
                    cavalli.append(c)
                self.sceltaCavalli(cavalli)
            
            elif (codice == "AggiornaTutto"):
                temp = []
                s = Qt.QString()
                for i in xrange(10):
                    stream >> s
                    temp.append(s)
                self.aggiornaContradeTable(1, temp)
                temp = []
                for i in xrange(10):
                    stream >> s
                    temp.append(s)
                self.aggiornaContradeTable(1, temp)
                temp = []
                for i in xrange(10):
                    stream >> s
                    temp.append(s)
                self.aggiornaContradeTable(1, temp)

            elif (codice == "Assegnazione"):
                ass = []
                barberi = []
                cav = []
                for i in xrange(10):
                    ass.append([stream.readInt16(),stream.readInt16(),stream.readInt16(),stream.readInt16()])
                for i in xrange(10):
                    nome = Qt.QString()
                    stream >> nome
                    barberi.append(nome)
                for i in xrange(10):
                    nome = Qt.QString()
                    stream >> nome
                    cav.append(nome)
                self.assegnazione(ass, barberi, cav)

            elif (codice == "Conferma Contrada"):
                c = contrada.Contrada()
                c.inStreamer(stream)
                g = giocatore.Giocatore()
                g.inStreamer(stream)
                self.aggiornaContradaPanel(c, g)
            
            elif (codice == "Message Box"):
                message = Qt.QString()
                print message
                stream >> message
                Qt.QMessageBox.information (self, "TdPalio II", message)
                
            elif (codice == "Message Chat"):
                message = Qt.QString()
                stream >> message
                self.leggiChat(["Server:",  message])
            
            elif (codice == "Gioco Attivo"):
                stato = stream.readInt16()
                #print "Il server e` nel seguente stato: ", stato
                if (stato == 0): # NESSUN GIOCO ATTIVO
                    self.ui.actionNew.setEnabled(True)    
                    giochi = stream.readInt16()
                    for i in xrange(giochi):
                        nome = Qt.QString()
                        data = Qt.QString()
                        stream >> nome 
                        self.nome_giochi.append(str(nome))
                        stream >> data
                        self.data_giochi.append(str(data))
                elif (stato == 2):
                    stream >> nome
                    self.ui.actionOpen.setEnabled(True)    
                    Qt.QMessageBox.information (self, "TdPalio II", "Il gioco " + nome + " e` attivo")
                elif (stato == 1):
                    Qt.QMessageBox.information (self, "TdPalio II", "Un altro giocatore sta scegliendo il gioco")
                    
            elif (codice == "UserName"):
                self.sendMessage(["UserName",])
            
            elif (codice == "Lista Contrade"):
                nLista = stream.readInt16()
                lista = []
                for i in xrange(nLista):
                    l = Qt.QString()
                    stream >> l
                    lista.append(l)
                # FIXME SCELTA CASUALE DELLA CONTRADA
                item = Qt.QInputDialog.getItem(self, "Lista Contrade", "Contrada",  lista, 0, False)
                if (item[1] and not item[0].isEmpty()):
                    self.sendMessage(["Contrada Scelta",  item[0]])
                
            elif (codice == "Join Gioco"):
                nome = Qt.QString()
                stream >> nome
                accept = Qt.QMessageBox.question(self, "TdPalio II", "Il gioco " + nome + " e` attivo. Vuoi partecipare ?", Qt.QMessageBox.Yes|Qt.QMessageBox.No)
                if (accept == Qt.QMessageBox.Yes):
                    self.sendMessage(["Join Gioco Corrente",])
                else:
                    self.sendMessage(["Not Join Gioco Corrente",])

            elif (codice == "Estrazione"):
                lista = []
                for i in xrange(17):
                    s = Qt.QString()
                    stream >> s
                    lista.append(s)
                self.estrazione(lista)

            elif (codice == "SceltaFantino"):
                nFantini = stream.readInt16()
                fantini = list()
                for i in xrange(nFantini):
                    f = fantino.Fantino()
                    f.inStreamer(stream)
                    fantini.append(f)
                self.sceltaFantino(fantini)
            
            elif (codice == "RispostaFantinoSi"):
                offerte = stream.readInt16()
                off = []
                for i in xrange(offerte):
                    o = fantino.offerta()
                    o.inStream(stream)
                    off.append(o)
                self.decidiFantino(off)

            elif (codice == "AggiornaBarbero"):
                b = barbero.Barbero()
                b.inStreamer(stream)
                self.barbero = b

            elif (codice == "AggiornaContrada"):
                c = contrada.Contrada()
                c.inStreamer(stream)
                self.contrada = c

            elif (codice == "AggiornaFantino"):
                f = fantino.Fantino()
                f.inStreamer(stream)
                self.fantino = f

            elif (codice == "AggiornaCavallo"):
                c = cavallo.Cavallo()
                c.inStreamer(stream)
                self.cavallo = c
                self.aggiornaCavalloPanel()
	
            elif (codice == "StrategiaProva"):
                nProva = stream.readInt16()
                self.strategiaProva(nProva)

            elif (codice == "Partiti"):
                self.partiti()
      
            elif (codice == "RispostePartiti"):
                self.barbero.inStream(stream)
                self.decidiPartito()
      
            elif (codice == "NotificaPartiti"):
                # FIXME leggi partito e spurga la lista dei partiti richiesti
                self.notificaPartiti()
Beispiel #7
0
    def processMessage(self, number, stream):
        codice = QString()
        stream >> codice
        print "SERVER: ", codice, number
        if (codice == "Ready"):
            self.sockets[number].stato = "Ready"
            if (self.controllaNSocketsUmani(1) and self.controllaNSocketsUmaniPerStato(0, "Not Ready")):
                self.fase.nuovaFase()
            if (self.controllaNSocketsPerStato(17, "Ready") and self.controllaNSocketsUmani(1)):
                self.fase.nuovaFase()
            #if (self.controllaNSocketsPerStato(10, "Ready") and self.controllaNSocketsPerStato(7, "Spectator")):
            #    self.fase.nuovaFase()
    
        elif (codice == "UserName"):
            nome = QString()
            stream >> nome
            print "Si e` registrato il giocatore: ", nome
            self.sockets[number].userName = str(nome)
            self.sendMessage(number, ["Gioco Attivo", self.giocoAttivo])

        #elif (codice == "Nuovo Gioco"):
         #   n_parametri = stream.readInt16()
         #   parametri = []
         #   for i in xrange(n_parametri):
         #       stream >> p
          #      parametri.append(p)      
          #  if (self.avviamentoGioco):
          #      self.sendMessage(number, ["Messaggio", "Un gioco e` gia` stato scelto"])
          #  else:
          #      self.avviamentoGioco = True
          #      self.giocoAttivo = True
          #      self.nomeFile = parametri[1]
           #     self.fase.anno = parametri[2]
          #  for i in xrange(17, len(self.sockets)):
          #      self.contradeDisponibili(i)
      
    #elif (codice == "Vecchio Gioco"):
     # if (self.avviamentoGioco):
      #  self.sendMessage(number, ["Messaggio", "Un gioco e` gia` stato scelto"])
     # else:
     #   self.avviamentoGioco = True
      #  self.sendMessage(number, ["Avvia Gioco",])
    
        elif (codice == "Gioco Scelto"):
            if (self.avviamentoGioco != -1 and self.avviamentoGioco != number):
                return
            self.avviamentoGioco = number
            self.giocoAttivo = True
            stream >> self.fileName 
            if (self.fileName == "----"):
                self.giocoAttivo = False
                self.avviamentoGioco = -1
                print "Nessun gioco scelto"
                return
            if (os.path.isfile("giochi/"+ self.fileName+".tdp")):
                result = self.caricaFile()
                if (not result):
                    for k,i in enumerate(self.sockets):
                        if (i.userName != "AI"):
                            self.sendMessage(k, ["Message Box", "Problema irreversibile: non posso caricare il gioco."])
                            sys.exit(1002)
                for i in xrange(len(self.sockets)):
                    if (i == self.avviamentoGioco):
                       self.sockets[number].stato = "Ready"
                       self.contradeDisponibili(number)
                    else:
                        self.sendMessage(i, ["Join Gioco",])
            else:
                self.salvaFile() 
                for i in xrange(len(self.sockets)):
                    if (i == self.avviamentoGioco):
                        self.sockets[number].stato = "Ready"
                        self.contradeDisponibili(number)
                    else:
                        self.sendMessage(i, ["Join Gioco",])
    
        elif (codice == "Join Gioco Corrente"):
            self.sockets[number].stato = "Ready"
            self.contradeDisponibili(number)
    
        elif (codice == "Not Join Gioco Corrente"):
            self.sockets[number].stato = "Spectator"

        elif (codice == "Contrada Scelta"):
            c = QString()
            stream >> c
            lista = [i.nomeCompleto for i in self.contrade]
            index = lista.index(c)
            self.sceltaContrada(number, index, 1)
    
        elif (codice == "SceltaCavalli"):
            self.sockets[number].stato = "Ready"
            nScelti =  stream.readInt16()
            scelta = []
            for i in xrange(nScelti):
                scelta.append(stream.readInt16())
            self.sceltaCavalliRead(scelta)
        
        elif (codice == "SceltaFantino"):
            offerte = []
            nOfferte = stream.readInt16()
            for i in xrange(nOfferte):
                o = fantino.Offerta()
                o.inStreamer(stream)
                offerte.append(o)
            self.sceltaFantinoRead(number, offerte)

        elif (codice == "RispostaFantinoSi"):
            offerte = []
                
        elif (codice == "FantinoDeciso"):
            f = stream.readInt16()
            self.decisioneFantino(number, f)

        elif (codice == "Partiti"):
            nPartiti = stream.readInt16()
            listaPartiti = []
            for i in xrange(nPartiti):
                p = barbero.Partito()
                p.inStreamer(stream)
                listaPartiti.append(p)
            self.sockets[number].stato = "Ready"
            self.raccogliPartiti(listaPartiti)
  
        elif (codice == "DecisionePartiti"):
            self.sockets[number].stato = "Ready"
            b = barbero.Barbero()
            b.inStreamer(stream)
            self.barberi[b.indice] = b
            if (self.controllaSockets(10, "Ready")):
                self.notificaPartiti()

        elif (codice == "StrategiaProva"):
            b = barbero.Barbero()
            b.inStreamer(stream)
            self.barberi[b.indice] = b
            self.sockets[number].stato = "Ready"
            if (self.controllaSockets(10, "Ready")):
                self.fase.nuovaFase()
      
        elif (codice == "RispostaSegnatura"):
            self.sockets[number].stato = "Ready"
            f = fantino.Fantino()
            f.inStreamer(stream)
            self.fantini[f.indice] = f
            # FIXME comunica a tutti il nuovo nome...
            if (self.controllaSockets(10, "Ready")):
                self.fase.nuovaFase()
Beispiel #8
0
    def caricaFile(self):
        self.cavalli = []
        self.fantini = []
        path = "giochi/" + self.fileName + ".tdp"
        file = QFile(path)
        if (not file.open(QIODevice.ReadOnly)):
            print "NON POSSO CARICARE QUESTO GIOCO (Error Code " + file.error()+")"
            # FIXME manda un popup a chi ha cercato di caricare il gioco
            # QString mex("NON POSSO CARICARE QUESTO GIOCO...");
            #      myStreamerOut->stringStream[0] = mex;
            #      for(int i=0; i<sockets.size(); ++i) {
            #        sendMessage(PopupMessage, sockets[i]);
            #        return false;
            sys.exit(8003)
        inf = QTextStream(file)
        t = QString()
        inf >> t
        self.fase.anno = int(t)
        inf >> t
        self.fase.mese = int(t)
        inf >> t
        self.fase.fase = int(t)
        inf >> t
        self.fase.nprova  = int(t)

        #for i in xrange(17):
        #    inf >> self.corrono[i] # ???????

        for  i in xrange(17):
            inf >> t
            self.fase.luglio[i] = int(t)
    
        for  i in xrange(17):
            inf >> t
            self.fase.agosto[i] = int(t)
  
        for  i in xrange(17):
            inf >> t
            self.fase.straordinario[i] = int(t)
        
        inf >> t
        nGiocatori = int(t)
        for i in xrange(nGiocatori):
            g = giocatore.Giocatore()
            g.inTextStreamer(inf)
            self.giocatori.append(g)
  
        for i in xrange(17):
            c = contrada.Contrada()
            c.inTextStreamer(inf)
            self.contrade[i] = c
            
        for i in xrange(21):
            c = cavallo.Cavallo()
            c.inTextStreamer(inf)
            self.cavalli.append(c)

        inf >> t
        nFantini = int(t)   
        for i in xrange(nFantini):
            f = fantino.Fantino()
            f.inTextStreamer(inf)
            self.fantini.append(f)
 
        inf >> t
        nBarberi = int(t)        
        for  i in xrange(nBarberi):
            b = barbero.Barbero()
            b.inTextStreamer(inf)
            self.barberi.append(b)

        file.close()
        return 1