Alright guys, welcome to this Python game 
development video series. And we will be   using the famous pi game library of Python to 
create this school space in reader game. And   we are going to go really in depth into the spy 
game and learn about a lot of different concepts.   And specifically, we will be learning a 
lot about like new parts of Python that   you haven't explored yet. And new parts of pi 
game, like moving characters, shooting bullets,   understanding game concepts like game loops and 
stuff like that. So if you haven't ever created   a game, or you have only created a very basic 
game, this would be a very good starting point   for you guys. So before we get started on all of 
that cool stuff, learning about game development   and stuff like that, you should make sure that the 
basic stuff is installed. So first basic stuff is   obviously Python. So if Python is not installed, 
if you're using Python for the first time,   just go to python.org. And then click on downloads 
and just download the latest version of Python.   After downloading Python, we are going to be using 
ID which is basically a cooler way to write code   of Python.

So I'm going to be using pi charm. And 
if you don't want to buy the professional version,   although you have a 30 day trial, which you can 
use for this course. But if you don't want to buy   it, just download the community version, which is 
free, and you won't need more than the community   version. But if you're using something like 
Sublime Text, or maybe the main Python terminal,   that's also fine, it won't matter. But if you want 
to follow along completely, make sure that you   download pi charm.

And thirdly, you can just have 
a look at the PI game website that we are going   to be using to create our game. So you can just 
have a look at it, it's not really necessary. But   you can just have a look at what has been done 
with this PI game and look at the Games maybe   and you know, just kind of get ideas. So let's 
get started. Make sure that you have downloaded   Python, after you have downloaded pi jam, it 
will look somewhat like this. Now that we have   everything installed, we need to make sure that 
we have this new project over here. So for that,   just go to file, click on new project. And then 
right down the project name over here, I have   already created the project and I'm calling it 
Space Invaders because this is the game that we'll   be creating, and probably have already played 
this game when you were a child.

But the main   idea is that there is a ship at the bottom and 
is going to hit the enemies that are at the top   by shooting a bullet. And every time you hit an 
enemy, your point increases and the enemies slowly   come down. If it touches the spaceship, you lose. 
And the final score is what how many enemies you   have shot. So that's the basic idea of the game. 
But you'll understand more as we go through the   videos. So after you have created this project, 
we are going to create a new file over here and   we're just going to call it main because most 
of our code is going to go inside this main dot   Python file. And after that, we need to install 
pi game. So if you're using terminal, you can just   open up your terminal by typing in cmd. And you 
can just type in pip install pi game. And this is   for people who are not using pi charm, or you're 
using something else like Sublime Text or Python   terminal.

But if you're using pi charm, what you 
would do is you would go to File and then you   would go to settings and in settings, you would 
go to project name, the whatever name you have   given if you want to follow along called spacing 
reedham. And then go to project entrepreneur. And   over there you can see I've already installed 
pi game. And if this PI game is not already   installed, just go to this plus sign over here 
and search for pi game by game and then you can   select it and click on Install package and this 
will install pi game onto your computer. Now I've   already installed pi game, so I'm not going to 
install it again. And after that you can just type   in by import pi game. And if this doesn't show 
an error, that means that pi game is installed on   your computer. So this is pretty much it. This was 
a pretty small video, just an introduction video,   we're going to be doing a lot of cool stuff. 
From the next video, we are going to be creating   our game, we are not going to go into theory and 
stuff, we're just going to start with practical   stuff and actually start creating a game.

So we 
are going to be creating a game window next time.   So as you can see, this pie chart has a window 
right now. So we are going to be creating this   kind of a window in the next video with a cross 
button over here. So I'll see you over there.   And just to recap, what we did in the last 
video was installed by game and in this video,   we are going to be creating our first Python 
game window using pi game.

So obviously the first   thing we need to do is import pi game into our 
program. And hopefully you have already created   this mean.py file, if you haven't just created 
right now. And first of all, we are going to   import pi game. And then we need to initialize pi 
game to access all of the code methods and all of   the other stuff that is inside this PI game 
module. So to initialize this PI game module,   what we need to do is just type in pi game.in 
it so whenever from now on to create a game or   create a new game.

Just make sure you add this 
line otherwise your Python or pi game code is   not going to work. So let me just add a little 
bit of comment. We're here saying initialize the   PI game. Alright, so after initialization, we have 
to create our screen. And pi game makes it really,   really easy. It's just one line of code. It's 
crazy. So we just want the right screen. And   this is our variable.

And we can just write pi 
game. And this is to access the methods that are   inside this pygame module. And we need to access 
the display dot set mode method. And then inside   these brackets, we need to add another bracket. So 
this is a tuple, make sure you add another bracket   inside it, otherwise, it's not going to work. 
And our people mess up over here and then ask,   why is it not working? It's because you haven't 
added another bracket over here. And then inside   it is going to take in two values, the height and 
the width of the window that you want to create.   So I'm just going to give it for now a value of 
800 pixels of height and 600 pixels of width.   So this should be good.

And let me just add a 
comment, create the screen. And let me just format   this properly. So this is all you need to create 
a screen. But as you will see, after we run this   program that it has won me bad thing about it. So 
as you can see the game window was created. But   after a few seconds is just went away. Let me show 
it to you guys again. So after we click on Play,   it stays there for like one or two seconds, then 
it goes away. And this is because our Python   program goes through these three lines, and then 
just exits the program. And therefore you can't   see that screen for a long time. Because it just 
takes one or two seconds for this program to run.   And that's it.

So one way to bypass that is just 
create an infinite loop over here. And this also   has problems. But just to show you guys that it 
works, I'm going to do it. And I'm going to make   sure that my task managers open because this 
will hand my computer. So make sure that your   task manager is also open. Because this will Hank 
the window, at least that you're working on. But   just to show you guys, I'm going to run this 
and you will be able to see that the window is   there.

But it is totally hand. So you can see the 
window is there. But it's nothing is working over   here. And this cross button is not working. Let me 
just go back over here and close my Python window,   click on end task and it has been closed. Now why 
is it hanging? Why is it not just closing down by   pressing this cross button? It is because we don't 
have an event of a quit function over here. So   there is no way to quit the program. Our program 
is just inside this while loop and is now able   to end and Windows make sure that that program 
gets high. And that's why we need to add a quick   functionality to our PI game game window. Just 
like this window has on pressing this close button   this window closes.

So for that we are going to 
be using something known as events. Now we'll get   into events more a little bit later. But for right 
now just understand that event is anything that is   happening inside your game paint. By game window, 
I just mean a window inside which your game is   being played. So anything happening inside that 
game window is basically an event. So for example,   if you press arrow keys or anything on your 
keyboard, you move your mouse that is an event   and even when you press this close button, that 
is also an event in pygame.

So this pressing of   the close button is actually known as a quit 
event in pygame. So we are going to make sure   that we exit this loop when this close button is 
pressed. So for that, what we are going to do is   we are just going to create a variable, let's call 
it running and we are going to give it a value of   true. And inside this while loop we are instead of 
just typing in while true to make it an infinite   loop, let's call it while running. And whenever 
we want to break outside of this infinite loop,   we're just gonna turn the variable of running 
into false, and it will automatically break this   while loop. So if you don't know the basics of 
Python, or programming, basically, while true runs   infinitely and when this value of true is turned 
to false, it comes out of the loop.

But we're not   going to go into much into that because that's 
just like very basic programming. So anyways,   after writing while running, what we need to do is 
go through the list of events that are happening   inside our game window. So for that, we are going 
to create a for loop and create a variable event.   And then we are going to loop through all of 
the events that are happening inside our game   window. How do you do that pygame makes it really 
easy.

Just type in PI game dot event dot get and   then brackets and this makes sure that all of 
the events that are there that are happening,   get into this pygame dot event dot gate. And then 
we can loop all of these events using the for loop   and one by one check. If this cross button has 
been pressed, and women whenever this cross button   is being pressed, we'll just turn this while loop 
into false so this is pretty easy. So inside this   for event we're gonna check if the close button 
has been pressed.

And how do you do that just type   in if event dot type equals equals two, and then 
we are going to check whether the event in PI game   is quit or not. If it's great, then we're going 
to change the value of running into false. So   this is pretty easy. So we have changed the value 
of true into false whenever the close button is   being pressed. And this close button is basically 
a quit event. And we are going to loop through   all of the events to find this create event. So 
we're going to go into more into events a little   bit later.

But for right now, just understand this 
is what we are doing. So let's just play this and   understand whether it's working or not. Let's see. 
So right now you can see that we do system is not   initialized, it's giving us an error. It says pi 
game dot event dot gate. Alright, so the problem   is that we have misspelled This is not pygame dot 
small letter squared is just pi game dot quit. And   that's pretty much it. So when you are dealing 
with a lot of syntax, you have to make sure that   you write the correct one but small problem, we 
are going to click on play. And now you can see   that this is working and our window is not going 
anywhere the computer is not hanging, it's looking   pretty good. Alright guys, let me just go through 
this once more what we are doing over here. So we   have created our screen, we have initialized our 
PI game. And then over here we have created a game   loop.

So let's actually call it the game loop 
over here, we're just going to add a comment   that says game loop. So this is an infinite loop, 
which makes sure that the game is running always,   and the window doesn't close down. And we know we 
want to do something like move a bullet or move   a play or something like that move a human being 
inside a game window, we have to make sure that we   do stuff inside this while infinite loop which 
only exists when this close button is pressed.   And we have implemented that close functionality 
over here by pressing by getting the events all   of the events using this PI game dot event dot get 
method.

And then we are looping through all of the   events. So if more events are added, for example, 
if somebody presses an arrow key to move forward,   that is also going to be looped in does pygame 
dot event dot loop. And then we can add another   condition that if arrow key is pressed move 
that player but more of that in the future.   For right now just understand, we looked at event 
dot type equals two pi game dot quit and then we   change the running into false to make sure that 
we come out of this while loop.

And I know guys,   I'm revealing a lot of stuff right now. But this 
is like the basics of game development. So I want   to make sure that you guys understand it properly. 
Anyways guys, this is pretty much it for this   video. In the next video, we are going to change 
the title and add some stuff into our game window.   So I'll really look forward to that. So right 
now it's just blank. And it's just saying my game   window is not cool. So we're going to look into 
that in the next video. I'll see you over there.   So in the last video, we learn how to create this 
game window using pi game. So this window is a   little bit not personalized, because it says pi 
game window over here. The background is weird,   the logo is not there. So in this video, we are 
going to be learning about three main things.   So first thing is how to change the caption 
of this window instead of pygame window will   make it something say something like Space 
Invaders, we're going to learn how to change   the logo of this window right now is like 
a snake or a turtle or something like that,   and how to change the background color of this 
window.

Now these three things are very basic,   but obviously very important when you're creating 
a game. So let's get started on that. And first   thing we're going to do is obviously just comment 
that so that you guys can come back to this code   and look what's happening. So we're going to 
write a comment title and icon and after that,   we are going to change the caption or the title 
of our window and pygame makes it very, very easy,   you just write it by game dot display. Because 
we are meddling with the display of our windows   we have to write in on display, and then dot 
set underscore caption and there it requires   the title of the window let's just call it 
Space Invaders because that is what we are   creating. And then we are going to create the 
image so you must have been seeing this UFO dot   png image over here we are going to be using this 
image in just a second I'm going to show you how   you can get this image but before that, let me 
just add this icon inside our program.

So for   that this is also very easy. First of all, what 
you can do if you want to get the same image is   that you can go to this website known as flat 
icon.com and then search for spaceships or any   kind of icon so I've searched for spaceship and 
I got this cute UFO icon. So to download this,   you can just click on Download collection and 
make sure that you select PNG and then 32 by   32 pixels size. So whenever you're working 
with an icon and pygame make sure you select   the 32 into 32.

I haven't experimented with 24 
or 16 pixels. It might work but I'm just going   to go with 32 into 32 pixels. You can select 
any other icon if you want. So I selected this   icon and I just downloaded it into my project and 
here is UFO dot png. Now to add this inside our   Python program it's pretty easy Just type in icon 
equals two pi game dot image because we are using   an image, so we are going to be using the image 
module that is inside pi game. And then dot load,   we want the image to load. And then we just 
write the name of the image. So in my case,   it's UFO dot png. So we are going to use that UFO 
dot png. And then the next line is pretty simple,   we are going to use the same dot display that 
we did with the title. And we're just going to   write that over here. And then just said, snort 
showing by this, I think it's set underscore   icon. So you can use that. And then you just 
type in the variable name of icon over here,   that we have created.

And this will make sure 
that the icon has been added. So let's just run   this and see if it's working or not. So as you 
can see, the icon is also working and the Space   Invaders is there. So this is looking pretty good, 
we have learned how to add an image, not exactly   an image just icon over here and change the title 
of our window. So this is looking pretty good. The   third thing we need to learn is how to change the 
look or the background of our window. So for that,   we need to use something known as screen dot fill. 
So we are going to go inside our while running   loop and over here we are going to write screen. 
So anything that you want to be persistent inside   our game window that you want to make sure that 
appears continuously, it can be an image or it   can be some text, it has to go inside this running 
infinite while loop. That is where we are going to   change the color inside this running infinite 
while loop.

So we're going to just state screen   dot fill. And then inside this, we're going to 
create a tuple make sure you add another bracket   inside it. So there are two brackets, and then 
you give it three values of RGB. So we're going to   give it I'm going to explain what RGB is in just 
a second, I'm just gonna give it a value of 000.   Right now, just to understand this RGB means is 
red, green, and blue. And basically every color in   this world is made up of these three values.

