Example #1
0
class Game:
    def __init__(self, w, h):
        self.net = Red()
        self.width = w
        self.height = h
        self.player = Player(50, 50)
        self.player2 = Player(100, 100)
        self.canvas = Canvas(self.width, self.height, "Testing...")

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

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

                if event.type == pygame.K_ESCAPE:
                    run = False

            keys = pygame.key.get_pressed()

            if keys[pygame.K_RIGHT]:
                if self.player.x <= self.width - self.player.velocity:
                    self.player.move(0)

            if keys[pygame.K_LEFT]:
                if self.player.x >= self.player.velocity:
                    self.player.move(1)

            if keys[pygame.K_UP]:
                if self.player.y >= self.player.velocity:
                    self.player.move(2)

            if keys[pygame.K_DOWN]:
                if self.player.y <= self.height - self.player.velocity:
                    self.player.move(3)

            # Envia a la libreria red
            self.player2.x, self.player2.y = self.parse_data(self.send_data())
            print(self.player2.x)
            print(self.player2.y)
            # Actualiza el Canvas
            self.canvas.draw_background()
            self.player.draw(self.canvas.get_canvas())
            self.player2.draw(self.canvas.get_canvas())
            self.canvas.update()

        pygame.quit()

    def send_data(self):
        """
        Send position to server
        :return: None
        """
        #Obtiene los datos y contruye el formato para enviarlo

        data = str(self.net.id) + ":" + str(self.player.x) + "," + str(
            self.player.y)
        reply = self.net.send(data)
        print(reply)
        print(data)
        return reply

    @staticmethod
    #Los une y lo hace por cada host
    def parse_data(data):
        try:
            d = data.split(":")[1].split(",")
            print(d)
            return int(d[0]), int(d[1])
        except:
            return 0, 0
