Exemplo n.º 1
0
 def play( self ):
   self.socket = socket(AF_INET, SOCK_STREAM)
   #try:
   self.socket.connect((self.server, self.port))
   self.send( 'LOGIN ' + name )
   reply = self.readline()
   if reply == 'OK':
     debug.echo('Logged in as ' + name)
     self.playGame()
   else:
     debug.echo('Login error! Reply: ' + reply)
   # except:
   #   print 'Caught exception'
   #   error = sys.exc_info()
   #   print error[0], error[1]
   
   self.socket.shutdown(2)
   self.socket.close()
Exemplo n.º 2
0
 def play( self ):
   self.socket = socket(AF_INET, SOCK_STREAM)
   #try:
   self.socket.connect((self.server, self.port))
   self.send( 'LOGIN ' + name )
   reply = self.readline()
   if reply == 'OK':
     debug.echo('Logged in as ' + name)
     self.playGame()
   else:
     debug.echo('Login error! Reply: ' + reply)
   # except:
   #   print 'Caught exception'
   #   error = sys.exc_info()
   #   print error[0], error[1]
   
   self.socket.shutdown(2)
   self.socket.close()
Exemplo n.º 3
0
 def readline( self ):
   if len(self.buffer) > 0:
     line = self.buffer[0]
     del self.buffer[0]
     if line != '':
       return line
     else:
       return self.readline()
   else:
     input = self.socket.recv(1024)
     if input == '':
       return None
     #
     # The spit below will put a '' at end of list
     # if input ends with '\n', which it almost certainly does!
     #
     self.buffer = string.split( input, '\n')
     debug.echo('buffer =' + str(self.buffer))
     if len(self.buffer) == 0:
       return None
     else:
       return self.readline()
Exemplo n.º 4
0
 def readline( self ):
   if len(self.buffer) > 0:
     line = self.buffer[0]
     del self.buffer[0]
     if line != '':
       return line
     else:
       return self.readline()
   else:
     input = self.socket.recv(1024)
     if input == '':
       return None
     #
     # The spit below will put a '' at end of list
     # if input ends with '\n', which it almost certainly does!
     #
     self.buffer = string.split( input, '\n')
     debug.echo('buffer =' + str(self.buffer))
     if len(self.buffer) == 0:
       return None
     else:
       return self.readline()
Exemplo n.º 5
0
  def playGame( self ):
    # This sets up all necessary images
    self.screen = pygame.display.set_mode((1250, 760))
    self.background = imageLoad("background.jpg", 0)
    self.clock = pygame.time.Clock()
    self.cardImages = []
    for suit in ['c', 'd', 'h', 's']:
      for card in [str(i) for i in range(2, 11)] + ['j', 'q', 'k', 'a']:
        self.cardImages.append(imageLoad(suit+card+'.png', True))
    self.handImage = imageLoad("hand.png", False)
    self.handImage.set_colorkey((0,0,0))

    self.trump = -1
    self.cardList = CardList()
    self.playedCards = []
    self.players = [Player(self.name, 0)]
    self.playerIndex = 0

    self.updateDisplay()
    exiting = False
    while not exiting:
      command = self.readline()
      debug.echo('Read: ' +  command)
      tokens =  string.split(command)
      if tokens[0] == 'GAME_OVER':
        winnerNum = int(tokens[1])
        self.addToLog('Player "%s" won!' % self.players[winnerNum].name)
        self.gameOver(self.players[winnerNum].name)
        exiting = True

      elif tokens[0] == 'NEW_PLAYER':
        self.addToLog(('Player '+tokens[1]+' has joined the game'))

      elif tokens[0] == 'START_GAME':
        print "Starting game."
        self.players = []
        numPlayers = int(tokens[1])
        for i in range(numPlayers):
          self.players.append( Player(tokens[2*i+2], int(tokens[2*i+3])) )
          if tokens[2*i+2] == self.name:
            #Assumes no two players have the same name
            self.playerIndex = i
        self.addToLog( 'Game starting with players:' ),
        for player in self.players[:-1]:
          self.addToLog(player.name)
        self.addToLog(self.players[-1:][0].name)

      elif tokens[0] == 'NEW_HAND':
        self.cardList = CardList()
        self.numTricks = int(tokens[1])
        self.playedCards = [-1 for i in xrange(len(self.players))]
        self.addToLog('New hand... Tricks: '+ str(self.numTricks))
        self.addToLog( 'Dealer: '+ self.players[int(tokens[2])].name)

      elif tokens[0] == 'DRAW':
        card = int(tokens[1])
        debug.echo( 'Dealt ' + cardToString(card))
        self.cardList.addCard(card)

      elif tokens[0] == 'DEAL_OVER':
        self.trump = int(tokens[1])
      
      elif tokens[0] == 'BID_ANNOUNCE':
        playerNum = int(tokens[1])
        bid = int(tokens[2])
        self.addToLog('Player "%s" bid %s' % (self.players[playerNum].name, bid))
        self.players[playerNum].bid = bid

      elif tokens[0] == 'BID':
        self.getBid()

      elif tokens[0] == 'CARD_PLAYED':
        player = int(tokens[1])
        card = int(tokens[2])
        self.addToLog('"%s" played %s' %(self.players[player].name + " ", 
                                          cardToString(card)))
        self.playedCards[player] = card

      elif tokens[0] == 'GET_CARD':
        print "\a"
        exiting = self.playCard()

      elif tokens[0] == 'TRICK_WINNER':
        player = int(tokens[1])
        self.addToLog('"%s" won trick' % self.players[player].name)
        self.updateDisplay()
        self.players[player].wonTrick()
        self.playedCards = [-1 for i in xrange(len(self.players))]
        pygame.time.delay(400)

      elif tokens[0] == 'END_HAND':
        for i in range(len(self.players)):
          player = self.players[i]
          delta = int(tokens[i+1])
          if delta > 0:
            self.addToLog(('Player "%s"' % player.name)+(' made %d points' % delta))
          elif delta < 0:
            self.addToLog(('Player "%s"' % player.name)+(' went down %d points' % (-delta)))
          else:
            self.addToLog(('Player "%s"' % player.name)+ ' went over')
          player.score = player.score + delta
        for p in self.players:
          p.reset()

      else:
        print 'Unknown command: ', command

      for event in pygame.event.get():
        exiting = checkExit(event)
        if exiting:
          print "Exiting set to true."
      self.updateDisplay()