And 
one more, you can see a PCT, but let's not go into   that. So RGB basically stands for red, green, and 
blue. And this is the values these are the three   values that you can use to basically implement any 
color on the screen. So this makes sure and this   value goes from zero to 255. So you can make it 
255. But not more than that. And you can use it in   a combination. So they say we want just a pure red 
color. So we'll say red, we want to 55 and then   green zero and blue zero. And similarly, if you 
just want a green color, we can say zero to 55,   and blue as zero now what if we wanted a light, 
light green color, we can lower down this value   to maybe like 150. So this will be a lighter 
version of pure green. So this is how it works,   basically. And just to show you guys a more better 
version of RGB, or what you can do with RGB. If   you haven't understood it properly, let's go to 
Google.

And you can just type in color to RGB   and go to any website. But I'm just going to go to 
this reputable website. And over here you can see   these RGB values. So obviously, I told you red 
is 255 00 line is 255 03, this, and similarly,   and so on. So let's go with this red color 
right now. And you can choose any values. And   there are a lot more colors, you can even make 
your own colors by trying out different three   values. So just experiment with it a little bit. 
So I'm going to just choose the red color.

So we   are going to go back to our code and I'm going 
to write down to 55. But this is not going to   work even though we have tried, but this is not 
gonna work just telling you in advance. So you   can see that it's not working, it's just a black 
screen. So over here, we need to use something   known as update. So right now our display is not 
updating. So that's why pygame provides a method   known as display update to make sure that if we 
add anything inside our display window, it gets   updated inside this while running loop. So we for 
that is pretty easy, just make sure that you add   it after every game. So it's pi game dot display. 
So let's just try display dot update.

And that's   it. So we have to add a couple of lines inside 
your pipe icon game code. The first line is this   init line. And obviously you need to make a screen 
but two lines that are always going to be there is   this init line. And the second line that's always 
going to be there is this update line because you   want to update your screen because your players is 
going to move away the bullets are going to moving   to Amy's going to move moving the score is going 
to be changing.

So you want to make sure that your   display is always updating and by display I just 
mean the game window that we are working on. For   this program. It means this screen variable. So 
anyways, so now we have updated it. Let's give   it a shot. Let's click on Play and as you can see 
now it's in red color. So it looks good. We have   changed the title. We have changed the logo and 
our screen is updating to read, I don't like it,   I just wanted to show you guys that you can change 
the color and maybe we'll change it to something   a little bit more funky in the later videos right 
now I'm just going to go with black that is 000.   And that's pretty much it.

So guys, I'll see 
you in the next video where we are going to be   finally adding images and our player that is maybe 
a spaceship some kind inside our game window. And   so I'll see you there where we are going to learn 
how to add images inside our game. So peace out.   So in the last video, we learned how to add 
a caption and a logo and how to change the   background screen of our game window. In this 
video, we are going to learn how to add an   image to our game window, which is pretty cool and 
pretty easy because of pygame. But first of all,   let's look at the player PNG which we are 
going to add inside our game window which   is kind of a spaceship which is shooting being 
sort of its arms.

So if you want this image,   you can just go to flat icon.com and download 
this image. Obviously you can use any other image   you want. But I'm just going to stick with this 
image. And you can go to download collection. And   obviously search for arcade space over here. 
If you want this exact image and then choose   PNG and choose a 64 by 64 pixel. Obviously, you 
can resize it in pygame.

But I've seen that it's   better if you already get the image of the size 
that you want. In this case, I want a 60 by 64 by   64 pixel version. So I'm going to take that, and 
I've already added it to my project over here.   So after you have done that over here, then you 
can come back and we can start adding the image.   But before we even start that, I just want to 
discuss what is this 806 100 I have put over here,   I wanted to discuss this because this 800 is the 
width and the 600 is the height, I think I might   have said something wrong about this. In the 
starting videos. This 800 is actually the width   and not the height and the 600 is the height. So 
if you look at our window, this is the x axis,   you can think of this window as an x and y axis 
window. So if we go from left to right, this is   an X axis.

And if you could go from top to bottom, 
this is a Y axis. So it's always starts from zero   comma zero, which is at the top left corner, 
and then we as we go on the right hand side,   the x value starts to increase. And on this top 
right corner, the x value is 800. Because that   stands for width. And now if we go from top to 
bottom, the value of y increases while the x   value remains the same. So over here, the value 
is 600.

But the value of x is zero. So if you   don't understand it a lot, don't worry about it. 
Just think of it as this left, left to right is   basically x. and the value right now of this whole 
window is 800 in terms of its width, and the value   from top to bottom is 600. And the value at the 
bottom is 600. And if you want to go into into the   middle, it's approximately 300. Not approximately 
exactly it's 300. So why I'm telling you this,   because we want to place our image in a particular 
position. So that's why we need to give it in stat   coordinates. Obviously, you can experiment with 
coordinates a little bit, but we'll go into it.   So let me just add a comment over here so that we 
know that we are talking about the player and then   we need to add the player image which is pretty 
easy like we have done it in the in terms of the   logo.

So let's just copy and paste this over here 
and change the UFO to player dot png. And then we   are going to give it the x and y axis. Where do 
you want the image to be positioned. So let's   create two more variables. Let's call this player 
x. And we're going to give it the value of 370.   And I'm going to go into why we give these values 
to player x and player y. So these variables   basically represents the coordinates that we want. 
And over this, we are going to give the buyer the   value of 480. So why have we done that. So if we 
look at this window, we want to clear image to   appear somewhere over here, which is exactly the 
half of the screen width. So we want it to appear   at the starting of the game, at least we want 
it to appear in the middle. And we want it to   appear in the lower half of this window.

So the y 
axis should be closer to 600. Because this point   is 600. If you guys remember this lower part, so 
you want it to appear a little bit above it. So we   can give it a value of about 480 or 450, whatever 
you guys want. And then the x value we're giving   it 370 which is a little bit half less than half 
of the width. So the width is 800. And if we go   a little bit less than this, this is 370. Because 
we have to consider the size of the image itself.   If we give it exactly the value of 400 then it's 
not going to fit perfectly. That's why we have   given these values so you can see that the 370 is 
somewhat half of 800 and this purity is close to   600. Obviously when we change the values, you will 
understand this concept a little bit better and   feel free to change this values and see the effect 
it has.

Now after this, we're just going to create   a function and we are going to call it player. 
Now I'm going to go into why we are creating a   function. But let's just create a function for 
now. And then we're going to use a method known   as screen dot blit. So grid basically means to 
draw, so we are drawing an image of player on to   our screen. And this screen is actually known as 
the surface of our game, we'll go into what it is   surface, which later I know I'm saying that 
a lot, but it's not relevant to this video,   but just understand that we are drawing this image 
of player dot png on our game window, by using   this method known as dot blade.

And dot blade 
blade actually means to draw. So we after loading   the image, you also need to draw it on the screen. 
So that's why we are using this screen dot blade   method. And over here, it requires two parameters 
or values. The first value is of the image itself.   So we are going to give it the image. And the 
second thing it requires are the coordinates.   So we are going to give it the coordinates of 
player x and player y. So the x and y coordinates.   After this, we are going to call it I'm just 
going to ask you guys a question, Where do you   think we should call this player, we want this 
player to appear in every frame of the screen,   we don't ever want this player to disappear. 
If you guys said inside this while loop,   you guys are correct.

So we are going to call this 
player method inside over here. So let's just call   it and we're going to just call it over here, like 
this, and make sure that display method is called   after this screen dot fill method. Otherwise, 
this player won't appear on the screen. Why do you   think that is, this is because the screen is drawn 
first. And then on top of the screen, we draw a   player or a spaceship.

If the opposite was true, 
then the spaceship will be drawn underneath the   skin, the screen, not the skin, but then it will 
be drawn underneath the screen. So that is why we   always want it to be drawn after screen dot fill. 
Actually, let's change let's remove this position   to from there to over here somewhere. So that we 
guys know where this so because we are going to   be adding a lot of images and stuff.

That's why 
we need to make sure that this screen dot fill is   just above everything, and all the other things 
and drawn on top of the screen. Alright guys,   so this is pretty much it. Let me just add another 
comment, I don't know where it disappeared, the   standard for RGB, and red, green, blue, just to 
make sure that you guys still remember what this   is. Alright, so this is looking pretty good. And 
our player should appear on the screen. So let's   run it. And then we'll just go through all of this 
stuff again to see what is happening. Alright,   so as you can see, our image has appeared on the 
screen. So first, we loaded the image in display   an image variable, we pointed out the x and y 
values and the x and y values were dependent   on the screen size that we gave over here.

806 
100 because he wanted it to appear in the let   me just close this one, the old one. All right. 
And because he wanted it to appear in the middle,   that is why we gave it the value of approximately 
half of the screen. For example, if I gave it the   value of let's say just to experiment, let's say 
we gave it the value of let's say 750 that is   close to right hand side, and we reloaded it. 
And let's wait for it. Okay, as you can see,   it appeared on the right hand side. So you can 
see that the x value has increased. And similarly   if we decrease it to, let's say about 30. I'm 
just showing you this to guys so that you guys   can understand the x and y positions clearly, 
you can see that it appears on the left hand   side. So let's change it to back to about 370. 
And similarly in y if we change this to maybe   30 you will see that it appears on the top of the 
screen instead of at the bottom of the screen.

So   as we get go down, we are getting closer to that 
600 value. So we are going to from zero to 600.   So let's get back to 480. And hopefully now you 
guys have understood properly the meaning of this   x and y axes. So anyways, after that we created 
this function known as player and inscribed   that we drew this image onto the screen and 
it required two values the image the x and   y coordinates and then to make sure that this 
player is always shown on the screen we added   it to this wild game loop infinite loop. So guys, 
this is pretty much it for this video. I might be   repeating a lot of things a lot of times that 
might be a little bit irritating for some guys,   but hopefully you guys understood it properly. 
In the next video we are going to learn how to   move this player from left hand side to right 
hand side using our arrow keys on a keyboard.   That's going to be really exciting.

Let's wait 
for that. So as in the next video, peace out   In the last video, we learned how to add an image 
inside our game window. In this video, we are   going to learn how to move this image left, right 
or top or bottom. So basically we are concerned   about the movement of an object inside our game 
window. Or anything that we draw it can be image,   it can be an text after you watch the 3d game 
and understand how the mechanics of movement   in a game works.

So just to make sure that you 
guys understand it, I have created an image so   that you guys can understand what we are going 
to do, and the basics of movement of an image   or anything that you want. So obviously, we have 
created a game window. This is argument though it   is 800 wide, that is 800x axis, and then it's 
600 is height. That is you can see it on this   as y axis. And our spaceship currently is at 
370 pixels.

As we have added this over here,   that is the player x s ad 370 pixels. Now if we go 
back to our image, what if we wanted this image to   move from over here to over here, we can just add 
five pixels to our already existing 370 pixels and   this image will move in the right hand direction. 
And now what if we added five pixel continuously,   so this five pixel will be added continuously, 
this image will continue to move towards the   right hand side.

So for example, we can add 
a functionality which adds five pixels to our   existing 370 pixels in a while loop, some kind of 
a while loop. And this will happen continuously   after every iteration of our loop. Similarly, 
if we want to move it to the left hand side,   we can just decrease some value from our 370 
pixel value. That is we can decrease some x   player x value and we will move towards the left 
hand side.

And similarly if we want to move up,   we can subtract some y values. So currently, the y 
value of this is 480. So if we subtract some value   from this 480, it will move towards up direction 
and if we add some value, it will move in the   downward direction. So adding and subtracting 
values from x and y coordinates have a current   position of the object or in this case, patient 
can lead to a movement of that object. And we have   to add it to a while loop because we want it to 
happen continuously. So if we go back to our code,   we need to add one thing before I can show 
you guys how we can add values to our player   x and player by or we how we can subtract it.

So 
before that we need to make some changes, because   currently there is no way to manipulate the x and 
y coordinates from our while running loop. And if   you didn't understand what I meant by this over 
here, don't worry about it. When we actually write   the code, you'll understand what is happening and 
what I mean by increasing the x value to move it   towards the right hand direction.

Basically, if 
you move it very, very quickly, it won't seem that   the image is moving, it will just seem like that 
the spaceship is continuously moving. Because of   the effect of persistence. In our eyes, we can't 
see things that are happening very, very quickly.   Like magicians do, they create illusions by moving 
things really really quickly. And the persistence   in it tells us that the image hasn't been erased 
and then created over here, it just assumes that   the image has moved on the right hand direction 
if you're adding the five value to our already   existing x coordinate. So anyways, we need to do 
something so that we can manipulate the value of   player x and player y from the running y Lu.

So 
what we can do is go to this def player function   and over here at x comma y, so that we can send 
in the values of the new x&y coordinates that we   want. And then instead of player x and player 
y, we can just add x and y. So that the values   that we send to this player instead of the last 
value is that it caught from player x and player   y. Instead of that the new values that we send in 
of x and y are being shown on the screen are being   drawn on the screen. So now we have to go back to 
the place where we are calling this function. So   over here, right now let's just write in player 
x and player y. And you will see that there has   been no change. So let me just exit this first and 
then play it again. Let's play it. So you will see   that there has been no change because you're not 
manipulating the player x and player y value right   now.

So let's go through this once as to what's 
happening over here. So first, it goes to this   code, it creates the spaceship, then it takes the 
coordinates of the x and y of your player or the   spaceship, and then there is this player exchange. 
Let me remove this right now we don't need it. And   then if we go down, we have created this function 
of death player x comma y. And then this is being   drawn on the screen. So this code hasn't been 
executed yet because it is inside this wandering   while running loop. But the program just sees 
that this exists. Now when we go down over here,   then this player thing is called and it takes the 
player x and player y value from here and sends   it to this Deaf player function and it Inside 
x and y, currently the 370 and 480 exists.

