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()
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()
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()
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