Exemplo n.º 6
0
 def playGame( self ):
   while 1:
     command = self.readline()
     debug.echo('Read: ' +  command)
     tokens =  string.split(command)
     if tokens[0] == 'GAME_OVER':
       winnerNum = int(tokens[1])
       print 'Player "%s" won!' % self.players[winnerNum].name
       break
     
     elif tokens[0] == 'NEW_PLAYER':
       print 'Player', tokens[1], 'has joined the game'
       
     elif tokens[0] == 'START_GAME':
       self.players = []
       numPlayers = int(tokens[1])
       for i in range(numPlayers):
         self.players.append( Player(tokens[2*i+2], int(tokens[2*i+3])) )
       print 'Game starting with players:',
       for player in self.players[:-1]:
         print player.name + ',',
       print self.players[-1:][0].name
       self.displayPlayerStats()
         
     elif tokens[0] == 'NEW_HAND':
       self.cardList = CardList()
       self.numTricks = int(tokens[1])
       print 'New hand... Tricks: ', self.numTricks, 'Dealer:', \
             self.players[int(tokens[2])].name
       
     elif tokens[0] == 'DRAW':
       card = int(tokens[1])
       debug.echo( 'Dealt ' + cardToString(card))
       self.cardList.addCard(card)
       
     elif tokens[0] == 'DEAL_OVER':
       self.trump = int(tokens[1])
       self.displayHand()
       
     elif tokens[0] == 'BID_ANNOUNCE':
       playerNum = int(tokens[1])
       bid = int(tokens[2])
       print 'Player "%s" bid %s' % (self.players[playerNum].name, bid)
       self.players[playerNum].bid = bid
       
     elif tokens[0] == 'BID':
       self.getBid()
       
     elif tokens[0] == 'CARD_PLAYED':
       player = int(tokens[1])
       card = int(tokens[2])
       print 'Player "%s" played %s' %(self.players[player].name,
                                       cardToString(card))
       
     elif tokens[0] == 'GET_CARD':
       self.playCard()
       
     elif tokens[0] == 'TRICK_WINNER':
       player = int(tokens[1])
       print 'Player "%s" won trick' % self.players[player].name
       self.players[player].wonTrick()
       
     elif tokens[0] == 'END_HAND':
       for i in range(len(self.players)):
         player = self.players[i]
         print 'Player "%s"' % player.name,
         delta = int(tokens[i+1])
         if delta > 0:
           print 'made %d points' % delta
         elif delta < 0:
           print 'went down %d points' % (-delta)
         else:
           print 'went over'
         player.score = player.score + delta
       self.displayPlayerStats()
       for p in self.players:
         p.reset()
         
     else:
       print 'Unknown command: ', command
