Hello everyone, welcome to breakout live coding using pygame. This is a video I just wanted to try today and see if I could do a little bit of pygame I don't know a lot about pygame, but I'm gonna do my best now I am not at home with my normal equipment, so you'll see weird artifacts like this We smell OBS studio there so let me pop over to my Programming editor, which is genie genie.org. It's free. It's open source and cross platform And quick shout out to my channel members Kevin and Paul who are snake members They have been on the channel for one month or more and my invaders who have been with the channel stay there in their first month Yon mode Kim Sheung and finesse. Thank you guys so much So what I want to do today is see if I can program kind of an old-school breakout game Using pygame now. I have not done any pygame ever since I did my side shooting games Let me just show you what that looks like and so this is something you can check out the videos. There's three of them Okay, well, that's really loud I forgot about that so this was this was what I did with that game It looks pretty cool. I'm pretty happy with that So I don't remember any of the pygame stuff to be honest So I'm gonna be using this as kind of a model and then I also have my collision detection stuff over here I think it's also in here But I want to use some of the collision detection things This is something I often do when I'm programming something especially something I'm not super familiar with is to look at previous examples of things that I've done as you noticed earlier I also have opened a couple windows. So here's the pygame dot org docs and Something the one thing I didn't really know how to do For sure was how to draw a rectangle in pygame. I found this on geeks for geeks again. Nobody codes in a vacuum I don't know everything so I do do quite a lot of googling So, yeah, so let's see what we can get done here today in the time that I have so Basically, I'm just gonna go ahead and copy some of this stuff I'm gonna go ahead and import pygame. So I'm gonna copy that over here And what I want to do is I want to just kind of get my basic window up and running So this is some of the stuff that you need to get a Window up and running so I'm gonna go ahead and just copy those things and this isn't really a tutorial It's more of just kind of hopefully enjoy watching me code and I'm gonna go ahead and make set this up to 1200 by 800 I think 800 by 600 is a little bit too small in this day and age. So I'm gonna go ahead and call this Yeah, break out break out by Tokyo EdTech and fortunately, I can't do this live because I am out of Town right now. I the internet here is not that good. So Yeah, when I live coded the original program, I was talking about the side scroller I got a lot of help from the viewers. So thank you so much. Again, I don't know everything Everybody's learning and so if somebody tells me something and then I use it in a later video And I don't give you credit. I do apologize. Just so some time. It's not personal So yeah, we got that and let's see here Okay, so we got create the screen So I'm gonna copy that code over there. So basically, I just want to get that basic window up and running That's hopefully what we'll see here. There's a bunch of class stuff here. I may copy that later See here fun, so we're not gonna be doing anything with that yet We do need our main game loop and I'll go ahead and Copy that because I think we definitely need that Yeah, I'm just gonna guess in here what I need So hopefully, okay, so we got render. This is where we draw stuff. So screen dot fill. So I'm gonna copy that and that's gonna go into the while true loop and You see here black is not defined because I didn't copy that section of the code Let's go ahead and copy that. We'll definitely be using black white and green. So let's go ahead and copy all of those colors and Notice that they're in capital letters just because they are what we call constants. They don't change. So we keep them In capital letters. It's just kind of a convention. You don't have to do it But if you don't the other coders will make fun of you so render surface clock tick, okay, and I think that's it. I think that's what we need This is hopefully I Put the flip the display. Hopefully this will give us a blank window and set the Clock the FPS the frames per second and so what this does is gives us 30 frames per second So no matter what computer we're on it should look the same. So I'm gonna go ahead and run this and see what happens Okay, well that was exactly what I wanted. So I have a blank screen And what was the exit key? Quit Just close this Okay, okay. Well, that's okay. I can look at that. You see I've got sys.exe it there. I'm gonna go ahead and import sys Got a little error Yeah, okay, so here we go. Let's go ahead and Create some of our objects on our screen. So We have a player. So again, I'm going back to my side scrolling shooter. So Class player create classes Now this game was far far more Complex So I'm just gonna go ahead and copy this part. This is really I think the only part I need for right now So create classes again, this is a bit more of an advanced tutorial if you're not familiar with classes check out my class tutorial and there'll be a link hopefully down below if not remind me and So The player I'm actually changes the paddle because the player is a paddle in this particular game So DX so the paddle is gonna start at zero. I'm gonna start it out at negative. Oh That's right pie game pie game. The coordinates are a little bit different. So I'm just put that back Let's run this real quick. So we got to think about this. So those of you who've seen my turtle module Tutorials, you know that zero zero is the center of the screen. However in pie game. This is zero zero This is positive X. I think this is positive Y. So remember it's 1200 by 800 So that means we'll put it down here around 700 And so when we start the game, I Think that's right. Now DX is the left and right speed. So when we start out, it doesn't move at all So let's go ahead and create a render method for this So we want to render the paddle and since it's a class. We got to use self now Again, I don't remember quite how rendering works and that's why I opened up this Thing I was looking for how to draw a rectangle because the paddle is a rectangle and you can see here drawing a rectangle So I'm just gonna go ahead and Copy that and pop that over into my own code So it's pie game. I've imported pie game. That's good. Draw a rectangle surface is The screen so I'm gonna change that to screen. I think The color is gonna be white We define white up here And it is a pie game rectangle and this is 30 30 60 60. I don't know what those mean so Yeah, I don't know what that means. Let's go ahead and run that and see what happens. Oh, we got a render So I'm gonna go ahead and draw stuff. So draw the screen. I'm gonna say render objects So I'm gonna say paddle render Paddle is not defined. Okay. I created the class but did not create the object so creates name objects So paddle equal again, if you don't know what classes are, it's probably won't make a lot of sense But again, if you watch the video, it's I think explains it pretty well Okay, so there is our paddle so clearly I drew a rectangle at 30 30 Down to 60 60. So that is not what we want Alrighty, so I'm gonna go ahead and say self dot width. I'll give the paddle with just for now I'll make it 100 and self dot height equals 50 So when I draw this The paddle it's gonna be at self dot x minus self dot width divided by two and then it's going to be at self dot y Minus self dot height By two So that's the top left corner of my object and The bottom right corner is gonna be self dot x plus self dot width divided by two and self dot y plus Self that height Now I could have hard-coded this I could have put the numbers in there But in case I need to change the width and height of the paddle this should work. So let's try that Yeah, I see nothing That's a bad thing Okay, let's give me a little warning down here about Divisions and things I think I have to put 2.0 or maybe I got to change this to integers and not 100% sure But anyway, that did not work. So let's see what's going on here And the original one worked X minus self dot width divided by two heights Plus width No to me that should work But it isn't that go for now So that's why so zero. Let's just put That should be right So with self that height now probably people watching home prior I figured out but It was dressed out when I think people are watching me and I don't know what I'm doing It's really darn annoying alright, alright, so Here's what I'm gonna do is I gotta try and figure out where I went wrong. So Right here was because of that warning. Let's go ahead and It says it says it was working so It's stuff like this that really annoys me when I'm working with libraries Because every library has like its own weird little quirks and it's probably one of the reasons I stick the turtle because I know all its quirks All right, and now I'm definitely annoyed Let's see so heights with heights Let's change that to a different number to see what happens doki lovely All right, so I'm gonna do is I'm gonna go back To the original code and I'm just gonna put the numbers in I hate the scrolling on this too Sorry, it's morning. I'm annoyed I usually I usually pretty easy going at it to you, but this is this type of stuff just annoys me no frickin end That's right. So it was 30 30 60 60 All right, let's run that and see if that works Unmatched again. Okay, that's fine So now I expect this should be zero minus one heart. So that should be minus 50. There's the problem Okay, I'm gonna undo everything I had was correct I'm so annoyed right now. It's cuz x is not zero.  So we're starting it at width divided by this would be this is be 700 This is width divided by to Wait, okay. It's a little big We can fix that I'm guessing it's just that type of thing.  That's just shouldn't be happening So that's all right It's not quite working. All right, but it's working a little better. Yeah, I didn't expect to spend 15 minutes drawing a frickin paddle But it's good to see this it's it's definitely something that happens quite often That's right Okay This is where you know people like me who don't like to read documentation This 60 is not the bottom right coordinates. I should just read this Yeah, so I should have looked up what what a wrecked object is. This is probably the top left top, you know top left Top top. This is probably the width. It's not the the y-coordinate So that would explain it. So then that would make this self dot width Just a guess, but that's probably what it is and this should be Self dot height thingy there. There you go. All right, so I'm not happy with the size of that. I think it should be a little smaller Make the height smaller and make it a little bit wider on the screen That's another good reason to use variables rather than hard coding everything. Okay, that looks like a paddle for the game All right, so Now I can move on and not be so upset about that But you can see it just gets frustrating So when people are frustrated when they code my students particular I can totally relate But that is the process again one option is to do what I did and to sit there and fumble The other option is just go and read the documents. So you should probably read the documents But I've never been type person to read instructions very much.  I have a left and right. I have some move methods So I'm gonna go ahead and just kind of copy these because it kind of Functions the same there's some differences and so I'm gonna go back to my breakout program Again, you might consider this cheating you might consider this smart. I personally consider it pretty smart So I'm just gonna leave these numbers left and right so DX so DX is your left speed Do you want DX? D? Why would your up and down speed now since the paddle doesn't move? Up and down it just moves left to right. I can do that I don't need to move X and Y So X equals X plus DX Checking for border collisions. So now this should be X not Y There is no again. It doesn't move up and down. So I don't need that for this particular problem now the left border is less than zero, but it's plus the width self-dot width Equals zero plus self dot width Okay, so it will stop at the border and then if it's greater than The border is 1200 wide. So it's 1200 minus self dot width by 2.0 We're gonna copy that now. I could hard code it But if we end up changing some sizes and things we don't want to do that Now I need to be able to control the paddle. So how does that work in pie game? Again? I just don't remember how pie game works at all Keyboard events Okay, so I'm gonna go ahead and just copy this This is a lot of again. This is something I do quite often in my Own games is I just take stuff that I did and just reuse it. Okay again players not going up So I don't need that players not going down. I don't need that Now the player is going left so Oops Okay, so I need this part the event type This part I don't need just doing left and right Again, I don't use pie game very often. So I do forget these things Okay, and it's not player it is paddle. All right, so let's see if we can move the player right? It's not working. Why is that? Okay, I'm gonna close that and reopen it and see what happens All right, so say let's run it Okay, there's my paddle And it is not moving left and right. So that's a bad sign so And the answer is I Didn't call the move function Update objects so paddle That moved Okay, so we got a moving paddle. Wow That's a little slow. I think for this game, but so let's double that speed up Let's leave it like that for now Maybe we can speed it up later if we have to I can also be a power-up thing if you want to change this into Arkanoid later Okay, so we've got a moving paddle now. We need a ball Now the ball is gonna be a lot easier just because we already have a paddle So I'm gonna go ahead and just basically copy the paddle class and Make a ball class Now ball is gonna have an X and Y. It's gonna have a DX. It's also gonna be moving dy and The ball will be much smaller. So we'll make it 40 by 40 20 by 20 20 by 20 The ball doesn't have a left and right method because it just moves on its own It does need to move in the X and Y direction. So I'm gonna put the movement Y Y and dy there I will need to do something with Collisions for the top and bottom so I'm gonna have to go ahead and Deal with that now in this particular game You're gonna have different reactions based on whether it's the top or the bottom So I'm just gonna go ahead and do why so this is the top of the screen and It's height not width. So if it hits the top of the screen The dy is going to reverse Basically, so it'll come back down at us. Now if it goes off the bottom Oh, I shouldn't I shouldn't use 1200. I should use width and height I'm gonna fix that later. So I'm already way over Way behind I do want to get a working game going So basically if it goes off the screen at the bottom, I'm just gonna put it back in the center So I'm gonna say self dot X equals width divided by 2.0 and self dot Y equals width 2.0 I'm gonna go ahead I guess since I'll make it this width and this is the screen with it's not the ball width So we're not using hard codes now zero is always gonna be left So we don't have to worry about that one But we do need to do the width for the right side and I'm gonna go ahead and do that up here as well Should have done that initially With all right, so let's oh and we got to give the ball When it starts out wait the ball go One well make it go six and six That should move it up into the right. Oh, that's gonna move it down Because why it's negative on this one. Okay, so let's try this Okay, now again, I've created the class. I haven't created the objects So ball dot ball equals ball Okay, I do not see a ball Okay, so let's go up to the render method. Well, that should be working because that was all Didn't render the ball This is why I should just put everything into a list and which I will do eventually but there we go Okay, well, that's not too bad. Okay, some things are working All right, so I forgot about that. So if the ball hits So we look at the ball So if the ball hits the border we got to reverse the DX So it goes from positive to negative And this should be height yeah, this should all be height that should be with okay All right, you're hard to code and talk at the same time self.dx times equals line 76 Okay, so the ball is bouncing which is a good sign And it does return to the center and we got to do the collision with the paddle next, okay Alrighty I'm gonna call that a win for now I don't want the ball to start at there with the ball to start at height Divide by two point I want to start in the middle of the screen. So let's try it one more time Okay, so I always start going up into the right it'll come off and then it will Keep going in the same direction. I can live with that. Alrighty But yeah, okay, so next up is we want to deal with the collision of the ball and the paddles We want to bounce off of the ball and paddle so Now if I was using the built-in sprite Object that pi game has there's there's command built in that does this and that's That's probably what I should do eventually, but I don't know how to do that yet so what I'm gonna do is I'm gonna steal my collision detection routine from my collision detection video and In if you haven't watched the collision detection video, I strongly recommend it It's really really helpful to understand how collision detection works And so I'm not gonna explain what I'm gonna do here but this is where I'm gonna be using and It's called access-aligned bounty boss collision. It's gonna work perfectly in this particular program just because Everything's rectangular so Don't want to put it with the class I was gonna make it a separate Thing I'll put it in the class for now because it's probably better structure. So I'm gonna go ahead and Put this in here. Now. You notice it's using the math module. So that means I gotta go up here and import math Import down to Here self x. Okay, great. I don't need to change anything This is awesome. So you can see here. I'm using self x other x self y other y self with other with and these are the exact same things that I've already used Here so it's a good thing. I'm pretty consistent with the way I code stuff because that makes my life easier I'm gonna plop this into the ball class as well just in case we need that And I'm gonna leave it called a ABB collision just to be sure it's what it does. So Here's what I want to do So I'm gonna move the objects and then I'm gonna check for collisions And for right now, I only have one the ball in the paddle. So if ball dot is AABB collision with the paddle say ball dot dy Times equals negative one. So what that should do is that the ball in the paddle collide? It should reverse the dy of the ball. Let's see. Let's see how that works out for us And if it reverses dy it should then go in the opposite direction. Oh My gosh, it works. Now. I don't know what's gonna happen if it hits an edge or anything like that. Oops Oops I missed Okay, I'm pretty happy with that that looks pretty good This is awesome Okay. All right, so I think It's kind of it's funny the hardest part was drawing that stupid rectangle everything else is kind of coming together pretty nicely So the next thing is to draw some bricks So again, I'm gonna be just I'm just gonna copy one of my classes and Change it now bricks. Don't move They they do render. So I do need the render method They collision I can use I can put the collision method in there, too I'm trying to go ahead and put But I probably just keep it in the ball class, but let's go ahead and just leave it there for now. It doesn't matter What I should have done was made a parent object and then everything else was a child of that, but I didn't so my bad But that's what happens when you're just kind of coding off the cuff You know things like that happen that don't need to happen and like I said, so bricks don't move left or right They don't move at all. They do render and They do collide with the ball so I can leave that here. I want to take that We don't need I'm gonna use the ball because they they're always gonna collide with the ball So I don't have extra code. I don't need And see here, okay, so Brick now the brick when we start it we got to put it somewhere So I actually make this a little bit different. So X come I should have done this with the other ones as well But I didn't again. This is what happens. We don't plan things out. Why? Bricks don't move So I can get rid of DX and DUI and they do have a width. So we've got to pick a number let's let's let's make them 50 by 25 and Each brick is gonna have a color self dot color So equals let's just make them all green for now since that's the only other color I have I think out there Define black and white and green. So I'll put self that color here and I'm gonna just make one brick brick equals Brick and notice since I put the X and Y here. I gotta put I actually put it somewhere So screen is 1200 so that's 600 so I'm gonna put it 700 and In the middle somewhere 400 so 400. Let's try that Again down here. I got to do the same thing. I got it now the brick doesn't move So I don't need that and if I do need to render it. Let's see if it shows up. Okay, it does show up Now what I was hoping was that it would Be right where the ball is gonna be so I'm gonna move that over a little bit So let me get 650 This is what I'm trying to do is I'm trying to check for a collision. Okay, that's close. I Want the ball to hit it right as it comes out. So we see if it works or not Okay, fantastic. So what should happen if there's a collision is that? Let's go ahead and test that so if ball dot is a BB collision with the brick Okay, the ball reverses direction And what I'm just gonna do is I'm just move the brick for now We're actually gonna have to delete it later, but brick dot x equals we'll put it way off the screen at like, you know 12,000 Okay, so let's go ahead. Oh Actually works. Yeah, I think I can live with that Okay, so it kind of works I'm pretty happy with this. Okay, so now the next thing I got to think about Again, I know that the collisions aren't perfect. We may have to adjust those at some other point but what I want to do is to Basically create like when I start the game up. I always want to create a ton of bricks and so Think about how I want to do this Okay, so I'm gonna make a list of bricks Bricks equals that and notice my naming here. This is bricks because it's a list of bricks and I'm gonna say For why in range And it starts at zero plus. So I'm gonna start 25 Range 25 and the screen is 1200 wide divided by 25. So that's 40 That right probably So 40 so No, no, so 1200 minus 25 would be 1175 and I want bricks every 50 or x in range All right, so that's that's the that was wrong. That's that's the x stuff 25 1175 and 50 the y is From the top at zero so they're falling to have high only at 25 Just do the same thing. We'll make bricks all the way down to How many rows we want to make a bricks? Make six rows so 25 56 3 Again, this is something I had to play with the numbers if I was really thinking this through So I'm gonna say bricks dot append brick x come away Get rid of that down here What I do is For brick in bricks and render all the bricks again, this is stuff I do in all my tutorials You know, so if you watch one of those it is a bit more step-by-step rather than just kind of this live coding You'll see kind of what I'm doing a Y It's next error unmatched parenthesis in line 121 parenthesis So don't need Okay. Oh, that is exactly what I wanted to happen. That looks way wicked cool. Oh, that's so cool I did not expect that to happen quite so easily. Oh, that's what I want to see. Oh, that's cool Now you notice kind of like one of the things that didn't happen there was it didn't really do the left right bounce like it Normally doesn't in breakout. I got to think about that one for a bit Okay, now one thing you can see here is I don't have it doesn't go all the way across so I gotta Fix that So it's gonna add this make this 1200 Hundred that's a lot more bricks actually than I thought so I'm gonna actually get this to start and around Because I want a gap at the top. So I'll say 100 Let's try that see what happens. Okay, that's a bit more what breakout looks like when you start the game And then what I want to do is I'm gonna go ahead and just kind of make a little bit more colorful So I got black white green Let's say red Zero zero and that's not red. I'm gonna fix that in a second Copy that we'll do those red. I don't actually know the other colors green and I wear a green We'll say blue Our size be 255 to be should be 255 And so what I want to do is When I create a brick glass say self-color equals random choice I'm just gonna put all those colors in there. So it's gonna be we have white bricks. We can have green You have red and you have blue. We should add yellow and stuff, but that's another problem for another day So I need that random module so import random Let's see what happens Okay, there we go. We can progress and it's just it's just well if like I'm back in 1980 Yeah, you might want to make the bricks a little bit bigger. You might want to make them You know, so it's as pretty tiny I guess but I just kind of guesstimated the numbers And you can see there's no real way of Getting rid of the bricks and stuff, I mean, they're just off the screen. They're still actually there The objects are still there That's the best way to do it but But it is a way to do it It's basically I've just moved them all way off the screen So you can't see them anymore and then that comes down and that's gonna keep coming down Let's just do real quick. Just go ahead and throw in the score here Since that's already in here. So in This game I had this thing where it says render the score So that's score surface, you know that even means I come up here There's a lot. There's a lot to pie game that I just don't never quite really internalized Copy and I'm gonna paste that over here So before I flip the display, I'm gonna say render the score. Okay, so score is gonna be player score and that should be at With Again, I'm doing it this way. I'm using the width So if I just if I just change the screen size like 800 by 400 it work a little bit differently You know, I kind of hard-coded these numbers in here. So that's something I want to think about Um, let's just render player score the player does not have a score. Let's go ahead and It should be paddle so self that score equals zero So it should be paddle and when we get a brick Player that score plus equals 10 Doki Font is not defined. Okay, I got to find a font apparently So we're gonna do that font equals there we go Okay, so create font it's gonna go up here before I create my objects and create my font And let's hope comic sans works Player is not defined It is paddle so I could have called it player. Yes. Okay. There it is Maybe I can make that font a little bit bigger, but you can see how it's going up every time getting a point Or every time I'm touching one of the boxes or killing a brick, I should say Yeah, this is Yeah, it's kind of working. Oh, I knew that was gonna happen, but I'll leave that as it is and I'm gonna sleep over that one I would like to see what happens if it gets into like a whole little alley of Bricks, but you know what? I think I can live with this Last thing I think I want to add she's gonna make that font bigger because that's really tiny I'm gonna double that there. That's a little better and It's not very centered. So it's gonna have to be at the width Minus probably about let's try that. That's a little bit better It still move that over I have to play the numbers a little bit on that one to get it 50 See if this is centered So it's not quite centered, but as the score goes up it might send her itself And let's do my 75 Yeah, it's a little bit better. All right. I can live with that. Um, let's see. What else sounds this over here I do have sounds in here So what I want to do is I'm gonna show you how I do sounds real quick and I use a website called the sound Bible And it's just got a bunch of free Sounds so I'm gonna go ahead and search for a bounce and you just kind of play and see what you find that you like So here's what it's called bounce And I don't like that all Definitely not Yeah, definitely not that you We'll go with jump. I like that one So you can see here I can download the wave or the MP3 I tend to download the wave just because it usually is a bit more What I call it Compatible so what I do is I got to make sure that download is In the same folder So I'm gonna copy that to the same folder as my breakout.py file paste That's really long. I'm gonna call this bounce Dot wave So Again taking a look at code that I've done before so I need to create the sound first So to back to my breakout game Where was that?  Yeah, so it's the sound name dot play so let's bounce sound and so So it's gonna play when we touch the paddle bounce Sound dot play When it hits a break, okay, I knew that was gonna happen Right now that might get a little annoying turn it down a bit. Okay, I can live with that Not the greatest sound it's a bug or if that's a feature, but it kind of works out. That is a basic breakout game I'm gonna leave it at that. I'm pretty happy. I wanted to put about an hour into this It's been about an hour You know except for that stupid thing getting the paddle to render It was a pretty straightforward program again. You notice how again, I don't have all this stuff memorized I had to do some googling and I was using some stuff that I created before it's like a little, you know It's a kind of a reminder. So there's nothing wrong with doing that You just got to be able to adapt it if you understand it well enough to do it in one program Then you should be able to understand it well enough to adapt it to another program again I know the code isn't a hundred percent clean and efficient There's a couple, you know things that we don't really need. I think we don't need this for the paddle Just needed it for the ball Let me try it see make sure that works still. Yeah Yeah Again, like if you're if you're more into pat big level design, you can make it so that each level has one color Let's do that. Let's do that because that's kind of how breakout looks. I think usually Because that's kind of annoying. Well, I know I gotta do. Okay to do that So Yeah, so I do this color equals random choice What was it white the black we want red green blue, I think were the four colors and then what we'll do is Bricks dot Bricks minus one this will give us the last one that was appended that color equals color So it should give us all rows of the same color Or not invalid color arguments Bricks Bricks Bricks Bricks Bricks Bricks Not a color. I don't think I mean Colors are in a choice. Oh Quotation marks. They are not strings. They are actually tuples RGB tuples or tuples and try that one more time There we go. I think I've had more colors. It would be a little bit better But I actually don't know the mixtures. So no red and green is yellow. Maybe But anyway, this is a you know, mostly fully functional game I don't have lives or a number of balls or anything included in that. I guess I could do it quick Let's go ahead and do that quick just for Make it a bit more complete now. Yeah, I'm gonna leave it at that. I gotta run. Sorry But anyway, check out, you know, I'll link this stuff down below about collisions and things like that There's also I did a video about creating levels that might come in handy with this also and again, I didn't need to I Don't know if this is the best way of doing it Was I moved all the bricks off the screen that were bad It's really not a good way to do it because they're still in that list and It's kind of I can get pretty inefficient since it's not gonna happen what we could do to To get around that as like, you know make a list called dead bricks and then dead bricks taught a pinned brick And then what you would do is once that's over is for brick in dead bricks Bricks not remove brick So that way you've created a secondary list a temporary list of dead bricks and Then that will actually remove them completely from memory. So we really don't even need this part anymore It's actually a better way to do it I think And you can see how it still works as expected So instead of keeping those bricks in memory and just in rents. I'm still running them off screen actually It just you know, it does it this way. It's a bit more efficient So, yeah, and that way what you could do is then you could say, you know, if you know length of bricks Equals zero I should just do less than or equal to zero just in case it shouldn't be negative then, you know prints, you know game over game over You know blah blah do whatever you want to do with the ending screen You know, I have all kinds of little videos about how to do these types of little things as well But I'm not gonna go ahead and do it in here I'm but I'm happy with you know kind of the the progress This game is made in just One short hour.  I'm not an expert on it. I'm a turtle guy as you know And but it's pretty cool. Uh, I'll try and do a little bit more pie game stuff in the future Now that I'm getting used to it, but I really do need to learn how to Do some of their Other, you know, like use the the sprite class that they have which has which rotates and does a lot of cool things So, yeah, that's it. Uh, again, thanks everybody for watching Members especially for supporting the channel subscribers. Keep on subscribing if you haven't subscribed Subscribe below and uh, check out down below for all kinds of links and uh, different things Thanks for watching. Have a merry christmas