So   this image is being drawn at this coordinate. 
Now what if we change the value inside a while   running function. So for example, let's say we 
increase the value of player x by something small,   this let's, let's increase continuously by five. 
So this will move really, really quickly, and you   won't be able to see the image moving towards the 
right hand side. But I just want to show it to you   guys for the speed. So you can see how quickly it 
moved, I hope you call it, this will slow it down,   I'm just going to give it the value of 0.1. so 
that you guys can see it properly. And you will   see that it is moving in the right hand side 
direction slowly. So why is this happening.   So every time this while loop is running, the 
player x coordinate increases by 0.1. And this   value is sent over here and this function player 
function, and then it is sent to this new player   function.

And a new image is basically drawn on 
a new coordinate and the original image is being   removed. So for example, let's also just, let's 
make it 0.2. And this time, we are also going to   print out the value of player x so that you guys 
can see that the player x value is increasing from   our original value. So here, you can see it being 
increased by 0.1. And it's going on, let's stop it   right now. And let's actually try it to move it in 
the left hand left hand side direction, so let's   give it a minus value of 0.1.

So now we want to 
decrease the value. So instead of increasing the   value, we want to decrease the value and move it 
towards the left hand side. So let's play it again   this time, and hopefully, let's just remove the 
player of the print function because we don't need   it. So now let's play it. And you can see it's 
moving towards the left hand side. And similarly,   if we do instead of the x coordinate, we do the y 
coordinate and decrease its value is going to go   towards the up direction.

So let's reload it. 
And you will be able to see that it's moving   towards the up direction. And similarly if we 
add stock, it is going to go down. So hopefully   you guys understood the mechanics of a movement of 
an object. Just to reiterate, why is this movement   happening? Why is when when we are decreasing, the 
value in y is going up. So because at the bottom,   the value of y coordinate is 600.

So if we 
decrease the value, it is going up. So over here,   it's about 480. And if we decrease it more, it's 
going to go towards up direction. And similarly   if we increase it, it's gonna go below more 
than 600 coordinates. So right now you can see   there are some, some fallacies with this system. 
Right now, we can't control where this is going,   and you will be able to see that it just goes 
outside the screen. So we need to do a couple   of things.

First, we need to make sure that we can 
control the movement of the spaceship in the left   and the right hand direction using an arrow keys 
on the keyboard. And the second thing we need to   do is add a boundary so that the spaceship 
doesn't go beyond our game window right now   is just disappearing by going outside the game 
window. So we'll be handling these two things   in the next and the coming videos. In the next 
video, we are going to learn how to add keyboard   support to our game. So basically, we are going to 
control our spaceship using arrow keys. And that's   going to be really exciting. So I'll see you in 
the next video. This is pretty much it for this.   And the last video we learned about the movement 
mechanics of the objects in our game window.

So   for example, if you do player y equals two 
minus equals to 0.1, then it will move in   the other direction. So if I run this man, you 
can see that our spacious is moving in upward   direction. But right now we don't have any way to 
control the spaceship, we can't control it using   our keyboard. And this is exactly what we will be 
learning in this video. So what we'll be doing is   that when we press a left arrow key on a keyboard, 
the spaceship is going to move towards the left   hand side. And when we press the right hand side 
arrow key, then a spaceship is going to move on   the right hand side. So what is the algorithm 
to do that? So first of all, we are going to   check whether any each stroke is being pressed 
on our keyboard, and after we check that we are   going to check whether the keystroke pressed is 
either left hand side arrow key or the right hand   side arrow key.

So we are going to do that. So 
let me just write down an if condition. Let me   just remove this over here, we don't need it. So 
after that, let me just tell you one more thing.   So any keystroke that is pressed on a keyboard is 
actually an event. And as we have discussed before   that an event is anything that is happening inside 
our game window, any kind of input control.

So for   example, if we move a mouse, we click somewhere 
we close this is Windows. So this is a quit event.   And similarly when we whenever we press any key 
stroke on our keyboard, it is a key stroke event.   So for example, every event gets logged inside 
this pygame dot event dot get and we loop through   all the events that are being stored inside it. 
And then after every iteration. So for example,   let's say in the first iteration of this while 
loop, a keystroke is not being placed but on the   10th iteration. A keystroke is being pressed and 
it will get stored inside of spy game dot event   dot get And we'll be able to loop through that. 
And check whether a keystroke has been pressed   or not. So, inside this, I'm just going to write 
an if condition, which says actually before that,   let me just add a comment so that you guys 
understand what we are doing.

I'm going to write   if key stroke, the stroke is pressed, check, 
whether is right, or left. So this is basically   what we'll be doing. Not keystroke or keystroke. 
Oh, god, I'm gonna mess up my spelling. Alright,   keystroke. Can't get this feeling right. All 
right. So anyways, how do you check whether   keystroke is being pressed or not by gay makes 
it really, really easy. It's kind of an event,   which is pygame dot key down. So this basically 
check if any keystroke it doesn't have to be left   or the right it can be alphabet, a even backspace 
or space, it basically checks if any keystroke is   being pressed. So first, we are going to do 
that we are going to write if event dot type,   which we did inside this if condition. So we 
have to go actually inside this for loop. So   we'll just press this tab button over here. Let's 
press this. So now we are inside this event for   loop.

And now we are looping through all the 
events that are there. And if the event dot   type is equals equals to pi game dot key key down, 
then this means that a keystroke has been pressed   on a computer. And now we have to check whether 
the keystroke that was pressed is left. Alright,   so this is also pretty easy. We just again 
type event dot this time we type in dot key   because we want to find out the key that is being 
pressed. And we just type in PI game dot key left,   key left. And this will just check whether the key 
that has been praised is the left arrow or not.   If that is the left arrow, it says for right now 
print.

Left arrow is pressed. And after that I'm   going to write again, I'm just going to copy and 
paste this over here. Like this, and over here,   I'm just going to write right. And instead of 
K underscore left, I'm going to add the right.   Alright, so basically what this does is it checks 
with any keystroke is pressed and then it checks   whether the keystroke that is being pressed, 
is left or right. And after that we are going   to check when the keystroke is being released. 
So after pressing down on the left arrow key,   when we remove our finger from that left arrow 
key, that is known as the removal of the keystroke   or the key up. So key down is pressing that key 
or pressing any button on the keyboard and key up   is basically releasing that press. So we're going 
to check for that over here if event dot type is   equals equals to pi game dot key up. So hopefully 
we'll be able to find that key up over here.

And   then over here, we're just going to check if 
it was the left key or the right arrow key,   and then we are going to print something so 
that is pretty simple. We can just copy this   from here. Let's copy this, paste this and we are 
going to give a condition that if the left or the   right arrow key was pressed, so we can just copy 
this from here and put this colon mark. And then   over here, we're just gonna write key keystroke 
has been released this series so you guys know   what is going on. And I want you to write this 
code down and then actually try it out yourself   so that you guys know what's happening behind the 
scenes. So now we can just press on Play and over   here is going to do nothing. But on our print 
screen over here we are printing all of these   things. So let's press the left arrow key and see 
if something happens.

So we have to first activate   our window over here, and then we can press the 
left arrow key and we can see that the left arrow   is pressed. And when I remove my finger, it says 
keystroke has been released. Now what if I keep   pressing on a left arrow key if I keep pressing, 
it will just say left arrow is pressed and the   keystroke has been released. And similarly if I 
press the right arrow key, it says right arrow is   pressed.

But if I press any other key, it prints 
nothing. So let's actually create a statement   over here to let's say, a keystroke is pressed 
so that we know when any other key is pressed,   it also runs. So over here, we can just press the 
left arrow key again, as you can see, a keystroke   is pressed left arrow key is pressed and keystroke 
has been released. But if you press something   else, let's say enter, it just says a keystroke 
is pressed and not the left and the right arrow   key. And that means that our keyboard strokes are 
working. So now we can just minimize it and we're   going to create a new variable over here. And this 
will signify the change that we want an x so if we   want the X to move in right hand direction, 
we need to add value to this 370 existing   value and we wanted to move on the left hand side 
direction we need to decrease value from eight. So   I'm going to just call it over here create a new 
variable And call it player x underscore change   equals two and right now I'm going to give it a 
value of zero.

And inside our if conditions when   the left key is pressed, I want it to increase 
by 0.1. And when sorry, decreased by 0.1, and   we're gonna change this 0.1 number, it basically 
signifies the speed with which you want the object   to move. And in this case, it's spaceship, 
how quickly you want the spaceship to move,   and we are going to change it later. And even in 
this video, we will see how it goes if it moves   too slowly or too fast. But anyways, right, now we 
are going to decrease the value when the left key   is pressed and increase the value when the right 
key is pressed.

So what kind of change Do we want   in our x, when we want the left arrow keys press, 
so we're going to just right over here, player x,   and it's called change, and we want to decrease 
the value by 0.1, let's say and when the right   arrow key is pressed, we want to increase this 
change by 0.1. So let's remove this minus value   from over here. And when the key is released, 
we want the spaceship to stop moving. And that   is why we want the change to be zero when our 
keystroke is released. So over here, we are just   going to paste this over here. So this is looking 
pretty good. Let's actually remove this comment   from here.

And then we can just add this player 
exchange to our existing player x x coordinate,   so I'm just going to write here x plus equals 
two, and then player exchange. So doesn't matter   whether we are adding over here because we have 
given a term value of minus 0.1. And over here   we are given it a positive value. So whenever 
something is added, and the value is negative,   so I'm just going to give you an example. Alright, 
so that you guys can understand this arithmetic   properly. You might be thinking that why are we 
adding over here because we want to subtract 0.1,   right, so let's say our current value is 
370. Let's actually take a smaller value,   let's take our player x coordinate is five. And 
then when we do plus equal to So this basically   means equals to five plus, and then the value that 
is player x underscore change.

So right now this   value is minus 0.1. If the key left is activated, 
so this value will we actually minus 0.1. So after   this arithmetic is processed, this will turn 
actually into, so let me just add arrow key,   this will actually turn into five equals to 
five, minus 0.1. And similarly, if we add,   then the addition is pretty, pretty obvious. So 
we can just add 0.1. And this will remain the   same just 0.1. And the value will be 5.1. So this 
is how this operator over here works. So we don't   need to worry about whether we are subtracting or 
adding if we have added our arithmetic operator   over here, in this case, it smiles. So this should 
be working, let's run our main.py file and see if   it is working. So let's activate it. And over 
here, when you press a left arrow key, our ship   is moving.

And when we press the right arrow 
key, our ship is moving and we when we release   the keystroke, it is still moving. Why is that the 
case. So let's go over here and see. All right,   so here the place x underscore change is 0.1. 
So we have to change it to value zero, because   we don't want it to move, you can actually change 
it to 0.1 to see how it works, how the spaceship   is stopping.

So let's try it again. Now when we 
move on the right hand direction, and we release,   the keystroke, the ship actually stops. So 
this is looking pretty good. But Asli, this,   the speed is a little bit slow. So I'm going to 
increase the value to 0.3. And now if we run it,   our speed should be sufficiently well. So this is 
looking pretty good in future will change 0.3 to   a higher value when we use the clock concept. But 
we are not using it right now. So this is looking   pretty good as patient is moving perfectly. And 
just to recap, what we did in this video was first   we checked whether any keystroke has been pressed 
on the keyboard. And then if the left keystroke is   pressed, then we increase or decrease the value 
of player exchanged by 0.3. And if our right   key is present, we increase the value by 0.3. And 
whenever our keystroke has been released, we make   sure that the player x coordinate stops changing. 
And that is why we have given it the value of zero   to make sure that the spaceship stops and doesn't 
go on.

And then we just use this arithmetic thing   over here which increases the value of player 
x or decreases the value of player x depending   upon the value of this player x underscore change. 
So this guy's is looking pretty good in the next   video. If you have any queries please ask them 
and questions. So this is pretty much it for this   video. In the next video, we are going to give 
our spaceship an enemy because right now is the   space it's looking very lonely for a spaceship. 
It's just going in the space and it's not finding   any planets or any enemies. So it's thinking about 
its existence and the meaning of life. So what's   happening with me, so we are going to give it a 
meaning in the next video. So I'll see you whether   in the last video we learn how to move our 
spaceship using our keyboard and the left   hand The right hand side direction. And this 
video I was about to give it some enemies.   But then I realized our spaceship is just 
moving out of the screen when you go to the   left and when we go to the right.

So why is 
this happening. So when it goes to the right,   this right border of the spaceship of our game 
window, it actually reaches the 800 width that   we have said. And when it goes beyond this 800, 
it goes to maybe 810 and 105 pixels. So this no   restriction right now to the spaceship movement 
in the left and the right hand side direction.   And similarly, when it moves to the left hand 
side, it goes in a little bit lesser than zero   angles goes into minus territory, because this x 
coordinate is an integer this that's why it can   go to negatives.

And even it can go to minus 
450, or something. So what what should we do,   so what we are going to do is that when it teaches 
the zero coordinate, then we are going to any time   it goes into negative stuff, we are going to 
make sure that it stays at zero by using an if   condition. So we are going to basically tell our 
spaceship that, hey, if your x coordinate reaches   zero or less than zero, make sure it turns back 
to zero. And similarly on the right hand side,   we are going to tell our spaceship, if your x 
coordinate reaches this 800x coordinate path,   then I don't want you to go beyond it and change 
your x coordinate to 800 again, so every time it   goes beyond 800, it's going to just delete itself 
and go back to 800. But it's going to happen so   quickly that the eyes won't see it. And it will 
look like that the spaceship can't go beyond 800.   So let's do that.

That's right. And if condition 
just beyond this arithmetic operator we have over   here. And as I said, we are just going to write 
player x, if this player x becomes less than zero,   that is the x coordinate becomes less than zero, 
then we are going to change the value of player   X to zero. And similarly if our let's write f l 
f, player x becomes greater than or equal to 736   pixels.

