zanshin/Matchismo — pull request #3 by zanshin (2013-11-28 05:01:48+00:00)
Title: Assignment 2: Matchismo 2

Objective: This assignment extends the card matching game Matchismo started in assignment 1.

Required tasks
- [ ] 1. Follow the detailed instructions in the lecture slides to reproduce the latest version of Matchismo we built in the lecture (i.e., the one with multiple cards) and run it in the iPhone Simulator. Do not proceed to the next steps unless your card matching game functions as expected and builds without warnings or errors.

- [ ] 2. Add a button which will re-deal all of the cards (i.e., start a new game). It should reset the score (and anything else in the UI that makes sense). In a real game, we'd probably want to ask the user if s/he is "sure" before aborting the game in progress to re-deal, but for this assignment, you can assume the user always knows what s/he is doing when they hit this button.

- [ ] 3. Drag out a switch (`UISwitch`) or a segmented control (`UISegmentedControl`) into your View somewhere which controls whether the game matches two cards at a time or three cards at a time (i.e., sets "2-card match mode" vs. "3-card-match mode"). Give the user appropriate feedback on how difficult the match is to accomplish. In 3-card-match mode, it should be possible to get some (although a significantly lesser amount of) points for picking 3 cards of which only 2 match in some way. In that case, all 3 cards should be taken out of the game (even thought only 2 match). In 3-card-match mode, choosing only 2 cards is never a match.

- [ ] 4. Diable the game play mode control (i.e., the `UISwitch` or `UISegmentedControl` from required task 3) when a game starts (i.e., when the first flip of a game happens) and re-enable it when a re-deal happens (i.e., the Deal button is pressed).

- [ ] 5. Add a text label somewhere which describes the results of the last consideration by the `CardMatchingGame` of a card choice by the user. Examples: "Matched J♥ J♠ for 4 points" or "6♦ J♣ don't match! 2 point penalty" or "8♦" if only one card is chosen or even blank if no cards are chosen. Do not violate MVC by building UI in your Model. "UI" is anything you are going to present to the user. This must work properly in either mode of required task 3.

- [ ] 6. Change the UI of your game to have 30 cards instead of 12. See Hints about the size of cards.

- [ ] 7. Do not change the method signature of any public method we went over in lecture. It is fine to change private method signatures (though you should not need to) or to add public and/or private methods.

Extra Credit
- [ ] 1. Add a `UISlider` to your UI which travels through the history of the results of the currently-being-played game's card choices and display it to the user (moving the slider will modify the contents of the text label you created for required task 5 to show its state over the course of the game). When you are displaying past results, you probably want the text label to be grayed out or some such (take a look at the `UIView` method `alpha` and note that `UISlider` inherits from `UIView`) so it's clear that it's "the past", And every time a new choice happens, you probably want to "jump to the present" in the slider. Implementing this extra credit item will require you to familiarize yourself with `UISlider's` API and to add a data structure to your Controller to keep track of the history. It can be implemented in fewer than a dozen lines of code.

- [ ] 2. Change the image on the back of the cards (i.e., something other than the Stanford logo). Also, set the application and launch window icons for Matchismo. Try to get the resolutions right for each application icon and launch image. Let your creativity run wild when it comes to designing an icon!