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

        #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