So why are we taking this 730 by 36 pixels 
instead of 800 pixels. So because our pixel,   we have to take into consideration the size 
of our spaceship. So if you remember the PNG   size of the spaceship is 64 by 64 pixels. So the 
width of this spaceship is 64 pixels. That is why   we are subtracting 64 from 800. And that means 
736 pixels. So if we chose any other number,   for example 800, then it will stop at this point 
and not before that, but we wanted to stop over   here and not allow any part of spaceship to 
appear beyond the game window.

So that's why   we are choosing this 736 pixel number, we 
just subtracted 64 from 800. And over here,   we are just going to change the value of whenever 
it goes beyond 736 we want it to again go seven to   two back to 730 6x coordinate. And this will mean 
that it will look that it cannot go beyond what is   actually but it's just deleting that spaceship and 
creating a new one sn 36x coordinate picks it. So   let's check this out. And hopefully it works well. 
let's reload it and see if it works or not.

So as   you can see when I press the right arrow key 
doesn't move beyond this. And feel free to try   it yourself and change the x coordinates just 
experiment with it a little bit. So the last   video is pretty long. And this video is pretty 
short. So that's good. So in the next video,   we're finally going to create an enemy 
for a spaceship so and see you over there.   The last video we learned how to create boundaries 
for our spaceship so that it doesn't go out of   bounds.

And this video we are going to give it 
our first enemies have already downloaded an enemy   image which looks like a happy Space Invader. It's 
not going to be so happy when we shoot it with our   spaceship. But anyways, let's get this icon from 
flat icon calm just like we always have and search   for Space Invaders. And I'm going to go with this 
red space and you can select whatever you want   and download the 64 by 64 picture as usual, and 
obviously in the PNG format. So now we can go back   to our code and just like we did with a player, 
we can add this enemy dot png inside our code. So   let's do that. Let's just copy this whole code and 
just add it below the player change it to enemy.   So we're gonna change everything to enemy so we 
just have to rename everything. It's called an   enemy and then I'm just gonna copy and paste this 
in the remaining areas. So let's just copy and   paste everything and instead of the player dot png 
we are going to call it the enemy dot png and make   sure you rename the PNG file otherwise you tried 
if you read enemy dot png is not gonna work.

But   anyways, so we need to also create this function 
again. So let's just copy and paste this too.   So we're gonna paste this over here instead of 
player. We're gonna call it enemy and everything   else should come in the same. Let's format it 
properly. Another thing is in PI charm if you want   to format everything properly if you have written 
code that's not formatted and doesn't look good,   what you can do is you can just press Ctrl, Alt, 
and L, and it will format everything properly   inside your code. So it's just Ctrl L. So as you 
can see, it says imports optimized, it will just   make your code look good. So again, the command 
is Ctrl, plus alt, plus L on your keyboard. So   anyways, now that we have the function of the 
enemy, let's just go down below and add the enemy   over here so that we can call the function while 
our while loop is running.

So let's add the enemy   over here. And instead of the player x, let's just 
call it enemy. And instead of the player x, we're   going to call enemy x. And instead of player y, 
we're going to give it a value of and revive. So   right now you can see that the coordinates are the 
same as all the spaceships.

So this should overlap   our spaceship. So let's see if it's overlapping 
or not. So right now, it's not overlapping. Let's,   let's actually check out why is that happening. 
So this is because inside our enemy function,   we have not renamed this to enemy dot m g. So 
let's do that. Let's rename it enemy dot image,   and then just reload it, and this should work 
properly. So now you can see that the enemy is   on top of the spaceship, but he's not we want, we 
want the enemy to be like somewhere on the top. So   maybe in the middle, but on the top, so we can 
let the enemy x remain the same. But I'm going   to change the enemy y to something else. Let's 
give it a value of 50. I've already tried it   out and 50 looks pretty good. So let's see how 
it looks.

Alright, so our spaceship is moving,   and we have an enemy. But the problem 
with this enemy is that it's not moving,   it's very boring. So we're going to fix 
that in the next video. But for right now,   what I want is that this enemy should appear in 
the random places. So whenever we kill an enemy,   it is going to appear again or in a game terms is 
going to respond again.

So I wanted to respond in   different places, maybe on different x axis. 
So maybe like maybe over here, over here,   update scale, and maybe in y should also appear 
in different places. So maybe next time over here,   and it's same over here. So you want it to appear 
in different places. So every time it reloads.   Basically, we want it to appear in different 
places. And even at the starting of the game,   it should not be constant, it should be totally 
random. So what we are going to do is we are   going to make this enemy x and enemy y actually 
random. So we have to first write down the line   that actually helps us randomize values. So we 
are going to import a package known as random. And   this is pretty easy to do. So let me just minimize 
this over here and then scroll down and over here,   we are just going to write instead of 370, we're 
just going to write random dot Rand int.

So this   is a method inside the random package to choose 
a random integer between two values. And then we   have to give it the value that we want. So we want 
a starting value and an end value. So in our game,   we want it to appear anywhere between zero and 
800. So we are going to give it the starting   value of zero, and the end value of 800. And 
similarly with why we wanted to give a value   between maybe 50 and 150. So let's change this to 
5050 should be the starting point. So the minimum   height should be 50. And then it can go down over 
here, let's say 150. It's approximately 150. So   I'm going to give it a value of 150. Alright guys, 
so this is looking pretty good. Let's just try   it again and see if it works.

So let's run main. 
Alright, so this is working it respond over here,   let's reload it to see if it responds somewhere 
else. Let's just reload it and see where this time   it appears. This time it appears over here. Let's 
try the third time third time is a charm. And it   always works. So this time it appears over here. 
So our program is looking pretty good. We have   created an enemy and it is responding in different 
places.

So this is just looking pretty good. In   the next video, we are going to make sure that our 
enemy moves. So right now our enemy is stationary,   it's not moving from the left or the right and 
it's not going down. So we are going to make sure   that we rectify that in the next video is going 
to be really exciting. So I'll see you over there.   So in the last video, we created our enemy 
and made sure we applied randomization to our   enemies so that when it gets destroyed and created 
again it should appear in random places.

So as you   can see when we reload our program is going to 
respond in a different place. So in this video,   we are going to make sure that our enemy is moving 
so imagine that there are multiple enemies right   now there is just when one enemy and we haven't 
created multiple enemies, so there is not any   problem. But imagine there are multiple enemies 
and they're moving from left to right.

And they're   also when they hit the boundary they come a 
little bit down. So that's what we are going to be   focusing on today. We are not going to be creating 
multiple enemies but we are going to be focusing   on the movement of this one single enemy and then 
we can apply it to multiple enemies. But let's for   right now just focus on one enemy. So what exactly 
do we want from this enemy? What kind of movement   Do we want. So what we wanted to do is move from 
right to left in x direction. So for example,   this enemy will move in the right hand side. And 
when it hits the boundary that is about 736 or 800   pixels, it should change its direction and move 
towards the left hand side, and when it reaches   the left hand side, then again when it hits that 
zero coordinate x coordinate direction, again   changes direction and move towards the right hand 
side. So this is the movement in the x direction.   Now there is also a movement in the y direction. 
So whenever it hits a boundary, whether it can   be right boundary or the left boundary, then it 
should come a little bit down.

So that imagine   there are multiple enemies, and we are trying to 
shoot all of those enemies down. So how will the   game get over. So whenever these enemies hit the 
boundaries and come down at one point of time,   they are going to hit the spaceship as they are 
coming down, and then we'll make it Game Over,   like in the classic Space Invaders, so we need to 
execute the x movement. And as well as we need to   execute the Y movement, this always is going to 
be very easy, because you already know how to move   the spaceship, and we are going to do the same 
thing that we did in the player. So first of all,   we will just scroll up, let's minimize this over 
here. So we're going to slow up and because our   enemy is going to have the exchange as well as 
our y movement.

So I'm just going to copy this   over here and also make sure that we add our 
by movement. Now enemy exchange over here,   we are going to give it the value of 0.3. Maybe 
in future we'll speed it up because a spaceship is   also at the speed of an exchange of 0.3. Maybe 
we will change it upon future. But right now   I'm just going to give it a value of 0.3.

No, I'm 
not giving it a value. So for example, in player,   we haven't, we have just given it a value of zero 
over here. And below over here, we have changed   its direction by typing in negative and positive, 
we are not going to do this with our enemy   V is going to provide the value of 0.3 over here. 
Now if you scroll down, we're just going to do   the same thing that we did with our player. So 
for example, over here, we made sure that if it   hit the boundary, so this is the algorithm 
basically, you can call it the algorithm,   but it's pretty simple. So whenever it hits the 
zero coordinate, we change its value to zero. And   whenever it gets greater than says 36, we make 
sure that it coordinates Kate to send 36 again,   and this prevents the spaceship from going out of 
bounds.

So this is a kind of way of checking the   boundary. So we can do the same thing with our 
enemy. So let me just copy and paste this over   here. And instead of everywhere player, we're just 
going to call it enemy. So it should be in small.   So over here, also, let me just copy actually and 
me and paste it everywhere, this is going to make   sure that we save up some time, not a lot of time. 
But so let's face this enemy over here, over here,   I wish there was a quicker way to do it, but 
it's not.

So anyways, now I'm just going to add a   comment over here so that you guys can understand 
what we are talking about over here. So checking   for boundaries of spaceship, so it doesn't go 
out of bounds. And over here we're gonna write,   maybe enemy movement, enemy movement. And this 
looks pretty good. Instead of restricting us, what   we want is whenever a boundary is hit, we want it 
to go someplace. So for example, when it hits that   left boundary, we want to increase the value of 
x so that it starts going in the right hand side   direction.

And similarly when it hits this right 
hand side boundary, then we want to decrease the   value of x. And this will keep on happening 
because it's inside our while loop. So now   we are going to use the same arithmetic operation 
that we use with our players. So if we scroll up   a little bit, you can see when we wanted to change 
directions we gave, when we wanted to move towards   the left, we gave it a value of minus and when 
you wanted to move towards the right, we gave it   a positive value of 0.3. And then we just added 
because of this arithmetic property. So we are   going to do the same thing over here. So instead 
of enemy x equals to zero, what we are going to   do is we are going to write and meet exchange 
equals to 0.3. And so that basically when it   hits this left hand side that is zero coordinate, 
it can start going towards a positive direction   that is it should start increasing the x value. 
And similarly we want when we want it to go left   hand side we are going to change it to a minus 
value.

So we're going to give it a value of minus   and this should be enough guys. So actually, if I 
scroll up, you can see that I've put the value of   enemy x underscore change equals 0.3. We can leave 
it to zero or we can leave it as 0.3. It doesn't   really matter. Let's run it and see if it works. 
Let me just close down the previous implementation   so that we don't get confused. And I'm just 
gonna run it again run main.

And hopefully the   enemy will start moving. So you can see that the 
enemy is moving from left hand side to right hand   side. And actually, this looks pretty awesome. 
So now you can see that it's not moving in the   y direction is just moving in the x direction. 
So what we want is that when it hits the right   boundary, it should move downwards. Or even if it 
hits the left boundary, it should move a little   bit downwards.

So what I'm going to do is I'm 
going to go over here, and I'm going to add any y   change equals 240. So that we can move it down by 
40 pixels. So why When do we want it to move down,   we want it to move down when it hits the boundary, 
that is the geo coordinate or the 736 coordinate,   so we can just increase the value of y over here. 
And that should be enough.

So I'm just going to   write in me, y plus equals two, and then we want 
the enemy y change, just let it let's just paste   over here. And then we can do the same thing over 
here. Let's not erase that, we'll just add it over   here. So now let's just reload it and see how it 
looks. Now you can see when it hits the boundary,   it actually goes a little bit down. So you can 
imagine multiple enemies, when they're hitting the   boundary they are going down. So it's gonna be a 
little bit difficult for a spaceship to eliminate   all of them, but it's going to try its best. 
And when this enemy reaches the spaceship, we   are going to give it our game over. And depending 
upon how many enemies we can hit with our bullet,   which we'll be creating mostly in the next video 
or in the coming videos. Depending on how many   enemies he can eliminate with that bullet, the 
score is going to be according to that.

So you   can kind of get the idea of the game with this 
video as to how the game was going to look. So   today we are going to be learning about adding 
background image to our PI game. So right now   if we open up our space invader game, you 
will be able to see that we have an image   we have in spaceship, but it's happening in the 
black background, which doesn't look that good,   we need to add some kind of a space background 
to make it very cool. So what I'm going to do is,   I'm already downloaded an image of a background 
that is background dot png. And it's some what   looks like this. So how did I get this image. So 
what I did was I went to this website fault free   pic.com p ik and then free free pick.com. And 
I searched for this text which says colorful   spaceship background. Obviously, feel free to get 
an image from wherever you want. But make sure you   get an image that's 800 to 600 pixels wide is that 
size, because our game window is of that size.   As you can see, we are made again window of this 
area.

So what I did was I went over there and you   can choose any of these images. But the image that 
I chose was this one, and then I used illustrator,   so free pick is a website was going to give you a 
lot of Illustrator Photoshop stuff, and you have   to edit it out to make it your own. So I removed 
all of the weird stuff that we didn't want,   for example, this rocket, this text and stuff. 
So I removed all of that stuff.

And if you know   illustrator, feel free to make a new image on 
your own. So what I'm going to do for you guys,   if you're not able to get this image on your own 
is that I'm going to attach it to the description   or attach it somewhere so that you guys can 
get this image, just look at this videos,   text. So what I'm going to do is after we download 
this background image to our project folder,   make sure you do that, then we're just going to 
add it to our windows.

So over here, how do we   add images to our program is just by pygame dot 
image dot load. So I'm going to do that. So I'm   going to add a comment, let's say and we are going 
to write just background, just write background.   And then I'm going to create a variable called 
background, I'm going to do the same thing   that we did with the wrist. So I'm just going to 
copy and paste it over here. And instead of UFO,   I'm going to write background. So obviously my 
images of 800 into 600 pixels. So make sure it   is of that size. So now that we have added it, 
if we run it right now is not going to appear   because it just appears for a second and then 
it disappears, we want it to persist. So how do   we make it persist is by adding it to our while 
loop.

