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