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)

      #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)
Exemple #2
0
class Game:
    BG = (255, 255, 255)
    COLORS = {
        (255, 255, 255): 0,
        (0, 0, 0): 1,
        (255, 0, 0): 2,
        (0, 255, 0): 3,
        (0, 0, 255): 4,
        (255, 255, 0): 5,
        (255, 140, 0): 6,
        (165, 42, 42): 7,
        (128, 0, 128): 8
    }

    def __init__(self, win, connection=None):
        pygame.font.init()
        self.connection = connection
        self.win = win
        self.leaderboard = Leaderboard(50, 125)
        self.board = Board(305, 125)
        self.top_bar = TopBar(10, 10, 1280, 100)
        self.top_bar.change_round(1)
        self.players = []
        self.skip_button = TextButton(85, 830, 125, 60, (255, 255, 0), "Skip")
        self.bottom_bar = BottomBar(305, 880, self)
        self.chat = Chat(1050, 125)
        self.draw_color = (0, 0, 0)
        self.drawing = False

    def add_player(self, player):
        self.players.append(player)
        self.leaderboard.add_player(player)

    def draw(self):
        self.win.fill(self.BG)
        self.leaderboard.draw(self.win)
        self.top_bar.draw(self.win)
        self.board.draw(self.win)
        self.skip_button.draw(self.win)
        if self.drawing:
            self.bottom_bar.draw(self.win)
        self.chat.draw(self.win)
        pygame.display.update()

    def check_clicks(self):
        """
        handles clicks on buttons and screen
        :return: None
        """
        mouse = pygame.mouse.get_pos()

        # Check click on skip button
        if self.skip_button.click(*mouse) and not self.drawing:
            skips = self.connection.send({1: []})

        clicked_board = self.board.click(*mouse)

        if clicked_board:
            self.board.update(*clicked_board, self.draw_color)
            self.connection.send(
                {8: [*clicked_board, self.COLORS[tuple(self.draw_color)]]})

    def run(self):
        run = True
        clock = pygame.time.Clock()
        while run:
            clock.tick(60)

            try:
                # get board
                response = self.connection.send({3: []})
                if response:
                    self.board.compressed_board = response
                    self.board.translate_board()

                # get time
                response = self.connection.send({9: []})
                self.top_bar.time = response

                # get chat
                response = self.connection.send({2: []})
                self.chat.update_chat(response)

                # get round info
                self.top_bar.word = self.connection.send({6: []})
                self.top_bar.round = self.connection.send({5: []})
                self.drawing = self.connection.send({11: []})
                self.top_bar.drawing = self.drawing
                self.top_bar.max_round = len(self.players)

                # get player updates
                '''response = self.connection.send({0:[]})
                self.players = []
                for player in response:
                    p = Player(player)
                    self.add_player(p)'''
            except:
                run = False
                break

            self.draw()
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    run = False
                    break

                if pygame.mouse.get_pressed()[0]:
                    self.check_clicks()
                    self.bottom_bar.button_events()

                if event.type == pygame.KEYDOWN:
                    if not self.drawing:
                        if event.key == pygame.K_RETURN:
                            self.connection.send({0: [self.chat.typing]})
                            self.chat.typing = ""
                        else:
                            # gets the key name
                            key_name = pygame.key.name(event.key)

                            # converts to uppercase the key name
                            key_name = key_name.lower()
                            self.chat.type(key_name)

        pygame.quit()