So we need to make sure that we go to our   while loop over here and we are going to add it 
below this screen dot fill because if we don't,   then this black color is going to be on top of our 
background image which we don't want. So what I'm   going to do is I'm just going to add another 
comment over here. It's gonna say background   image, and we forgot the B's. So let's add B and 
then over here, we're just gonna do the screen.   Just typical thing we do when we want to add an 
image which is screen, dot blit.

So basically   draw the background image and then we need the 
variable of the image so that is background.   And then we need to add the coordinates of our 
image so we just wanted to appear from the top   left corner severe Going to add zero comma zero. 
And that should be pretty good. So let's run our   main.py program, let's run main. And you will 
be able to see that our background is there.   But the problem with a background and NP and 
a spaceship is now that they are moving very,   very slowly. And why is this so? Pause this video 
and figure it on your own territory, pretty cool.   But I'm just gonna explain it over here. So our 
background, PNG is actually 226 pixels, sorry,   226 kB, so it's a little bit heavy. But what 
happens is when this while loop is running, every   iteration of this while loop previously used to 
happen really, really fast. But now because it has   to load this hairy background image, the iteration 
of this while loop, every iteration is a little   bit more slow.

So that is why whenever we are 
increasing the value over here, so for example,   we are increasing the value of player, it is too 
small. So whenever this while loop is going, it's   just increasing the value by 0.3, which is very 
slow. And that's why it's not able to move around   a lot. So what we are going to do is we are going 
to increase the value to five of our players. And   I'm going to change the value of our enemies. 
So let's see where as enemies. So here are our   enemies, I'm going to give it a value of let's 
say, four, I just want these enemies to be a   little bit slower than aspasia. Because when they 
are going to be multiple enemies, then we don't   want them to appear like really, really fast.

So 
let's reload it now and see if it works. So it's   still slow. Why is this happening? a spaceship 
has increased its movement, but the enemy is still   slow. So let's see if somewhere our old values are 
still persisting. So enemy we have changed the x   value over here. So let's go up and see where 
we have not changed the value. So over here, the   enemy exchange is still 0.3. So we have to change 
it over here to let's make it four. And now we can   reload it and you will be able to see that the 
enemy is moving at a good speed. So now we have   the background image, we have our spaceship and 
we have our enemy. The only thing missing is the   bullets because we don't have the bullets right 
now to kill this enemy. So in the next video,   we are going to make our bullets or get started 
with making our butt so i'll see you are there.   In this video, we are going to learn how to shoot 
our bullet inside our game window.

So as you can   see, I'm shooting a bullet and the enemy. So right 
now the bullet is not hurting the enemy because we   haven't implemented a collision yet. But more 
than that in the future videos. In this video,   we're just going to learn how to shoot a bullet. 
So let's get started. But before we get started   with the code, I just wanted to explain a couple 
of things. And the first thing I wanted to explain   is what's the starting position of the bullet. 
So when we are in the middle of the window that   is at 370 pixel x coordinate approximately, 
it's shooting from the top of our spaceship,   but if we move left, it still shooting at the x 
coordinate of our spaceship, it doesn't matter   where our spaceship is, the x coordinate of the 
bullet is going to be always equal to that of   our spaceship, just the starting positions. For 
example, if you shoot the bullet right now, even   if we move our spaceship, the bullet is not moving 
with our spaceship, just the starting position of   the bullet is equal to that of our spaceship.

So 
that is the first thing and the second thing is   that as we shoot the bullet, the bullets of y 
value is decreasing. So because at the bottom,   the value is 600 y coordinate, and as we go up the 
value of y decreases and add the top is actually   zero. So at the top, the y coordinate of y of a 
bullet is going to be zero. So we have to decrease   the value from about 480 pixels. So because this 
480 coordinate y coordinate and we are going to   decrease it as we go towards the top. So right now 
you can see that it's disappearing at the top. So   the third thing I want to talk about before we go 
into code, because it's so important to understand   is the state of the bullet. So right now when 
you can't see the bullet its state is at ready.   But when you can see the bullet state is going 
to be at file. So right now it's not appearing   on the screen. That is That means that we are 
reading the bullet for fire. And when it shoots,   you can see the bullet and that means the bullet 
has been fired.

So let's not do between that   firing period anything. So this is what it means. 
Obviously, we are going to understand this more as   we write down the code. So let's get started 
with that. So the first thing we need to do   is add an image of a bullet inside our project 
folder now already added as you can see on the   left hand side bullet dot png, and it kind of 
looks like this. So how can you get this image   so you can just go to flat icon.com like we have 
done previously and searched for this bullet.

And   you can just download this bullet from here. And 
obviously you can choose any bullet that you want,   and even through Google or something but make 
sure when you download this image it's 32 by   32 pixels. This bullet is not the same as I'm 
using but if you want you can just go to the   sixth or seventh page of this flat icon.com and 
you will find the same image but feel free to use   this image it doesn't make a lot of difference. 
So now we have downloaded this bullet PNG make   sure it's 32 by 32 pixels. Let me just close 
this Photoshop. This is the background, we made   the last video. So after adding the bullet dot 
png, we are going to add it into our byte code.   So over here just below the enemy, we're just 
going to copy this enemy because we don't want   to create everything again.

And instead of enemy, 
we're just gonna write bullet. And we are going to   replace everything of our enemy with our bullets. 
So let's call it a bullet. And then I'm just   going to copy and paste everything. So politics 
bullet why and just paste it but at exchange,   and some of these values we are not going to use. 
So for example, bullet is not going to move in the   x direction. So using this x underscore change is 
useless. But still, we are going to just keep it   over here just for this sake of conformity. 
But anyways, in this bullet x and bullet y,   we are going to give the value of zero bullet 
x because we are going to be changing the value   inside our while loop. But bullet y is going to be 
at 480 pixels. Why is that because our spaceship,   as you can see as clear why is at 480 pixels. 
So at that level, the bullet is always going to   be short.

And so if I run this main program over 
here, you can see that a spaceship is over here.   And what's happening to her enemy, let's reload 
it. Let's see if we have done something to enemy   No. So as you can see, when we move, our spaceship 
is not moving in the y direction, so we need to   shoot our bullet from its top of his nose, which 
is at 480 pixels of y coordinate.

That's why we   have code and this 480 over here. And then we are 
going to add another variable which is going to be   bullet state. So this is the state I was talking 
about a few seconds ago. So we are going to add   a variable bullet state and we are going to give 
it a value of ready. So let me just add a comment   actually over here so that you guys remember what 
this release date is what is y est.

So readystate   basically means you can't see the bullet on the 
screen. And fire. So bullet is currently moving.   Alright, so this is the state we are going to be 
using to basically differentiate between whether   the bullet is in motion or it's in a state of 
constant and it's not being fired right now is   going to help us decide the movement dynamics of 
our bullet. So now we have created another bullet   state equals ready and now we are going to create 
a function known as fire bullet that is going to   be called whenever we press our spacebar. So in 
our game, when we press our spacebar of bullet   is being fired, so that is what you want.

And 
pressing the spacebar when it gets fired. So and   what happens when we press spacebar, we want this 
function of fire underscore bullet to be called.   And we are going to do the same thing over here we 
are going to call the x and y variables. And just   below that, we are going to access this bullet 
underscore state variable equals to ready inside   our function. Now how do you do that, we need 
to create this bullet underscored state function   as global so that it can be accessed inside this 
function.

So I'm just gonna write global and then   call it state. And now we can access the value 
of this bullet state from inside this function.   So after this, after we press space, the bullet 
is actually being fired. So now you can see it   on that screen. So we need to change the state of 
the bullet equals to file. So now it's not ready,   it's actually being fired currently in motion. 
After that, we just need to make sure that it   appears on the screen. So I'm going to write 
skinning dot plate, we need to draw the bullet   on the screen. And then I'm going to write the 
name of our bullet image bullet image. And then   we are going to write the coordinates of where do 
we want it to appear. So we just wanted to appear   on x comma y the values that you are getting 
from the function. Now we want this values to be   at x plus 16 and y plus 10.

Why is that? So let me 
just format everything properly. And you can press   Ctrl Alt plus L if you're using pi charm to make 
sure that it looks good. So why are we doing this   Xpress 16 why plus 10. This is to make sure that 
the bullet appears on the center of our spaceship,   if you don't do plus 16 is going to appear on 
the left hand side of the spaceship a little   bit. I've already tried it out. So that's why a 
note section is the correct value. And this Why   is just make sure that it appears a little bit 
above spatial just to give it an illusion of the   bullet being fired from the top of the nose and 
not from the center of the spaceship.

And now   before we go into the while loop, I just want 
to change the value of change in y because I'm   pulling is moving in the right direction. And 
this is the value that we give to the enemy.   We don't want the bullet to move this fast we want 
it to move at the speed of 10.

So let's close this   window now. And let's just go below and what we 
want over here is that if an arrow key of space,   not an arrow key, if a keystroke or space on 
our keyboard is pressed, then we want to call   that fire underscore bullet function. So let's 
create that over here so that we can just copy   and paste this line. And then at the end, we can 
just add the value of space, okay, underscore   space. And this is going to make sure that we can 
capture the value of space. And what we want when   you press a space, we want the Firebird function 
to be called. And now what are the values inside   this. So right now we are going to give it 
a value of clear eggs. But you'll understand   why this is strong. But this is just like a logic 
error. So I'm not gonna worry about it too much,   but I'm gonna tell you why it's strong. And we 
are going to fix this in this video. So let's try   it if event dot key pygame dot k underscore space 
fire underscore bullet player x comma, y.

So let's   run this right now and see how it looks. Obviously 
it's not complete, not even close to complete,   but we're gonna it's gonna look how it looks. So 
right now you can see bullet is not there. But   when we press the space, nothing is happening and 
the enemies appearing for some reason. Over here,   if you speak, if you've seen yet near the 
spaceship, the enemy is appearing, because we   haven't changed the name of our image.

So let's go 
to the bullet. And over here instead of enemy we   are going to call it bullet. I know when I was 
recording this and you I was just writing the   slide, you guys must have screamed that, hey, this 
should be bullet dot png not enemy dot png word,   no worries, we have changed the value. And if we 
come back, you can see that you can't really see   the bullet over here. But it's actually appearing 
but it's appearing so fast that you can't see it.   So actually, let me just change it to enemy 
again so that you guys can at least see it.   It's happening behind the screen. So let me run 
this. And when we press face, you can see that   the enemy is appearing at near the spaceship, you 
can see this, this is happening.

So this is how   the bullet is also appearing. But right now you 
just can't see it. So let's change this back to   bullet dot png. To put a dot png so we need to 
do a couple of things. So why is it appearing   and disappearing so quickly, what we need to do 
is we need to make sure that it persists in the   background. And when we need anything to persist 
in pygame, we added to our infinite while loop. So   right now this code is only being called when we 
press the spacebar we want this bullet to appear   and not disappear really really quickly. So we 
are going to add another comment over here. And   we're going to call this bullet movement bullet 
movement. And over here, we are going to just   change the values and first check the maybe the 
state of our bullet.

So right now our state is   when you press the spacebar, then the state 
changes to fire. But at default, the state   always remains at ready. So as you can see that 
the bullet underscore state is equal to ready. And   when we press the spacebar, the fire underscore 
grid function is called and inside the function,   the state changes to file. So outside over here we 
can write and condition if bullet state is fire,   then we can actually move the bullet in front of 
the spaceship and make sure it decreases in y.   So we're going to add some values and we're going 
to call this Fireblade function again over here,   and we're going to get rid of value of clear x, 
and we're going to give it a value of y.

And just   below this, we are going to decrease the value of 
our bullet just like we discussed at the starting   of the video, minus plus minus equal minus equal 
to bullet y change which is currently 10. So let's   run this program now and see if it works. So this 
is our spaceship and what's happening to our enemy   y is going crazy. Let me just reload this what's 
what's up with this enemy. Alright, so now you can   see that the bullet is moving.

But this this there 
are two problems in this first, we can only fire   one bullet. So you can see after we have fired one 
bullet, we can't fire another bullet. So that's   one problem. And the second problem is that when 
we fire the bullet, when we move our spaceship,   the bullet is moving with aspiration. Just to 
give you guys another view, when you press space   the bullet is going and when we move the spaceship 
the bullet is actually moving with the spaceship.   So we will be solving both of these problems in 
the next video. For right now I'm just going to   give you a recap so that you guys can understand 
properly what is going on. So let's go The moment   you press the spacebar, so when you press the 
spacebar, this event of spacebar is triggered and   this fire grid function is called.

And over here 
we sent two values that is the current position of   player x and a bullet y value. The bullet y value 
is for at y coordinate and the player x is the   movement where the spaceship is the x coordinate 
of the spaceship and that is partly the reason   why the bullet is moving in the direction of the 
spaceship but we are going to tackle that in the   next video. So for right now we are calling this 
fire bullet function whenever the space key is   pressed, and we're transferring the value of 
player x and bullet y to our fire underscore   unit function. Now this fire blade function is 
due to changing the state of our bullet state   underscore to fire so that when we execute this 
y loop All this code can be executed. So we are   finding firing the bullet and to find the ability 
first need to show it on the screen.

So we are   blurting it out or drawing it on the screen. And 
we have changed the value of 16. And why. So just   to show you guys why we have changed the values, 
let me actually remove the x and y values, so that   you guys can see the difference. So I'm just going 
to turn play and I'm going to shoot a bullet. As   you can see, the bullet is being shot a little 
bit from the left hand side and we want it to   be shot from the middle of the screen. That is why 
I did that. So the middle of the spaceship not in   the from the middle of the screen to be exact. But 
anyways, after we did this fire in this corporate   function has been called the bridge state has 
been returned to fire. And then we go to this   infinite while loop which is running but it wasn't 
running because before running the spacebar or   before pressing the spacebar, the bullet state 
was ready. So all of this code was not getting   executed. But after pressing the spacebar, the 
bullet state has been changed to fire.

