[SOUND] Sadly, this class is drawing to a close and I wanted to give you some of my thoughts on where you could go from here. What is beyond CodeSkulptor? I think that CodeSkulptor has served a very valuable purpose in this class. I think it has worked extremely well to accomplish the objectives that we wanted to accomplish. I hope that you found it to be useful and helpful as you've gone through the ideas of this course. and now, I want to talk about what can you do if you want to move beyond CodeSkulptor and take the things that you've learned in this class and apply them elsewhere. And trust me the things that you learned in this class do apply elsewhere. You are going to find that almost everything that we've taught you here is something that you're going to keep using again and again. And the things that don't fall into that almost everything category, well, you're probably not going to use them again and again because you don't want to, not because they're not valuable. [LAUGH] Alright? So I want to assure you that you can keep using CodeSkulptor pretty much as you want. I think this was enough of a success during this course that it's not going anywhere. Lot's of people are using CodeSkulptor both inside and outside of this course, so you can rely on it for the foreseeable future. However, when you're ready to move on, you feel like you've exhausted the limits of what you can do in CodeSkulptor, it's time to install Python directly onto your machine. So if we hop over here to python.org, you can see the nice Python webpage. And, the first question that you're going to end up asking yourself when you get to the Python web pages should I install Python 2, the latest version is Python 2.73 or Python 3, the latest version is Python 3.3. This can be a little bit of a contentious debate among people. there are many people that use Python 2 and there are many people that use Python 3. They both have their advantages and disadvantages. Python 2 has been around a lot longer, it's very solid, it has lots of packages for it, and lots of people still use it. Python 3 is the newest thing, it has a lots of new features, although, the best of those have been pushed back in to Python 2.7, but not all of them. Okay? And Python 3 is definitely the new new version, it's the new thing going forward. They're not actively developing on two anymore. So you can install 3 and get the latest and greatest or you can install 2 and get the solid and, and tried and true. Okay, I personally use Python 2.7.3 for everything that I do, but that's not to say that you should as well. Okay? I think it's a perfectly reasonable choice to start with 3. And you'll be comfortable in either way, right? There minor differences from CodeSkulptor. If you move up into 3.3, most notably the way that the print statement works, which people noted repeatedly at the beginning of the class. In python 2.7, you're going to feel right at home, Python 2.6 and 2.7 are basically exactly the same. Okay? Alright. So if I have Windows, you can click on the little Windows installer links and have no problem and you will have Python up and running in no time. If you have another kind of computer, well, it's a little bit harder and you're going to be stuck with the particular versions that are available. You can search the web for some Mac installers and on Linux, usually your distribution will have Python already installed and ready to go. Okay? So, I've installed Python. Now what? Well, when you first fire up Python, you get something that looks like this. This is a shell, this is similar to the console that we had in CodeSkulptor. Let's open a file. So, File, Open. I made my own little file here ahead of time. Okay? And here is my file, I type in Python code here, just like I would have in CodeSkulptor, in CodeSkulptor's editor. [SOUND] Here is more text. Okay? I installed Python 2.7.3 here, so my print statements look exactly as they do in CodeSkulptor. When I'm ready to go, there's a run menu here and I run module, this is called the module that I've just created. Okay. It's going to tell me that I have to save it. Sure, no problem. And, over here in the shell, I see the text that gets printed out by my program. And you'll notice the syntax highlighting uses slightly different colors, but you can get used to that pretty quickly. Another great feature of the Python shell here is I can actually type things directly in here. Print 11, + 1, prints 2. Okay? So you can take, you can do that as well. But otherwise, everything should be familiar to you. You should be able to take Python programs, use them over, you know, type them into the editor, save them, run them, and get output on the console that you expect. Okay? So at this point, I'm, I'm sure that you all feel like you know and love simple GUI and it's become a good friend, right? And I also hope that you realize that the simple in simple GUI is not meant to imply that you can only do simplistic things with it, rather, it got a simpler interface than a more full featured library would have. Okay? So when you install desktop Python you are not going to want to take simple GUI and put it on your desktop. You want to get one of these more full featured libraries and transition over from the simple GUI to the more complex GUI packages. And when you do that, you can start by just using the subsets of these packages that are all related to simple GUI. You can look at the simple GUI calls, look at these packages, and make similar calls and do similar things. You'll just find that if you want, you also have more capability that you have access to now, that you can make use of. So what package do you use? Well, there are lots and lots of GUI packages, okay? And, ask a Python programmer which package to use and they will give you a definitive, you know, a very strong reason why you should use one of the other often. Okay? A lot of this comes down to your personal preference, what you're trying to do, and your personal taste. Okay? So, I'm going to try and not be too biased here and try and talk about what would be good for transitioning from CodeSkulptor and simple GUI. Okay, so if I look on the Python page here, they have about six or seven GUI libraries, they list PyGtk and PyQt first. I would not recommend these if you are, you know, a beginning programmer. This is your first foray into this beyond CodeSkulptor and simple GUI. Those are a little bit more difficult to get installed and get running and working and I don't think that that's, that's the right first choice. Okay? They might be correct, a good choice later. 'Kay? The more simpler choices are Tkinter. TkInter is the traditional, you know, user interface toolkit for Python. It comes with Python when you install it. You get it, you're ready to go and you can start using it. WxPython is a little bit better. It allows you to do much of the same things, though. I'm not sure PyjamasDesktop is really the right choice either in this first, for similar reasons for PyGtk and PyQt. So, I think that if you're looking for the fastest path to getting started, TkInter is probably it. You can add WxPython and try that out and compare and contrast the two if you'd like. Now, if your objective is to continue writing games, we've really hook you on the whole fact that I can use Python to write games. These might not be the best choice anyway. There are actually game libraries that have been built for Python that do a lot of things that make building games simpler. Okay? And you'll see in the list here, this is going to be a long list, right? And they're actually grouped. Lay.' The first group is PyGame and related. So PyGame is probably one of the most popular game libraries for Python. There are lots and lots and lots of games built on PyGame. And this is not necessarily because PyGame is the best, but PyGame is sort of old, tried, and true, and stable, and it just works. Okay. And is a very portable, works across platforms pretty well. So the PyGame is a good choice to start with. Okay? Because there will be lots of examples that you can find and you'll have lots of, of guidance and, and stuff on the web that you can use to figure out how to get your, your programs working in PyGame. Okay? And there's also some derivatives here that, that make use of PyGame. Alright? Now there are newer packages, so there's Pyglet here. Pyglet, okay, is more advance and it actually allows you to use OpenGL to render things. OpenGL is the graphics library standard basically that you use on your computer. You have to have good support for OpenGL for this to work well. And Cocos2D I think is actually even a little bit newer and maybe better than, than Pygelt is built on top of Pyglet and so, these two are, are good choices as well. I think they provide more features and capabilities than PyGame, maybe a little more complicated to use and they require a little bit faster hardware, but that's probably because you're going to get better results. Okay? There's also PyOpenGL which is another way to get that G, OpenGL these generally also make use of PyGame, as it says here. Right? And so there's a bunch of different packages here. I think that I'd probably recommend starting with PyGame. Like I said, it's going to be the sort of easiest to get into. You're going to be able to find a lots of material to help you out. And, once you become comfortable with that, you know, if you want to transition into something else, something more complicated, I think that's fine as well, obviously. Now, I also want to stress that a lot of this stuff, if you look at what your classmates have already done, you can go look in the forums. You will be able to find lots of, of posts where people have already started to transition their programs over from simple GUI to PyGame or simple GUI to TkInter. And, so, you can already get a feel for what it takes to translate. And I think, a lot of the cases, you'll see that by simply using calls that are similar to the simple GUI calls, you don't have to learn all that much that's, that's new. You just have to learn a little bit different names of the function calls or, or whatever. And you will also see that the [INAUDIBLE] programming model that we taught you will carry over nicely and the skills that you learned in this course are going to be very relevant here. Okay? So there's one more thing that I wanted to talk about. So, throughout this course, we encouraged you to use global variables. There was a lot of state for your games, which we put in global variables, and in the event handlers we had you modify those global variables. Now, this was a conscious decision. Okay? This is the simplest way that we can come up with to make it possible to get you diving right into [INAUDIBLE] programming in week two of the class. And I think it was a good decision, but, I want to stress that in general using global variables is a bad idea. Okay? The size of the programs we've been working with, you can manage. Alright? And you can keep track of where you're modifying global variables and you usually don't get into a lot of trouble. But as programs get bigger, okay, global variables become a huge problem, they become this sort of part of your program that creates bugs that you end up modifying global variables in all kinds of places all over your code, and then, you use them in the bunch of other different places in your code, and they end up having wrong values at the wrong time, and it becomes very difficult to figure out who changed it where and why. Okay? So I want you to start thinking about your use of global variables here and think about, do I really need a global variable or is this is something that I can put inside of a function? Okay? And, at a minimum, I want to encourage you, now that you understand classes, to start thinking about maybe for your game have one global variable. Make a game state class, and inside the game state class, keep track of things like is your game in play, how many lives do you have left. That sort of thing. Okay? And, put the proper methods on it, so that you don't arbitraly modify those things, but you only modify them the way that they should be modified. Create one global variable, call it, you know, game that is a, a, an instance of the game state class and its Init method will initialize the game to start correctly and modify that as necessary. Then, at least, you have this one single point this one single global variable that you modify and you can search for all of the times you call methods on your game object and that helps you find all the global variable, you know, problems that could arise. Alright? You can get more sophisticated. I think that, you know, the more sophisticated techniques are a little bit beyond where we are, there are other things that you can do that, you know, I might advocate to a more advanced class and maybe we'll bet there someday. But, for now, I just wanted to caution you and let you know that, even though, we've been advocating the use of global variables, it's not a great idea and I want you to start thinking, hey, do I really need that global variable? Okay? So, I've covered some basic things that you can do to move beyond CodeSkulptor. There were a large array of people in this class with all different skill levels and I really have to say that I had a fantastic time teaching this class. It was a lot of fun. I really enjoyed watching the progression of people throughout the, the class and how everyone seemed so supportive of each other and helping each other out and allowing all of us to watch people go from, you know, not having programmed at all, to being able to program these fantastic games. I hope that all of you got to see some of that as well and you feel like the experience was as valuable as I do. Now, I focused today, largely talking about, you know, what can you install so that you can keep going? Okay? And, I realized that for these different groups of people, there are actually different levels, and I've targeted one particular level. I want to talk to the people who feel like they're just hanging on for a second here. If you're just hanging on and you want to keep using CodeSkulptor and simple GUI, go right ahead. I think that I created that tool to bring programming to people who hadn't been able to do it before. So keep using it and introduce other people to it and share your joy. Okay? I know that there's lots of you here, that are out there cheering as you finish these mini projects, keep that up. That's the joy of programming, that's why we created this course, because we feel that way, too. All right? To those of you who are ready to move on, hopefully, this video has given you some information that will help you to move on. for those of you who were, you know, experts already, either in a different programming language or you are a new Python, you just wanted to learn GUI program, programming. this video might have been a little too simplistic for you, but I'm hoping that now you'll be able to browse the web, you'll be able to find your own sets of tools that you're ready to move on to. So I hope that, even though, there was this huge array of people in this class that we've done a good job trying to serve all of you, and that you've all been able to get something valuable out of it. I know, I got something valuable out of it. It's been a pleasure to teach you all. And I, I have you've enjoyed CodeSkulptor and I hope you've enjoyed moving beyond it.