Exemple #3
0
class Game:
    BG = (255, 255, 255)

    def __init__(self):
        self.WIDTH = 1300
        self.HEIGHT = 1000
        self.win = pygame.display.set_mode((self.WIDTH, self.HEIGHT))
        self.leaderboard = Leaderboard(50, 125)
        self.board = Board(305, 125)
        self.top_bar = TopBar(10, 10, 1280, 100)
        self.top_bar.change_round(1)
        self.players = [
            Player("Tim"),
            Player("Joe"),
            Player("Bill"),
            Player("Jeff"),
            Player("TBob")
        ]
        self.skip_button = TextButton(85, 830, 125, 60, (255, 255, 0), "Skip")
        self.bottom_bar = BottomBar(305, 880, self)
        self.chat = Chat(1050, 125)
        self.draw_color = (0, 0, 0)
        for player in self.players:
            self.leaderboard.add_player(player)

    def draw(self):
        self.win.fill(self.BG)
        self.leaderboard.draw(self.win)
        self.top_bar.draw(self.win)
        self.board.draw(self.win)
        self.skip_button.draw(self.win)
        self.bottom_bar.draw(self.win)
        self.chat.draw(self.win)
        pygame.display.update()

    def check_clicks(self):
        """
        handles clicks on buttons and screen
        :return: None
        """
        mouse = pygame.mouse.get_pos()

        # Check click on skip button
        if self.skip_button.click(*mouse):
            print("Clicked skip button")

        clicked_board = self.board.click(*mouse)

        if clicked_board:
            self.board.update(*clicked_board, self.draw_color)

    def run(self):
        run = True
        clock = pygame.time.Clock()
        while run:
            clock.tick(60)
            self.draw()
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    run = False
                    break

                if pygame.mouse.get_pressed()[0]:
                    self.check_clicks()
                    self.bottom_bar.button_events()

                if event.type == pygame.KEYDOWN:
                    # gets the key name
                    key_name = pygame.key.name(event.key)

                    # converts to uppercase the key name
                    key_name = key_name.lower()
                    self.chat.type(key_name)

        pygame.quit()
class Game:
    def __init__(self, win, connection):
        """
        :param win: Window
        :param connection: Connection object
        """
        self.win = win
        self.connection = connection

        self.is_drawing = False
        self.players = []
        self.draw_color = COLORS[1]
        self.game_ended = False
        self.drawer = "No one"

        self.top_bar = TopBar(20, 20, 1040, 80, self)
        self.leaderboard = Leaderboard(20, 120, 270, 60)
        self.board = Board(310, 120, 6)
        self.chat = Chat(810, 120, 250, 580, 30)
        self.bottom_bar = BottomBar(20, 620, 770, 80, self)
        self.person_is_drawing = PersonIsDrawing(310, 620, 480, 80)

    def draw(self):
        """
        Draws Game on window
        :return: None
        """
        self.win.fill(COLORS[0])

        self.top_bar.draw(self.win)
        self.leaderboard.draw(self.win)
        self.board.draw(self.win)
        self.chat.draw(self.win)
        if self.is_drawing:
            self.bottom_bar.draw(self.win)
        else:
            self.person_is_drawing.draw(self.win, self.drawer)

        pygame.display.update()

    def handle_click(self):
        """
        Handles clicks on buttons on screen
        :return: None
        """
        mouse = pygame.mouse.get_pos()

        clicked_board = self.board.click(*mouse)
        if clicked_board and self.is_drawing:
            self.connection.send({8: [*clicked_board, COLORS.index(self.draw_color)]})

        if self.is_drawing:
            self.bottom_bar.handle_click(mouse)

    def get_data(self):
        """
        Gets and sets data from server
        :return: None
        """
        self.leaderboard.players = self.connection.send({-1: []})
        self.chat.content = self.connection.send({2: []})
        self.board.compressed_board = self.connection.send({3: []})
        self.top_bar.change_round(self.connection.send({5: []}))
        self.top_bar.word = self.connection.send({6: []})
        self.top_bar.time = self.connection.send({9: []})
        self.is_drawing = self.connection.send({10: []})
        self.drawer = self.connection.send({13: []})

    def run(self):
        """
        Runs the game by getting data from the server
        :return: None
        """
        run = True
        clock = pygame.time.Clock()
        while True:
            try:
                clock.tick(120)
                self.get_data()
                self.board.translate_board()
                self.draw()

                for event in pygame.event.get():
                    if event.type == pygame.QUIT:
                        raise Exception("Player Quit")
                    if pygame.mouse.get_pressed()[0]:
                        self.handle_click()
                    if event.type == pygame.KEYDOWN:
                        if event.key == pygame.K_RETURN and len(self.chat.typing):
                            self.connection.send({0: [self.chat.typing]})
                            self.chat.update_chat()
                        else:
                            key_name = pygame.key.name(event.key).upper()
                            self.chat.type(key_name, self.is_drawing)
            except Exception as e:
                print(f"Closed because {e}")
                break
        pygame.quit()
