comparison plugins/plugin_misc_tarot.py @ 88:59f181e8433a

Tarot SàT: added forgotten file Tarot plugin plugin Tarot: distribution first draft
author Goffi <goffi@goffi.org>
date Wed, 12 May 2010 11:55:18 +0930
parents
children 23caf1051099
comparison
equal deleted inserted replaced
87:66d784082930 88:59f181e8433a
1 #!/usr/bin/python
2 # -*- coding: utf-8 -*-
3
4 """
5 SAT plugin for managing xep-0045
6 Copyright (C) 2009, 2010 Jérôme Poisson (goffi@goffi.org)
7
8 This program is free software: you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation, either version 3 of the License, or
11 (at your option) any later version.
12
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with this program. If not, see <http://www.gnu.org/licenses/>.
20 """
21
22 from logging import debug, info, warning, error
23 from twisted.words.xish import domish
24 from twisted.internet import protocol, defer, threads, reactor
25 from twisted.words.protocols.jabber import client, jid, xmlstream
26 from twisted.words.protocols.jabber import error as jab_error
27 from twisted.words.protocols.jabber.xmlstream import IQ
28 import os.path
29 import pdb
30 import random
31
32 from zope.interface import implements
33
34 from wokkel import disco, iwokkel, muc
35
36 from base64 import b64decode
37 from hashlib import sha1
38 from time import sleep
39
40 try:
41 from twisted.words.protocols.xmlstream import XMPPHandler
42 except ImportError:
43 from wokkel.subprotocols import XMPPHandler
44
45
46 PLUGIN_INFO = {
47 "name": "Tarot cards plugin",
48 "import_name": "Tarot",
49 "type": "Misc",
50 "protocols": [],
51 "dependencies": ["XEP_0045"],
52 "main": "Tarot",
53 "handler": "no",
54 "description": _("""Implementation of Tarot card game""")
55 }
56
57 class Tarot():
58
59 def __init__(self, host):
60 info(_("Plugin Tarot initialization"))
61 self.host = host
62 self.games={}
63 host.bridge.addMethod("createTarotGame", ".communication", in_sign='sass', out_sign='', method=self.createGame)
64 host.bridge.addSignal("tarotGameStarted", ".communication", signature='sass') #args: room_id, players, profile
65 host.bridge.addSignal("tarotGameNew", ".communication", signature='sa(ss)s') #args: room_id, hand, profile
66 self.deck_ordered = []
67 for value in map(str,range(1,22))+['excuse']:
68 self.deck_ordered.append(("atout",value))
69 for family in ["pique", "coeur", "carreau", "trefle"]:
70 for value in map(str,range(1,11))+["valet","cavalier","dame","roi"]:
71 self.deck_ordered.append((family, value))
72
73 def createGame(self, room_jid, players, profile_key='@DEFAULT@'):
74 """Create a new game"""
75 debug (_("Creating Tarot game"))
76 profile = self.host.memory.getProfileName(profile_key)
77 if not profile:
78 error (_("profile %s is unknown") % profile_key)
79 return
80 if False: #gof: self.games.has_key(room_jid):
81 warning (_("Tarot game already started in room %s") % room_jid)
82 else:
83 self.games[room_jid] = {'players':players, 'profile':profile, 'hand_size':18, 'player_start':0}
84 self.host.bridge.tarotGameStarted(room_jid, players, profile)
85 self.newGame(room_jid)
86
87
88 def newGame(self, room_jid):
89 """Launch a new round"""
90 debug (_('new Tarot game'))
91 deck = self.deck_ordered[:]
92 random.shuffle(deck)
93 profile = self.games[room_jid]['profile']
94 players = self.games[room_jid]['players']
95 hand = self.games[room_jid]['hand'] = {}
96 hand_size = self.games[room_jid]['hand_size']
97 chien = self.games[room_jid]['chien'] = []
98 for i in range(4): #TODO: distribute according to real Tarot rules (3 by 3 counter-clockwise, 1 card at once to chien)
99 hand[players[i]] = deck[0:hand_size]
100 del deck[0:hand_size]
101 chien = deck[:]
102 del(deck[:])
103
104 for player in players:
105 print "envoi de main a",player
106 self.host.sendMessage(room_jid+"/"+player, "/hand: %s" % str(hand[player]))
107
108 self.host.bridge.tarotGameNew(room_jid, hand[players[0]], profile)
109
110