So this week I spent a good chunk of time making my usual worrywort contributions to a collaborative project and set up a design document for our activity to make sure all team members are on the same page. I took some structure and layout from previous design documents I’ve written for other projects, but all the content is original. I’ll include the content of that document here in this blog post. It’s still a work in progress, but the majority of it is done here.
Game Abstract –
For Humanitarian Free and Open Source Software Development (IGME 582) jflory7, wilfrede and spg1502 are collaborating on making a logic-based activity, called PyCut, for the One Laptop Per Child XO laptops. Our activity is designed to encourage logical thinking by presenting its users with a puzzle about meeting the criteria of a needy customer at a pizza shop. Through interacting with the game, our hope is that the audience will develop and refine their logical thinking skills in an interesting and fun environment.
Learning Objectives –
New York State’s Common Core Curriculum for the 4th grade outlines various learning goals within the realm of mathematics and we chose to focus on 4.OA (Operations & Algebraic Thinking) unit 5, Generate and Analyze Patterns. This particular section calls on 4th grade students to be able to “generate a number or pattern that follows a given rule. Identify apparent features of the pattern that were not explicit in the rule itself.” This, in short, involves extrapolating data points from a limited pool of existing information. PyCut strives to help develop and solidify these skills through pattern recognition in the context of a game.
Game Context –
PyCut will take place in a pizza shop where a customer has placed an order for a pizza but has been very vague about the toppings they would like on it. The player has a limited number of attempts to get the pizza right before the customer gets frustrated and leaves the store.
Game Influences –
PyCut will take inspiration and logical puzzle development guidance from Logical Journey of the Zoombinis (1996) which features a puzzle entitled “Pizza Pass” in which the player must create a pizza for a hungry (and very picky) troll. We will follow a similar pattern for logical puzzle development to Pizza Pass and use it as our primary target for guiding PyCut.
Target Audience –
As an activity, PyCut will be designed for 4th grade students using an XO laptop. With this in mind, we plan to keep our visuals clear and simple to avoid providing too many distractions or unclear visual signals. In addition to this, we need to ensure that the logic and “rules” of the game are easy to understand and can be quickly picked up on.
Art Inspo –
TODO: Decide on an art style and aesthetic to follow. Collecting screengrabs of games, art, or assets we could use would be useful here.
Player Goals –
The player will take the role of a chef building a pizza that consists of up to five toppings for a picky customer, and aims to please the customer before they grow frustrated and leave the store. The player will have a limited number of attempts (limited by the number of available unused pizza crusts) to build a pizza that meets the customer’s requirements, and will try combinations of toppings in an attempt to please the customer.
Win Conditions –
The player will have successfully completed the challenge when the pizza they produce matches the requirements of the customer and the customer has happily left the store with their pizza.
Failure Conditions –
The player will have failed a challenge when they are unable to produce a pizza that meets the customer’s requirements in a limited number of attempts.
Player Controls –
The player will be presented with a number of buttons with icons representing various pizza toppings (mushrooms, cheese, pineapple, anchovies, pepperoni) and can toggle these individual ingredients on/off to display on the pizza before presenting the pizza to the customer by hitting a button that will say “cook.”
Gameplay Walkthrough –
An individual challenge would feature a blank pizza in front of the player, and a customer waiting to be served. They will add ingredients as they fit and cook it for the customer. Once the customer sees the pizza, they will give feedback to the player and let them know if the pizza is perfect (meets all requirements), if it has too few ingredients (all ingredients are correct, but there is at least one ingredient missing) or if the pizza is wrong (at least one ingredient doesn’t belong on the pizza). In the first case, the player will have completed the challenge. In the second case, the player must re-create the pizza, but try adding a new topping that didn’t previously exist until they get it right. In the third case, the player has to identify one or more ingredients on the pizza that the customer doesn’t like. A blank pizza (no toppings) and a fully loaded pizza (all toppings) are both possible options, as well as any combination of any number of the five ingredients.
Functional Basics –
Our first step will be developing a base-functionality version of the game. This will require a system of generating a customer’s predetermined order, allowing the player to toggle toppings on/off and submitting them for review, and comparing the player’s submission to the customer’s hidden order. Generating a customer’s order will be a simple task of randomly choosing true/false across five toppings. The pizza-creation process will involve implementing five buttons that toggle a boolean value for each topping, and the submission (cook) button will store those five boolean values and feed them into the component that will compare the user’s creation to the customer’s order. The comparison function will loop through each of the five toppings, and if it encounters a topping on the player’s pizza that isn’t present in the customer’s order, then the system will tell the customer to inform the player that they’ve used toppings they don’t like, if all elements on the player’s pizza are in the customer’s order but one or more are missing, the system will tell the customer to inform the player that they’re short on toppings, and if both the player’s pizza and the customer’s order are identical, the system will inform the user that they’ve completed the challenge.
Feature Development –
As a team, we will collaborate on all these features, and contribute to their development. It’s likely that an individual member of the team will guide the project and have a good understanding of the development objectives that need to be completed and will take on the role of guiding development for the rest of the team. Once basic feature functionality exists, we will work on expanding the project as time allows. In addition to functional features, our game will also require some art assets, which we can either generate ourselves, or pull from online resources.
Once our game is feature-complete, we can work on packaging the project for the XOs, as they are less powerful computers, we will be removing development features like debug output that describes game states, and ensuring all of our art assets are finalized.
We have an opportunity to present our activities to actual 4th grade students later in the semester which will give us some feedback to work off of going forward, but we also have the option of presenting our game to our peers for review, bugtesting and analysis. During this period of development, we are likely to encounter bugs or unclear game mechanics that we will work to fix. This stage of development is likely to occur in conjunction with the finalization process, so we will be actively patching bugs and implementing art assets during this time.
Reach Goals –
If we are lucky enough to have the spare time to continue contributing to PyCut after we have a finalized, feature complete activity, we have two options for expanding our game’s scope. We can either create multiple difficulty levels (more toppings, less room for mistakes) or look into adding additional puzzles, again taking inspiration from the Zoombinis games. While the primary reach goal should be relatively easy so long as we adhere to good development practices, the second would only be possible if we finish up far ahead of schedule and want to try more puzzles. If we find that we would like to give that a shot, we might instead chose to make a new project for a second puzzle game, but at this time we’re focusing all of our efforts into the one puzzle in PyCut.
Art Assets –
As detailed above, we have two options here. As this is an educational product and won’t be used to generate income, we are protected under educational licences to use outside assets for our activity, but we are also free to generate our own art assets to use on the XO laptops. Depending on our progress in our development cycle and the artistic talent of our team, we will make a decision as a team at a later date on which route we would like to take.