[Tutor] Question : Creating cribbage game

2009-12-07 Thread Christopher schueler

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

2009-12-07 Thread Tim Goddard
 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

2009-12-07 Thread spir
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