So now we   can put blade this out on the screen by calling 
this fire unders component function. And we can   start actually changing the location of the bullet 
by moving it in the upward direction by reducing   the value of y. So guys, this was the logic of 
our bullets. In the next video, we are going to   tackle the two problems that we have discussed 
in this video. So I'll see you over there.   The last video we learned how to shoot a 
bullet.

But there are a couple of problems   with our program right now we can shoot only 
one bullet at a time. And that said that's it   for the whole game has a pretty big problem. And 
the second problem is that the bullet is always   following our spaceship doesn't matter where it 
goes, bullet will follow it and we want it to   have an individual path. So for example, we wanted 
to have, we want the bullet to have the starting   point of our spaceship, the x coordinate our 
spaceship, but when we move the spaceship,   that bullet should continue on its original x 
coordinate and not of our current spaceship. So   these are two problems we are going to solve. 
Let's solve the first problem first of having   multiple bullets. So for that, what we are going 
to do is we are going to add an if condition.   So right now, if you watch over here, when the 
bullet goes up, it goes to the zero coordinate,   and then we are not doing anything to a bullet.

So 
it just keeps on going into negative values. And   we are not removing the bullet from our screen. 
So what we need to do is as soon as it crosses   the zero coordinate, we need to make sure that it 
resets to the value of 480. So as soon as soon as   it goes above zero coordinate, two things are 
going to happen first is going to reset to 480   pixels of y. And the second thing is because you 
can't see it on the screen anymore, because it   has gone beyond zero y coordinate, we are going 
to change the state of a bullet to ready again,   so that we can fire it the next time. So let me 
just add an if condition this beneath this bullet   movement, which says if bullet y is less than 
equals to zero because above zero is going to   be negative values. And over here we are going to 
do two things. First is we are going to reset the   state of the bullet that is the bullet Why should 
be reset it to 480 again, and the second thing is   we need to change of the bullet state.

So bullet 
state is going to be ready again. And let's make   sure that we don't misspell anything. And we are 
going to format this properly. Press Enter and   now let's reload it and you will be able to see 
that our bullet is multiple. So right now you can   see we are short one bullet, then we can shoot 
another bullet and it keeps on happening. And   now that we have fixed the first problem, let's 
focus on the other problem. And that is that the   bullet is following our spaceship.

So why is this 
happening? This is happening because in our code,   we are still using the player x value. So if we go 
to our space condition, so after pressing space,   we are using the player x value. And even 
in our bile if condition code of over here,   we are still using the player x value. So it's 
alright that we want the starting position of our   bullet to be at the spaceship that we just removed 
this recording thing. So at the starting position,   we want the bullet to be at the x coordinate 
of a spaceship. So when you press space,   the bullet starts from the spaceship and not 
from somewhere else. So for example, over here,   we want to x coordinate of a bullet to be that 
of the x coordinate of our spaceship.

But when   we move after firing the spaceship, the x 
coordinate shouldn't follow the spaceship.   So that is the problem that we are having. So how 
do we solve that. So instead of using the bullet,   the space player x value everywhere, which is just 
use when you press the spacebar, one value of the   x coordinate just should be just saved.

So we're 
gonna do that we're just going to write bullet x,   we haven't used this variable yet. And we are 
going to save the value of player x over here.   And then instead of player x, we are going to send 
the value of bullet X to our fire bullet function.   And we are going to do the same thing over here 
in our if condition so instead of player x,   you're going to use the value of bullet x and 
that should solve the problem. So let's run our   main program again and see if it works. So this 
is a spaceship. And now if we move our spaceship,   the bullet is not following our spaceship. So, 
we had what we have done is when the spacebar is   pressed, then we are saved the current spaceship x 
coordinate inside our bullet X variable.

And then   we are using that everywhere instead of just using 
player x. So now that we have fixed that there is   one more problem to fix, which I've just realized. 
So the problem is that after pressing if we press   the spacebar again, so for example, we press 
the spacebar, the bullet is going. And then if   you press the spacebar multiple times this bullet 
is going to change just keep on moving according   to our spaceship. So multiple spacebar changes 
its x coordinate. And why is that happening. So   while the bullet is a moving condition, it's in 
fire condition. Even in that condition, we can   press our spacebar, so we have to make sure that 
we can only press the spacebar when it's in ready   condition.

So we're going to add a if condition 
over here, which says if bullet state is ready,   let's add double quotes for the string. If 
the police state is steady, only then we can   fire another bullet, otherwise we can't fire the 
bullet. So after our bullet goes above this zero   coordinate or our bullet is in ready state only 
then we can fire another bullet. So now if you   play space, all the errors have been fixed. Except 
this first one, I don't know what happens to is   sometimes. Alright, so let's shoot. And you can 
see that after it has crossed the zero coordinate,   and it resets to 40 y coordinate again, only then 
we can shoot another bullet.

So this is looking   pretty good guys, we have finally completed the 
bullet module. This was a pretty long module   because there were a lot of complications in it 
and a lot of things to understand. So let me just   recap so that you guys can understand everything 
properly. So if anybody has understood everything   perfectly, you guys can just stop this video. 
So what happens when you press the spacebar,   when you press the spacebar First, it checks 
whether a bullet is already on the screen or not.   If it's not on the screen, then it makes sure that 
it gets the x coordinate of our spaceship, let me   just add a comment so that you guys can understand 
get the current x coordinate of the spaceship.

So   it gives the current x coordinate of the spaceship 
and stores it inside this variable bullet x and   then it fires the bullet using this bullet X 
variable. And this bullet Y variable basically   which we have said before that is 10 because we 
want the bullet to move at the speed of 10 or   change its y value at every vile iteration at 10. 
So after we do that it goes to this fire bullet   function and over there it changes the state to 
fire and then it creates that bullet. After it   changes its state to fire it goes to this while 
loop iteration I checked, it says if bullet state   is fire, and it keeps on firing the bullet. If we 
don't have this fire underscore bullet statement,   then the bullet won't appear on the screen. So 
anything that we want to be persisted inside, our   game needs to be included inside our while loop. 
That is why we have this function inside our while   loop. If this statement was not there, the bullet 
wouldn't be there. So that is why we need to make   sure that the bullet is continuously appearing on 
the screen after every iteration of while loop.

So   after it fires a bullet it keeps on changing 
its y coordinate. Because of this statement,   it happens that it goes above the screen. So 
after it goes above the screen this if condition   is activated, and it resets the bullet to 480 y 
coordinate and then it resets the bullet state to   ready again. And then we can press the spacebar 
again and everything happens again. Basically,   it's saved again the x coordinate of a spaceship 
but I'm not going to go into all of that.

So guys,   that is pretty much it for this video. 
In the next video we are going to create   multiple enemies. So right now there is only 
one enemy so it's very easy for our spaceship,   or maybe depending upon what I want. And 
maybe I'm going to teach you guys how to   shoot this enemy. So right now this enemy 
can pass through the bullet and nothing   is happening to him. So we are going to 
probably discuss that in the next video.   So in the last video, we created multiple 
bullets, instead of shooting just one bullet,   we can shoot multiple bullets at the enemy and 
we don't have to, you know, just just shoot one   bullet during the whole game. But as you can see, 
our bullet is going through the enemy and it's   not colliding and nothing is happening when the 
bullet hits the enemy not the score is increasing   and the enemy is also at the same place.

It's not 
responding anywhere, which we want. So in this   video, we are going to learn about the collision 
concept how to make sure that the two objects have   collided. And that's a very important concept in 
gaming. So what do We'll be doing is that let me   just actually reload this game so that we can see 
the bullet and the enemy properly. So what I'm   going to be doing is we are going to calculating 
the distance between the bullet and the enemy.   And if the distance is short enough, then we 
conclusively say that the bullet has collided.   So the bullet has an X and Y coordinates where 
it goes up through the screen. And similarly,   this enemy also has an X and Y coordinate, when it 
goes through the screen on left, right or up and   down. So we are going to use all of these four 
coordinates, that is the x coordinate and the x   coordinate of our bullets and the y coordinates 
of both our bullet and an enemy to calculate the   distance between them.

So now what I want you 
guys to do is go to Google and type in distance   between two coordinates. And we're gonna take you 
to this website math planet.com. And over here,   there is this equation, which says distance 
equals to x coordinate minus x coordinates of   other objects squared plus y coordinate of one 
object and y coordinate of the object square,   and then a square root of the whole thing. And 
this x two and x one doesn't matter, whatever is   at front because and by the end of the day, we are 
squaring this. So obviously, you must have learned   this in school or in college. But if you haven't, 
don't worry about it, just go through this article   a little bit, you just need to execute this code 
in this equation in our Python.

So even if you   don't understand what this is doing, we are going 
to learn how to actually implement our equation   in Python. So that is going to be really helpful 
for you guys. So keep this equation in mind. And   let's go back to our code, and just beneath this 
fire underscore bullet function, we are going to   create a new function, and we're gonna call it is 
coalition.

So this function is basically going to   help us with define whether a collision between 
the bullet and an enemy has occurred or not. So   he's going to take four values, the x coordinate 
of the enemy, the y coordinate of the enemy,   the x coordinate of the bullet, and similarly, 
the y coordinate of our bullet. And now we are   going to create a variable known as distance, so 
this distance will store the distance between the   bullet and our enemy. And how do we calculate 
this distance, obviously, using this equation,   so distance equals two, and then we're gonna 
do a square root. So to do a square root, or do   any kind of mathematical operations, you need to 
import something known as math.

So if you go up,   I haven't imported math yet. So I'm just gonna 
write import math. So I'm going to import that.   And then First of all, we want to do the square 
root. So let me go over here and just write   math.sq Rt. So this is the basically the function 
or the method for doing square root, and then   apply some brackets. Now we need the Nv x and the 
bullet x, and we need to subtract it according to   the formula. But before we even that, we need to 
square it. So if we go back to our equation, you   can see after the square root, the x two minus x 
one is being squared. So we also need to implement   that mathematical formula. So we're just gonna 
write math dot POW. So this stands for power,   and then it requires two values, the x and the y. 
So we're going to do that. So we're going to just   write comma two, because we want it to be squared, 
and then over here, we are going to give it the   value of enemy x minus enemy y.

Alright, so this 
is looking good, we have executed the first part   of our equation, now we have to execute the second 
part of the equation that is plus y two minus   y one and two squared. So we are going to go 
back over here and inside our math.pi. So this   is this part math.pi x two, and this is enemy, 
not any y. This is politics, sorry about that.   And then we are just going to write plus, and 
then we are going to write math dot POW again,   because we need another power and requires to two 
values first is the par value, so we want it to be   squared again.

And then we just need to subtract 
the anyway when you move y and me y minus bullet   y. And this should give us the value. Obviously, 
we need to close this Math Math dot square root,   so we're going to apply another bracket but looks 
like it's an extra bracket. So what we are doing   is math dot pow, we are doing x two minus x one or 
x minus x one minus x doesn't matter, squared it   and then math.pa y two minus y one squared. So 
just to make sure that these two are separate,   we are going to apply another bracket over here. 
So I'm going to also do this with this one.

Let's   not blunder Alright, so there is some problem 
over here. So this is the problem. So let's   apply a bracket over here instead of that, 
and this is looking pretty good. So now what   we are going to do is we are going to write an if 
condition if this distance is less than 27 pixels,   then return us the value of true that is the 
collision has occurred, else return us the value   of false. So we're going to write f condition and 
return false. I mean, we didn't need to write the   Save condition. We could have just return false 
over here, but I just wanted to make sure that   you guys understood. All right, let's format 
it properly obviously immunity format meeting   in PI charm, make sure you press Ctrl Alt plus L 
LS for I don't know Lula something. So make sure   you press Ctrl Alt plus L if you're using Python, 
it should format everything beautifully. Alright,   so our escalation function is complete. 
So now what we are going to do is,   we are going to scroll down, and we are going to 
write inside our while infinite loop over here,   just below this enemy x or even the politics, we 
are going to add a comment that's going to stand   for collision so that we know that we are 
writing the code for collision.

And over here,   we can just check whether a collision is happening 
or not. So I'm going to create a variable called   collision and then I'm going to call this 
escalation function. And over here, we are   going to set the value of enemy x and y. And over 
here in all of this code inside this while loop,   we are manipulating the value of x and y of 
enemy and the bullet. So this is the right   place to call this escalation function. So here we 
are just going to write bullet x comma y. Alright,   so this is looking good. So this is collision is 
going to store the value of true and false and if   the collision has occurred is going to store the 
value of collision of true in collision. Alright,   so this is looking good. And then we're going 
to write a condition if condition. So what do   you want us to do if the collision is occurring? 
Basically, that is what our program is asking.

So   what do we want after a collision has occurred. 
So the first thing that we want is to reset the   bullet to its starting point. So we are going 
to reset the bullet y at 480. And then because   the bullet is not being shown anymore, we want to 
change the state of the bullet to ready. So let's   change the state of the bullet to ready by writing 
bullet state equals to reading. And then the last   thing we want to do is obviously increase the 
score. So I'm just going to create a new variable,   let's say, let's actually just go over here so 
that it's close by and we are going to write   the value of score equals to zero. All right, so 
that's looking pretty good. So I'm going to just   scroll down, and over here, I'm going to write 
score score by missing the variable of score   squared plus equals to one. So this will increase 
the value by one every time we hit our enemy.

