pandamarty / mobile-systems-eng

Assignments and project for the Engineering of Mobile Systems course 2022.
0 stars 0 forks source link

[CHORE] Final project TO-DO #2

Open pandamarty opened 2 years ago

pandamarty commented 2 years ago

TO-DO

Necessities

More advanced (needs some backend)

pandamarty commented 2 years ago

The tasks

The following is the list of tasks to choose from.

To-Do Summary

Dictionary API integration (mandatory, 2pt)

Use a dictionary API to get more data about the words of the game. With this API, implement the following:

Important note: There are several possible APIs that you can choose from. Here are some recommendations:

If the statistics you had were too basic (just number of wins and losses), you should expand them to also record the number of attempts taken to win a game, and display this information. The UI should also provide an option to reset the statistics.

Haptics (1 pts)

Use the Haptics API (https://docs.expo.dev/versions/latest/sdk/haptics/) to provide Haptic (vibration) feedback of some actions. Some events that require Haptic feedback are:

Sharing (1 pts)

Wordle became famous because of the way it allowed people to share their game play. For instance, the following game:

Would be shared as:

Wordle Share

The sharing format is actually a text string, using Unicode Characters to display colored squares. For instance, this "yellow square" character (https://emojipedia.org/large-yellow-square/).

The goal of this task is thus to share your game, using the React Native Share API, to a variety of services of your choice (e.g. social media). If you implemented Dordle, then the sharing should also work with it.

Note: A previous version of the assignment recommended the Expo share API. However the React Native Share API is simpler to use, so it is recommended instead. In case you have already implemented this with the Expo share API, you don't need to redo it; both APIs are usable.

Note 2: The number "196" in the image here is specific to the original Wordle game, where everyone plays the same word on the same day. You don't need to have something similar. You can just share the grid with colors and the number of attempts.

Challenges (2 pts)

Implement a UI to issue a challenge to your friends. The idea is the following:

The user picks a word from the list of eligible words (or two, for Dordle). The application builds a Javascript object that represents the type of game to play and the word or words to guess (this depends on how your application works) This object is converted to a string url, and encoded as a QRCode, for instance using this package: https://www.npmjs.com/package/react-native-qrcode-svg The QR Code is displayed on screen, a second user can scan it with their phone camera This opens the application on the other phone, which receives the data, creates the game, and starts it If the game is won, the user gets the option to issue a challenge back Notes regarding the QR code: The string URL that I refer to is not not the web url of the snack project, but rather a URL that points to the expo client. You can use the Linking API for that. https://github.com/rrobbes/EngineeringOfMobileSystemsV2/tree/main/16-Expo-1#linking

The other option (perhaps a bit simpler), is to embed a QR Code scanner in the application itself. In that case the application is already open, so that makes the problem a bit simpler. https://github.com/rrobbes/EngineeringOfMobileSystemsV2/tree/main/17-Expo-2#cameras-and-qr-codes

Advanced Dictionary integration (2 pts)

This extension deepens the Dictionary integration. The game does not use the pre-made lists of words to select words or to check if they are eligible. Instead:

The word to guess is either the "Word of the day" or a random word of a minimum length of 5 (but can be longer). If a random word has characters that are not on the keyboard (e.g., dashes, accented characters), then it is discarded and a new word is selected. The game supports words that are longer than 5 character. Longer words are allowed more guesses: the number of guesses is equal to the number of letters plus 1, with a maximum of 10 for a single word. In case a player is playing a Dordle game, the words can be smaller (e.g., a maximum of 7 or 8 characters is possible). Guesses are checked by wordnik: any word that has a definition is allowed. Guesses that are shorter than the word are allowed, if they are valid. Important note: For this task, using only the Free Dictionary API is not sufficient, as it allows only to look up a single word. WordAPIs or Wordnik should be used instead. WordsAPI does not have a "word of the day" functionality so if you use it, you don't have to implement the "word of the day" functionality.

Dordle: eternal edition (2 pts)

This does not use additional APIs, but should be fun. This is a new game playing mode, that starts like Dordle. When a word in a dordle is completed, it is replaced by a new random word. The user picks three of the existing guesses of the replaced word to "keep". The game resumes with the two remaining words. The game continues in this fashion until it is lost. The goal is to play for as long as possible.

Advanced challenges (4 pts, for ambitious teams!)

This is the same idea as the challenge, except that it does not require the users to be in physical presence. The application uses the Firebase APIs (https://docs.expo.dev/guides/using-firebase/) to: