Hi Elwin, On 15 November 2011 13:40, Elwin Estle <[email protected]> wrote:
> I am attempting to write a text based spider solitaire game. I have a > pretty simple card class, and a deck class, which has a list of card > objects, which are shuffled, then individual elements are put into > self.dealt, which is a 'list of lists' when the cards are dealt. > > I am trying to control the visibility of the cards. There is a small > "for" loop in the "deal" method of the deck class, this is intended to > toggle the visibility of four of the cards. It does that just fine, but > for some reason, it seems to be randomly toggling the visibility of other > cards in the self.dealt list and I am thoroughly confused as to why that > is. Is it something to do with the way objects are referenced? Is my list > of card objects a bad way to approach this? > Off the top of my head, your problem is likely due to the line that reads: card_list = card_list * 8 What this will do is put the *same* set of card objects in the list to begin with, into a new card_list 8 times over. So the *same* Jack (for example) will appear 8 times in the resulting list. This list, card_list, is the list that implements then later on sliced in your deal method. So, when you then set the cards in the dealt hand to visible in your self.dealt[5] loop, because these same cards (card objects) also are part of the other piles/hands, they also appear visible elsewhere when the display method is called. To fix: Replace the line above (e.g. card_list = card_list * 8) with something that explicitly constructs new cards 8 times, thereby not holding mutliple refernces from seperate piles to the same card, then you should have no further issues. Maybe loop 8 times and make a function of te preceding code etc. Walter
_______________________________________________ Tutor maillist - [email protected] To unsubscribe or change subscription options: http://mail.python.org/mailman/listinfo/tutor
