#!/usr/bin/env python
# Copyright (c) 2001 actzero, inc. All rights reserved.
import string
import sys
sys.path.insert (1, '..')
from SOAPpy import *
ident = '$Id: cardServer.py,v 1.4 2004/02/18 21:22:13 warnes Exp $'
# create the list of all cards, and keep strings for each suit
__cs = "Clubs"
__ds = "Diamonds"
__hs = "Hearts"
__ss = "Spades"
__cards = []
for suit in [__cs, __ds, __hs, __ss]:
for num in range(9):
num += 1
__cards.append(str(num+1)+" of "+suit)
for face in ["ace","King","Queen","Jack"]:
__cards.append(face+" of "+suit)
def deal(num):
if num not in range(1,53):
return -1
else:
alreadydealt = []
ignore = 0
handdealt = []
import whrandom
while num > 0:
idx = int(str(whrandom.random())[2:4])
if idx in range(52) and idx not in alreadydealt:
handdealt.append(__cards[idx])
alreadydealt.append(idx)
num -= 1
else:
ignore += 1
continue
return handdealt
def arrangeHand(hand):
c = []
d = []
h = []
s = []
import string
for card in hand:
if string.find(card, __cs) != -1:
c.append(card)
elif string.find(card, __ds) != -1:
d.append(card)
elif string.find(card, __hs) != -1:
h.append(card)
elif string.find(card, __ss) != -1:
s.append(card)
for cards, str in ((c, __cs),(d, __ds),(h,__hs), (s,__ss)):
cards.sort()
idx = 0
if "10 of "+str in cards:
cards.remove("10 of "+str)
if "Jack of "+str in cards: idx += 1
if "Queen of "+str in cards: idx += 1
if "King of "+str in cards: idx += 1
if "ace of "+str in cards: idx +=1
cards.insert(len(cards)-idx,"10 of "+str)
if "King of "+str in cards:
cards.remove("King of "+str)
if "ace of "+str in cards: cards.insert(len(cards)-1,"King of "+str)
else: cards.append("King of "+str)
return c+d+h+s
def dealHand (NumberOfCards, StringSeparator):
hand = deal(NumberOfCards)
return string.join(hand,StringSeparator)
def dealArrangedHand (NumberOfCards, StringSeparator):
if NumberOfCards < 1 or NumberOfCards > 52:
raise ValueError, "NumberOfCards must be between 1 and 52"
unarranged = deal(NumberOfCards)
hand = arrangeHand(unarranged)
return string.join(hand, StringSeparator)
def dealCard ():
return deal(1)[0]
run = 1
def quit():
global run
run=0;
namespace = 'http://soapinterop.org/'
server = SOAPServer (("localhost", 12027))
server.registerKWFunction (dealHand, namespace)
server.registerKWFunction (dealArrangedHand, namespace)
server.registerKWFunction (dealCard, namespace)
server.registerKWFunction (quit, namespace)
try:
while run:
server.handle_request()
except KeyboardInterrupt:
pass
|