Amazing clarity, someone who clearly not only knows how to execute the code, but has a thorough understanding in it. "If you can't explain it simply, you don't understand it well enough." - Mr Einstein
@@kaneki_ken_07 Einstein's dying wish was to be referred to as "A rock", other than "The rock" as we all know as Dwayne "The Rock" Johnson, "A rock" in German is "Ein Stein". A singular rock can make a difference, we should respect that.
@@yuka8286 Well, there was some other conversation going on and I see some comments are deleted. So, I think you didn't understand the topic because of deleted comments.
yes,tech with tim and other coding channels were tooooo hard and explained complicated,i almost felt like quitting game devolopment but luckily in time i found clear code
To be honest, I've read the book 'Beginning Game Development with Python and Pygame (2007)', but this man accurately and more clearly explained all of that in just 4 videos that too in a concise manner. Thanks a lot. You are awesome.man()
i am just 2 mins in and so many information that nobody would say that. thanks a lot this really helped me. never know why small channels are always most helpful
Your Chanel deserves to grow!.... You content is so awesome to understand, it has good clarity, you make the learning seems easy.. Greatly looking forward for new uploads
This was so crisp and clear. I've seen other tutorials where they just guide you through the code without explaining the underlying concepts but this was definitely what I needed. Thanks!
I hope you make more videos, was struggling with pygame trying stuff on my own just reading the documentation but was sooo off with rect collisions, this explained it perfectly!
For you kind information this is the first video of The world greatest coding teacher like the editing , voice , and the way of explaining is just perfect even in his first video I just want to say that he is a "Legend"
Thanks so much man, I'm a 3rd-year student in college learning computer science. I am very interested in game development/coding and this helped a lot. Hope you make more :)
you truly live up to your channel name. clear coding indeed! honestly, if I could give you more than one like I would. please keep it up and if you could cover some AI topics and applications that would be amazing
Awesome video! You walked through it all really well and it was easy to follow along to. One change i made to the code though, that made the AI smarter, is i changed the opponent_ai function to compare the opponent center y with the ball instead of opponent bottom and opponent top respectively. This made it so the opponent tried to align its middle with the ball instead of its bottom/top. def opponent_ai(): if opponent.centery < ball.y: opponent.centery += opponent_speed if opponent.centery > ball.y: opponent.centery -= opponent_speed if opponent.top = screen_height: opponent.bottom = screen_height
Best explained tutorial ever. U R really a gifted teacher. Wish I had found something similar when I started. Please keep up the good work. Best wishes from D. R.
I don't know what python was like 3 years ago, but now I was able to make player moving by this lines: keys = pygame.key.get_pressed() ''''if key[pygame.K_UP: ''''''''self.player.x += 7 and this works even when you hold the button :)
Thank you very much for the tutorial - its very well explained - just a pointer on a little twitch in the game: the ball can get behind the 'players' and move weirdly alongside it until it gets out.
Yes, that's true. Although it is only really a problem as long as the ball can bounce on the left and right side of the screen. Once that is removed and the ball just gets reset there it should be fine.
I noticed the same thing. I think the ball can collide with the top and bottom surfaces of the player/opponent rect. It then changes the x direction but not the y, so it is still colliding with the same surface during the next move. It keeps changing the x direction this way until it works it's way all the way up/down the player/opponent rect. I tried adding this if-else statement to the collision detection and I think it fixes it. It's such a small amount of movement that you don't notice it, and it makes the ball begin from the infacing side of the player/opponent so the problem collision no longer happens. if ball.colliderect(player) or ball.colliderect(opponent): ball_speed_x *= -1 if ball_speed_x > 0: ball.x = 30 else: ball.x = screen_width - (ball_width + 30) *I think I have adjust the player/opponent paddle sizes to make them a little wider. I don't remember just now what they were originally.
@@jivinhipcat Now I get it, that is indeed a bit of a bug. And your solution is workable but I would say that it doesn't achieve the right goal. Basically, when the ball hits either the top or bottom of the paddle, the player (or opponent) shouldn't be able to recover the ball anymore. A really quick solution would be to change the parameters when ball_start is called from 0 and screen_width to 15 and screen_width - 15. That way the ball starts when it is even a pixel beyond the paddle; and that removes the issue quite drastically. Doesn't look very good though. Another way would be to modify your approach to move the ball to the opposite direction that you send it; and that would trigger the the ball_start function on the next cycle of the while loop. But I don't think it would look good either since the ball would just disappear mid-air (kinda like the approach above). I think the best way to fix this issue would be to properly code a collision for the top and bottom of the paddles, so that we get a proper movement for it. I am planning on making more pygame tutorials anyway, I'll make a video how to fix it next week :)
@@jivinhipcat Here is a good stack overflow answer that explains how to get collisions for different sides: stackoverflow.com/questions/20180594/pygame-collision-by-sides-of-sprite
Clear Code nice. I didn’t even think that top/bottom contact should be considered bad, and that makes total sense. I’m just starting with code, and I really like the style of your videos. I’m still playing with this Pong game turning it into an abomination with sounds and images. I plan on watching all your videos as I go. Thanks for making them.
I just had the urge to write this comment, and compliment you for doing those type of videos, as a beginner/intermediate programmer this really helps me to understand pygame better. Thanks for your work, looking forward to more videos of yours.
Really helpful and very well explained, i did this and some of your other tutorial-projects and it's a great way to learn, please keep going with the great job
I've been trying to make a game without an engine (yet my brain stops working when I open VSCode) and this was a lifesaver and helped me start out with a small project
you are greAt ! a wonderful experience thanks a lot a different from all the other videos (a straight to the point video with clear concepts) really thanku *now I got to know what power does coding has*
To solve the problem with keydown: Use keys = pygame.key.get_pressed() if keys[pygame.K_w]: This way the player will move as long as the key (w in this case) is held down. Do this after checking for events (and don't check the movement keys in the events section.)
With this method, my player's speed seems inconsistent and/or slower than it should be as if for some frames it's missing that the button is held down.
Thanks for the tutorial. I just don't get one simple part. Why don't we need to declare player_speed as a global inside the player_animation finction but we need to declare ball_speed_x and ball_speed_y variables as globals inside the ball_animation function?
For anybody having an error with the keys at 23:20 getting the error "K_DOWN not defined". All you have to do is at the top say "from pygame import *" and it should fix it.
The ball_animations function does not allow the player and opponent variables to operate correctly. As far as the computer is concerned, those variables only exist outside of this function. How do you go about solving this issue?
how I learned this is hilarious, I first followed along tutorial and then the nextday i tried to do it without tutorial and comeback for where I am stuck, the funny thing I am very understanding it for the second time
Thanks so much for this pog tutorial. Also if you want to make the AI a bit better in the opponent_ai function instead of opponent.top < ball.y:, you can use opponent.centery. This is more efficient as it checks if the ball is lower or higher than the center of the opponent Rect.
Why does ball_speed_x and ball_speed_y have to be included as global variables in ball_animation, but player_speed not have to be included in player_movement?
Thanks for this tutorial. Having absolutely no code experience, I was able to follow along and get a game working with some small changes so I have two players. I used ai to add a score game ender and mouse control - like I said, no code experience. I am hoping to use this for a setup using two bicycles mounted on a frame that control the paddle movement. I have a working prototype now. The only thing I'd like to add is changing the ball graphic to a small pixel graphic of the grinch's face. Is this a possibility? Could you point me in the right direction to look if it is? Thanks for this again.
For player movement, I found it easier to put this code inside the While loop instead of For loop: keys = pygame.key.get_pressed() if keys[pygame.K_UP]: player.y -= 7 if keys[pygame.K_DOWN]: player.y += 7
can someone explain to me why we needed to increment player _speed at every loop when the key is pressed down instead of directly incrementing the y coordinates of player when the same happens?
Rafy-Ivan Morales 0 seconds ago I'm a new student trying to learn, so I can become a programmer with python and I have a project on how to make a port scan. So far I already make a port scan with Python3, and it scans fine, give a date and everything working good so far. I see on your video tutorial, it is very good. I would like to ask for your advice if you can and guide me on how I will add this 3 in a Python script, I have: 2. System should look for all the ports between the range of 1 to 1025 3. If the Ports is open, it should create a file and add an entry for port number 4. In case of any exception for instance “host is not available”, “host name could not be resolved” or due to any other error, you need to write that exception into the same file. Thank you and Merry Christmas.
Hey, Thanks for the video. I have a question about the code though. Why does ball_speed_x and ball_speed_y need to be global but player_speed doesnt need to be global?
When using the player_speed variable it is only used by the player_animation function, the function does not change the value (so if you wanted to change the speed of the player from the function you would need to declare it a global variable. Both the ball_speed variables change the variable from within the function; i.e. you are trying to change a global variable from a local scope. Hope that makes sense :)
should this work in repl.it? cause im trying to do it on there (my computer just doesnt want to recognize that pygame is downloaded so i have to use something online) and i am only getting like the top left quadrant of the screen.
So repl does support pygame but I am not sure how large of a window it supports. Maybe try different window sizes and see what fits. Are you getting an error message for pygame on your computer?
@@ClearCode i am getting an error message saying that no setup file exists (i have a screenshot of the whole error message) and also i have not thought about if replit only supports a certain size window, thanks!
Easily one of the best tutorials on coding i have seen so far. Does anybody know how difficult it would be to add multiplayer (via internet) to the game?
The collision-detection should not be glitchy. 1 reason why that can happen is if you are changing the game paddle axis from left-right to top-bottom. You would need to make the adjustment of ball_speed_x *= -1 while checking for colliderect()
honestly, its these small coding channels that provide the most useful information, especially to self learning coders like me. Props to u!
i am with yo
@@NavjotSingh-zx3we reply to a reply
GELOMILF
U are not alone, we all are here👍👍
It's not small anymore🎉
0:18 Installing Pygame
0:51 How Pygame works
5:37 Drawing
13:26 Animations
20:24 Input
24:27 Opponent 'AI'
25:47 Basic Scoring
Thanks
That was really helpful. I knew how to make basics but i mainly needed to learn animation and opponent AI. Thank you very much!
Amazing clarity, someone who clearly not only knows how to execute the code, but has a thorough understanding in it.
"If you can't explain it simply, you don't understand it well enough." - Mr Einstein
Thank you!
Mr Einstein's words in German "Wenn du es nicht simpel erklären kannst, hast du es nicht gut genug verstanden."
@@thepaulcraft957 Thats because Einstien's German, Yeah..!!
@@kaneki_ken_07 Einstein's dying wish was to be referred to as "A rock", other than "The rock" as we all know as Dwayne "The Rock" Johnson, "A rock" in German is "Ein Stein". A singular rock can make a difference, we should respect that.
@@yuka8286 Well, there was some other conversation going on and I see some comments are deleted. So, I think you didn't understand the topic because of deleted comments.
You’ve done better explaining PyGame than the 90% of PyGame tutorials I’ve watched.
yes,tech with tim and other coding channels were tooooo hard and explained complicated,i almost felt like quitting game devolopment but luckily in time i found clear code
Yeah man really
To be honest, I've read the book 'Beginning Game Development with Python and Pygame (2007)', but this man accurately and more clearly explained all of that in just 4 videos that too in a concise manner. Thanks a lot. You are awesome.man()
the function at the end really completed it lol
One of the best programming videos I've seen, super clear and concise explanations
i am just 2 mins in and so many information that nobody would say that. thanks a lot this really helped me. never know why small channels are always most helpful
Your Chanel deserves to grow!....
You content is so awesome to understand, it has good clarity, you make the learning seems easy..
Greatly looking forward for new uploads
This was so crisp and clear. I've seen other tutorials where they just guide you through the code without explaining the underlying concepts but this was definitely what I needed. Thanks!
This guy is so clear...he definitely deserves million of subscribers
I hope you make more videos, was struggling with pygame trying stuff on my own just reading the documentation but was sooo off with rect collisions, this explained it perfectly!
Thank you, glad it helped :) check out my channel, I already made lots more pygame tutorials
I've been watching your tutorials for a while and you are simply amazing!! Really, you can't imagine how helpful your channel has been for me.
Your presentation style is incredibly intuitive, tysm :D
Best tutorial video I've ever seen!
Hats off to this guy
This guy has a personality, that's a good thing.
For you kind information this is the first video of The world greatest coding teacher
like the editing , voice , and the way of explaining is just perfect even in his first video
I just want to say that he is a "Legend"
your explanation is so clear this is amazing !
Thanks so much man, I'm a 3rd-year student in college learning computer science. I am very interested in game development/coding and this helped a lot. Hope you make more :)
I'm in 2nd year I'm into web development (front. End)
N PyGame too
Hope will go any of these twos route
Before I mess up in ma mind
you truly live up to your channel name. clear coding indeed!
honestly, if I could give you more than one like I would.
please keep it up and if you could cover some AI topics and applications that would be amazing
this is the best python tutorial i've ever seen in my life
It's PyGame
Astonishing simplicity and amazing content from your part, sir. Thanks really much.
Thank you so much, you explain things so simply and intuitively compared to the other ressources I was trying to use
Actually an amazing tutorial, I'm amazed by how you were able to explain the code line by line.
Thank you.
btw who are the six people that disliked this lol
I think these Pong videos are the best starting Pygame starting series on TH-cam. The others are also good but too complex for a first project.
Awesome video! You walked through it all really well and it was easy to follow along to. One change i made to the code though, that made the AI smarter, is i changed the opponent_ai function to compare the opponent center y with the ball instead of opponent bottom and opponent top respectively. This made it so the opponent tried to align its middle with the ball instead of its bottom/top.
def opponent_ai():
if opponent.centery < ball.y:
opponent.centery += opponent_speed
if opponent.centery > ball.y:
opponent.centery -= opponent_speed
if opponent.top = screen_height:
opponent.bottom = screen_height
This video is amazing, you really know how to explain the code!
Do you know what software he was using?
My first Python project, thank you very much, Good Sir!
You're welcome and glad you liked it :) I made lots more pygame tutorials and I will make a video on a much better pong game in about a week!
Just made this after watching your flappy bird video. These tutorials are incredible
I wish all videos were this good. Thanks for it man.
This is the best channel I ever seen for self learners. keep it up Man!
Best explained tutorial ever. U R really a gifted teacher. Wish I had found something similar when I started. Please keep up the good work. Best wishes from D. R.
Thank you so much 🙂
Could you please make a tutorial on string manipulation ; let's say, moving text on the screen using Python or better pygame?
Thanks in advance.
Clean and CLEAR beginner tutorial... as the channel name
I don't know what python was like 3 years ago, but now I was able to make player moving by this lines:
keys = pygame.key.get_pressed()
''''if key[pygame.K_UP:
''''''''self.player.x += 7
and this works even when you hold the button :)
Thank you very much for the tutorial - its very well explained - just a pointer on a little twitch in the game: the ball can get behind the 'players' and move weirdly alongside it until it gets out.
Yes, that's true. Although it is only really a problem as long as the ball can bounce on the left and right side of the screen. Once that is removed and the ball just gets reset there it should be fine.
I noticed the same thing. I think the ball can collide with the top and bottom surfaces of the player/opponent rect. It then changes the x direction but not the y, so it is still colliding with the same surface during the next move. It keeps changing the x direction this way until it works it's way all the way up/down the player/opponent rect. I tried adding this if-else statement to the collision detection and I think it fixes it. It's such a small amount of movement that you don't notice it, and it makes the ball begin from the infacing side of the player/opponent so the problem collision no longer happens.
if ball.colliderect(player) or ball.colliderect(opponent):
ball_speed_x *= -1
if ball_speed_x > 0:
ball.x = 30
else:
ball.x = screen_width - (ball_width + 30)
*I think I have adjust the player/opponent paddle sizes to make them a little wider. I don't remember just now what they were originally.
@@jivinhipcat Now I get it, that is indeed a bit of a bug. And your solution is workable but I would say that it doesn't achieve the right goal. Basically, when the ball hits either the top or bottom of the paddle, the player (or opponent) shouldn't be able to recover the ball anymore.
A really quick solution would be to change the parameters when ball_start is called from 0 and screen_width to 15 and screen_width - 15. That way the ball starts when it is even a pixel beyond the paddle; and that removes the issue quite drastically. Doesn't look very good though.
Another way would be to modify your approach to move the ball to the opposite direction that you send it; and that would trigger the the ball_start function on the next cycle of the while loop. But I don't think it would look good either since the ball would just disappear mid-air (kinda like the approach above).
I think the best way to fix this issue would be to properly code a collision for the top and bottom of the paddles, so that we get a proper movement for it. I am planning on making more pygame tutorials anyway, I'll make a video how to fix it next week :)
@@jivinhipcat Here is a good stack overflow answer that explains how to get collisions for different sides: stackoverflow.com/questions/20180594/pygame-collision-by-sides-of-sprite
Clear Code nice. I didn’t even think that top/bottom contact should be considered bad, and that makes total sense. I’m just starting with code, and I really like the style of your videos. I’m still playing with this Pong game turning it into an abomination with sounds and images. I plan on watching all your videos as I go. Thanks for making them.
Thanks for the tutorial as well as the clear and detailled explanations.
Glad you liked it, let me know if you want me to cover another Pygame topic
Very informative and instructive tutorial! Thank you
This is one of the best tutorials ive ever seen and the clarity is.... Muah.
Keep up the good work
I just had the urge to write this comment, and compliment you for doing those type of videos, as a beginner/intermediate programmer this really helps me to understand pygame better. Thanks for your work, looking forward to more videos of yours.
Your teaching outline is good to begin with
Just finished this video thank you for helping me learn, I am still a little confused but I am using you to teach myself.
Good exercise with good explanation. Thank you.
Thanks bro. Your vids are cool and rly well edited. U are underrated.
Really helpful and very well explained, i did this and some of your other tutorial-projects and it's a great way to learn, please keep going with the great job
I've been trying to make a game without an engine (yet my brain stops working when I open VSCode) and this was a lifesaver and helped me start out with a small project
Awesome tutorial video. Your transitions and animations are super nice as well.
Your explanations are so clear!! Thank you so much.
BEST EVER EXPLANATION FOR PROGRAMMING. PLZ MAKE VIDEOS ON PYTHON MACHINE LEARNING, DEEPLEARNING AND COMPUTER VISION WITH PYTHON🙏🏽🙏🏽
Subscribed, awesome, perfect,wonderful and really understandable, Thank you Clear Code for this amazing Content.
Your explanation is so clear..
great explanation...hate other tutorials that just try to have you copy their code without explanation
you are greAt !
a wonderful experience
thanks a lot
a different from all the other videos (a straight to the point video with clear concepts)
really thanku
*now I got to know what power does coding has*
The best tutorial for PyGame
Why do you not have 1+ million subs, people get this man too 1mil
To solve the problem with keydown:
Use
keys = pygame.key.get_pressed()
if keys[pygame.K_w]:
This way the player will move as long as the key (w in this case) is held down. Do this after checking for events (and don't check the movement keys in the events section.)
With this method, my player's speed seems inconsistent and/or slower than it should be as if for some frames it's missing that the button is held down.
That was a really great video thank you very much for making this great video.
Amazing tutorial. Thank u for all the explanation step by step guy 😃💪
Amazing graphics and a thorough and great tutorial = fast sub :)
Thanks for the tutorial. I just don't get one simple part. Why don't we need to declare player_speed as a global inside the player_animation finction but we need to declare ball_speed_x and ball_speed_y variables as globals inside the ball_animation function?
This was the first game I learned to make from scratch
For anybody having an error with the keys at 23:20 getting the error "K_DOWN not defined". All you have to do is at the top say "from pygame import *" and it should fix it.
actually im zero in programing. i like to become hero in programing, like you. thank you
yup dude u explaain well which is why I also bought ur udemy classes I saw u on it and thanks for the great content
Thanks very much for this video. It was really helpful :)
The ball_animations function does not allow the player and opponent variables to operate correctly. As far as the computer is concerned, those variables only exist outside of this function. How do you go about solving this issue?
Amazing and well explained.
No words to appreciate Clear Code. Is this a teamwork or all are done by yourself?
hey, yes I am making it by myself (looks much harder than it actually is tbh)
Very nicely explained. Thanks
You are the best brother❤
how I learned this is hilarious, I first followed along tutorial and then the nextday i tried to do it without tutorial and comeback for where I am stuck, the funny thing I am very understanding it for the second time
this was a really good tutorial!
Very use full sir!
And please tell me how to create this game for mobile phones!
finally a good pygame tutorial
Thanks, I actually made quite a few by now :)
@@ClearCode awesome! you deserve more attention :D
Really good tutorial!!
Thanks for this tutorial, very helpful.
Thanks so much for this pog tutorial. Also if you want to make the AI a bit better in the opponent_ai function instead of opponent.top < ball.y:, you can use opponent.centery. This is more efficient as it checks if the ball is lower or higher than the center of the opponent Rect.
thanks it really made the program better but you also need to replace ' opponent.bottom ' with 'opponent.centerx'
@@IGOverkill yh, soz I forgot that. Good luck on your pygame journey
Why does ball_speed_x and ball_speed_y have to be included as global variables in ball_animation, but player_speed not have to be included in player_movement?
very well made and helpful :) cheers mate
Thanks for this tutorial. Having absolutely no code experience, I was able to follow along and get a game working with some small changes so I have two players. I used ai to add a score game ender and mouse control - like I said, no code experience. I am hoping to use this for a setup using two bicycles mounted on a frame that control the paddle movement. I have a working prototype now. The only thing I'd like to add is changing the ball graphic to a small pixel graphic of the grinch's face. Is this a possibility? Could you point me in the right direction to look if it is? Thanks for this again.
Your the best, i watched someone else and he made my pygame so it looked blocky and 30 fps. But with your vid its smooooooooth
thank you very much for the tutorial, you teach very well bro
How do you not have like a million subs? just a question, HOW!?
I think it is a new channel
thanks! this was my first project so i had a lot of bugs but it was really fun! i will do part 2 soon!
great tutorial, loved it
For player movement, I found it easier to put this code inside the While loop instead of For loop:
keys = pygame.key.get_pressed()
if keys[pygame.K_UP]:
player.y -= 7
if keys[pygame.K_DOWN]:
player.y += 7
Great tutorial!
18:46
Like cant we also add arguments, ballxspeed and ballyspeed for the function ball_animation() instead of global variables
Hey! I really gained a lots of information. CAN YOU PL GUIDE ME HOW TO ADD SOUND EFFECTS AND TIMER???
Glad you like it! and check out my channel, I made a couple of sequels for this game and timers and sound effects are covered there.
very useful, thank you so much!!!!
can someone explain to me why we needed to increment player _speed at every loop when the key is pressed down instead of directly incrementing the y coordinates of player when the same happens?
He explain it at 21:25
@@heysiri_official yeah, i know he mentioned it...but i still couldn't get why exactly. A little expansion would help
Rafy-Ivan Morales
0 seconds ago
I'm a new student trying to learn, so I can become a programmer with python and I have a project on how to make a port scan.
So far I already make a port scan with Python3, and it scans fine, give a date and everything working good so far.
I see on your video tutorial, it is very good.
I would like to ask for your advice if you can and guide me on how I will add this 3
in a Python script, I have:
2. System should look for all the ports between the range of 1 to 1025
3. If the Ports is open, it should create a file and add an entry for port number
4. In case of any exception for instance “host is not available”, “host name could not be resolved” or
due to any other error, you need to write that exception into the same file.
Thank you and Merry Christmas.
Excelent video, thanks a lot.
Hey, Thanks for the video. I have a question about the code though. Why does ball_speed_x and ball_speed_y need to be global but player_speed doesnt need to be global?
When using the player_speed variable it is only used by the player_animation function, the function does not change the value (so if you wanted to change the speed of the player from the function you would need to declare it a global variable. Both the ball_speed variables change the variable from within the function; i.e. you are trying to change a global variable from a local scope. Hope that makes sense :)
@@ClearCode Yeah that makes sense. Thanks very much
why did you global the 'ball_speed_x' and 'ball_speed_y' variable, yet you not global the 'ball' variable on the define statement?
should this work in repl.it? cause im trying to do it on there (my computer just doesnt want to recognize that pygame is downloaded so i have to use something online) and i am only getting like the top left quadrant of the screen.
So repl does support pygame but I am not sure how large of a window it supports. Maybe try different window sizes and see what fits. Are you getting an error message for pygame on your computer?
@@ClearCode i am getting an error message saying that no setup file exists (i have a screenshot of the whole error message) and also i have not thought about if replit only supports a certain size window, thanks!
How did you get this black bacground in python
plz can you help me...sometimes when the ball collides with the top of rects it get dragged along I did all the steps you mentioned
oh thats a bug even i noticed it
thanks for the video, but I have an error in PowerShell at the beginning
Easily one of the best tutorials on coding i have seen so far. Does anybody know how difficult it would be to add multiplayer (via internet) to the game?
APIs
I got this 'first argument must be a dict' when I was trying to define the ball animation.
The collision detection is super glitchy when it hits the top or bottom of the paddles. Is there a different way to do it?
The collision-detection should not be glitchy. 1 reason why that can happen is if you are changing the game paddle axis from left-right to top-bottom. You would need to make the adjustment of ball_speed_x *= -1 while checking for colliderect()