Exemplo n.º 7
0
  def playGame( self ):
    # This sets up all necessary images
    self.screen = pygame.display.set_mode((1250, 760))
    self.background = imageLoad("background.jpg", 0)
    self.clock = pygame.time.Clock()
    self.cardImages = []
    for suit in ['c', 'd', 'h', 's']:
      for card in [str(i) for i in range(2, 11)] + ['j', 'q', 'k', 'a']:
        self.cardImages.append(imageLoad(suit+card+'.png', True))
    self.handImage = imageLoad("hand.png", False)
    self.handImage.set_colorkey((0,0,0))

    self.trump = -1
    self.cardList = CardList()
    self.playedCards = []
    self.players = [Player(self.name, 0)]
    self.playerIndex = 0

    self.updateDisplay()
    exiting = False
    while not exiting:
      command = self.readline()
      debug.echo('Read: ' +  command)
      tokens =  string.split(command)
      if tokens[0] == 'GAME_OVER':
        winnerNum = int(tokens[1])
        self.addToLog('Player "%s" won!' % self.players[winnerNum].name)
        self.gameOver(self.players[winnerNum].name)
        exiting = True

      elif tokens[0] == 'NEW_PLAYER':
        self.addToLog(('Player '+tokens[1]+' has joined the game'))

      elif tokens[0] == 'START_GAME':
        print "Starting game."
        self.players = []
        numPlayers = int(tokens[1])
        for i in range(numPlayers):
          self.players.append( Player(tokens[2*i+2], int(tokens[2*i+3])) )
          if tokens[2*i+2] == self.name:
            #Assumes no two players have the same name
            self.playerIndex = i
        self.addToLog( 'Game starting with players:' ),
        for player in self.players[:-1]:
          self.addToLog(player.name)
        self.addToLog(self.players[-1:][0].name)

      elif tokens[0] == 'NEW_HAND':
        self.cardList = CardList()
        self.numTricks = int(tokens[1])
        self.playedCards = [-1 for i in xrange(len(self.players))]
        self.addToLog('New hand... Tricks: '+ str(self.numTricks))
        self.addToLog( 'Dealer: '+ self.players[int(tokens[2])].name)

      elif tokens[0] == 'DRAW':
        card = int(tokens[1])
        debug.echo( 'Dealt ' + cardToString(card))
        self.cardList.addCard(card)

      elif tokens[0] == 'DEAL_OVER':
        self.trump = int(tokens[1])
      
      elif tokens[0] == 'BID_ANNOUNCE':
        playerNum = int(tokens[1])
        bid = int(tokens[2])
        self.addToLog('Player "%s" bid %s' % (self.players[playerNum].name, bid))
        self.players[playerNum].bid = bid

      elif tokens[0] == 'BID':
        self.getBid()

      elif tokens[0] == 'CARD_PLAYED':
        player = int(tokens[1])
        card = int(tokens[2])
        self.addToLog('"%s" played %s' %(self.players[player].name + " ", 
                                          cardToString(card)))
        self.playedCards[player] = card

      elif tokens[0] == 'GET_CARD':
        print "\a"
        exiting = self.playCard()

      elif tokens[0] == 'TRICK_WINNER':
        player = int(tokens[1])
        self.addToLog('"%s" won trick' % self.players[player].name)
        self.updateDisplay()
        self.players[player].wonTrick()
        self.playedCards = [-1 for i in xrange(len(self.players))]
        pygame.time.delay(400)

      elif tokens[0] == 'END_HAND':
        for i in range(len(self.players)):
          player = self.players[i]
          delta = int(tokens[i+1])
          if delta > 0:
            self.addToLog(('Player "%s"' % player.name)+(' made %d points' % delta))
          elif delta < 0:
            self.addToLog(('Player "%s"' % player.name)+(' went down %d points' % (-delta)))
          else:
            self.addToLog(('Player "%s"' % player.name)+ ' went over')
          player.score = player.score + delta
        for p in self.players:
          p.reset()

      else:
        print 'Unknown command: ', command

      for event in pygame.event.get():
        exiting = checkExit(event)
        if exiting:
          print "Exiting set to true."
      self.updateDisplay()