changeset 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 (2010-05-12)
parents 66d784082930
children 23caf1051099
files plugins/plugin_misc_tarot.py
diffstat 1 files changed, 110 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/plugin_misc_tarot.py	Wed May 12 11:55:18 2010 +0930
@@ -0,0 +1,110 @@
+#!/usr/bin/python
+# -*- coding: utf-8 -*-
+
+"""
+SAT plugin for managing xep-0045
+Copyright (C) 2009, 2010  Jérôme Poisson (goffi@goffi.org)
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+"""
+
+from logging import debug, info, warning, error
+from twisted.words.xish import domish
+from twisted.internet import protocol, defer, threads, reactor
+from twisted.words.protocols.jabber import client, jid, xmlstream
+from twisted.words.protocols.jabber import error as jab_error
+from twisted.words.protocols.jabber.xmlstream import IQ
+import os.path
+import pdb
+import random
+
+from zope.interface import implements
+
+from wokkel import disco, iwokkel, muc
+
+from base64 import b64decode
+from hashlib import sha1
+from time import sleep
+
+try:
+    from twisted.words.protocols.xmlstream import XMPPHandler
+except ImportError:
+    from wokkel.subprotocols import XMPPHandler
+
+
+PLUGIN_INFO = {
+"name": "Tarot cards plugin",
+"import_name": "Tarot",
+"type": "Misc",
+"protocols": [],
+"dependencies": ["XEP_0045"],
+"main": "Tarot",
+"handler": "no",
+"description": _("""Implementation of Tarot card game""")
+}
+
+class Tarot():
+
+    def __init__(self, host):
+        info(_("Plugin Tarot initialization"))
+        self.host = host
+        self.games={}
+        host.bridge.addMethod("createTarotGame", ".communication", in_sign='sass', out_sign='', method=self.createGame)
+        host.bridge.addSignal("tarotGameStarted", ".communication", signature='sass') #args: room_id, players, profile
+        host.bridge.addSignal("tarotGameNew", ".communication", signature='sa(ss)s') #args: room_id, hand, profile
+        self.deck_ordered = []
+        for value in map(str,range(1,22))+['excuse']:
+            self.deck_ordered.append(("atout",value))
+        for family in ["pique", "coeur", "carreau", "trefle"]:
+            for value in map(str,range(1,11))+["valet","cavalier","dame","roi"]:
+                self.deck_ordered.append((family, value))
+
+    def createGame(self, room_jid, players, profile_key='@DEFAULT@'):
+        """Create a new game"""
+        debug (_("Creating Tarot game"))
+        profile = self.host.memory.getProfileName(profile_key)
+        if not profile:
+            error (_("profile %s is unknown") % profile_key)
+            return
+        if False: #gof: self.games.has_key(room_jid):
+            warning (_("Tarot game already started in room %s") % room_jid)
+        else:
+            self.games[room_jid] = {'players':players, 'profile':profile, 'hand_size':18, 'player_start':0}
+            self.host.bridge.tarotGameStarted(room_jid, players, profile)
+            self.newGame(room_jid)
+
+
+    def newGame(self, room_jid):
+        """Launch a new round"""
+        debug (_('new Tarot game'))
+        deck = self.deck_ordered[:]
+        random.shuffle(deck)
+        profile = self.games[room_jid]['profile']
+        players = self.games[room_jid]['players']
+        hand = self.games[room_jid]['hand'] = {}
+        hand_size = self.games[room_jid]['hand_size']
+        chien = self.games[room_jid]['chien'] = []
+        for i in range(4): #TODO: distribute according to real Tarot rules (3 by 3 counter-clockwise, 1 card at once to chien)
+            hand[players[i]] = deck[0:hand_size]
+            del deck[0:hand_size]
+        chien = deck[:]
+        del(deck[:])
+
+        for player in players:
+            print "envoi de main a",player
+            self.host.sendMessage(room_jid+"/"+player, "/hand: %s" % str(hand[player]))
+            
+        self.host.bridge.tarotGameNew(room_jid, hand[players[0]], profile)
+
+