3. Feature Lab
3. Feature Lab
Overview
In this lab, you will be contributing to the development of the Quest software library, the library you'll ultimately use to make your unit project game.
You goal is simple: identify a feature you want for you game that the Quest framework currently doesn't support and build it.
However, this task is more complicated than it seems. Since this is a real piece of software that you, your peers, and many others after you will use, you've got to make sure your contributions are effective. Specifically,
- your feature should work as you describe it
- your feature shouldn't break any other parts of the game -- older examples should still work without modification after your feature is done
- your feature should be well documented so others can use it (and continue to develop it!)
[0] Setup
Note: if you made changes to the code during the Quest lab that you would like to keep, clone the Quest framework again into a different directory in your unit_02 folder and use the new copy for this lab.
💻 TODO: First, make sure that you Quest repo is up-to-date. In the quest_lab
repo:
git stash
git pull
💻 TODO: Make sure your packages are up to date: pip install --upgrade --editable .
[1] Working on your feature branch
In this lab, you will work on a branch of the main repository to implement your feature. Git branches are copies of a code base where you can work on a specific feature of the code without worrying about messing up the code in the main branch.
Once your feature is done, we'll merge your branch into the main branch and add your feature to the main software package. Then, everyone will be able to use it!
Checking out your branch
To simplify things, we've already created a branch for your group.
💻 TODO: All you need to do is change to it:
git checkout feature-TEAM_NAME
Note: make sure to replace TEAM_NAME
with your team name from the game group sheet.
[2] Working on your branch and pushing the work to GitHub
You are now ready to start working on your feature branch!
Note: Before every work session, you should make sure that you are on your feature branch by running git checkout feature-TEAM_NAME
Working on your branch
You are responsible for figuring out how to implement your feature. The planning document we made in class should be helpful.
💻 TODO: To start, make a new file in the examples
repo. Make a simple class that extends one of the example games already created. You can use another example game as a template.
Make sure that at the end of your file, you include the code to run the game you've create:
if __name__ == '__main__':
game = YOURGAMECLASSGame()
game.run()
Testing your feature
As you are developing your feature, it's important that you don't break any other functionalities of the Quest library. To make sure, you can run all of the examples in the examples
repo.
💻 TODO: To test these games, cd
to the quest_lab
directory and run:
python test_feature.py
Note: this test will not test the actual functionality of your feature. You'll have to find a way to test that on your own 😁
Documenting your work
The Quest library is a public library that anyone can access. As such, we need to make sure that it is well documented so others know how it works.
For every class and function you write or edit, you need to make sure that it has a comment that accurately describes what it does. Comments for classes should be in the following format:
class MyGameClass(QuestGame):
""" This is a comment describing what the class does.
Attributes:
INIT_ARG_0: description of the first argument in the class's __init__() function
INIT_ARG_1: description of the second argument in the class's __init__() function
"""
Comments for functions should be in the following format:
def some_function(self, ARG_0, ARG_1):
""" This is a comment describing what the function/class does. For functions, you also need the Args and Returns field below.
Args:
ARG_0 (ARG_TYPE): description of the first argument passed into the function
ARG_1 (ARG_TYPE): description of the second argument passed into the function
Returns:
(RETURN_TYPE) Description of what the function returns.
"""
💻 TODO: Start by writing a comment for the new game class you just wrote.
Pushing your work
After a class session or after you've reached a milestone, you can commit your code just like normal:
git add EDITED_FILES
git commit
git push
💻 TODO: Commit the code you just wrote for the new example game.
Note: since this is a group project, you will have to deal with merging your code and merge conflicts when another member of your team pushes their work. Checkout this refersher on merge conflicts if you get stuck.
[3] Submitting your work
Finally, at the end of the lab when you have completed your feature, you can make a final push to GitHub just like normal.
To submit your work, you will need to make a pull request. This is a request to merge the code from your branch into the master branch.
To do this:
-
Go to the GitHub page for the Quest repository.
-
Below the number of commits, click on the "Branch" drop-down menu.
-
Select your team's branch.
-
Make sure the branch updated and click "New pull request".
-
Write a title for your pull request. Optionally, you can add comments about your submission. Create your pull request.
-
If you see this page, your pull request was created!
Note: GitHub will automatically run a few checks to make sure your code builds correctly. If you don't pass the check, make sure your code passes the test_feature.py
file.