Grow
Inspiration
Our team was inspired by the United Nation Sustainable Development Goal 2.4:
"2.4 By 2030, ensure sustainable food production systems and implement resilient agricultural practices that increase productivity and production, that help maintain ecosystems, that strengthen capacity for adaptation to climate change, extreme weather, drought, flooding and other disasters and that progressively improve land and soil quality." We considered several options of how to incorporate this goal into our project, from creating an informational website to an app that would allow farmers to quickly connect with others during disasters. However, such projects would limit the scope of our audience, and we desired to create something that would have a broader reach into non-specialist audiences. A card game seemed like an ideal way to be both informative and engaging to our audience. After all, you learn more when you are having fun!
For the design and gameplay of Grow we took inspiration from Terraforming Mars and Everdell.
What it does
Grow is a card game designed with two main goals in mind.
Teach our players about sustainable farming techniques in an entertaining way; Spread awareness of the challenges farmers face while they try to make their farms sustainable.
Gameplay Goals
Goal of the game: Create a sustainable farm that is economically viable, feeds everyone in the community, and is environmentally neutral. These goals are accomplished as the players learn more about sustainable farming.
Win Condition
Win the game by making your farm sustainable within seven years. Your farm should be at 100% on the Environmental Impact scale, 0% on the Community Hunger scale, and you should not be in debt.
Game Play
There are three types of cards:
Tools, which remain in play throughout the game once acquired, are items available for purchase that offer boosts for the farm. Tools can be bought at any time, and you may go into debt to acquire them. Plants, which can be harvested at the end of the year and are eaten or sold. Quests, cards that contain objectives to complete that provide a boost once accomplished.
The game lasts for seven years. A year ends when the player can take no more actions. During the year, two quests are available. At the end of the year you collect your harvest and either sell or eat the crops collected. You must select one of the two options by clicking on the cards once they have been planted into a field, and clicking the sell or eat button before beginning a new year.
You have three fields of land to plant on, each with their own soil health set to 50% initially. Each field has three plots that you can plant on. Every time you harvest, soil health for that field goes down by 25%. You can make it go up by adding nutrients (from fertilizer cards) or allowing it to sit fallow. If the soil health goes to 0% you lose that field.
Each year you start by randomly drawing 10 plant cards into your hand and earning income from your plants. Two quests are set up for that year, and you can earn rewards by completing the task listed on them. A display of 4 tools are also available for you to buy.
You can then choose how to spend your credits to play any of those cards and do their actions. Some cards can stack with other cards to provide extra benefits.
Game data automatically saves and can be re-accessed at a later date. To pull up previous game data, enter your farm's name and select the returning user in the Begin Game section!
How we built it
Grow was built using React.js for our front end framework. Although we were unfamiliar with this coding language, we found it to be the most effective because of the reusable components and efficiency at updating the UI to reflect the current game status.
Our team used a MySQL database to hold all of our card and game data. We choose to use the MySQL database because of its easy integration with our chosen host website.
Our team used Flask for calculations and access to the database. We then passed the data to the React framework. We chose to use Flask because of its reliability and speed of processing.
Finally, our team chose Python Anywhere to host our game. All of our team members have used Python Anywhere in the past. It has proven to be reliable, affordable, and gave our team easy access to a database.
Challenges we ran into
Unfamiliarity with React:
Our team for this hackathon consisted of three members, and none of us had significant experience with React. Two of our team members had no previous experience with React, and one team member had only recently begun learning about React. The team member that had begun learning about React had only created a simple static website in React before the start of this Hackathon. This inexperience led to several challenges including incorporating React hooks, the difference between Props and State, and getting all our team members comfortable with the framework. Despite these challenges, though, we are ultimately happy with the product that we were able to create.
Time:
Time was one of our biggest challenges. While we knew what we wanted to accomplish, we had to spend a lot of time doing research about sustainable farming and React before we could even begin coding. This cut down the amount of time that we could have otherwise spent adding in new features and polishing our product. Although our time constraints limited our ability to add additional features, we were able to produce a successful, functional game that met our preliminary goals of teaching our audience about sustainable farming.
Accomplishments that we're proud of
We are proud of our team for using React.js for the first time and our ability to create a viable product in such a short time. Each of our team members pushed ourselves to try out something new, and we will be able to take the skills we learned from this project and apply them to future endeavors.
We are proud of the speed of the game actions, variety of cards created, focus on sustainable farming practices, and our ability to make learning about this subject matter fun.
What we learned
We learned the United Nations has 17 sustainability goals they are trying to reach by 2030. We learned farmers have many things to consider and balance when trying to make their farm more sustainable such as profit, environmental impact, and production levels. We learned there are many different sustainable farming techniques and tools available. Some of which can be done without purchasing expensive equipment such as crop rotation, catching rainwater, and planting cover crops. We learned about the differences between Props and State in React.js. In React, both Props and State are used to manage data and influence the behavior of components, but they have different purposes. Learning how to use these two concepts effectively was essential to our success. We learned how to use React as a frontend framework and then integrate it with the backend (Python) on Python Anywhere. We learned how to pass information from a MySQL database into React, and use this data in our React components.
What's next for Grow
There are a lot of potential features that could be added to Grow to expand upon the game. Farm types: have the player select a starting farm type. Farm type influences the hand you start with when beginning the game. Game difficulty: allow players to select how difficult they wish for the game to be. Events: a random event card is drawn at the end of each year to further expand upon the challenges farmers might face such as drought, wildfires, floods, and recessions. Accounts: allow players to create an account and manage multiple farms at once. -Card variety: add in more card variety for plants, tools, and quests.
Future expansions: mobile app, or potentially a physical board game.
Log in or sign up for Devpost to join the conversation.