Note: This assignment will be VERY time consuming for those completely new to Android, and especially for those also brushing up on Java. Please start early!

The purpose of this assignment
is to help you learn more of the basics of creating Android apps and to move you towards an interesting project. To make that simpler, you are starting with the Sudoku example from your textbook and turning it into a different, fully-functional, addictive word game based on Dabble (see http://www.dabblegame.com/app.php).

The Sudoku game is similar to Dabble in some respects.

It displays a grid of text on the screen

It is possible to select items from that grid

Based on how the grid is touched certain key events happen in the game

It pops up various types of common screens/dialogues

It saves the state of a game

It has a countdown timer

All the basic components that you need to create a Dabble game are in your prior Dictionary assignment or used in the Sudoku game, such as use of 2d graphics. Your goal is to study the Sudoku code (reading the chapters in the text related to it) and figure out how to modify the Sudoku game into a functioning Dabble game. The game can have a simple look and feel, but it needs to work robustly.

Dabble is a type of word search game. Word search games can be simple to master yet, for many people, totally addictive. Dabble, like many other word games, can be modified to play with other people, and small variations in game design can make it more or less fun to play. Therefore, in addition to programming the game, you will need to think about your unique design spin on the interaction and game play.

To get started, read about Dabble and play some other similar word games. A search for Boggle on the Android Market will turn up many word games: ICED (Lite), BoggleDroid Lite, Dropwords, WordTwist Lite, etc. Play Dabble several times on paper.Ask some friends who are not in the course to solve a Dabble puzzle on paper and see what they do. These are different than Dabble but have some common elements, so make notes about what you like or don't like about game design, interaction, scoring, etc. Please do not skip this, because you will see how small changes in the GUI can impact overall experience. Decide on how your would like your game to work. Try to come up with at least one or two ways that your game can be distinctive and stand out from the crowd.

Your game must have the following:

A "New Game" button that creates a new Dabble board. In our case, the dabble board will have at least four rows of 3, 4, 5, and 6 letters. For each new game, a new board should be generated. The board MUST be solvable, so you will need to randomly pick words from the dictionary.

Click sounds or vibration when letters are pressed

A strategy for quickly selecting/swapping the positions of two letters

Detection if each row of letters is in the master word dictionary and highlighting rows that are valid words

Text showing the remaining time counting down

A visual indicator of some sort when someone has reached the last few seconds of the game, before it ends

A "Pause" button on the main game screen that stops the clock and pauses the game

A "Resume Game" button that appears only if a game in progress was paused

A "Hint" button on the main game screen that will show one valid solution to the current board (this is to make our testing of your app easier). Please note that the game should work properly with ANY valid solution, not just the one you have used to seed the board.

A "Quit" button that shuts down the game

A score. Points should be awarded for partially completed boards, when valid words are identified

A special sound when a valid word is identified and points are earned

Any instructions or rules built into the game so that someone who has never played before would be able to pick up your app and start

Different background music than Sudoku

Ability to turn off background music

An "Acknowledgements" button that pops up a screen that acknowledges the following: (1) links to/sources all images/icons used in the game if you did not design them on your own, (2) links to/sources of all significant amounts of code used to develop the game that you did not write (which should be very little), and (3) a list of any people who helped you in any significant way and exactly how as you developed the software.

And most importantly, ROBUST BEHAVIOR. Your game should not crash or behave erratically on Android 2.3.3. Please do systematic testing to ensure this!

For extra credit, your game could have one or more of following additional features:

Play sound effects that contribute to game play (countdown sounds when timer close to running out)

Allow a user to select desired board size, adding rows

Show the user all the valid solutions after the game

Save scores long-term

Do something clever with the seeding of the board (e.g., Implement a difficulty level option, based on the types of words selected)

Allow a gameplay options where someone must find more than one solution, or all solutions. (These solutions must exist!)

Implement other clever ideas you come up with that might enhance the 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. Do NOT grab them from the Dabble game website, however. You must also clearly specify in Acknowledgements where you obtained all images. (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, "Dabble" which will start your game. Your main app on the Market will then have these 6 buttons: About (with your info), Generate Error (generates error), Sudoku (runs Sudoku from Assignment 1), Dictionary (runs assignment 3), Dabble (runs this assignment), and Quit (exits). Do not add a new icon and launcher for this game ... your single NUMAD-[FirstName][LastName] will launch the menu of buttons, and Dabble will launch this app. Your prior assignments should still function as they did when you turned them in (or fixed them, thereafter).

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 Git repository should show that you did incremental commits as you went along. We do NOT want to see a single commit right before the due date. We want to see commits incrementally as you work on this assignment, usually multiple in a single work session.

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 grade it. What this means is that if you find a bug in your app, you should fix it and update the app, because you may get lucky and do this before your assignment is graded! Your application will be tested on an actual Android phone, not the emulator.

This is an individual assignment. You should not be working with a partner, and you should not be sharing code. You may ask high-level questions about how to accomplish goals on Piazza, but you should not be copying ANY code from classmates.