# Homework Help: Simple Memory Game in Python

1. Oct 3, 2012

### Sthiel

So I'm working on a simple memory game nonGUI: Write a program that plays the memory matching game. When it start, the program prompts the user for the number of rows and columns for the game board that contains the cards. The total number of cards must be even. Assume that the board dimensions are at most 8 by 9 or 9 by 8. You cards must be numbered from 1 through (number of rows * number of columns) / 2. Your program allows the player to specify the cards that she would like to select through a coordinate system as shown in the sample run below. All the cards that are face down are indicated by *

So far I am making 3 classes. Card, Deck and Game. Card will be used to store both the card's value and face (up or down). Deck to contain the cards needed. Its methods include a mthod to deal a card, another for shuffling the deck, and a method that returns number of cards left in the deck. The class Game simulates playing a single game and represents the interaction between the user and the other classes. Its instance members store a 2D list (of card objects) representing the game board where the cards are placed, number of rows and number of columns of the game board. Among the instance methods of the Game class: play(), which simulates playing the game; isGameOver(), which checks whether or not the game is over; displayBoard(), which displays the board; populateBoard(), which creates the initial 2D list of identical pairs of cards with all the cards facing down.

So the first question I have is regarding the deck class. I was going to create a dictionary for the cards but I am not sure if I would need to include all the possible card values or I am assuming there is an easier way of writing that.

Any input on this first question or any input really would be appreciated. And I will probably have more questions as I go along. Thank you

2. Oct 3, 2012

### Ibix

If I were you I'd stick with a list for the Deck class. Populate it with Cards in order, then shuffle them. The random module might help with that.

3. Oct 3, 2012

### Sthiel

So in the list there would be a max of 72 cards. It would be inefficient i feel to write all 72 values in the last, so I am assuming there is an easier way to write that.

4. Oct 3, 2012

### Staff: Mentor

How are you getting 72 cards? A standard deck contains 52 cards, A, 2, 3, 4, 5, 6, 7, 8, 9, 10, J, Q, K in four suits, clubs, spades, diamonds, and hearts. That's 13 x 4 = 52.

It's really not that hard to create a list of 52 items, especially since there is a lot of repetition. Using copy and paste you can create the list in very little time.

As an alternative, you could have two lists: a list of the ranks (A, 2, ..., 10, J, Q, K) and a list of the four suits. By generating one random number in the range 0 through 12 you can get the rank, and by generating another random number in the range 0 through 3, you can get the suit.

5. Oct 3, 2012

### D H

Staff Emeritus
This isn't a standard deck. Cards have numbers only, with card numbers ranging from 1 to N, where N is at most 36. The deck contains two cards of each number.

My understanding: All cards are dealt face down initially in a rectangular grid. On each turn, the player identifies two of the face-down cards. These two cards are (briefly) flipped face-up. If they match, they stay face up. If they don't match, they're flipped back over face-down. The play continues until all cards have been matched; no face down cards remain to be tested.

6. Oct 3, 2012

### Staff: Mentor

Oops! Didn't read the statement very carefully.

7. Oct 3, 2012

### Sthiel

Yes precisely. So how would you suggest I initialize the list?

8. Oct 6, 2012

### Ibix

Use a loop, or a call to map(). Then shuffle.