The Adventures of Frank Race starring Paul Dubov with Tony Barrett as Mark Donovan. The war changed many things, the face of the earth and the people on it. Before the war, Frank Race worked as an attorney, but he traded his law books for the cloak and dagger of the OSS, and when it was over, his former life was over too. Adventure had become his business. The Adventures of Frank Race. Now we join Frank Race for the adventure of the House Divided. San Francisco in September with the marina mellow under blue skies and a warm sun. I happened to be on Chestnut Street when I was assailed by the one aroma that can take my mind off anything else in the world, that of hot fresh baked bread. It took only a moment to spot the source and I made a fast pivot toward the door of an old-fashioned bakery. There were several customers at the counter and I was forced to wait. Then a hand touched my arm. See, you're Frank Race, ain't you? Why yes, I know you, don't I? I'm Tom Crowell. Crowell, of course, I remember you. I used to work for Manhattan Insurance Company. I was with you on the Lambert keys. You saved my life with some pretty fast shooting. What made you leave the insurance company? Well, I'm not as young as I used to be, Race. I got tired of traveling, so I turned private eye for whoever wants to hire me. I'm on a job right now, and I think I'm in a jam. Jam? Yeah, it's this package. I think I'm being followed because I'm carrying it. That's why I ducked in here. I thought I'd go out the back way into the alley. Yeah, I picked a bad one. No back way, no alley. Which means that if they've spotted me, I'm stuck, but good. 4-to-1, kind of rough odds. Call it 4-to-2, Crowell. Well, I was hoping you'd see that, Race, but... There's one of them now on the sidewalk. A sward heavy-set figure in a well-fitting Donegal tweed. The opaque stare of a bobcat on the prowl. A man on the sidewalk eyed us for a second or so, then slipping a hand inside the lapel of his jacket, he started for the bakery door. A second bird of prey followed him. As they came inside, I moved away from Crowell and stepped up to the counter. What can I do for you, sir? I'll just take a couple of these chocolate egg-clares you have here. How much? That will be 30 cents. Would you like a bag for them? No, thanks. I'll just keep them in my hands. Care for one of these, Crowell? Better have one, Crowell.  Yes, sir. What do you want in here?  Let's have the package, Crowell. I don't get any ideas of going for the heater. I've got mine in my hand already. We're all very busy with our hands, aren't we? You boys have yours loaded with guns, mine are loaded with chocolate egg-clares. I think I'll give you one! He jerked toward me, murdering his heart, chocolate egg-clair in his eyes. I sidestepped and he groped for me, getting in the way of his companion, a moronic individual with a face that could have doubled for a suet pudding. But this one had ideas, so as he started to draw, I started a left hook that caught the bobcat flush enough to floor both of them. Right, come on, Ray. Let's get out of here. The shots had come from the street, full of black sedan parked at the curb. As Crowell slumped against me, I jerked the pistol from his holster. I triggered two bullets at the sedan, then swung around just in time to greet the bobcat's pal as he scrambled off the floor. He started again, clutching a broken shoulder. He sat staring at me with an expression of hurt-wondement. While the sound effects in the distance, there was evidence that the local constabulary might be joining in. So the black sedan was riding it off as a lost cause. The inside of the bakery presented quite a tableau. The woman who waited on trade stood staring across the counter as though she'd just seen a movie star. Scattered about on the floor were the remains of my two chocolate egg-clares, plus the pair of tough boys also somewhat scattered about. It was a victory for the righteous, but at the moment anyone could have had my share of it, knowing as I did that Tom Crowell was dead. Well, so to wander and worry tight, huh? Hello, Mark. What goes with the package? Trouble, Mark, all the way. I met an old friend this afternoon, Tom Crowell. Worked with us on the Lambert case. Crowell? Yeah, yeah, yeah, I remember him. Planted a couple of slugs and pinky wallets just about the time Pinky was lining up to do likewise to you. Well, Crowell was all right. He isn't all right any longer. He was killed this afternoon just because he happened to be carrying that package. Oh, you're kidding. I wish I were. What's in the package? Haven't the slightest idea? Look, he's got a name on it. Victoria Maynard. 127 Windermere Lane. And it sounds like a fancy neighborhood. How'd you get hold of this? I was with Crowell when he died. He was shot by four thugs. The only thing I was able to do for him was to keep him from falling too heavily. And what about cops? How'd you get away with the package? I decided I wanted the privilege of delivering Crowell's package for him, so I didn't wait around. Yeah, so what are you doing with the .38? It's the pistol Crowell carried. Rather good weapon. But I thought I'd pick up this luger of mine. The way this business shapes up, I may need it. Windermere Lane. A short thoroughfare wearing a set of iron gates like a lawn yet. Number 127 looked perfectly at home in such a setting. The thick set mansion with awesome lawns. For the butler who answered my push at the bell, I mentioned the name Victoria Maynard and I said I had a package. I was asked to wait in a small oak paneled study. Gosh, I'm glad you got here. I was... Wait a minute. You're not... You asked for Victoria Maynard. You said you had a package. I do have a package. I brought it here because Crowell couldn't. He was shot and killed this afternoon. He was... you don't mean that. Who killed him? Gunman.  You were with him when he died? Yes, to both questions. And now you might tell me something. What's in this package? Would you wait here a few minutes just long enough for me to change? I'd like you to take me out somewhere so we can talk. I said yes. I'd wait. And she left the room. I spent the time looking at some choice first editions. Once the door was opened and an old woman looked in at me. A very old woman with a fragile figure and the glare of a drill sergeant. She gave a little snort and went away. Then, in another 20 minutes, the girl came back. Have you had lunch? As a matter of fact, no. I haven't either. It's not far from here. We'll take my car. I thought we'd better come here because... Well, they... they might be at the house. Hold it a second, will you, baby? I have the slightest idea what you're talking about. Before you try to explain it, are you Victoria Maynard? Yes. My friends call me Vicky. And who might be at the house? If it's that little old lady, I can understand your trepidation. She looked at me as though I'd been caught with the family plate. That's my great aunt, Helen. I don't know anyone. Race, you were Crowell's friend. Does that mean you're also a private detective? I'm an investigator, but I usually work for insurance companies. Would you work for me? I need someone badly. I'm being blackmailed. What did Crowell have to do with it? That package you brought to me, it contains negotiable securities. Crowell was acting as my go-between. Paying off on blackmail is a fool's game. It's something beyond my control. If I'm going to represent you, I'll have to know the story and all of it. All right. I suppose that's sensible. As you might have surmised, I'm very wealthy. I've had everything, including Wellesley and a tremendous coming-out party. But... I'm an adopted child. Nothing wrong with that? There is in my case a lot wrong with it. I just learned that my real father was an ex-convict. And I suppose you learned it the hard way from blackmailers. That's right. And they have all the facts. Believe me, they have all the facts.  Just the same. They're going to be paid. I don't care what it costs. You're making a rash statement that could cost you everything you have. Even that. If they were to spread that information about me, they wouldn't take it, that's all. The people I know, the family, it even happens that I'm engaged, to my uncle's son, my foster cousin. Can you imagine what this would mean to him? It wouldn't have to mean anything if he were the... I know. If he were the right kind of guy. Well, it happens that he is the right kind of guy, but I still don't want him to know. And if you can't understand that... I can understand it. I'm sorry. What about your father? Your foster father? Now I've given you the details enough. I'd like you to contact a man called Sealy. Jet Sealy.  I still want to know why was Crowell killed? I don't know. Where do I find this Sealy? I have his phone number at the house. I'll give it to you when we get back. Sealy may call here before you contact him. What shall I say? Tell him to call me. I'm at the St. Francis. Come on in. I'll give you that number. I still think you're foolish to let go of any money because of this affair. I already made one payment, race. I can't stop now. Here, we'll take this side door. She led me to the oak panel den.  The sight of her seemed to startle Vicki Maynard. Ad Ellen? Were you waiting for someone? Ad Ellen? Aren't you well? Race. Race. She seems... Look. The girl was staring in horror. Her gaze held by a dark stain on the flagstone hearth. Her fluid sat in a stain the size of a steak plate. Her gaze held by a dark stain on the flagstone hearth. Her fluid sat in a stain the size of a steak plate. And then, even as we watched, the old lady's body shifted in the chair, swayed sideways and... Race! We'll return to the adventures of Frank Race in just about one minute. Now, back to the adventures of Frank Race. He's gone on his murder. Vicki Maynard's face already drained of color, stiffened into stark lines as I mentioned this. Race. What shall I do? Call the police. There's no use calling them. Doctor, no use at all. And when the police get here, I wouldn't try to hold out on them. Hold out? If I were you, I'd tell them about this blackmail setup. No. This is murder, baby. You don't fool with it, not if you're smart. And holding out on the police is never smart. Well, Aunt Ellen, Race, you know that. You and I left this room together. That's right. So when I tell this to the police, they're going to want to know who I am and why I'm here. Tell them the truth. You're an investigator working for me. Investigating a lost insurance policy left by my father. Investigating a lost insurance policy left by my father. That's the truth, Race, about the insurance policy. My family knows about it. I'll do my best for you, baby. But I can't tell direct lies. It wouldn't be healthy for either of us. All right, Race. I know you'll do your best. She left me and went to a phone. I had to look around. But whatever the weapon had been, it didn't seem to be in the room. Presently, the police arrived headed by Lieutenant Grimsby, accompanied by several reporters wearing the expressions of beagles and a scent. In the midst of the confusion, there appeared a man who would have made the perfect model for your average all-American football player. When he took Vicki in his arms, I pegged him for Larry Mainer, her foster cousin and fiance. Where do you stand in this chicken? I don't know, Larry. I can't even think. You didn't see it happen? I was out. And that seems to be the only thing in my favor. And if it weren't for Race, I don't know what I would have done. Who's been in the house today? No one else but Mason. With his deafness, he... Well, he just told the police he didn't see or hear a thing. Has Dad been here yet? Not yet. I drew away from them and went to the door. But before I could leave, Vicki ran up to me. Race, you were wonderful with the police. You gave me every break in the world. But I'm scared. There's something about this that... There always is about murder, baby. Just hang on. We'll see what turns up. If Sealy calls, I'll tell him to contact you. Is that all right? It's all right on one condition. What? Go back to the hotel and wait for Sealy's call. You let me handle him my way. All right, Grace. You do it your way. When you get lost, you get lost. I was figuring we might get the train out of here today. Sorry, Marcus, but we're stuck. Maybe for several days. No. Hello. Frank Race, there. Yeah, yeah, he's here. Hang on. But you... and this guy don't sound like no pacifist. Hello. That's right. I do. You care to come up here? Are you kidding? If I do any talking, I'll pick the spot and the time. Whatever you say. I'm a stranger in town. How about a cab? No cab, rent a car, charge you to the game. All right, so I rent a car. Make it a coupe. You know where Goff Street is? I'll find it. I'll park on Goff between Francisco and Bay. Be there 12.30 tonight. Lift up the lid of your trunk so I'll know you. You know something, Chum. That guy didn't sound like no law-abiding citizen. Blackmailer. Hmm. And I suppose you're going to sashay out that I'd meet Noel by yourself, huh? Not this one, Marcus. I'm taking you along if I have to stuff you in that trunk. Goff Street. Between Francisco and Bay. A short block of apartment housing. We parked the rented coupe and I got out to raise the trunk lid. Any signing up guys yet? There's a car coming up now. Keep out of sight. Right. I'm race. Come here. There were two of them in a Buick convertible. Each with a face that matched the shadows around them. I moved over to the car. Get in. I'd rather do my talking right here. What do you want, a written invitation? Get in. Mark, explain the facts of life to these gentlemen. I'm over here, boys, on the driver's side. I walked around while yours was both looking at race. Both of us came around me and it's 38. Maybe you recognize that 38, Sealy. It belonged to Tom Crowell. I don't get this. What's it all about? Keep your hands quiet and get out. On my side, both of you. I'll open the door. Sure. We'll get out. This punch sent me to the curb but I had my feet ready as he leaped and he went back against the car. I was up as he came in again and a left hook plus a looping right.  Nice work if you can get it. But he ain't all the way unconscious, right? I don't want him unconscious. How about your man? You're kidding. Can you imagine he tried choking me? No. There is a boy who's going to need some body to help me get this one on his feet. I'll get on my own feet. Sealy, it's pretty late. There isn't a person at sight. Which means there's no one to stop me from lacquering you to a frazzle if you don't talk. Stop lacquering. I ain't saying a word. Let me start on him. No, no. I guess I just can't work that way. Beat it, Sealy. Come on, Mark. Let's get out of here. Look at that crumb. I didn't like the look he'd give us when we pulled out. Hold on, Mark. This looks like a dead end. It is unless we want to end up in a drink. I'll turn around. Hey, that rig up ahead, he's swinging around a block. It's the Buick. Must be Sealy. Got a Tommy Gun race. I'll try jumping a sidewalk. Boy, that was close. I meant that I didn't think we'd make it. I think we shook him. Good. Let's take a lesson from this little escapade, huh? Don't never go easy on guys like that Sealy. Way too narrow. Back to the hotel, I guess. As we enter the lobby of the St. Francis, I found myself being paged. I followed the bellhop to the bar to wear a well-dressed man of about 55, sift and old-fashioned. Hey, sit down, race. I'm Sanderson Maynard, Bicky's uncle. And by the gender, drink for this gentleman. What will it be, race? I'll follow your example. And I may say that this is somewhat of a surprise. It shouldn't be. Maynard Clan seems to be in somewhat of a situation. And from what I hear, you're a good person to turn to under such circumstances. Mind telling me where you heard that? I get around. I'd like you to work for me on this affair, race. I'm already working for your niece. It's all in the family. I'm afraid these things don't always work out that way. I'm very fond of it, Bicky, race. First of all, and I, we're very close. We're brothers. A lot in common. Even had duplicate apartments when we were youngsters. I'd like to take over now for Bicky. I want to help her all I can. What makes you think she needs help? Bicky likes to have a good time. And she's been short of ready cash lately. I've had the feeling she might have run into some sort of trouble. Why'd she hire you? I'm sorry, but I can't tell you that. It would be sensible to tell me. Just for Bicky's sake. See, I'm not worried so much about the murder. I'm not worried about the murder. I'm not worried about the murder. I'm not worried about the murder. I'm not worried so much about the murder. The police now have reason to believe it was done by a housebreaker. They didn't believe that while I was there. They are flexible people, Ace. They know when to change their minds. Now, getting back to Bicky. Sorry, Mr. Manor, you're pushing an unsuccessful sale. I never work for two principals at the same time. It looks like we ain't going to get much sleep tonight. Must be after two o'clock. It's the next driveway. Stop the car. Yeah. What do you know? So this is 127 Windermalane, huh? They got enough ground for a nine-hole golf course. That driveway must be a mile long. All right, what do we do now? We walk that mile of driveway down to the house.  But we dropped 20 feet since we left the street. Here, it's this door. This door is locked. What do we do now? We get in somehow with as little fuss as possible. Well, we will just try this window. Don't seem like anybody hideous. No. Doesn't seem to be any reaction. Look, is this the room where the old lady was knocked off? This is it. Throw your flash on that fireplace hearth. All right. What am I looking for? Oh, I get it. The stain, huh? Hey. Oh, that is a stain. They must have used... What's the matter? I thought I heard something. Still hear it? No. I guess I'm dreaming things. Come on, we're going upstairs. You know, this room is kind of like the one we just left. Except that it's empty. An exact duplicate. Which proves something I've been suspecting for the last hour or so. That I've been played for a patsy. I don't get it. This room wasn't empty when I saw it last. It was exactly like that in the room below. Oh, that's fine. So what goes? So I operated under an illusion of having been in only one room. Well, actually, I'd been in two. When I first came into this house, I came through the front door from the street level. And I was led into this room. I left it with Vicki Maynard. We stayed away about an hour. When we came back, we found the old lady dead. Apparently murdered in the same room we'd left. And that's what I told the police, giving Vicki Maynard an excellent alibi. There's no evidence that looked the same, but actually belonged to a different room. That's why this room is empty. She's been trying to... Did you say something, Mark? What happened to the light? You'll have to depend on the moonlight, Rice. Your friend is on the floor unconscious. Vicki, what have you done to him? Why did you have to come here, Rice? Why couldn't you just let things go as they were? I guess I'm the curious type. What's that you're having in your hand, a pistol? I thought you were working for me, Rice. I don't want Crowell all the way. He left a wife and a teenage kid. Since you caused his death, it's my belief that they should collect damages from you or from your estate, because you may not be around very long, baby. You said yourself that Crowell was killed by Gunman. Gunman, who were working for you. You were hijacking those securities because you needed money. They really belonged to your great aunt, Victoria E. Maynard, with the E standing for Ellen. I caught that phase of it in the papers tonight, baby, and you had a feeling that I might do just that. Which was why you had Sealy try to eliminate me. You're quite an actress, Vicki. That blackmail story was a peach. There's no use, Rice. You've got to die. And I might as well... Let go! Let me go! Drop that gun! I will not! Sorry, baby. You're holding me. Wouldn't be hard to take. That's the trouble with this whole case. Kiss me, Rice. Say you're working for me. Be a lot simpler if I could just forget Tom Crowell. But you see, baby, I never work for two principals at the same time. The Adventures of Frank Rice starring Paul Dubov with Tony Barrett as Mark Donovan comes to you from Hollywood. Others heard in tonight's cast were Michael Ann Barrett, Chris Kraft, Tom Holland, William John Stone, and Gunner Peterson. This series is written and directed by Joel Murcott and Buckley Angel. The music is composed and played by Ivan Dithmarz. Be sure to be with us again this time next week for another dramatic chapter in The Adventures of Frank Race. Art Gilmore speaking. This is a Brucell's production.


I don't remember exactly when I implemented this. All I know for sure is I showed it to some folks in 2011 and it was really old at that point. This is before the movable feast machine. This is direct implementation of some sort. And what I like about it is, you know, there's no motion programmed into the cell membranes at all, but look where they end up just because of the geometry of engulfing food and retreating over waste.


Ever dreamt of financial freedom and endless possibilities without limitations? Well, YouTube might just be your golden ticket, but there's a secret weapon you need to harness to unlock your potential on this platform. Keyword research. Picture this. Keywords are like lighthouses in the vast ocean of the internet. They guide viewers to your content, helping you transform your passion into a profitable venture. It's not merely about garnering views, it's about cultivating financial stability and achieving true freedom. I'm here to guide you on this journey to help you understand the power of keyword research. We'll delve into the nitty gritty of free and paid tools, refining your search, and optimizing your content for abundance. Get ready to mine the most profitable niches and build diverse income streams. Today we're cracking the code to YouTube success so you can leave financial limitations in the dust. Imagine keywords as golden bricks, paving the way for viewers to discover your content and turn your passion into profit. Yes, you heard it right. Keywords are like breadcrumbs that lead viewers right to your doorstep on YouTube, potentially transforming casual viewers into loyal subscribers and customers. These golden bricks are more than just fancy terms. They are the language of your audience, the questions they ask, the topics they search for, and the content they crave. They are the DNA of your digital footprint, the building blocks of your online presence. So how do you find these golden bricks? It starts with understanding your audience and your niche. What are the words and phrases they use when they talk about your subject? What are the questions they're asking? What are the problems they need solving? Once you've got a handle on this, it's time to start collecting your bricks. You'll want to mix both popular keywords which have a high search volume but also high competition with specific long tail keywords which may have fewer searches but also less competition. Think of it this way. Popular keywords are like wide, bustling highways, crowded with creators all vying for attention. Yes, there's a lot of potential traffic, but it can be tough to stand out from the crowd. On the other hand, long tail keywords are like quieter, less traveled back roads. There might be fewer people on them, but those who are there are more engaged, more targeted, and more likely to stick around. So you need a mix of both, the highways to bring you volume, and the back roads to bring you loyal, engaged viewers. And remember, your golden bricks should be authentic, reflecting the true essence of your content. So, cooking might bring the crowd, but vegan gluten-free cookies are your loyal customers. Combine popular keywords for reach with specific long tail keywords for targeted streams of engaged viewers. Your golden bricks are not just about attracting viewers, they're about attracting the right viewers. Those who will engage with your content share it and ultimately help turn your passion into profit. Free tools like Google Trends, YouTube Search Suggest, and even free versions of Vitacue or TubeBuddy are your treasure maps. These handy tools are your first step into the world of keyword research. They're like compasses, guiding you towards the trending topics, hidden gems, and those elusive long tail keywords that hold engaged audiences like buried gold. Imagine yourself as an explorer, looking for the gold rush in the vast landscape of YouTube. Google Trends is your trusty guide pointing out what's hot and what's not. It shows you the interest over time for your chosen keyword, helping you ride the wave of popularity. Next in your toolkit is YouTube Search Suggest. It's like your personal scout, predicting what viewers are interested in based on their search queries. Type in a keyword, and YouTube will suggest a list of related phrases. This is a goldmine for finding long tail keywords. Those specific phrases that might not have the highest search volume but can lead to a loyal and engaged audience. And let's not forget about Vitacue or TubeBuddy. Even their free versions are like treasure maps, showing you important metrics like keyword score and competition. They help you understand the landscape so you can stake your claim in the most profitable niches.  Enter the world of paid tools. Level up with paid options like RFs, SEMrush. These are like metal detectors for valuable keywords. They delve deeper into the data showing you search volume competition and related keywords. These tools are for the serious prospectors, those ready to invest in their quest for YouTube gold. Remember the goal here is not just to find keywords, but to find the right keywords. It's about striking a balance between popular keywords for reach and specific long tail keywords for targeted streams of engaged viewers. Think of it like panning for gold. You want the nuggets, popular keywords for their value, but you also need the small flakes, long tail keywords, to add up to a substantial haul. And with that you're well on your way to finding your treasure trove of keywords. Happy prospecting! Now let's talk about refining your keyword search. Think of your keyword search as a treasure hunt. You've got your map, your compass, and your tools. Now it's time to dig deeper, to refine your search and strike gold. First off, prioritize high traffic keywords. These are the buzzing marketplaces, the bustling city squares where viewers gather in droves. They're your best bet for attracting a large audience. But remember, high traffic doesn't always mean high value. The key is to find a balance. Just like a treasure hunter, you want to strike a balance between the bustling cities and the quiet, untouched locations. High traffic keywords will bring the crowds, but lower traffic keywords, the hidden gems, can bring you a dedicated, engaged audience. These can be your loyal followers, the ones who will return for every new video, who will share your content and spread the word. Next, consider the competition. It's all well and good to target high traffic keywords, but if you're competing with established giants, it can be tough to shine. Instead, seek out the niches where you can stand out, where you can be the diamond in the rough, not a pebble on Mount Everest. Choose keywords that reflect your unique value. If you're an expert in vegan baking, don't go after the generic baking keyword. Instead, focus on vegan baking, gluten-free baking, or even vegan gluten-free cookies. These are your unique selling points, the areas where you can truly shine. Finally, and most importantly, choose keywords that reflect your passion and expertise. This isn't just about chasing trends or jumping on bandwagons. This is about sharing your unique voice, your unique perspective.  Remember, you're not just creating content, you're creating a brand, a community, and to do that you need to be authentic, you need to be genuine. So, choose keywords that reflect your passion, your expertise, your unique voice. Above all, keep it real. Your keywords should be genuine reflections of your expertise and passion.  Once you've found your keywords, it's time to weave them into your YouTube strategy. This isn't about stuffing as many keywords as possible into your content, it's about creating a beautiful, intricate tapestry where each thread of keyword adds value to the overall picture. Incorporating keywords into your titles and descriptions is like laying the foundation of a house. It's the first thing viewers see and it sets the tone for your content. Your title should be compelling, enticing viewers to click on it. But remember, it's not just about getting them to click, it's about delivering on the promise your title makes. So make sure your keywords naturally align with your content. Describing your video is another crucial component where keywords play a starring role. Your description is like a mini movie trailer giving viewers a sneak peek of what to expect. Weave your keywords into a narrative that captivates your audience and makes them want to watch the whole show. Next up, tags. Think of them as the signposts that guide viewers to your content. They're the hidden heroes of YouTube SEO, helping to categorize your content and improve its discoverability. But be wary of keyword hoarding. Instead, use relevant tags strategically, leading viewers to your hidden treasure. And of course, your content. This is where your keywords need to shine. Let them flow naturally through your script embedded in your storytelling like sparkling jewels. But don't lose sight of the real gold. Authenticity. Your keywords should enhance your message, not distract from it. Now for the bonus tip. Learn from the masters. Analyze successful videos in your niche. Take note of what keywords they use, how they integrate them into their content. Adapt their strategies, but infuse them with your unique style. Remember, keyword research is not a one-time event, but a continuous journey. Keep refining, keep optimizing, and keep growing. Learn from the masters. Analyze successful videos in your niche. See what keywords they use, how they integrate them, and adapt their strategies to mine your own riches. Keyword research is your shovel and pickaxe to building financial freedom with YouTube. It's that secret sauce that transforms your passion into a profitable venture. Remember, keywords are your golden bricks leading viewers straight to your content, and ultimately turning views into valuable income. The tools are at your fingertips. Both free and paid options can guide you to those precious keywords that resonate with your audience. And remember, it's not just about the most popular keywords. Those hidden gems with lower competition can prove to be a goldmine of engaged viewers. But it's not just about finding the right keywords. It's about refining your strategy, optimizing your content, and staying true to your niche. So don't just sit on the sidelines, take action today. Start your keyword research, refine your strategy, and watch your audience's engagement and income flourish. Subscribe for more actionable strategies to turn your passion into profit on YouTube.


With the season over for another year, 2023 had a lot of changes to the WTA rankings and the WTA2 in general after a season that was dominated by Shfiantec. This season was a little bit different when it comes to the rankings and now's the best time to go through a rankings recap from the start of the year all the way to the end and see what changed. It was what the rankings looked like at the start of 2023 with Shfiantec on top by a long way of points. You can see they're 6,000 points ahead but as we all know things changed as the season progressed. And after the first week of the season we had Sabalenka winning in Adelaide, Goff won in Auckland and the USA without Goff won the United Cup. There's only one change to the rankings though with Keys getting into the top 10 pushing Hellup out of the top 10. Of course we won't see Simone Hellup for the entire season because she was banned and she is banned until further noticed. The second week of the season we had Bencich winning in Adelaide and that gave her a spot in the top 10 ahead of the Australian Open going up three spots pushing Keys out of the top 10 after just one week of getting there. And then the first Grand Slam of the year the Australian Open, the big one and Sabalenka winning her first Grand Slam title, winning the Australian Open, beating Rabakina in the final and both got a boost in the rankings with Sabalenka going up three spots, Goff going up a spot, Bencich also got to go up a spot in the rankings and Rabakina she went up 15 spots into the top 10 for the first time in her career. Jabir Pagula, Garcia, Sakiri and Kudamatova all dropping down the rankings despite some of them actually having a pretty decent Australian Open. They still all got overtaken. The first week of February we had Garcia making the final of Leon but that didn't affect the rankings at all. She didn't move in that top 10. We had no changes to the rankings. Then in the middle of February we had Bencich winning another title this time in Abu Dhabi, saving championship points against Sampsonova and she didn't get a boost in the rankings but she did get a lot of points for that win. But again no changes to the rankings after this week. Sticking into the Middle East now and Sfiantech wins back to back in Doha beating Pagula in the final but with Sfiantech way on top of the rankings. Nothing changed for her but Pagula did go up one spot pushing Jabir down a spot in the rankings so Pagula again solidifying herself in that top three. Then at the end of February we did have a lot of changes to the points but no changes to the actual spots of the top 10 with players like Sfiantech, Goff and Pagula all getting good results in Dubai but we didn't have any changes to the rankings after this week. Then the first week of March Garcia makes another final this time in Monterey but again doesn't change her position in the top 10 and in fact nobody changes their position in the top 10 ahead of the Sunshine Double which comes up in the next week. Then after Indian Wells one of the biggest events outside of the slams Rabakina she wins the whole thing, wins Indian Wells her first Masters 1000 or WTA 1000 title and she got a boost in the rankings as well going up three spots along with Garcia who went up one spot pushing Jabir and Sakari down a few spots as well after they lost points from last year's Indian Wells event. And staying in America with the Sunshine Double in Miami this time in Caviteva she wins the Miami Open beating Rabakina in the final so again Rabakina just keeps making these big finals and she did get a boost in the ranking Caviteva as well going up two spots with Sakari also going up a spot pushing Benchage down two spots after she lost a lot of points from the 2022 Miami Open where she made a deep run. Then we head on to the clay courts for the first time in 2023 and Jabir she wins in Charleston on the Green Clay in America and that gave her a boost in the rankings as well she went up one spot pushing Garcia down one spot so a nice start for Jabir to start off the clay court season but unfortunately it wouldn't last forever. We then went to the Billie Jean King Cup where nobody changed in the rankings because of course that's not worth any points on the WTA so there was no changes to the rankings. Then on to Stuttgart one of the most prestigious events outside of the Grand Slams and the 1000 events and Shriyantek she wins again in Stuttgart goes back to back beat Sabalenka in that final the first 1-2 battle we've had for the year but it won't be the last and again because Shriyantek had so many points there was no change to her ranking and no change at all to any of the players in the top 10 after the Stuttgart Open. Then the first 1000 event on clay we go to Madrid and Sabalenka she beat Shriyantek in the final gets her revenge and gets another big trophy for her this year this is a third trophy of the season but unfortunately wasn't enough to get that number one position but there were players that did go up with Garcia, Goff, Rabakina and Sakri all going up a spot Kazakina and Jabur dropped down and mainly because Jabur was injured had to pull out of the event losing all her points from winning the event 12 months earlier she actually got injured in Stuttgart and unfortunately that really did affect her ranking and you'll see throughout the season until she came back she was really affected with injury this year then we head on to Rome with the surprise winner Rabakina winning on clay maybe a surprise she's had such a good season so far she wins in Rome she goes up two spots going into that top four ahead of the French Open which means she'll be a top four seed for the first time out of slam she did overtake Garcia and Goff who got pushed down the rankings a little bit ahead of the French Open and that's what the seedings would look like going into the second slam of the year going into the week before the French Open there were no changes to the rankings because none of the players played before the French Open this year and then the second slam of the year Egas Shriyantek she wins the French Open for a third time in four years and is able to keep that number one spot because the gap is starting to close between her and Sabalenka at this point so she gets to keep that number one spot Rabakina, Garcia, Jaber, Kvitova and Hadajmaia all getting a boost up in the rankings with Pagula, Goff and Kassakina dropping down the rankings after losing points from 12 months ago but Shriyantek Sabalenka that is going to be a battle that we're going to talk about pretty much all year because it was a battle for the season very similar to the Djokovic Elkres battle that happened on the men's side of things throughout 2023 then on to the grass court for the first time this year and no changes to the top 10 even though Sakary was playing in the tournament in Nottingham there were no changes to the rankings for anybody in that first week then the second week of the grass court season and Kvitova she wins in Berlin but unfortunately wasn't enough points to get her a boost in the rankings Pagula did get a boost in the rankings pushing Garcia down to number five and Krajikova she jumped into the top 10 Hadajmaia lost a lot of points from this time last year and she fell out of the top 10 after spending a couple weeks there post french open so that's what the seedings would look like going into Wimbledon we did have some players playing before Wimbledon with Kassakina getting to the final of Espawn also Goff and Shriyantek getting to semi-files of grass court events but it was Kassakina who got into the top 10 pushing Krajikova out of the top 10 ahead of Wimbledon the third slam of the year then Wimbledon happens for two weeks and Von Drussever she wins her first Grand Slam actually won her only title of the year and that was at Wimbledon of course points were given back to Wimbledon this year so that means 2,000 points were on the line and they all went to Von Drussever and she got a huge boost in the rankings Kovidava also got a boost in the rankings going up one spot but it was Von Drussever who went up 32 spots into the top 10 for the first time in her career Sakari Kassakina had to go down in the rankings because of that boost but it was one of the highest jumps into the top 10 of the season and Von Drussever sitting at number 10 now after winning her first Grand Slam title then after Wimbledon we had the Hopman Cup and also a couple of clay court events that none of the big names actually played so there weren't too many changes in the rankings but then we went on to the hard courts and Sviante goes to Poland wins in Vorsor which was actually a hard court event this season she wins the event wins it home for the first time ever and got a nice little boost in the points but of course her number one ranking was still in her hands we also had a change with Garcia dropping points from last year and Jaberd overtaking her in the middle of the ranking so there was a little bit of a change there as well then going to August the US Open Series and Cocoa Goff she started to run of course had the coach Brad Gilbert coming on board and this is where things started to change for Goff she wins in Washington her biggest title at the time that would be changing after a couple weeks but she does win Washington both Pagula and Sakari also getting a boost in the rankings after having good weeks in Washington pushing Danbury Bacchina and Caviteva in the first week of the US Open Series then we head into Canada one of the biggest events of the US Open Series and Pagula beat Samson over in the final also beat Sviante along the way which is a huge win for her she hadn't beaten Sviante too many times before and she gets the win she wins in Canada but there was no change to the rankings just a lot of changes to the points midway through the US Open Series and then we go to Cincinnati arguably the biggest warm-up event of the US Open Series and Goff she wins again her biggest trophy at the time of course that changes in a couple weeks spoiler alert she beats Mukher in the final also beat Sviante for the first time along the way as well so it had a huge week winning that title the biggest title of her career and also got a boost in the rankings going up one spot Von Drusseva and Mukher also getting a boost in the rankings with Garcia and Caviteva dropping down the rankings but Mukher into the top 10 for the first time after making the French Open final also the final here really starting to solidify herself in the top 10 as well then the week before the US Open none of the big names played Garcia did play in Cleveland but there were no changes to the rankings ahead of the US Open and then the US Open the final Grand Slam of the year and Coco Goff does it again her biggest trophy officially now until this day is this US Open she beat Sabalenka in the final it was her title she had the best US Open Series of anyone she's won three of the last four events that she's played and she beats Sabalenka in that final and she gets a huge boost in the rankings but there was a change at the top as well with Sabalenka finally getting two number one because Sviante the defending champion of 2022 didn't make it past the fourth round so she lost a lot of points Sabalenka made the final she gets the world number one Goff also getting a boost in the rankings going to world number three Von Drusseva Mukherba again impressive this week making the quarter finals and semi-finals of the US Open they get a boost in the rankings Sviante's down one spot Pagula went down two spots as did Jabur, Sacri Garcia also dropping down the rankings but it was all about Goff it was all about Sabalenka this week both getting career high rankings of course Sabalenka getting to that number one spot finally then we had to San Diego and a little bit of the Asian swing as well but nothing crazy happened only Kredikeva winning in San Diego which gave her back her spot in the top 10 she won three spots Pagula went up a spot as well because she didn't play and just got a little bit of a lucky I guess point situation and after a terrible season Garcia dropping out of the top 10 completely which is a little bit of a shame because she finished 2022 so well then we go over to Mexico Guadalajara nobody really played and it was Sacri winning her first 1000 title and her second career title after four years of not winning a title she wins in Mexico she lives her biggest trophy of her career and she also got a boost in the rankings going with three spots Garcia does make it back into the top 10 after having a very nice week in Guadalajara making the semis so a little bit of form post-us open for Garcia but as we'll find out soon it won't be enough Von Drusseva Mukherba Kredikeva all dropping down so the Czech players all dropping after they skipped in Guadalajara then we head over to the Asian swing with Tokyo and Pagula making the final but it was Jabir who won the title in Nimbau which was her second title of the year of course having a lot of injuries this year it was good to see her getting another win but there were no changes to the rankings only a change to the points of the top 10 players then heading over to the biggest event of the Asian swing in China and Egas Friyantek winning her first 1000 event of the year which is so weird to say because of course last year she dominated most of the 1000 events this time she only won one and it was in Beijing she beat Samsung over in the final wasn't enough to get back to world number one but it started a little bit of a momentum shift between her and Sabalenka we'll talk about in a second there were actually no changes to the top 10 staying in Asia now and Pagula she won in Korea winning another title this season she'd already qualified for the WTA Finals but it was nice to get another title to her name winning that title pretty easily in the end but there were no changes to the top 10 then heading into the final weeks of the WTA season and there were three events on but none of the big names played all the points were taken away the week before the WTA Final started and we did have some changes to the rankings because of those dropped points with Pagula and Sakri dropping down the rankings and we're back in a von Drussova Mukova and Krijikova getting a boost in the rankings because of the lost points from those plays of course Pagula and Sakri did play the WTA Finals last year whereas the four players that got a boost did in play so they got a little bit of a benefit from that Krijikova she gets back into the top 10 after having a nice week at the elite trophy which is kind of the second WTA Finals it's actually not going to be an event next year which is a shame but it's for the players that are outside of the top 10 who didn't make the WTA Finals but she won a couple of matches and she got a boost and ended up in the top 10 to end the season then the final event of the year the WTA Finals and Igor Shryontek had to win the event and hoped that Sabalenka didn't do well and that's what happened Sabalenka made the semis Shryontek beat her along the way and then won the final and reclaimed the top spot in the very last match of the season had she lost the final she wouldn't have been world number one so by winning the WTA Finals she also won the year-end championship or the year-end number one ranking as well she overtakes Sabalenka at the last minute we also had a little bit of a change in the middle with Jabir overtaking Vondrusova so Jabir did come good towards the end of the season but man what a wild year for the ranking so many things happening and then the final event of the season the Billie Jean King Cup of course not worth any points team Canada beat Italy in the final bit of an upset there especially with countries like Kazakhstan Switzerland United States even Poland and France playing Canada reign supreme winning the Billie Jean King Cup but it wasn't worth any point so there was no change to the rankings and that's what the rankings look like at the end of the 2023 season but if we go back to the start of the season Shryontek she doesn't change her ranking she stays on top Jabir dropped down four spots down to number six with an injury plague season did come good at the end of the year but unfortunately lost all their points in the middle of the season where she gained them last year Bogula she dropped down two spots to number five in the world which it's not too bad Garcia biggest drop out of everybody in the top 10 from the start of the year to the end she drops down 16 spots to number 20 in the world so she dropped out of the top 10 completely Sabalenka she went up to number two with Zachary dropping down a couple spots to number eight golf of course went up to number three in the world after winning that US Open Kazakina unfortunately she drops out of the top 10 as does Kudamatova and Halup and they made way for the Czech players with Mukava Von Drusava and Krajikova getting into the top 10 replacing those couple of players and of course Rabakina who can forget her getting up into number four in the world she was battling for that number three spot pretty much all season until Goff had that amazing US Open run that is how the rankings look at the end of this year how do you like the rankings what was your favorite moment of the rankings this year I love that one two battle and I love that Rabakina is finally getting some recognition of course last year she was the Wimbledon champion it wasn't worth any points and she wasn't in the top 10 in fact she was outside the top 20 to start the year and now she's at number four in the world where she deserves to be and hopefully next year if she's healthy she can start really pushing those top two ladies and maybe even be world number one with some crazy results but let me know down in the comments below what has been your most exciting moment of the rankings this year that is the rankings heading in to the 2024 season which happens in about a month's time


