Assignment 6: Persistent Boggle
Due Thu Oct 25 by 9PM
This is a TEAM 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 has robust performance when users switch phones, uninstall/reinstall, and swap external SD cards. 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. This makes the game more enjoyable.
- Enhance your game so that two players can play against each other on two different phones. You will have to design the gameplay for this... there are a variety of ways to do it. Some may be more compelling than others. Your game must have the following features.
- As people play the game, they must get information about what is going on with the other player. If they are actively playing the game, this could (and probably should) be done on the GUI. If they are not actively playing the game, you must use the notification bar on the Android phone to send a message. Clicking on any notification should start the app on the phone and go the appropriate Activity.
- You must allow real-time play. When one player makes a move, the other play must get a message about that move as quickly as possible, and certainly in interactive time.
- 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 clearly related) Boggle boards.
- 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.
- 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 then install the app on a second phone (without removing the first), and still work.
- Revise the 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.
- Update the information on your About button to include your new team member, if you have teamed up.
- Update the information in your Acknowledgements to reflect the content you used and help you received.
- Bonus: Add any additional components that will make your Persistent Boggle game stand out from the crowd and be an engaging game to play. Ideas are adding appropriate sound effects that contribute to game play, determining target "bonus" words that someone gets extra points for finding, allowing user to select desired board size or having the board size change dynamically based on game play, or doing something clever with the seeding of the board, 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 on this is forthcoming].
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.
- Your game will need to allow two people on two different phones to 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 Market. 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 team 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.
If you have teamed up, both you and your team member will submit apps with Persistent Boggle buttons. However, one app will run Persistent Boggle directly. The other app will run it by calling the Persistent Boggle app in the other team member's package.
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.