And   after that, we are just going to print out our 
score. So I'm just going to print it out on the   screen. So now let's just run our program and 
see if everything is working or not. So I'm just   going to run the main program. And over here, we 
are going to shoot our bullets. And hopefully,   if it hits, and I'm not a bad player, as you can 
see the score increased by one. So let's try to   hit it again. And as you can see, the score is 
increasing by one. But when we are not hitting it,   the score is not increasing. So let's try 
to make our score at least five. All right,   all right, so the score is five.

So what one 
thing you must have noticed is that the enemy   is still on his current path. And it's not 
responding to its default location. So we   need to fix that. So what we are going to do is we 
are going to right change the value of player x,   the enemy x and the enemy by over here. So I'm 
just gonna scroll up and check out where we have   declared the value of enemy x and y. So I'm just 
going to copy this, and I will paste this inside   our F collision, obviously, like this code can 
be optimized, we can create a new function for   all of this stuff that is happening over here. 
But maybe we can do that in the later videos,   all the optimization classes and functions, we'll 
see whether we do that or not, because this is not   such a complicated program.

But maybe we will. So 
now what will happen is that the enemy x and the   enemy y will get restarted or respond to a default 
location, and will respond to a random integer   that is between zero to 800. And why is 50 to 150. 
Obviously, we already discussed what this does, it   basically gives a default position to the enemy. 
So let's give it a shot again. And we're gonna run   the mean again and see if it works. So let me just 
wait for it. Alright, so our enemy is actually   just going back to its new location. Alright, 
let's just wait for the enemy to come back a   little bit down so that we know that our code 
is working properly. So let's shoot it. Alright,   so our game is responding properly, our enemies 
respond properly, and it looks good. So one   thing you might have noticed that when it comes to 
this right hand side of the screen, it just drops   down. Even if you're trying it on your own. If an 
enemy response towards the right hand side of that   window of a window, it just goes down.

So why is 
that happening? that is happening because when we   respond our enemy or just be when you're creating 
the movie or giving it a value of zero to 800. And   but inside our code we have written in over here 
that if the enemy x is greater than 736, make sure   you change its y value. So there will whenever 
our enemy is responding with a greater value than   736 it's immediately going down without a chance 
to go left. That's why we need to make sure that   over here when we are creating the enemy that 
we don't increase the value till 800 only it is   736 Just for safety, we are going to write 735. So 
obviously, we need to make sure that the same 35   also goes in when a collision has occurred. So I'm 
just going to copy that over here too. Alright, so   this looks good. We have also fixed an error.

So 
this is looking pretty good. Alright. So Alright,   look enemies responding properly. Let me just 
shoot it again. All right. So alright guys. So   this is pretty much it for this video. In the 
next video, we are going to learn how to create   multiple enemies. So right now there is only 
one enemy. So the game is pretty easy, you can   just play it really easy, and actually is pretty 
fun to play. While I'm recording this video i'm   also playing. But anyway, guys, let me just recap 
actually quickly so that you guys can understand.   So if you already understand the video, just 
go to the next video, but for people who have   not understood properly, so we have created a 
function called is collision where you have four   coordinates to off enemy coordinates and to have 
bullet coordinates. And we have used all of these   four coordinates in this formula, which we got 
from typing and distance between two coordinates   this formula and then we try to execute this 
formula inside our code. Obviously, before   you shall start doing this man thought squad, 
make sure that you import math.

And after that,   we made the square root. And then inside this 
week, using the dot POW function, we squared it   just like we have done in this formula x two minus 
x squared squared. So we needed to make sure that   we squared it and make sure that the brackets are 
correctly placed. Because if you guys are typing   the code, it might like it might you might mess 
up somewhere. So make sure you guys are typing   this code properly, line by line. All right, all 
obviously, I will upload all this code on GitHub,   so you'll find it somewhere over there. And by the 
end of this series, I'll upload it after recording   all the videos.

So you can wait for it a little 
bit or you can find it in the description or   attachments or something. So math.pi and e x minus 
bullet x, you guys understand all of this stuff,   and then how this 27 network number came to be. So 
I just tried and tested what was the proper number   for distance between enemy and bullet to call 
it a collision. And I just by trial and testing,   I came on this number if the distance between 
the bullet and the enemy is less than 27,   I'm going to call it a collision.

And then if 
the collision has occurred, it will return true   and obviously we are calling this function over 
here if collision. So if a collision has occurred,   what do we want from a program, we first of all, 
we want to reset the vials of blood to 480 that is   the starting position of the spaceship and then 
we are going to change the state of course to   ready because you can't see the bullet anymore. 
And when you can't see the bullet anymore, the   state is ready.

And then we increase the score by 
one and we printed out the score and then we made   sure that the enemy respond to its new location. 
Alright guys, so this is basically a way to just   to track back a little bit this is just a way to 
kill the enemy and then make sure that we also   create a new enemy. Alright guys, that's pretty 
much it for this video. Thank you for hanging out   in the next video we are going to learn how to 
create multiple enemies, so I'll see you there.   In this video, we are going to learn how to create 
multiple enemies.

And in the previous video,   we learned about how the collision system works. 
So for example, if we shoot the enemy is going   to respond to a new place, as well as increase 
our score. So how do we make sure that multiple   enemies appear on a screen so for example, six 
enemies so what we can do one idea is that we can   store all of these six enemies in a list or an 
array but in Python is called a list. So we are   going to store all of the enemies in a list and 
display them one by one on the screen.

But it's   going to happen so fast that it will look that 
all the six enemies are appearing simultaneously   on the screen. So we are going to turn all of 
these variable into a list variable and how do   you do that you simply copy the variable name 
and equal to and brackets. So this signifies   an empty list. There is nothing inside this list 
and we are going to use a for loop to put values   inside this list.

But we have to do it with all 
of the variables. So let's do that. So let's do   it with enemy x and then enemy y. So I'm gonna 
copy this, copy this paste over here. Let me   just copy everything first and then I'm going to 
add the square brackets not the neatest way but   the quickest way and then I'm just gonna copy 
all of these square brackets quickly. Alright,   and how do you add values inside a list so 
right now this is an empty list and how do you   add values to a list is by using a method known 
as dot append.

So instead of equals two we are   going to use dot append over here. But even before 
that we are going to create a variable known as   num of enemies which stands for number of enemies 
and we can change this variable whenever we want   to increase the number of enemies. So we are going 
to create a for loop for i in range and inside   this we are in a port number of enemies. So this 
loop for right now is gonna run six times and six   of our enemies are gonna be created. Obviously you 
we want all of these values to be out added to the   list that we have created of all the variables. 
So what we are going to do instead of equal to,   we are going to write dot append.

And this is 
going to add our current value inside our list.   So for example, the first enemy image is going to 
be stored inside this enemy image list. So we are   going to do all of this with all of the variables. 
And you don't need to do it with any new via   change because these are like constant values, 
but whether just for the sake of simplicity,   we are going to do it with all of them. 
Alright, so let me just do it with all of them,   I'm going to copy this dot append everywhere.

So 
just to do it quickly, again, not the neatest way,   but the quickest way and that is what we want, 
just the quickest way. And let me just add the   practice after everyone so that there are no 
errors. And it looks neat. Alright guys, so   this is looking pretty well. So whenever our code 
is going to run, it's going to go through this,   and it's gonna create six number of enemies. 
But if you scroll down inside our while loop,   you can see that we don't specify which enemy x 
do we want to move. So this is the code that we   are using for the enemy to move towards the left 
hand side or the right hand side and a downward   movement.

But if we don't specify which enemy x 
we are talking about, because if you notice above,   we have declared six enemy x. And because we 
have created a variable called as enemy x we have   created an empty list. So each time this for loop 
is going to run is going to enter a new value of   enemy x and scientists and we x list. So we need 
to make sure that our program understands which   enemy x we are talking about.

So we are going to 
create another for loop over here and we're going   to do the same thing that we did over there number 
of enemies. And the idea is pretty intuitive,   you just need to change every value over here to 
basically inside a square bracket just specify   which value you're talking about. And this is a 
way to reference something inside a list obviously   if you know less you probably already know about 
this. So anyways, we are going to do this we are   going to I this I bracket everywhere. So let me 
just copy and paste this everywhere so that our   program knows which anyway we are talking about 
which enemy wide change we are talking about. Let   me just copy this everywhere. All right, this is 
looking pretty good. And then we also need to make   sure that a collision is also inside our enemy. 
So we are going to copy all of this code from   over here. And we are going to place this inside 
our while loop because we need to make sure that   we calculate the collision for every let me just 
paste this so you can see over here that currently   our collision is it's not inside our for loop but 
actually inside here it's actually inside a for   loop but make sure that it's not inside this 
lF condition or the if condition otherwise,   it's not going to work a lot of people make this 
mistake that they don't pace the collision part   correctly or don't pace anything properly.

So 
anyways after making sure that you have pasted   is probably inside our for loop we are also going 
to change these let me just press it here alzette   we are going to make sure that our Python 
program knows which and the x coordinates   we are talking about. So let me just paste it 
over here. Alright, so this is looking pretty   good. We also need to make sure that we add 
it over here. So basically, wherever we are   talking about the enemy or the coalition, you 
need to make sure that our program knows which   coordinate or which enemy we are talking about. 
And then the last thing we need to do is whenever   we are calling the enemies for example over here 
calling the enemy function and this is where we   will basically blitting the enemy we also need 
to make sure that we add which image do we want   to be plated.

So right now it's not specifying 
so we are going to paste this inside our ennemi   for loop and make sure it's not post pasted inside 
the if condition it's pasted inside our loop. So   indentations matter and then we are going to send 
the value of i according with specifying which x&y   coordinates we want to be printed on the screen. 
So basically which enemy we are talking about.   So if we go up to our enemy function over here 
you can see we haven't specified the AI value so   we need to specify the value and also the which 
image enemy image do we want to draw? Obviously,   you will be thinking there's only one image but 
actually there are six enemy images because we   have created a list of enemy images too, 
as you can see over here.

Alright guys,   so this is looking pretty good. I think almost 
all of the code is done. So let me just play it   and then we will figure out what we have to recap 
and if there are any errors, we can solve them.   So let's play it and see if it works. Alright, 
so this is looking pretty good. We have created   six enemies and when we showed them so let's try 
and shoot one of them amateur bad player. Alright,   so when we are shooting them, our collision is 
also working. It's they are responding. Alright,   so this is looking pretty good. So how is 
this game going to end whenever one of these   Space Invaders come and hit the bottom of 
the spaceship or basically hit the 480 by   access then we are going to end the game so we 
just keep shooting and increase the score.

And   right now there is no place where we are 
displaying the scores. In the next video,   we are going to make sure that we display 
the score on the left hand side top corner.   All right, guys, welcome back. So in the 
last video, we created multiple enemies,   and our game is looking real, real good. So the 
score system is working, but the score is not   being currently displayed on our game window. 
So we'll fix that in this video, we will make   sure that the score appears on the top left 
corner of our screen. So how do you do that,   so that is simple, we use a font object that is 
inside pygame. So pygame is actually going to help   us create font or text on the screen. So the first 
thing we need to do is go to this word image. And   we are going to actually remove the score variable 
that we've created over here. So instead of that,   we are going to just press enter and write score 
so that we know we are creating score under this   statement.

And then right now we are going to 
create a variable known as core value, and we're   going to give it a value of zero. And obviously, 
you can see with this red symbol, there is some   error with say a score plus one, we are doing 
it over here. So we need to change this to score   value. And then we can remove the print statement 
because we don't need it down.

So let's just go up   now. And then we have to use the score object or 
the PI game font object. So that is pretty easy.   You just create a variable known as font. And 
obviously you probably know already, what font is,   font is just the type of text or the style of 
text that is displayed how much the weight of   the line often is, is actually dependent upon 
the font, what kind of font you use. So first,   we are going to define what kind of font we want. 
So how do you do that, we just use the pygame dot   font method that is inside pygame pygame dot font 
dot capital F font and inside this we are going   to give it two values. The first is which font Do 
we want. So inside pygame, there is one free font   which is known as free. cents bold. So right now 
we are just going to use this font and dot TTF is   the extension of the font. And then we are going 
to give it a size.

So we're just going to give it   a size of 32. And then after that we are going to 
give it the x and y coordinates of where we want   this text to appear. So we want it to appear 
in that top left corner somewhere, but not   just attached the screen a little bit away from 
the scheme. So we are going to give it a value of   text text the x coordinate of 10 pixels, and then 
text y of that is the y coordinate also of 10.

Now   just like we did with these player player enemies, 
we have to create a function that is going to show   this score value on the screen. So let's do that 
we are going to create a function which we are   going to call show score. Pretty easy stuff. And 
inside this function, we have to give it the X   and Y value just like we have done with everything 
else. And one difference is that for example, you   can see how we are plotting the image inside this 
def player. Instead of creating the player trying   the player on the screen, we are going to render 
the text on the screen.

So I'll just show you   what I mean by that. So we're going to create a 
variable of score. And inside this we are going to   write font dot render. And we're going to require 
some values inside it. So this is the what I mean   by instead of bleeding, we are going to render the 
text of show the text on the screen. So using this   font object we have created over here we are now 
right font on trend. And there is going to require   a couple of values the first value is what text Do 
you want. So we want our text to be first of all   score. And then we want the score value in front 
of the text. So we are going to write it actually   we have to convert it into a string. So right 
now, this score value is an integer, so we have   to use typecasting and inside this. So basically 
we are converting this integer value to a string   by writing str in front of it. This concept in 
Python is known as typecasting and actually, in   programming This concept is known as type casting. 
So inside this we are gonna write score value.

And   then after that the second value is required is 
true. So we can display it on the screen. And   then the third value requires is what is the color 
of the font that you want, you can show whatever   color you want. Obviously, we have to use the RGB 
values, which we have discussed before. But I'm   just going to use the white whether that is 255 
or eight 255 green, and then 255 blue. So this   is looking pretty good. Let me just format this 
properly.