Hi everyone, Sean here with jaspyscasebreaks.com doing a random number block randomizer for 2020 flawless two box case pick your team number 27 random number block eagles chief bears jaguars and colts works just like every other random number block where every spot gets you a random number for the break between from zero through nine for example if you get the number three you'll get all cards with three being the first number next to the slash on the left side of for the teams in the random number block if the card is 243 out of 299 1399 3 out of 25 43 out of 49 93 out of 99 and so on the number three we'll get the card zero we'll get any and all redemptions for those teams including one of one redemptions while the number one spot gets any live one of one pulls like this there you go so here's our list of customers from paul lord and down to david razor with last spot mojo and the numbers from zero through nine dice roll to randomize both lists and pair them up five and a six eleven times eleven the final time david down to michael and eleven times on the numbers eleven the final time from zero down to three so eleven times in the numbers eleven times on the customers and eleven times on the dice and here's how it turned out uh david razor with zero and seven paul lord and one david razor nine paul lord and six pj mcnealy two five steven masters eight derrick vulgamore four michael pacifico three david razor with the zero spot gets any and all redemptions for eagles chiefs bears jaguars and colts even known one of one redemptions for those five teams while paul with the one spot will get any live in person one of ones and there you go guys that's the random number block randomizer for 2020 flawless two box case pick your team number 27 random number block eagles chiefs bears jags and colts the break itself is sold out there's two of the random number blocks that need to fill for us to get it done tonight but let's get working on it i'm sean jaspyscasebreaks.com thanks for hanging out we'll see you next time


