Assignment 7: Two-Player Boggle
Due Mon Mar 11 by 9PM
This is an individual assignment.
The purpose of this assignment
is to help you learn more about how to make a robust Android program that puts/gets information to the Internet, sends notifications, and operates in a multi-player, asynchronous and synchronous fashion. You will improve and extend your Boggle game.
You will need to both design and implement the revised Boggle game to allow for for multi-player games. You will need to be creative and use some of the rapid design techniques we have discussed and read about in the class. The more you work out your design carefully in advance, the easier the programming will be. Just for emphasis, the more you work out your design carefully in advance, the easier the programming will be. As discussed in class, your app design and the complexity of programming that app are linked.
Your goal is to redesign your game in these ways:
- Change your game to a 5x5 or 6x6 letter board (using appropriate words from the Assignment 4 word list file). The board should be a "playable" board, meaning it should have a good distribution of letters without too few or too many vowels or too few or too many consonants of various types.
- Provide subtle audio and vibration feedback when letters are selected if you don't have this already. This makes the game more enjoyable.
- Enhance your game so that two players can play against each other both synchronously and asynchronously on two different phones. You will have to design the game play for this... there are a variety of ways to do it. Some may be more usable and fun than others. Your game must have the following features:
- You must allow real-time play. When one player makes a move, the other player must get a message about that move as quickly as possible on the game board, and certainly in interactive time. It should be obvious that both people are playing together in some way.
- You must allow asynchronous play. If someone is not actively playing the game (i.e. the game board is not visible) but the opponent makes a move in some way, then the player should be notified that something happened or it is his/her turn. Use the notification bar. Clicking on any notification should start the app on the phone and go the appropriate Activity where the player can make the next move.
- In both cases, you need to make sure two players playing at the same time can clearly understand what the opponent is doing. The players must clearly be playing against one another using the same (or somehow related) Boggle boards. There are many ways you can achieve this, and there are many examples on the Play Store of word games that permit both asynchronous and synchronous play.
- Design your game with a top scorer list that shows the name of the top scorer, the score, the time/day the score was achieved, and anything else you think important or fun for the list. This list should be shared between all players.
- Design your game so that a user can do any of these actions and the game will still function normally and restore it's prior state (e.g., the top scorer list) (Note: this means you will need to think carefully about where data are stored and how someone can easily restore that state):
- Uninstall the app completely and reinstall on the same phone
- Uninstall the app and reinstall the app on a different phone
- Remove the external SD card
- Uninstall the app completely and remove the SD card, then reinstall the app
- Design your game so that a user can install the game on one phone and easily find a particular player who has installed the app on another phone and start a game.
- Revise or add a tutorial or rules screen that explains the rules in your new version of Boggle.
- Fix any game components that are still used in this game that were used in Assignment 4 and had problems.
- Include an Acknowledgements button to reflect the content you used and help you received.
- Bonus: Add any additional components that will make the two-player aspects of your game stand out from the crowd, such as clever ways to allow people to find partners, allowing 2+ players at once, allowing players to challenge each other in fun ways, etc.
Above all else, you need to ensure your game has ROBUST behavior (both in terms of design and technology).
You are free to store data on the web using whatever method you wish. To assist you, we will provide a simple server service that will allow you to get/put string/value pairs to our server that is very similar to accessing data using a SharedPreference object. [Information can be found here].
Important topics to consider:
- Any web call can be very slow. You must implement any web calls on a separate thread (e.g., using AsyncTask).
- Any web call can fail. Your app must do something reasonable if the Internet is not available.
- Your game should not require a live Internet connection to play (although clearly it requires an Internet connection to play in synchronous mode).
- Your game will need to allow two people on two different phones to (easily!) start a game together.
- You want to keep the data you store "in the cloud" as simple as possible and focus on the phone code. Although in a commercial app of this sort you might have a server-side database, you do not need such complexity for this assignment! You can assume only a handful of people will be playing your game.
You are building this game for educational purposes only, not for actual release, so feel free to grab graphics from any source and use them in your game if you want. (Important: For an actual game that was being released you would need to design the graphics yourself or get permission to use all graphics you incorporate, therefore, if you do want to use this app outside of class someday, you might want to design your own graphics or find graphics that you know do not have copyright restrictions).
Your game should be added to your existing app on the Play Store. Add a new button on your apps initial screen, "Persistent Boggle," which will start your game. Your main app on the Market will then have 6 buttons: About (with your info), Generate Error (generates error), Quit (exits), Sudoku (runs Sudoko from Assignment 1), Boggle (runs assignment 4), and your new button. Do not add a new icon and launcher for this game ... It should be launched from the home screen of the same app you had for Assignment 1.
As you complete this assignment
and have “aha!” moments where you figure out tricky things that might hold other
people up, you should help out your classmates on Piazza.
Your app should be available on the Play Store by the assignment deadline, and your Git repository should be up to date with your code (and easily buildable from scratch should we need to download it and compile your project).
You will be graded based on how
well you follow the instructions above using the app that is downloaded from the Play Store at the time we do the grading. Your application will be tested on actual Android phones, not the emulator.