And then we are going to show it on the   screen and how do you show it on the screen. 
So first, we are going to render the score   called render the text. And then we have to blit 
this text on the screen or draw this text on the   screen. That is why I said this is a little bit 
different. First you have to render then you have   to break it on the screen. So we are going to use 
the same concept we have over here. So actually,   let me just copy this from here and paste it and 
instead of image we are going to render our score.   So this time is not an image it's a font or a 
text and it requires X and Y value which we are   providing through this function. And now one 
last step. That we have to do is pretty easy,   we just have to go down and anything that you 
want to persist on our screen obviously has to   be called inside our while loop.

So I'm just gonna 
call our show score function and x, y is text x,   and text y. Alright guys, so this is looking 
pretty easy. So let me just run it and show you   that it works. And hopefully it will run without 
any errors. So our score is displayed on the top   left corner. And when we shoot someone, let me 
just show someone as you can see, our score is   increasing. So let me just shoot a couple of more 
enemies or space invaders.

Alright guys, so this   is looking pretty good. Our score is increasing 
and resolving respond and our game is being   created. So one last thing I want to tell you guys 
is that how do you add extra fonts. So right now,   if we go to our fonts, so for example, here is 
a font, this is the only font that is inside our   pilot. So let me just close this, how do you add 
other fonts inside this, so what you can do is   you can go to a website or something and download 
fonts. And they will give you a font that is of   extension dot TTF. And you can just download this, 
place it inside your project structure, and just   write the name of the font. So for example, what 
you can do is you can go to this website known as   d a font. And this gives a lot of fonts for free. 
So you can download just any any font that you   want.

And we're going to give you a zip file, just 
extract that zip file, and it's going to give you   a dot TTF file, then paste that TTF file inside 
the Space Invader project folder, and just write   the name over here. And then you can use that 
font inside your plugin. So this is pretty easy.   And this transfer the font size. So let me just 
increase for sign to something crazy 70 maybe it's   not that crazy. But as you can see the score has 
increased to 70 says, but let's keep it let's keep   it small 32 pixels.

Alright guys. So that's pretty 
much it. So let's just to recap a little bit,   first we create the score value, we added a font 
object, then we created the x and y coordinates   of the font where we want it to appear. And 
then inside a show score, we did two things,   we rendered the font and then we blurted it or 
drew it on the screen, and render we applied or   gave it three values, the score the true and the 
color of our text, so you can change it to green.   So let me just show it to you. Yes, RGB. So GB 
should be 255. And then we can make both of these   values are zero red and blue. And this should make 
it green. Let's play it. And as you can see, it's   green. But we want to invite color white, I think 
looks good on any game.

So let me just change it   to 255 again. Alright, let me just give a space 
over here. And then we do it on the screen. And   then the last thing we did was before changing the 
value of our scores, so after collision, we need   to make sure that the score value is increasing 
by one after we hit the enemy by a bullet. And   the second thing is we call the show on the score 
function that is pretty standard. Alright guys,   so in the next video, we are going to learn 
how to end the game. So right now the game   is not ending is just keep on going even if the 
enemy hit our spaceship. So one thing I noticed   is that the enemies are not moving very fast. 
So we'll also increase the speed of the enemy   a little bit in the next video. And we'll make 
these minor changes. So I'll see you over there.   Alright guys, welcome back. And hopefully 
you're having a great day. And today we are   going to learn about how to add sounds and music 
to our PI game.

And currently there are no sounds   inside our game. So it looks pretty simple. 
But what we are going to do is we are going   to add three types of sounds. The first sound 
is the background sound that's going to play   continuously in the background. The second is 
the shooting of the bullet sound. In this case,   I call it laser dot wave. And the third 
one is explosion dot wave that is going   to be produced when our laser bullet hits our 
enemy. And just to show you guys how it sounds,   I'm going to play this main dot Python file, 
which I have already changed the code off so that   you guys can see what's happening inside again. So 
I'm just gonna play it and you can see Alright, so   you must have seen there are three sounds first on 
continuously goes in the background.

Second is the   laser or the bullet sound. And the third is when 
our bullet hits our enemy. Now how can you get all   these three files? Let me actually make sure that 
the code is original and the last one that we have   used. And now how do you get these three dot WAV 
files. So what I want you to guys to do is I want   you to go to github.com arthropod Space Invaders 
by game and you will be able to get all the code   that I've written till now and along with it you 
will be able to get the.pe files that I have been   talking about after downloading these three files 
or maybe the whole code and you can download them   by clicking on this clone or download and done 
download zip. Make sure you add the sound files   to your project by going to Space Invader and just 
pasting them over there.

Now let's get started   with adding background music into our game. So 
first thing we need to do is import something   Known as a mixer from our pygame Library. And to 
do that we just right from pi game, import mixer,   import this mixer. And what does this mixer This 
is basically a class that helps us handle all   kinds of music inside our game, whether it can 
be repeating our music, loading, music, anything   that want.

So you have to look inside this class 
whenever you want to do anything with sounds or   music. And then just below this background, we 
are going to add a background sound. So let's   write our comments. so that you guys can know in 
future what we are talking about. And then we're   just going to use the mixer library by writing 
mixer dot music dot load pretty easy, because   we want to load the file and then we are going to 
play the file.

And inside this, we're just going   to write background dot WAV, which is the name of 
our file, as you can see on the left hand side,   and then we're just gonna play this sound by 
writing mixer dot music dot play pretty easy.   And now we want this file to play continuously. 
Because right now, if you don't add anything   inside this dot play, this file is going to play 
once and then just stop, but we want it to play   in a loop because this is a game and can go on for 
long. We don't want it to play just once. And how   do you do that inside this mixer class, you just 
add minus one and it's going to play on loop.

So   now let's just test it out and see whether it's 
working or not. As you can hear the background   music must be going on. But we haven't yet added 
the sound to the experience town so that must not   be there. So that's why we are going to be working 
on adding the bullets are now but one thing I want   you guys to notice is that currently we are using 
mixer dot music because we want this file to be   played continuously in the background. So this 
is kind of music. But as something is very short,   for example our bullet sound then we have to use 
mixer dot sound. So we are going to come below   where we have a bullet shooting. So how are we 
going to catch the moment when our bullet is being   released.

So we are going to do that inside our 
let's go to above let's go to this if bullet state   is ready. So over here we can release the sound 
of our bullet going out from our spaceship. So   because over here we are getting the x coordinate 
of the spaceship and then we are shooting the   bullet over here so we can somewhere over here at 
our bullet Stan. And how do you do that is also   very easy. Just below this we are going to write 
mixer dot sound. So in this case, it's not mixer   dot music, it's mixer adult sound. And we're 
gonna first create a variable let's create a   variable and call it bullet underscore sound just 
to make sure that we know where our sound is,   and makes a dot sound and inside this you have 
to give the file of the sound so and that's in   our case is laser dot WAV.

And then just like we 
did in the music case, we are going to play it so   we're just gonna write bullets sound, not state 
will it sound dot play, and we don't want it to   be played inside a loop. That's why we haven't 
added minus one. So now our bullets is making   a sound now we just need to add a sound to our 
collision. And where are we catching collision   let me just copy this first and we are going to 
go below I just want you to guess first where we   are going because this is pretty obvious we are 
going to this part where if collision we want a   sound p plate and that sound is off explosions. 
So we're just going to copy and paste this over   here because most of the things are going to 
be same instead of bullet we're going to write   explosion sound. And then I'm just going to copy 
and paste this just below this play and instead of   laser dot wave we are going to go with explosion 
dot wave.

So that's this is pretty much it. Let's   actually play our game one more time and see if 
everything is working properly. So let's play this   Alright guys, so everything is looking really 
good. So are all of the three sounds are playing   obviously Feel free to walk around and play 
around and add more sounds maybe remove and   add your own songs. That's going to be fun. In 
the next video we are going to learn about how to   make sure that our game gets over when our enemy 
hits our spaceship. So I'll see you over there.   In the last video, we learn how to add sounds 
to our game and in this video we are going to   show the game over a screen. So I removed all of 
the sounds for this video because it's going to   be difficult to explain what's going on if I add 
the sound.

So what we're going to do is when many   of these enemies come close to our spaceship 
maybe over here, we're going to remove all of   these enemies or maybe just get them out of the 
screen. And we are going to show a big test just   like we are shown over here the score zero we 
are going to show a big text of game over over   here in the middle of the screen. And when is this 
pixels gonna head without these enemies gonna come   close to the spaceship when they're gonna hit 
the y axis of 440 pixel. So if you remember at   the top at zero pixel at the bottom is 600 pixel 
and adjust at the starting of the spaceship it's   about 480 pixel, but just by experimenting, I 
found out that 440 is perfect.

So when I use   that 440 pixel As a limit, so when our enemies 
come over here, we are going to show game over   for our player. And the final score is going to 
be shown over here. So what we are going to do   is we are going to come to our enemies where we 
are moving our enemies basically. So we'll come   down and come to enemy movement. So enemy 
movement was over here. And then over here,   we are just going to add a text. So let's add 
a text and just call it Game Over, because we   are going to be writing the game over code just 
below this.

And what do you want is when whenever   an enemy lets enemy right, and whenever enemy 
Why have I so whenever one of the enemies and   doesn't need to be all of the enemies when one of 
the enemies come to for 40 pixels. And actually,   just to test it out, I don't want the enemies to 
come to the bottom. So I'm going to make it very,   very small, maybe 200 pixels. And just when we are 
ending the game and we are finalizing the game,   I'm going to change it again to 440 pixels.

So 
whenever one of the enemies come to 200 pixels,   then what we want to do, we want to move all 
the enemies, so we are on create another for   loop for j n. And then we just want to copy 
all of these, because we want to move all   the enemies out of the screen, that's how I'm 
going to create another for loop inside this   big for loop. And then under this and is going to 
change the axis of enemy y j equals to 2000. And   this should make sure that these enemies go below 
the screen to 2000 y pixel. And then after this,   I'm gonna just make sure that we display 
the game over text. So how do you do that,   I'm just going to create a function. And this 
function will be called underscore game over text.   And we are going to call this function and then we 
are going to break out of this loop.

So let's make   sure that we are not doing anything weird with the 
brackets and over here we are just going to write   break. And this looks pretty good. So what we are 
doing is whenever an enemy, it doesn't need to be   all the enemies when one of the enemies reaches 
is greater than 200 pixels in this case, but it's   actually going to be 440. And then we are going to 
collect all of the enemies inside this for loop.   And we want each of the enemies to be moved out of 
the screen.

And we are doing that by setting the   y axis to 2000. It is not going to be shown on the 
screen. And then we're calling this game over text   function which is going to display the game over 
text on the screen. And then we are breaking out   of this loop because we don't need this for i in 
range loop anymore. So now let's create this game   over underscore test functions. So we are going to 
go where we have added our score. So let's just go   over here. So you can see we have added our score 
over here. So we are going to do doing basically   the same thing. And we are going to write game 
over text over here. And then we're going to copy   the same thing that we have done over here. And 
instead of font we are going to just write game,   or we can write or underscore font, and we want 
the font to be bigger. So this is the size of the   font, we are going to make it 64 by 64 pixel The 
size is bigger.

And then we are going to create   our function. So just below this show underscore 
function, we are going to create our game over   next function. And we are going to do the same 
thing that we did previously with our show under   score function. And then over here, let's just 
copy and paste this line. So we are going to copy   this paste over here. And then instead of score, 
let's just call it over underscore text. And then   we don't need all of this stuff, we just need to 
be displayed game. And let's make it in capitals,   just to make sure it looks good. Game over. So 
this is looking good, then we just need to blurt   it all drawn on the screen, we're gonna copy and 
paste this over here, let's just press enter and   paste this over here. And then instead of score, 
we are going to write over underscore text. And   we are not because we are not going to use the 
x and y values, we can use it but because our   game worst takes is going to be displayed at one 
place.

So I'm going to remove this and instead   of that, I'm just gonna write 202 50 pixels. 
And this 200 comma 250 pixel is basically the   middle of the screen, you can try out different 
values and see what works for you. But basically,   I've divided the both of these values by two and 
made it a little bit less both the x and y axis.   And that's how I got to the center obviously, you 
to change the values a little bit so that it looks   good.

Anyway, so this is looking pretty good right 
now let's run our main.py file and see if it's   working. And you have to remember that we have 
made it 200 pixels. And you can see that again,   what else is being displayed, but it's not in the 
middle and it's not big. So why is that happening.   And this is because we have used the same font 
over here that we have created previously,   this font, we need to change this.

And because 
we have created a new font that is known as   the Oh font. So we're just going to copy this 
and paste this instead of font don't render we   are going to paste over underscore font, because 
this is our new font. And this font for used for   a score. That's why it's so small. let's reload 
it and hopefully this time it will work. So let's   wait for it to come to 200 y axis and after that 
is going to show the game or screen so now you   can't hit any of the enemies so the score is going 
to remain constant.

So let me just show it to you   again. Let me just hit A couple of enemies. And 
now we have hit our enemies. So let's wait for our   200 pixel to get over. And it's going to happen 
anytime soon. All right, it's your end game over.   And now because you can't hit any more enemies, 
your score is going to remain constant. Obviously,   you can add more buttons like play again and do 
stuff like that. But by now you already know how   to do it. So I'm not going to go into it again. 
So now finally, let's change is now that we know   that our code is working instead of 200.

Let's 
change it to 440 pixels. And make sure you add the   sounds again and make it a complete game. So guys, 
this is pretty much it. For this video series, we   created our space invader games from scratch. And 
if you were a beginner who didn't know anything   about pi game or creating games, now you have 
a basic understanding of how a game is created.   It has been wonderful hanging out with you guys. 
So thank you for watching and I'll see you around.