QuickBooks Online 2022, bill for hourly services of staff, enter billable time. Get ready because it's go time with QuickBooks Online 2022. Here we are in our gig-grade guitarist practice file. We set up with that 30-day free trial holding down control, scrolling up just a bit to get to the 1-2-5% currently in the home page, otherwise known as the Get Things Done page. Business view as compared to the accounting view, if you wanted to change to the accounting view, it's something that you can do by going to the cog up top and down to the switch to the accounting view. We will be toggling back and forth between the two views either by going here or jumping over to the sample company file currently in the accounting view. Back to get great guitars, we're going to imagine now that we're going to be entering data or billable time into the system and then taking that time and using it to create invoices to bill the customers. We're going to imagine that we have guitar instructors as our two employees. In other words, acting as guitar instructors, giving us the hours that they have worked that we're going to imagine to be billable in a similar fashion as you might do if you were, say, a law firm or an accounting firm or a tax firm or something like that where you typically have a partnership type of setup and then you possibly have staff basically listing out what they have worked on in some way, shape, or form. You then taking that information and using it to bill the clients with. Now we could then have the staff fill out this billable information in multiple different ways. If we've got the payroll set up, you could possibly use the time tracking information so that you can actually send them the information on email and see if they could basically fill out the time sheets to help you out possibly with the payroll as well as possibly with your billable information as well. We're not going to get into the T sheets here, but instead use the billable time option up top in the plus button up top, putting our information into the weekly time. Now as you think about the weekly time, you also want to think about how you're going to be billing your customers. Do you want to bill them just on some kind of rate for the employee? So in other words, if I have two employees, I'm going to charge some rate, most likely not the rate that I actually pay them. If I pay them on an hourly rate, but rather some billable rate that will be fixed, or are we going to charge some kind of billable rate by what they do? And if we charge some billable rate by what they do, then we're going to have to know obviously what it is that they're working on more specifically and what the rate is going to be for the items or things that they are doing. Also just realize that in any situation if you could standardize and get away from the billable rate and possibly do something like with the bookkeeping that we have talked about, instead of charging on an hourly basis, give some kind of package and say, hey, we're going to give you this amount of services if your transactions are within a certain level. You can see this is basically what kind of into it does as well. They say, well, we're going to fill you out for the use of the software. If you have so many transactions or so many accounts that you will be using and so many users and so on, if you can package your billable items in that way, it can make things easier with the billable and save times on the billable items and make your billable items a little bit more concrete, possibly easier to sell. But if they're going to be unique jobs you're working on, that'll be difficult to do and all you can really do at that point possibly is do the good old billable time strategy. So we're going to go in here. We're going to go into the weekly time sheets. Again, go into the weekly time sheets and enter our time. We're imagining that the employee then has been tracking their time and possibly we're going to enter it into the system or possibly allow them to enter their time into the system. We're going to say that this is going to be at some point in February, the current month we're working on. So let's go from February 20th to 26th. So there we have that. And then I'm going to say that this is going to be four. Let's start the first one is for Adam. So let's say this is Adam, our employee. We're not entering this for their time for the payroll purposes, but for billable purposes. And we can select the detail here in terms of who we're paying for. Choose a customer. Let's add a new customer and say it's customer one, a very generic name. You're not even trying on the names anymore. Customer one, that's, you can't, okay. Yes, customer one. That's what we have generic customer one. And we're going to pay item. I'm going to say it's going to be four. We have the pay item as opposed to the salary down here because he's paid salary. And we could put the description. I'm going to say guitar lessons. And then we're going to say it's billable on the hourly. And we'll put this in place for saying, I think what did we charge for? We're going to say 75, 75 here. And notice it's not pulling this information from like an item that we set up. So we're, you know, we're going to have to make sure that we know what the billable items are going to be based on either just a standard rate for Adam or based on what is being taught, possibly in this case, guitar lessons. So then is it going to be taxable? We're going to say no because it's going to be a service item. And let's say that we work two hours here and two hours on Wednesday. And then he also worked on customer number two customer. Are you kidding? Customer number two. Customer number two. That's what he called himself. That's his name. Customer two had guitar lessons. Customer two came in for some guitar lessons. And then select. We're going to say it's billable. Also guitar lessons that we had here. 75 for customer number two. And they worked. Mr. Adam worked on this. Worked on that on Tuesday and Thursday. So four hours total for the, for this current week for customer one, four hours, customer two, for four hours that we're going to be billing out at the 75, which comes out to the $300. So we will be making an invoice in future presentations for that amount. So let's go ahead and save it. I'm going to say save and new and do the same thing for our other employee, Erica. Imagine she's given us her time sheet for the stuff and guitar lessons she's been doing for her customers who also have generic names. So we're going to pick up Erica now. Drop down and we've got Erica Smith. She's also a guitar instructor as it happens that is doing guitar lessons. We're going to hit the drop down and this is going to be on the 2220 to 226 again for Erica. And she worked with another customer which happens to have the name of customer three. Customer three came in and it was like, wow, these other two customers have really similar names here. But my last name is three as a compared to customer one. So we're going to select the item instead of the regular pay here, it's going to be guitar lessons again, guitar lessons, guitar lessons and we'll copy that out. And Erica, I think we're up in the charge to 115 115 for Erica and she worked on we're going to say Monday two hours and Wednesday so send kind of spread two hours and then you won't believe this but the next customer that came in was named customer four. That's how it worked. It's not my fault that people have that's just what happened. So this is going to be 115 once again non-taxable on Tuesday and Thursday. So she worked four hours customer three, four hours customer four at the rate of 115 we're saying in because she's got some advanced technical guitar technique skills that people are highly, highly in demand at least more than Adam I guess. I don't know if 115 is good for guitar lessons. Anyways that's what it is. So we're going to bill that out so I'm going to say save and close this time and we'll actually bill it out next time but of course when we bill it out we're going to say now that the time has entered we can go right into that invoice and we can choose some of these new customers customer one, two, three and four I'm thinking they might have given us a fake name to get some free guitar lessons maybe because I feel like no one would actually call name themselves and then when we go into there we get the billable information on the right so we won't add it at this point we'll do that next time so this is once again one of those preludes to the great epic of get great guitars to something that may possibly happen in a future presentation.