Exemple #5
0
class Game(object):
    BG = (255, 255, 255)
    COLORS = {
        (255,255,255): 0,
        (0,0,0): 1,
        (255,0,0): 2,
        (0,255,0): 3,
        (0,0,255): 4,
        (255,255,0): 5,
        (255,140,0): 6,
        (165,42,42): 7,
        (128,0,128): 8
    }


    def __init__(self, win, conn: Network=None):
        pygame.font.init()
        self.win = win
        self.conn = conn
        self.leader_board = LeaderBoard(50, 125)
        self.board = Board(310, 125)
        self.top_bar = TopBar(10, 10, 1280, 100)
        self.top_bar.change_round(1)
        self.players = []
        self.skip_button = TextButton(90, 800, 125, 50, (255, 255, 0), "Skip")
        self.bottom_bar = BottomBar(310, 880, self)
        self.chat = Chat(1050, 120)
        self.draw_color = (0, 0, 0)

    def add_player(self, player):
        self.players.append(player)
        self.leader_board.add_player(player)

    def draw(self):
        self.win.fill(self.BG)
        self.leader_board.draw(self.win)
        self.board.draw(self.win)
        self.top_bar.draw(self.win)
        self.bottom_bar.draw(self.win)
        self.skip_button.draw(self.win)
        self.chat.draw(self.win)
        pygame.display.update()

    def check_clicks(self):
        """handles clicks on buttons and screen"""
        mouse = pygame.mouse.get_pos()

        if self.skip_button.click(*mouse):
            print("Skip button clicked")
            skips = self.conn.send({1: []})
            print(skips)

        clicked_board = self.board.click(*mouse)
        if clicked_board:
            row, col = clicked_board
            self.conn.send({8: [row, col, self.COLORS[self.draw_color]]})
            self.board.update(row, col, self.draw_color)

        self.bottom_bar.button_events(*mouse)

    def run(self):
        run = True
        clock = pygame.time.Clock()
        while run:
            clock.tick(60)
            self.draw()

            try:
                # get board
                response = self.conn.send({3: []})
                if response:
                    self.board.compressed_board = response
                    self.board.translate_board()

                # get time
                response = self.conn.send({9: []})
                self.top_bar.time = response

                # get chat
                response = self.conn.send({2: []})
                self.chat.update_chat(response)

                # get round info
                self.top_bar.word = self.conn.send({6: []})
                self.top_bar.round = self.conn.send({5: []})
                self.drawing = self.conn.send({11: []})
                self.top_bar.drawing = self.drawing
                self.top_bar.max_round = len(self.players)

                # get player updates
                """response = self.conn.send({0: []})
                self.players = []
                for player in response:
                    p = Player(player)
                    self.add_player(p)"""

            except Exception:
                run = False

            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    run = False
                    break
                    
                if pygame.mouse.get_pressed()[0]:
                    self.check_clicks()

                if event.type == pygame.KEYDOWN:
                    if not self.drawing:
                        if event.key == pygame.K_RETURN:
                            self.conn.send({0: [self.chat.typing]})
                            self.chat.typing = ""
                        else:
                        key_name = pygame.key.name(event.key)

                        key_name = key_name.lower()
                        self.chat.type(key_name)

    pygame.quit()


if __name__ == "__main__":
    g = Game()
    g.run()
Exemple #6
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