示例#1
0
class GameFrame(QtGui.QFrame):

   def __init__(self, parent, width, height):
      super(GameFrame, self).__init__(parent)
      self.width = width
      self.height = height
      self.resize(self.width, self.height)

      #Chat
      self.chatMode = False
      self.chat = Chat(10,self.height - 210, 600, 200)

      #Entities
      self.entities = []
      #self.entities.append(Entity())

      #e = Entity()
      #e.setPos(200,200)
      #self.entities.append(e)
      
      self.character = Character()
      self.character.setPos(300,300)

      self.otherPlayers = []

      #Server connection
      self.offline = False
      self.sock = socket.socket()
      self.sock.connect(('127.0.0.1', 1338))
      self.updatesPerServerSync = 5
      self.serverSyncCounter = 0

   def closeEvent(self, event):
      print("closed window")
      
   def initFrame(self):
      self.isWaitingAfterLine = false

   def paintEvent(self, event):
      painter = QtGui.QPainter(self)
      color = QtGui.QColor(0x450045)
      
      for e in self.entities:
         e.draw(painter)

      for op in self.otherPlayers:
         op.draw(painter)
         
      self.character.draw(painter)
      self.chat.draw(painter)
      
   def draw(self):
      self.repaint()

   def update(self):
      self.character.update()
      self.serverSync()
      for e in self.entities:
         e.update()

      for op in self.otherPlayers:
         op.update()

      self.chat.update()

   def keyPressEvent(self, event):
      key = event.key()

      if self.chatMode and key == QtCore.Qt.Key_Return:
         self.character.newMessage(self.chat.getNewLine())
         self.chat.addNewMessage()
         self.chatMode = False
      
      if self.chatMode and key < 0x110000:
         self.chat.appendLetter(chr(key))
         return
      
      if key == QtCore.Qt.Key_W:
         self.character.moveUp()

      if key == QtCore.Qt.Key_S:
         self.character.moveDown()
         
      if key == QtCore.Qt.Key_A:
         self.character.moveLeft()
         
      if key == QtCore.Qt.Key_D:
         self.character.moveRight()

      if key == QtCore.Qt.Key_Y:
         self.chatMode = True


   def serverSync(self):
      if self.offline:
         return
      
      if self.serverSyncCounter != self.updatesPerServerSync:
         self.serverSyncCounter += 1
         return
      self.serverSyncCounter = 0
      
      #print("Send character")
      self.sock.send(b'\x00\x00\x00\x36')
      self.sock.send(b'\x00')
      byteChar = self.character.generateBytes()
      self.sock.send(len(byteChar).to_bytes(4, 'big'))
      self.sock.send(byteChar)

      #print("Get other characters")
      self.otherPlayers = []
      self.sock.send(b'\x00\x00\x00\x36')
      self.sock.send(b'\x01')
      while True:
         oneChar = self.readUndefinedLength()
         if oneChar == b'\x00':
            break
         newChar = Character()
         newChar.createFromBytes(oneChar)
         self.otherPlayers.append(newChar)
      #print('Got all chars')
      
   def readData(self, length):
      data = b""
      leftToRead = length
      while(leftToRead > 0):
         d = self.sock.recv(min(2048, leftToRead))
         leftToRead = leftToRead - len(d)
         data += d
      return data

   def readUndefinedLength(self):
      length = int.from_bytes(self.readData(4), 'big')
      return self.readData(length)
示例#2
0
class GameFrame(QtGui.QFrame):
    def __init__(self, parent, width, height):
        super(GameFrame, self).__init__(parent)
        self.width = width
        self.height = height
        self.resize(self.width, self.height)

        #Input
        self.keys = {}

        #Chat
        self.chatMode = False
        self.chat = Chat(10, self.height - 210, 600, 200)

        #World (holds map size, entities, characters/players)
        self.world = World()

        #Character
        character = Character()
        character.setName("Macke")
        character.setPos(300, 300)
        self.world.setCharacter(character)

        #Server connection
        self.threadHandler = ClientThread(self.world.getCharacter(),
                                          self.world.getOtherPlayers())
        self.threadHandler.start()

    def closeEvent(self, event):
        print("closed window")

    def initFrame(self):
        self.isWaitingAfterLine = false

    def paintEvent(self, event):
        painter = QtGui.QPainter(self)
        color = QtGui.QColor(0x450045)

        for e in self.world.getEntities():
            e.draw(painter)

        for op in self.world.getOtherPlayers():
            op.draw(painter)

        self.world.getCharacter().draw(painter)

        self.chat.draw(painter)

    def draw(self):
        self.repaint()

    def update(self):

        for k, v in self.keys.items():
            self.handleKeys(k, v)

        self.world.getCharacter().update()

        self.world.setOtherPlayers(self.threadHandler.getOtherPlayers())
        for e in self.world.getEntities():
            e.update()

        for op in self.world.getOtherPlayers():
            op.update()

        self.chat.update()

    def handleKeys(self, key, value):

        if key == QtCore.Qt.Key_W and not value:
            self.world.getCharacter().stopUp()

        if key == QtCore.Qt.Key_S and not value:
            self.world.getCharacter().stopDown()

        if key == QtCore.Qt.Key_A and not value:
            self.world.getCharacter().stopLeft()

        if key == QtCore.Qt.Key_D and not value:
            self.world.getCharacter().stopRight()

        if key == QtCore.Qt.Key_W and value:
            self.world.getCharacter().moveUp()

        if key == QtCore.Qt.Key_S and value:
            self.world.getCharacter().moveDown()

        if key == QtCore.Qt.Key_A and value:
            self.world.getCharacter().moveLeft()

        if key == QtCore.Qt.Key_D and value:
            self.world.getCharacter().moveRight()

    def keyReleaseEvent(self, event):
        key = event.key()
        self.keys[key] = False
        event.accept()

    def keyPressEvent(self, event):
        key = event.key()
        self.keys[key] = True
        event.accept()

        if self.chatMode and key == QtCore.Qt.Key_Return:
            m = Message(self.chat.getNewLine(),
                        self.world.getCharacter().getName())
            self.world.getCharacter().newMessage(m)
            self.chat.addMessage(m)
            self.chatMode = False
            self.chat.clearNewLine()

        if self.chatMode and key < 0x110000:
            self.chat.appendLetter(chr(key))
            return

        if key == QtCore.Qt.Key_Y:
            self.chatMode = True