Example #2
0
class Juego(Pantalla):
    def __init__(self, manager):
        pygame.mixer.music.stop()
        pygame.mixer.music.load(os.getcwd() + "/sonidos/fondo_batalla.mp3")
        pygame.mixer.music.play(-1)
        self.net = Red()
        global personaje1, personaje2, fondo
        Pantalla.__init__(self, manager)
        self.agregar_sprite("fondo", Fondo(fondo))
        jugador = "jugador1" if self.net.id == "0" else "jugador2"
        self.jugador2 = "jugador2" if jugador == "jugador1" else "jugador1"
        self.jugador1 = Jugador(personaje1, jugador)

        self.id = 0
        self.ide = 0
        self.izquierda = False if self.net.id == "0" else True
        self.op_izquierda = True if self.izquierda == False else False
        personaje2 = self.jugador_data(
            self.net.send(
                str(self.net.id) + ":" + str(self.jugador1.image_rect.x) +
                "," + str(self.jugador1.image_rect.y)))
        if personaje2 != "":
            self.jugador2 = Jugador(personaje2, self.jugador2)
        else:
            self.jugador2 = None

        self.set_nombre_ventana("Jugando")
        self.handle_events()
        self.update()
        #self.num = insertar(apodo,0)

    @staticmethod
    def jugador_data(data):
        try:
            return data.split(":")[1].split(",")[2]
        except:
            return ""

    @staticmethod
    def parse_data(data):
        try:
            d = data.split(":")[1].split(",")
            bol = True if d[3] == "si" else False
            return int(d[0]), int(d[1]), d[2], bol, int(d[4]), int(d[5])
        except:
            return 0, 0, "", True, 0, 100

    def handle_events(self):
        keys = pygame.key.get_pressed()

        if keys[pygame.K_w] and self.jugador1.image_rect.y > (
                400 - self.jugador1.image_rect.height):
            self.id += 1
            if self.id > 2:
                self.id = 0
            self.jugador1.image_rect.y -= velocidad_v
        if keys[pygame.K_s] and self.jugador1.image_rect.y < (
                600 - self.jugador1.image_rect.height):
            self.id += 1
            if self.id > 2:
                self.id = 0
            self.jugador1.image_rect.y += velocidad_v
        if keys[pygame.K_a] and self.jugador1.image_rect.x > 0:
            self.id += 1
            if self.id > 2:
                self.id = 0
            self.izquierda = True
            self.jugador1.image_rect.x -= velocidad_h
        if keys[pygame.K_d] and self.jugador1.image_rect.x < (
                800 - self.jugador1.image_rect.width):
            self.id += 1
            if self.id > 2:
                self.id = 0
            self.izquierda = False
            self.jugador1.image_rect.x += velocidad_h

        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                sys.exit()
            elif event.type == pygame.KEYDOWN:
                if event.key == pygame.K_b:
                    if self.jugador2 != None:
                        if self.jugador1.image_rect.colliderect(
                                self.jugador2.image_rect
                        ) and self.jugador1.image_rect.y >= (
                                self.jugador2.image_rect.y -
                                10) and self.jugador1.image_rect.y <= (
                                    self.jugador2.image_rect.y + 10):
                            s = pygame.mixer.Sound(os.getcwd() +
                                                   "/sonidos/golpe.mp3")
                            pygame.mixer.Sound.play(s)
                            self.jugador2.bajar_vida()
                            self.jugador1.score += 5

    def determinar_fin(self):
        if self.jugador1.vida <= 0:
            time.sleep(10)
            fuente = pygame.font.SysFont("Verdana", 30)
            texto = fuente.render("PERDISTE, " + apodo, 0, (0, 0, 0))
            self.canvas.blit(texto, (350, 0))
            time.sleep(10)
            self.manager.cambiar_pantalla(Login(self.manager))
            #print(actualizar(self.num,apodo,self.jugador1.score))
        elif self.jugador2.vida <= 0:
            fuente = pygame.font.SysFont("Verdana", 30)
            texto = fuente.render("GANASTE, " + apodo, 0, (0, 0, 0))
            self.canvas.blit(texto, (350, 0))
            time.sleep(10)
            self.manager.cambiar_pantalla(Login(self.manager))
            #print(actualizar(self.num,apodo,self.jugador1.score))

    def update(self):
        global personaje2
        izq = "si" if self.izquierda == True else "no"
        vida = 100 if self.jugador2 == None else self.jugador2.vida
        x, y, personaje2, izquierda, self.ide, self.jugador1.vida = self.parse_data(
            self.net.send(
                str(self.net.id) + ":" + str(self.jugador1.image_rect.x) +
                "," + str(self.jugador1.image_rect.y) + "," + personaje1 +
                "," + izq + "," + str(self.id) + "," + str(vida)))
        if self.jugador2 == None and personaje2 != "":
            self.jugador2 = Jugador(personaje2, self.jugador2)
        elif personaje2 != "":
            self.jugador2.image_rect.x = x
            self.jugador2.image_rect.y = y
        self.op_izquierda = izquierda

    def render(self):
        surf = pygame.Surface(
            (self.sprites["fondo"].ancho, self.sprites["fondo"].alto))
        self.canvas.blit(
            self.sprites["fondo"].image,
            surf.get_rect(topleft=(self.sprites["fondo"].x,
                                   self.sprites["fondo"].y)))
        if self.izquierda == True:
            self.canvas.blit(
                pygame.transform.flip(self.jugador1.persona_viva[self.id],
                                      True, False), self.jugador1.image_rect)
        else:
            self.canvas.blit(self.jugador1.persona_viva[self.id],
                             self.jugador1.image_rect)
        if self.op_izquierda == True and self.jugador2 != None:
            self.canvas.blit(
                pygame.transform.flip(self.jugador2.persona_viva[self.ide],
                                      True, False), self.jugador2.image_rect)
        elif self.jugador2 != None:
            self.canvas.blit(self.jugador2.persona_viva[self.ide],
                             self.jugador2.image_rect)
        if self.jugador2 != None:
            self.determinar_fin()
        pygame.display.flip()