Para poner los límites superior e inferior deben poner el siguiente código *despúes* de if (player1_y_coor) < 5 or (player1_y_coor+player_height) > 600-5: player1_y_speed = 0 if (player2_y_coor) < 5 or (player2_y_coor+player_height) > 600-5: player2_y_speed = 0
hay un problema con ese código, si sigues presionando sigue saliendo de la pantalla, en mi caso es mejor el código asi sabiendo que las dimensiones de pantalla son (800x500): if player1_y_coor > 415: player1_y_coor = 415 if player1_y_coor < 0: player1_y_coor = 0 if player2_y_coor > 415: player2_y_coor = 415 if player2_y_coor < 0: player2_y_coor = 0
Hola, cuando pongo este codigo y llega al final se para y ya no e mueve nunca, en que parte del codigo lo incluiste? yo lo tengo despues de declarar el movimiento, ayudame porfavor jaja
#Modifica las coordenadas de jugadores y pelota coord_y1 += speed_y1 ---> debajo de esta orden lo puse para que funcionara if (coord_y1) < 5 or (coord_y1+PLAYER_H) > 600-5: speed_y1 = 0 coord_y2 += speed_y2 if (coord_y2) < 5 or (coord_y2+PLAYER_H) > 600-5: speed_y2 = 0
Que gran serie de videos, todo se facilita y es genial que todo lo que vemos se aplique en un trabajo, solo me quedo con la duda de como poner puntuaje para cada jugador, aun no termino la serie, pero creo que aqui hubiera quedado de maravilla, de igual manera un saludo
Para agregar los limites a las barreras, pueden hacerlo asi: player1_y_coor += player1_speed if player1_y_coor > 510: player1_y_coor = 510 if player1_y_coor < 0: player1_y_coor = 0 player2_y_coor += player2_speed if player2_y_coor > 510: player2_y_coor = 510 if player2_y_coor < 0: player2_y_coor = 0
Genio, yo lo habia hecho parecido pero le ponia la velocidad en 0, aunque eso me generaba un bug que podia "traspasar los limites" tocando muchas veces la flecha para arriba o la W.
Una pequeña pregunta el event.type que se uso en las lineas de codigo del primer for es usado para traer algun atributo, o es una palabra clave para traer un dato deuna lista del evento o que realmente hace type, gracias por la ayuda de antemano
Me han servido mucho tus videos, muchas gracias. tengo un pregunta, con respecto al movimiento de los jugadores por medio del teclado, ¿sabes que debo hacer para que pueda tener la tecla sostenida y aun así se mueva el jugador?; replique lo que hiciste en el video, pero los jugadores no se mueven si tengo la tecla sostenida
sería muy dificil explicarlo en un comentario, y de hecho en un futuro video subiré un pequeño proyecto donde puedes dejar presionada la tecla y se continúa moviendo. pero el método que necesitas es pygame.mouse.get_pressed por si quieres bucarlo y averiguarlo por ti en la documentación. un saludo.
prueba cambiar el orden a tus comandos... a mi me pasaba que la bola no avanzaba si no apretaba alguna tecla, o tambien que al presionar las teclas si se movian los jugadores pero con un pequeño 'lag' al empezar. Creo que el if event.type == pygame.KEYDOWN... debe ir a la misma altura que el if event.type == pygame.QUIT... Y el jugador1_x += jugador1_speed_x Y el jugador1_x += jugador1_speed_x Deben ir a la altura del for event...
Hola, estoy creando un pong pero tengo un problema con las colisiones, cuando la pelota toca la parte superior o inferior del rectangulo se queda unida y lo recorre de manera vertical, veo que en el minuto 24:38 te ocurre lo mismo a ti... Sabes como solucionarlo?
La verdad creo que posiblemente hayas resuelto el problema, pero igual te dejo mi solución: *A la hora de las colisiones lo que hice fue simplemente reiniciar la variable de velocidad a su estado anterior y luego hacer que esta fuera en su lado contrario. Ejemplo: if ball.colliderect(player_1): ball_speed_x = 4 ball_speed_x *= -1 if ball.colliderect(player_2): ball_speed_x = 4 ball_speed_x *= -1 Tuve que hacerlo de forma individual para cada jugador de lo contrario solo tomaba una de las colisiones y la otra era invisible. Espero te pueda servir. Saludos.
Tengo un problema muy extraño. El programa funciona a la perfección, sin embargo, cuando la pelota sale por el lado izquierdo, por unos segundos, antes de volver al centro, aparece una barra vertical que cubre todo el ancho de la pantalla, copié tu código de GIT para ver cuál era el problema, y me sigue apareciendo esa barra vertical ¿cómo es posible, que usando exactamente el mismo código, ocurra esto?
eso ocurre porque cuando la bola toca el límite 0, sale esa barra, cambia que el límite sea el radio de la bola, ejemplo que le cambies 10, ya que el centro de la bola tocará esa coordenada y no saldrá la barra
Hola, muy buenos videos. Recién estoy comenzando con python y esto me sirve mucho. Una consulta, porque en la coordenada "y" para presionar la tecla "up" se pone un -3 y no un 3?
dejo mi codigo por si a alguien le sirve, pude incluir que los jugadores no puedan salirse de la pantalla: import pygame pygame.init() BLANCO = (255,255,255) NEGRO = (0, 0, 0) clock = pygame.time.Clock() ancho = 800 alto = 500 ventana = pygame.display.set_mode((ancho,alto)) #hacer que no aparezca el mouse en la pantalla pygame.mouse.set_visible(False) #jugador 1 (el de la izquierda) x1 = 20 y1 = (alto/2)-50 speed_y1 = 0 #jugador 2 (el de la derecha) x2 = ancho - 40 y2 = (alto/2)-50 speed_y2 = 0 #pelota x3 = ancho/2 y3 = alto/2 speed_x3 = 4 speed_y3 = 4 while True: for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() exit()
#eventos del teclado if event.type == pygame.KEYDOWN: #movimiento del jugador 1 if event.key == pygame.K_w: speed_y1 = -6 if event.key == pygame.K_s: speed_y1 = 6 #movimiento del jugador 2 if event.key == pygame.K_UP: speed_y2 = -6 if event.key == pygame.K_DOWN: speed_y2 = 6 if event.type == pygame.KEYUP: #movimiento del jugador 1 if event.key == pygame.K_w: speed_y1 = 0 if event.key == pygame.K_s: speed_y1 = 0 #movimiento del jugador 2 if event.key == pygame.K_UP: speed_y2 = 0 if event.key == pygame.K_DOWN: speed_y2 = 0 ventana.fill(NEGRO) #---zona dibujo--- jugador1 = pygame.draw.rect(ventana,BLANCO,(x1,y1,20,100)) jugador2 = pygame.draw.rect(ventana,BLANCO,(x2,y2,20,100)) pelota = pygame.draw.circle(ventana,BLANCO,(x3,y3),10) #---zona dibujo--- #---movimiento jugadores--- y1 += speed_y1 y2 += speed_y2 #colision con la pelota y el jugador 1/2 if pelota.colliderect(jugador1) or pelota.colliderect(jugador2): speed_x3 *= -1
# movimiento pelota x3 += speed_x3 y3 += speed_y3 #verificar que los jugadores no puedan moverse afuera de la pantalla if y1>alto-100 or y1alto-100 or y2ancho or x3alto or y3
Para resolver el problema para que los jugadores esten limitados a lo ancho prueba este código: #Modifying coords for our movements to players bar player1_y_coords += player1_y_speed if(player1_y_coords)600-10: player1_y_speed *= -1 player2_y_coords += player2_y_speed if(player2_y_coords)600-10: player2_y_speed *= -1 Espero que les sirva :)
No, es normal que tengas algún error de tipeado o de identación. A mí igual me pasó algo el video anyerior y estuve como 20 min. viendo que era xD Pd: perdón por llegar tarde
la verdad no recuerdo exactamente el código, pero sólo con poner un if en la pared sobre si revasa x pixeles, regreses la pala a la posición como pala_x - 2, así se produce una especie de "rebote" o "tope"
todo esta bien hasta que llego a la parte de la colision: al final me indica que if pelota.colliderect(jugador1) or pelota.colliderect(jugador2): ^ IndentationError: unindent does not match any outer indentation level [Finished in 0.2s]
Pude resolver parcialmente para que los jugadores no se salgan de la pantalla player1_y_coord += player1_y_speed if player1_y_coord < 0 or player1_y_coord > 510: # Comprobando de que el player 1 no salga de la pantalla player1_y_speed = 0 player2_y_coord += player2_y_speed if player2_y_coord < 0 or player2_y_coord > 510: # Comprobando de que el player 2 no salga de la pantalla player2_y_speed = 0 el drama es que se frenan en los bordes de la pantalla pero si presiono repetidas veces pueden salirse de la pantalla y para volver a moverse libremente debo presionar varias veces en el sentido contrario hasta que este dentro de los limites de la pantalla T_T
le encontré la solución , en la linea : if event.key == pygame.K_w , le agregas: and player1_y_coord > 0: ,lo que haces con esto es que para que se mueva de nuevo el jugador uno, tiene que cumplir dos condiciones, que se presione la tecla y que la ubicación del jugador no este en el borde de la pantalla. si no cumple las dos condiciones la velocidad no va a ser -3 sino 0 , entonces no se podra mover mas , salvo que vayas en la otra direccion.
@@tetedanco de pelos.. mañana mismo lo pruebo.. ahora.. a dormir... quiero demostrarle al profe que puedo hacer un pacman.... pague x un curso y nunca tocamos pyvame.. y eso que nos lo menciono 😅
@@26775301 mnnn , ok cuando llegue a casa del trabajo te pongo como lo escribí porque a mi me funciono bien , osea además del código que pusiste abajo, luego en la línea que checa si estás pulsando la tecla que puso el profe ahí tenes que agregar el and , para el movimiento hacia arriba y después también para el movimiento hacia abajo, en un rato te lo paso !
Hola, tengo un problema con sublime text, al principio cuando yo ponía un parentesis se me ponía el paréntesis que abre y el que cierra ( ), pero ahora no y no se por qué. Me podrías ayudar?. También tengo otro problema ya que me borra de izquierda a derecha, espero que me puedas ayudar, gracias. P.D. Buen vídeo
Ya 3 años de estos tutoriales, son lo mejor que he visto. Muchas gracias por el empeño de enseñar tan bien!!!
yo lo hice el programa sin mirar todo se me quedo en el crebro por que explicas bien me ha ayudado muchisimo a programar muchas gracias
Gracias, que sencillo se hace aprender a programar en pygame con tus tutoriales!
yo lo hice el programa sin mirar todo se me quedo en el cerebro por que explicas bien me ha ayudado muchisimo a programar muchas gracias
gracias a ti
oye muchas gracias nunca pense que las colisiones se pudieran manejar de una forma tan sencilla hare los arreglos que faltan para el juego
¡Muchas gracias! Me ayudo mucho la forma en la que explicas. Excelente video. Te entendí mejor a ti que a mi profesor 😅.
Para poner los límites superior e inferior deben poner el siguiente código *despúes* de
if (player1_y_coor) < 5 or (player1_y_coor+player_height) > 600-5:
player1_y_speed = 0
if (player2_y_coor) < 5 or (player2_y_coor+player_height) > 600-5:
player2_y_speed = 0
hay un problema con ese código, si sigues presionando sigue saliendo de la pantalla, en mi caso es mejor el código asi sabiendo que las dimensiones de pantalla son (800x500):
if player1_y_coor > 415:
player1_y_coor = 415
if player1_y_coor < 0:
player1_y_coor = 0
if player2_y_coor > 415:
player2_y_coor = 415
if player2_y_coor < 0:
player2_y_coor = 0
Hola, cuando pongo este codigo y llega al final se para y ya no e mueve nunca, en que parte del codigo lo incluiste? yo lo tengo despues de declarar el movimiento, ayudame porfavor jaja
#Modifica las coordenadas de jugadores y pelota
coord_y1 += speed_y1 ---> debajo de esta orden lo puse para que funcionara
if (coord_y1) < 5 or (coord_y1+PLAYER_H) > 600-5:
speed_y1 = 0
coord_y2 += speed_y2
if (coord_y2) < 5 or (coord_y2+PLAYER_H) > 600-5:
speed_y2 = 0
tus videos son excelentes, bro... gracias
Que gran serie de videos, todo se facilita y es genial que todo lo que vemos se aplique en un trabajo, solo me quedo con la duda de como poner puntuaje para cada jugador, aun no termino la serie, pero creo que aqui hubiera quedado de maravilla, de igual manera un saludo
Aquí puedes encontrar como poner un marcador y/o texto en la pantalla
th-cam.com/play/PLuB3bC9rWQAuzlz932pjjFLE1q8caF21N.html
Mi primer juego yeiiii!! gracias amigo.
Buen video, crees poder subir uno sobre cómo usar sprites para animaciones
Siii, a eso quiero llegar... (lentamente)
puedes revisar mi canal de youtube amigo espero te ayude
Para agregar los limites a las barreras, pueden hacerlo asi:
player1_y_coor += player1_speed
if player1_y_coor > 510:
player1_y_coor = 510
if player1_y_coor < 0:
player1_y_coor = 0
player2_y_coor += player2_speed
if player2_y_coor > 510:
player2_y_coor = 510
if player2_y_coor < 0:
player2_y_coor = 0
Genio, yo lo habia hecho parecido pero le ponia la velocidad en 0, aunque eso me generaba un bug que podia "traspasar los limites" tocando muchas veces la flecha para arriba o la W.
excelente vídeo amigo esta genial.
Muchas gracias.
Una pequeña pregunta el event.type que se uso en las lineas de codigo del primer for es usado para traer algun atributo, o es una palabra clave para traer un dato deuna lista del evento o que realmente hace type, gracias por la ayuda de antemano
Muy buen tutoria, gracias. Pero x
q en vez de usar la variable de speed, no cambias directamente las coordenadas de Y
buenas... como se hace para poner texto en el juego?... vi artículos y post en stesckoverflow pero no termino de entender aparentemente 😅
Me han servido mucho tus videos, muchas gracias.
tengo un pregunta, con respecto al movimiento de los jugadores por medio del teclado, ¿sabes que debo hacer para que pueda tener la tecla sostenida y aun así se mueva el jugador?; replique lo que hiciste en el video, pero los jugadores no se mueven si tengo la tecla sostenida
sería muy dificil explicarlo en un comentario, y de hecho en un futuro video subiré un pequeño proyecto donde puedes dejar presionada la tecla y se continúa moviendo. pero el método que necesitas es
pygame.mouse.get_pressed por si quieres bucarlo y averiguarlo por ti en la documentación. un saludo.
prueba cambiar el orden a tus comandos... a mi me pasaba que la bola no avanzaba si no apretaba alguna tecla, o tambien que al presionar las teclas si se movian los jugadores pero con un pequeño 'lag' al empezar. Creo que el if event.type == pygame.KEYDOWN... debe ir a la misma altura que el if event.type == pygame.QUIT...
Y el jugador1_x += jugador1_speed_x
Y el jugador1_x += jugador1_speed_x
Deben ir a la altura del for event...
Sos un crack 👌
Una pregunta, esta mas optimizado hacer la resta en google y poner directo 255 en vez de 300-45 o es lo mismo¿
Hola, estoy creando un pong pero tengo un problema con las colisiones, cuando la pelota toca la parte superior o inferior del rectangulo se queda unida y lo recorre de manera vertical, veo que en el minuto 24:38 te ocurre lo mismo a ti... Sabes como solucionarlo?
pudiste solucionarlo? tengo el mismo problema y no se como arreglarlo
La verdad creo que posiblemente hayas resuelto el problema, pero igual te dejo mi solución:
*A la hora de las colisiones lo que hice fue simplemente reiniciar la variable de velocidad a su estado anterior y luego hacer que esta fuera en su lado contrario. Ejemplo:
if ball.colliderect(player_1):
ball_speed_x = 4
ball_speed_x *= -1
if ball.colliderect(player_2):
ball_speed_x = 4
ball_speed_x *= -1
Tuve que hacerlo de forma individual para cada jugador de lo contrario solo tomaba una de las colisiones y la otra era invisible. Espero te pueda servir. Saludos.
ya seguro lo resolviste, pero para el que esta por primera vez con este error, deben poner el if de la colision justo debajo de su zona de dibujo .
en las coaliciones tengo un error pelota no defined
de pygame lo puedes exportar android .apk?
Excelente tutorial.
A la orden
Excelente video \m/
Yo ya habia hecho pong con turtle :/ pero es interesante este tambien :D
Tengo un problema muy extraño. El programa funciona a la perfección, sin embargo, cuando la pelota sale por el lado izquierdo, por unos segundos, antes de volver al centro, aparece una barra vertical que cubre todo el ancho de la pantalla, copié tu código de GIT para ver cuál era el problema, y me sigue apareciendo esa barra vertical ¿cómo es posible, que usando exactamente el mismo código, ocurra esto?
eso ocurre porque cuando la bola toca el límite 0, sale esa barra, cambia que el límite sea el radio de la bola, ejemplo que le cambies 10, ya que el centro de la bola tocará esa coordenada y no saldrá la barra
@@LuisEn20005 Gracias amigo, me la solucionaste 👍
@@dali4510 un gusto, tambien experimenté esa parte
Hola, muy buenos videos. Recién estoy comenzando con python y esto me sirve mucho. Una consulta, porque en la coordenada "y" para presionar la tecla "up" se pone un -3 y no un 3?
Para poder moverte en el plano cartesiano de pygame, un valor pequeño en Y significa que aparecerás “arriba”
@@MundoPython Ah ok. Listo. Gracias por responder tan rapido. Saludos
Que buen video
dejo mi codigo por si a alguien le sirve, pude incluir que los jugadores no puedan salirse de la pantalla: import pygame
pygame.init()
BLANCO = (255,255,255)
NEGRO = (0, 0, 0)
clock = pygame.time.Clock()
ancho = 800
alto = 500
ventana = pygame.display.set_mode((ancho,alto))
#hacer que no aparezca el mouse en la pantalla
pygame.mouse.set_visible(False)
#jugador 1 (el de la izquierda)
x1 = 20
y1 = (alto/2)-50
speed_y1 = 0
#jugador 2 (el de la derecha)
x2 = ancho - 40
y2 = (alto/2)-50
speed_y2 = 0
#pelota
x3 = ancho/2
y3 = alto/2
speed_x3 = 4
speed_y3 = 4
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
exit()
#eventos del teclado
if event.type == pygame.KEYDOWN:
#movimiento del jugador 1
if event.key == pygame.K_w:
speed_y1 = -6
if event.key == pygame.K_s:
speed_y1 = 6
#movimiento del jugador 2
if event.key == pygame.K_UP:
speed_y2 = -6
if event.key == pygame.K_DOWN:
speed_y2 = 6
if event.type == pygame.KEYUP:
#movimiento del jugador 1
if event.key == pygame.K_w:
speed_y1 = 0
if event.key == pygame.K_s:
speed_y1 = 0
#movimiento del jugador 2
if event.key == pygame.K_UP:
speed_y2 = 0
if event.key == pygame.K_DOWN:
speed_y2 = 0
ventana.fill(NEGRO)
#---zona dibujo---
jugador1 = pygame.draw.rect(ventana,BLANCO,(x1,y1,20,100))
jugador2 = pygame.draw.rect(ventana,BLANCO,(x2,y2,20,100))
pelota = pygame.draw.circle(ventana,BLANCO,(x3,y3),10)
#---zona dibujo---
#---movimiento jugadores---
y1 += speed_y1
y2 += speed_y2
#colision con la pelota y el jugador 1/2
if pelota.colliderect(jugador1) or pelota.colliderect(jugador2):
speed_x3 *= -1
# movimiento pelota
x3 += speed_x3
y3 += speed_y3
#verificar que los jugadores no puedan moverse afuera de la pantalla
if y1>alto-100 or y1alto-100 or y2ancho or x3alto or y3
Para resolver el problema para que los jugadores esten limitados a lo ancho prueba este código:
#Modifying coords for our movements to players bar
player1_y_coords += player1_y_speed
if(player1_y_coords)600-10:
player1_y_speed *= -1
player2_y_coords += player2_y_speed
if(player2_y_coords)600-10:
player2_y_speed *= -1
Espero que les sirva :)
es normal que se me cierre la pantalla?
No, es normal que tengas algún error de tipeado o de identación. A mí igual me pasó algo el video anyerior y estuve como 20 min. viendo que era xD
Pd: perdón por llegar tarde
Podrias decirme como hiciste para que las palas no se salgan del espacio de juego? no consigo resolverlo....:(
la verdad no recuerdo exactamente el código, pero sólo con poner un if en la pared sobre si revasa x pixeles, regreses la pala a la posición como pala_x - 2, así se produce una especie de "rebote" o "tope"
todo esta bien hasta que llego a la parte de la colision:
al final me indica que
if pelota.colliderect(jugador1) or pelota.colliderect(jugador2):
^
IndentationError: unindent does not match any outer indentation level
[Finished in 0.2s]
revisa la identación...
Como se hace para limitar el movimiento de las barras y que no puedan irse de la pantalla? estoy tratando de hacerlop pero no lo logre
En los videos donde creo un juego de shooter se soluciona eso. date una vuelta para que aprendas "cómo"
Yo lo hice asi
#Player 1
if event.key == pygame.K_UP: # Flechita arriba
if (cord_y_player1 > 5):
cord_y_player1 -= 1
if event.key == pygame.K_DOWN: # Flechita abajo
if (cord_y_player1 < 690):
cord_y_player1 += 1
Pude resolver parcialmente para que los jugadores no se salgan de la pantalla
player1_y_coord += player1_y_speed
if player1_y_coord < 0 or player1_y_coord > 510: # Comprobando de que el player 1 no salga de la pantalla
player1_y_speed = 0
player2_y_coord += player2_y_speed
if player2_y_coord < 0 or player2_y_coord > 510: # Comprobando de que el player 2 no salga de la pantalla
player2_y_speed = 0
el drama es que se frenan en los bordes de la pantalla pero si presiono repetidas veces pueden salirse de la pantalla y para volver a moverse libremente debo presionar varias veces en el sentido contrario hasta que este dentro de los limites de la pantalla T_T
le encontré la solución , en la linea : if event.key == pygame.K_w , le agregas: and player1_y_coord > 0: ,lo que haces con esto es que para que se mueva de nuevo el jugador uno, tiene que cumplir dos condiciones, que se presione la tecla y que la ubicación del jugador no este en el borde de la pantalla. si no cumple las dos condiciones la velocidad no va a ser -3 sino 0 , entonces no se podra mover mas , salvo que vayas en la otra direccion.
@@tetedanco de pelos.. mañana mismo lo pruebo.. ahora.. a dormir... quiero demostrarle al profe que puedo hacer un pacman.... pague x un curso y nunca tocamos pyvame.. y eso que nos lo menciono 😅
@@tetedanco intente tu soluccion... pero al colocarla solo me deja moverla hacia abajo... y se frena si intento hacia arriba 😶
@@26775301 mnnn , ok cuando llegue a casa del trabajo te pongo como lo escribí porque a mi me funciono bien , osea además del código que pusiste abajo, luego en la línea que checa si estás pulsando la tecla que puso el profe ahí tenes que agregar el and , para el movimiento hacia arriba y después también para el movimiento hacia abajo, en un rato te lo paso !
@@tetedanco ahhhhhh.. ademas de mi codigo... juaa 🤣 yo elimine el mio 😅😅😅 pero me gustaria ver como lo hiciste
Hola, tengo un problema con sublime text, al principio cuando yo ponía un parentesis se me ponía el paréntesis que abre y el que cierra ( ), pero ahora no y no se por qué. Me podrías ayudar?. También tengo otro problema ya que me borra de izquierda a derecha, espero que me puedas ayudar, gracias.
P.D. Buen vídeo
Me mataste.... y si lo borras e instalas d nuevo?
:3
Mas fácil game maker tiene menos vueltas