Assignment 3: Word Game Part 1: Dictionary

This is an individual assignment.

The purpose of this assignment is to get you started on your first major Android app, which will be a word game. The game will have two major parts: dealing with words by quickly looking them up in a dictionary, and the GUI. In this assignment, you will write the code you need to look up words in a dictionary. This may be harder than it sounds because of some of the peculiarities of mobile app development.

Your app should be added to your existing app on the Play Store. Add a new button called "Dictionary" to your app's initial screen. Your main app on the Play Store will then have 5 buttons: About (with your info), Generate Error (generates error), Tic Tac Toe (runs Tic Tac Toe from Assignment 1), and Dictionary (runs assignment 3), and Quit (exits). Do not add a new icon and launcher for this app ... It should be launched from the home screen of the phone using the same icon you had for Assignment 1.

When the "Dictionary" button is pressed, pop up a new Activity titled "Test Dictionary". The Activity should have some way of entering letters, such as a text edit box. The Activity should also have a "Clear" button and a "Return to menu" button and an "Acknowledgements" button. As letters are entered (e.g., in the text edit box), the application should instantly check if the letters entered so far are a word. When a word is detected based on the dictionary, the app should beep and the word should be added to a list of words shown on the screen.

For example, if someone types "computer", the word "compute" should be displayed (with a beep) immediately after the "e" is typed, and then immediately after the "r" is typed the word "computer" should be added to the word list as well (with beep). It should be possible to enter words very quickly without any noticeable pauses, because this code will be incorporated into a speed-based word game in your next programming assignment.

If the "Clear" button is pressed, the words and the letters should be removed from the screen (the word list and the text entry box). If the "Return to menu" button is pressed the app should return to the app's main list of buttons. If the "Acknowledgements" button is pressed, then the application should display all the acknowledgements for this assignment.

No matter how you design your word game, you will need to be able to rapidly look words up in a dictionary as letters are selected, so you will need this code to work robustly and snappily.

Detecting the words requires a master word dictionary. You should use this word list (compiled from the http://wordlist.sourceforge.net/ website).

You do not need to detect words that are less than 3 letters long.

The acknowledgements must indicate the following: (1) in a paragraph, describe the stragegy your code uses to make the dictionary work, (2) list the source and/or links to all images/icons/graphics used if you did not design them on your own (be detailed), (3) souce and/or links to source of all code used in the assignment that you did not write yourself (which should be very little for this assignment), and (4) the names of any people who helped you in any significant way as you developed the software and exactly what help they provided (this includes if they gave you ideas for hot to approach this). You will provide this type of acknowledgement on every assignment going forward, and it is critical that you include any relevant source of material. Please format the information nicely. Do not just say you obtained "Images from the Internet." You should be specific about which images or code you obtained from exactly where, so we can find it if we need to.

This app must

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.

As you will find with all of the assignments, there is more than one strategy you might use to accomplish these assignment goals. Here's a hint. You cannot simply load an entire dictionary into Android memory without thinking about how you do it and have it work. For the reasons we talk about in class (e.g., App Assassin), you must think hard about how to make the loading and searching of the dictionary fast and efficient.

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). Your Git repository should show that you did incremental commits as you went along (you will lose points if we do not see evidence of this). Your Bitbucket bug tracker should also show evidence that you are starting to use it to help you prioritize what you need to do (again, you will lose points if we do not see evidence you are seriously using this tool for your project planning).

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 deadline. Your application will be tested on an actual Android phone, not the emulator. Definitely test your app using the emulator setup to mimic a Kyocera Rise phone.

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 or in class, but you should not be copying ANY code from classmates.

Hand-in:

You submit your assignment by making it available for alpha testing on the app store by the assignment deadline.

Evaluation/feedback:

Although it is subject to tweaking, this table will give you a sense of how you will be assigned points. Crashes will be reported to your Google Play development console, when possible, and some comments will be entered directly in Bitbucket.