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