[Tutor] Question : Creating cribbage game
My name is Chris Schueler and i am having some troubles with my Python programming Our current project is to create the game of cribbage from scratch. The only problem is we are not allowed to use classes, only user-defind functions and arrays. I was wondering if anybody could give me tips or pointers on adding codes or modifying some of my program Here is my Program so far I will also include a .py file of it incase this doesnt look legible from random import* def DisplayTitle(): print print Welcome to Tech-Sauve Cribbage print printInsctructions print print 1) Only played with two players (for now) print 2) The program starts with a full deck of 52 cards print 3) Deals out 6 cards to each player with a Suit letter print 4) Then asks each player what 2 cards they want to discard to the crib print 5) Then the program saves the crib in a temporary deck print 6) Players start showing cards to get an ammount equal to 31 print 7) Once all the cards have been played, program counts the score print 8) Then the program will count all possible scores in each hand printAnd it will add the players points to their total score print 9) First player to reach a score of 121 wins the game #Gets players names def GetPlayer1(): print Player1 = str(raw_input(Player 1's name )) return Player1 def GetPlayer2(): print Player2 = str(raw_input(Player 2's name )) return Player2 #Building the deck def Build_Deck(): for R in range (0,52): cardnumb = numbers[R] cardsuit = suits[R] card = str(numbers[R])+str(suits[R]) Deck.append(card) return Deck,numbers,suits,card,cardnumb,cardsuit #Variables Needed numbers = [A,2,3,4,5,6,7,8,9,10,J,Q,K]*4 suits = [H,C,S,D]*13 suits.sort() Deck = [] P1hand = [] P2hand = [] Crib = [] Cribcard = [] Cribsuit = [] P1_score = 0 P2_score = 0 Winner = 121 ele = 52 Deck,numbers,suits,card,cardnumb,cardsuit = Build_Deck() for X in range(0,6): Y = randint(0,ele) draw = Deck[Y] P1hand.append(draw) Deck.pop(Y) ele -= 1 for X2 in range (0,6): Y1 = randint(0,ele) draw2 = Deck[Y1] P2hand.append(draw2) Deck.pop(Y1) ele -= 1 print Top = randint(0,47) Topcard = Deck[Top] print for count in range(0,2): print P1hand print option = str(raw_input(Player 1,what CARD would you like to add to the crib? CARDS 1 thru 6 )) if option == 1: Crib.append(P1hand[0]) P1hand.pop(0) elif option == 2: Crib.append(P1hand[1]) P1hand.pop(1) elif option == 3: Crib.append(P1hand[2]) P1hand.pop(2) elif option == 4: Crib.append(P1hand[3]) P1hand.pop(3) elif option == 5: Crib.append(P1hand[4]) P1hand.pop(4) elif option == 6: Crib.append(P1hand[5]) P1hand.pop(5) print for c2 in range(0,2): print P2hand print option1 = str(raw_input(Player 2, what CARD would you like to add to the crib? CARDS 1 thru 6 )) if option1 == 1: Crib.append(P2hand[0]) P2hand.pop(0) elif option1 == 2: Crib.append(P2hand[1]) P2hand.pop(1) elif option1 == 3: Crib.append(P2hand[2]) P2hand.pop(2) elif option1 == 4: Crib.append(P2hand[3]) P2hand.pop(3) elif option1 == 5: Crib.append(P2hand[4]) P2hand.pop(4) elif option1 == 6: Crib.append(P2hand[5]) P2hand.pop(5) print Deck print The TOP CARD is ,Topcard print Player 1's Hand is ,P1hand print Player 2's Hand is ,P2hand print The 4 cards in the Crib are ,Crib _ Ready. Set. Get a great deal on Windows 7. See fantastic deals on Windows 7 now http://go.microsoft.com/?linkid=9691818from random import* def DisplayTitle(): print print Welcome to Tech-Sauve Cribbage print printInsctructions print print 1) Only played with two players (for now) print 2) The program starts with a full deck of 52 cards print 3) Deals out 6 cards to each player with a Suit letter print 4) Then asks each player what 2 cards they want to discard to the crib print 5) Then the program saves the crib in a temporary deck print 6) Players start showing cards to get an ammount equal to 31 print 7) Once all the cards have been played, program counts the score print 8) Then the program will count all possible scores in each hand printAnd it will add the players points to their total score print 9) First player to reach a score of 121 wins the game #Gets players names def GetPlayer1(): print
Re: [Tutor] Question : Creating cribbage game
Message: 2 Date: Mon, 7 Dec 2009 02:30:30 -0400 From: Christopher schueler chris_schue...@hotmail.com To: tutor@python.org Subject: [Tutor] Question : Creating cribbage game Message-ID: col115-w23640cb7712629d3a205fee0...@phx.gbl Content-Type: text/plain; charset=iso-8859-1 My name is Chris Schueler and i am having some troubles with my Python programming Our current project is to create the game of cribbage from scratch. The only problem is we are not allowed to use classes, only user-defind functions and arrays. I was wondering if anybody could give me tips or pointers on adding codes or modifying some of my program Here is my Program so far I will also include a .py file of it incase this doesnt look legible from random import* def DisplayTitle(): print print Welcome to Tech-Sauve Cribbage print print Insctructions print print 1) Only played with two players (for now) print 2) The program starts with a full deck of 52 cards print 3) Deals out 6 cards to each player with a Suit letter print 4) Then asks each player what 2 cards they want to discard to the crib print 5) Then the program saves the crib in a temporary deck print 6) Players start showing cards to get an ammount equal to 31 print 7) Once all the cards have been played, program counts the score print 8) Then the program will count all possible scores in each hand print And it will add the players points to their total score print 9) First player to reach a score of 121 wins the game #Gets players names def GetPlayer1(): print Player1 = str(raw_input(Player 1's name )) return Player1 def GetPlayer2(): print Player2 = str(raw_input(Player 2's name )) return Player2 #Building the deck def Build_Deck(): for R in range (0,52): cardnumb = numbers[R] cardsuit = suits[R] card = str(numbers[R])+str(suits[R]) Deck.append(card) return Deck,numbers,suits,card,cardnumb,cardsuit #Variables Needed numbers = [A,2,3,4,5,6,7,8,9,10,J,Q,K]*4 suits = [H,C,S,D]*13 suits.sort() Deck = [] P1hand = [] P2hand = [] Crib = [] Cribcard = [] Cribsuit = [] P1_score = 0 P2_score = 0 Winner = 121 ele = 52 Deck,numbers,suits,card,cardnumb,cardsuit = Build_Deck() for X in range(0,6): Y = randint(0,ele) draw = Deck[Y] P1hand.append(draw) Deck.pop(Y) ele -= 1 for X2 in range (0,6): Y1 = randint(0,ele) draw2 = Deck[Y1] P2hand.append(draw2) Deck.pop(Y1) ele -= 1 print Top = randint(0,47) Topcard = Deck[Top] print for count in range(0,2): print P1hand print option = str(raw_input(Player 1,what CARD would you like to add to the crib? CARDS 1 thru 6 )) if option == 1: Crib.append(P1hand[0]) P1hand.pop(0) elif option == 2: Crib.append(P1hand[1]) P1hand.pop(1) elif option == 3: Crib.append(P1hand[2]) P1hand.pop(2) elif option == 4: Crib.append(P1hand[3]) P1hand.pop(3) elif option == 5: Crib.append(P1hand[4]) P1hand.pop(4) elif option == 6: Crib.append(P1hand[5]) P1hand.pop(5) print for c2 in range(0,2): print P2hand print option1 = str(raw_input(Player 2, what CARD would you like to add to the crib? CARDS 1 thru 6 )) if option1 == 1: Crib.append(P2hand[0]) P2hand.pop(0) elif option1 == 2: Crib.append(P2hand[1]) P2hand.pop(1) elif option1 == 3: Crib.append(P2hand[2]) P2hand.pop(2) elif option1 == 4: Crib.append(P2hand[3]) P2hand.pop(3) elif option1 == 5: Crib.append(P2hand[4]) P2hand.pop(4) elif option1 == 6: Crib.append(P2hand[5]) P2hand.pop(5) print Deck print The TOP CARD is ,Topcard print Player 1's Hand is ,P1hand print Player 2's Hand is ,P2hand print The 4 cards in the Crib are ,Crib Unfortunately I had to read a few wiki pages of cribbage first, so my understanding of the game is weak. My suggestions: Start with an outline of play (more to help us understand cribbage) From my quick lesson, it sounds like you have so far: Get player names (two players) Create deck Ask player which cards to put in crib So for what you have now here are some suggestions: You are creating variables numbers and suits in your global namespace. Then you use them in your Build_Deck function which is fine, but then you are returning them at the end of the function, overwriting the original variable definition. I don't think it would mess up your code but it is messy. I also don't see where you are using card, cardnumb, or cardsuit elsewhere. I see your technique for chooosing cards at random, however the random module includes a shuffle function so you could create
Re: [Tutor] Question : Creating cribbage game
Christopher schueler chris_schue...@hotmail.com dixit: My name is Chris Schueler and i am having some troubles with my Python programming Our current project is to create the game of cribbage from scratch. The only problem is we are not allowed to use classes, only user-defind functions and arrays. I was wondering if anybody could give me tips or pointers on adding codes or modifying some of my program From my limited experience in coding games. You have to model several distinct aspects: * Constant data about the game, such as a card set. * The game logic, mirroring the (real) game rules, ie what players can do, and what comes out of their actions. * The game state, what's the situation at a given point in time, constantly modified by the above actions. * Possibly some AI if the computer plays a role. Note that first 2 points are predefined aspects (constants in the plain sense of the word). Forbidding OO is a very bad thing because game modelling is precisely a programming domain in which this paradigm applies very naturally : every element in the game (state) is an object that can be modified through methods representing game rules. Python dicts offer a powerful tool to represent kinds of objects, when used as records (lookup in wikipedia if you don't see what I mean). Moreover, python functions beeing namable objects, you can even attach relevant funcs to records so as to simulate methods. All you miss then is typical OO syntactic sugar where 'self' is automagically inserted as first argument of a method call. Instead of hand.popCard(card) you need to write hand.popCard(hand, card) Some more comments below in your code. Here is my Program so far I will also include a .py file of it incase this doesnt look legible from random import* def DisplayTitle(): print print Welcome to Tech-Sauve Cribbage print printInsctructions print print 1) Only played with two players (for now) print 2) The program starts with a full deck of 52 cards print 3) Deals out 6 cards to each player with a Suit letter print 4) Then asks each player what 2 cards they want to discard to the crib print 5) Then the program saves the crib in a temporary deck print 6) Players start showing cards to get an ammount equal to 31 print 7) Once all the cards have been played, program counts the score print 8) Then the program will count all possible scores in each hand printAnd it will add the players points to their total score print 9) First player to reach a score of 121 wins the game This is a single string to write. Use multiline strings inside triple quotes ... and write in a single instruction. No need for a func. #Gets players names def GetPlayer1(): print Player1 = str(raw_input(Player 1's name )) return Player1 def GetPlayer2(): print Player2 = str(raw_input(Player 2's name )) return Player2 This is twice the same func. Write a single one with a parameter representing a player, then call it twice. You'd better use a dict for each player because doubt the only relevant info is their name. Why not attach their hand, score, or whatever to the structures representing players? player1 = {name:None, more:foo} player2 = {name:None, more:foo} def getPlayerName(player): # (raw_input already returns a string) player[name] = raw_input(Player 1's name ) getPlayerName(player1) getPlayerName(player2) #Building the deck def Build_Deck(): for R in range (0,52): cardnumb = numbers[R] cardsuit = suits[R] card = str(numbers[R])+str(suits[R]) Deck.append(card) return Deck,numbers,suits,card,cardnumb,cardsuit This func should only return Deck. Card cardnum, cardsuit are local variables used obly in the func, suits and numbers are input instead: def Build_Deck(suits, number, card_count): # 52 is also a predefined constant, namely here called card_count for R in range (0,card_count): cardnumb = numbers[R] cardsuit = suits[R] card = str(numbers[R])+str(suits[R]) Deck.append(card) return Deck ... define constants about card: card_count, suits and numbers ... Deck = Build_Deck(suits, number) You'd better represent each card with a pair {suit:suit, number:number} so as to be able to compare their strength (unless this is irrelevant for this game). #Variables Needed numbers = [A,2,3,4,5,6,7,8,9,10,J,Q,K]*4 suits = [H,C,S,D]*13 suits.sort() Deck = [] P1hand = [] P2hand = [] Crib = [] Cribcard = [] Cribsuit = [] P1_score = 0 P2_score = 0 Winner = 121 ele = 52 All non-null things above are constants that define the game. Empty and zero things are variables that will be part of the game state. You'd better separate this clearly. You