Every time you finish a game version, you need to decide what to add or improve upon for your next version. This process is called identify solution issues. Solution issues are disparities between the solution you are seeking and the design and code you have written. Identifying these solution issues is key to improving your code, and adding or modifying features in a measured and systematic way. Hacking version one is not very exciting, and only has a few similarities to the complete game you need to produce. It displays the heading and the passwords in a black and white textual format. Although it allows you to input a guess, it only displays unadorned passwords in the Python shell instead of using its own window. As well, you only have one chance to guess a password, and no matter what answer you pick, the game reports that you failed. We can recognize at least five different solution issues with Hacking Version 1. First, code quality is an important facet of identifying solution issues. In the previous lesson, we discussed some of the disadvantages of using multiple calls to the print function. We need to remove these duplicated statements, since repetition makes the program longer than necessary. We will solve this problem in Hacking Version 4 by introducing a language mechanism called a repetition control structure. Second, when you input the correct password, the game displays that you have failed. Boring! To solve this issue, you need a mechanism to compare passwords to guesses. You then need to choose whether a success or failure needs to be reported to the player. You will learn how to do this in Hacking Version 3. Third, you were only allowed to make one guess before the game ends. In future versions, you must be allowed to make at most four guesses. To do this, you must be able to consistently repeat steps and statements in your algorithms and code. You will learn how to do this in Hacking Version 5. Fourth, your passwords do not contain any of the symbolic character decorations of the final version. To make this improvement, you must be able to manipulate the password strings. You must add symbolic characters in a random way. You will learn how to do this in Hacking Version 7. Finally, your game is text-based, instead of graphic based. You must learn to create and open a window, and draw graphical objects in the window. For the second version of hacking, the only solution improvements you will make are replacing text with graphics, and displaying the players guess. The other improvements require you to learn and practice several new design components and Python statements. To use a graphical window, you must master some new library functions. Games that use a graphical window can't use the print function to display text in that window. Print only displays in a terminal window, or Python shell. It doesn't allow you to specify the location, the color, or the font of the text you want to display. For hacking, you need to display green text in the top left, top right, bottom right, and the center of the screen. To do this, you must use a graphics library to display text. The functions you have used so far are built-in functions included in the Python standard library. Unfortunately, to standard library doesn't support graphics. You can't use it to open up a window, or draw circles, or print different colored text. So, we will use an external library. An external or a third party library is a compilation of code provided by the Python community. It contains functions and other code that augment the standard library. Using libraries is an example of using templates. Using templates is an abstraction technique that uses previously created solutions, and adapts them to solve new problems. Recall tracing the code of Hacking Version 1. If you stepped into the input function, you would see the underlying code that implemented it. This code, for the input function, was written by someone else and it can be used by others without rewriting it. Consider how difficult it would be to write the games in this course if you had to implement all the built-in functions of Python before implementing hacking. It would take so long that you would never have time to write the game code that uses these functions. Don't spend your time reinventing the wheel. Using templates builds on the work of others to create solutions more quickly. For this course, you'll use a library we created called uagame. It's a simple library that let you create a window and draw strings in it. It is based on a popular Python graphics library called pygame. We use the simpler graphics library to implement all versions of hacking. You will use pygame itself in the second game of the course, Poke the Dots. Let's add graphics to hacking.