Esempio n. 1
0
    def onPlus(self, player, buf):
        """加注"""
        jzList = json.loads(self.jzListC)
        jzId = int(buf) - 1

        if jzId < len(jzList) and jzId >= 0:
            self.curDizhu = jzList[jzId]

            curChip = jzList[jzId] * player.lookcard

            player.gold -= curChip
            player.cost += curChip

            chips = player.chips
            chips.append(curChip)
            player.chips = chips

        else:
            ERROR_MSG("onPlus zjId = %d outline" % (jzId))
            return

        self.totalzhu += curChip
        KBEngine.setSpaceData(self.spaceID, "totalzhu", str(self.totalzhu))
        KBEngine.setSpaceData(self.spaceID, "curDizhu", str(self.curDizhu))

        self.onNextPlayer()
Esempio n. 2
0
    def _nextPlayer(self, userArg):

        if self.curCid == 0:
            # 随机一位玩家先手
            self.curCid = random.randint(1, len(self.players))
        else:
            self.curCid = self.curCid % 3 + 1

        #重置房间时间
        self.curRoomtime = self.roomtime
        self._removeUserArgTimer(0)
        self._addUserArgTimer(1, 1, userArg)

        if userArg == ACTION_ROOM_JIAOPAI_NEXT:

            data = {}
            data["curCid"] = self.curCid
            data["curScore"] = self.curScore
            data["type"] = self.players[self.curCid].type

            data_json = json.dumps(data)
            KBEngine.setSpaceData(self.spaceID, "ACTION_ROOM_JIAOPAI_NEXT",
                                  data_json)

        elif userArg == ACTION_ROOM_NEXT:

            data = {}
            data["curCid"] = self.curCid
            data["powerCid"] = self.powerCid
            data["powerCards"] = self.powerCards

            data_json = json.dumps(data)
            KBEngine.setSpaceData(self.spaceID, "ACTION_ROOM_NEXT", data_json)
Esempio n. 3
0
    def onNextPlayer(self):

        if self.curCid == 0:
            self.curCid = random.randint(1, len(self.players))
            self.makersCid = self.curCid
            self.players[self.curCid].makers = 1
        else:
            for i in range(0, 5):
                tCid = (self.curCid + i) % 5 + 1
                if tCid in self.players:
                    if self.players[tCid].cellStatus == PLAYER_STATE_INGAME:
                        self.curCid = tCid
                        break

        # 计算回合数
        if self.makersCid == self.curCid:
            self.curRound += 1
            if (self.curRound <= 15):
                KBEngine.setSpaceData(self.spaceID, "curRound",
                                      str(self.curRound))
            else:
                self.addTimerMgr(1, 0, ACTION_ROOM_AUTOBIPAI)

        # 重置房间时间
        self.curRoomTime = self.roomTime
        self.delTimerMgr(0)
        self.addTimerMgr(1, 1, ACTION_ROOM_NEXT)

        # 如果金币不足2倍,则自动比牌
        if self.players[self.curCid].gold < self.curDizhu * 2:
            self.addTimerMgr(1, 0, ACTION_ROOM_AUTOBIPAI)
        else:
            self.curAction = ACTION_ROOM_NONE
            self.sendAllClients(ACTION_ROOM_NEXT, str(self.curCid))
            DEBUG_MSG("ZjhRoom::onNextPlayer cid[%d]" % (self.curCid))
Esempio n. 4
0
    def onMessage_ACTION_ROOM_CHUPAI(self, player, action, buf):

        if buf == "":
            player.showCards = []
        else:
            player.showCards = json.loads(buf)

        cards = player.showCards
        if len(cards) > 0:

            self.powerCid = player.cid
            self.powerCards = cards

            if checkCardType(cards) == CARDS_TYPE_AAAA or checkCardType(
                    cards) == CARDS_TYPE_KING:

                self.multiple *= 2
                KBEngine.setSpaceData(self.spaceID, "multiple",
                                      str(self.multiple))

            #to do error
            handCards = player.cards

            for card in cards:
                handCards.remove(card)

            player.cards = handCards
            player.cardCount = len(player.cards)

            if player.cardCount == 0:
                self.addTimerMgr(1.5, 0, ACTION_ROOM_SETTLE)
            else:
                self.nextPlayer(ACTION_ROOM_NEXT)
        else:
            self.nextPlayer(ACTION_ROOM_NEXT)
Esempio n. 5
0
    def set_state(self, state):

        DEBUG_MSG("DdzRoom::set_state space[%r] state[%r]" %
                  (self.spaceID, state))

        self.stateC = state
        KBEngine.setSpaceData(self.spaceID, "state", str(self.stateC))
Esempio n. 6
0
    def onTimer(self, id, userArg):
        """
        KBEngine method.
        使用addTimer后, 当时间到达则该接口被调用
        @param id		: addTimer 的返回值ID
        @param userArg	: addTimer 最后一个参数所给入的数据
        """

        if userArg == ACTION_ROOM_TIME:

            self.curRoomtime = self.roomtime
            self.set_state(ROOM_STATE_READY)

            self._addUserArgTimer(1,1,ACTION_ROOM_READY)
            KBEngine.setSpaceData(self.spaceID, "ACTION_ROOM_READY",str(self.curRoomtime))

        elif userArg == ACTION_ROOM_READY:
            self.curRoomtime -= 1

            if self.curRoomtime <= 0:
                self._removeUserArgTimer(0)

                self.set_state(ROOM_STATE_INGAME)

                self.onDispatchCards()

                self._nextPlayer()

        elif userArg == ACTION_ROOM_NEXT:

            self.curRoomtime -= 1

            if self.curRoomtime <= 0:
                self.onOuttime(userArg,self.players[self.curCid])
Esempio n. 7
0
    def onMessage_ACTION_ROOM_CHUPAI(self, player, action, data_json):

        cards = data_json["cards"]
        player.showCards = cards

        if len(cards) > 0:

            self.powerCid = player.cid
            self.powerCards = cards

            if checkCardType(cards) == CARDS_TYPE_AAAA or checkCardType(
                    cards) == CARDS_TYPE_KING:

                self.multiple *= 2
                KBEngine.setSpaceData(self.spaceID, "multiple",
                                      str(self.multiple))

            #to do error
            handCards = player.cards

            for card in cards:
                handCards.remove(card)

            player.cards = handCards
            player.cardCount = len(player.cards)

            if player.cardCount == 0:
                self._addUserArgTimer(1.5, 0, ACTION_ROOM_COMPUTE)
            else:
                self._nextPlayer(ACTION_ROOM_NEXT)
        else:
            self._nextPlayer(ACTION_ROOM_NEXT)
Esempio n. 8
0
    def set_state(self,state):

        DEBUG_MSG("ZjhRoom::set_state space[%r] state[%r]" % (self.spaceID,state))

        self.stateC = state

        if state == ROOM_STATE_INGAME:
            for pp in self.players:
                pp.state = PLAYER_STATE_START

        KBEngine.setSpaceData(self.spaceID, "state", str(self.stateC))
Esempio n. 9
0
    def setStatus(self, status):
        DEBUG_MSG("%r::setStatus space[%r] status[%r]" %
                  (self.className, self.spaceID, status))

        self.statusC = status
        self.base.setStatus(status)
        KBEngine.setSpaceData(self.spaceID, "status", str(status))

        if status == ROOM_STATE_INGAME:
            for pp in self.players.values():
                pp.setStatus(PLAYER_STATE_INGAME)
Esempio n. 10
0
    def __init__(self):
        KBEngine.Entity.__init__(self)

        self.position = (999999.0, 0.0, 0.0)
        self.avatars = {}
        #tell client to load map
        #KBEngine.addSpaceGeometryMapping(self.spaceID, None, "spaces/gameMap")
        #DEBUG_MSG('created space[%d] entityID = %i, res = %s.' % (self.roomKeyC, self.id, "spaces/gameMap"))

        KBEngine.globalData["Room_%i" % self.spaceID] = self.base

        #set data, client can get it
        KBEngine.setSpaceData(self.spaceID, "GAME_ROUND_TIME", str(GameConfigs.GAME_ROUND_TIME))
Esempio n. 11
0
    def setStatus(self, status):

        DEBUG_MSG("%r::setStatus() space[%r] status[%r]" %
                  (self.className, self.spaceID, status))

        self.statusC = status

        for pp in self.players.values():
            pp.setStatus(status)

        KBEngine.setSpaceData(self.spaceID, "status", str(self.statusC))

        self.base.setStatus(status)
Esempio n. 12
0
    def onGenzhu(self,player,action,buf):
        #跟注
        curChip = self.curDizhu
        if player.lookcard == 1:
            curChip = self.curDizhu * 2

        player.goldC -= curChip
        player.cost  += curChip
        player.chip  = curChip

        self.totalzhu += curChip
        KBEngine.setSpaceData(self.spaceID, "totalzhu", str(self.totalzhu))

        self._nextPlayer()
Esempio n. 13
0
    def __init__(self):
        KBEngine.Entity.__init__(self)
        RoomEntity.__init__(self)

        self.position = (9999.0, 0.0, 0.0)

        self.players = {}
        self.cards = []
        self.curfen = Helper.Round(self.difenC)
        self.multiple = 1

        #房间时间
        self.roomtime = 15
        self.curRoomtime = 0

        #当前玩家ID
        self.curCid = 0
        self.beginCid = 0
        self.dzCid = 0
        self.curScore = 0

        #叫牌不成次数
        self.giveupCount = 2

        #霸权ID
        self.powerCid = 0
        self.powerCards = []

        KBEngine.setSpaceData(self.spaceID, "curfen", "%.2f" % self.curfen)
        KBEngine.setSpaceData(self.spaceID, "multiple", str(self.multiple))
        KBEngine.setSpaceData(self.spaceID, "roomtime", str(self.roomtime))
        KBEngine.setSpaceData(self.spaceID, "status", str(self.statusC))
Esempio n. 14
0
    def __init__(self):
        KBEngine.Entity.__init__(self)
        ZjhLogic.__init__(self)
        self.position = (0.0, 0.0, 0.0)

        # 房间时间
        self.roomTime = 10
        self.curRoomTime = 0

        #庄家
        self.makersCid = 0
        self.winCid = 0

        self.reset()

        KBEngine.setSpaceData(self.spaceID, "jzList", self.jzListC)
Esempio n. 15
0
    def onGenzhu(self, player, buf):
        """跟注"""
        curChip = self.curDizhu * player.lookcard

        player.gold -= curChip
        player.cost += curChip

        chips = player.chips
        chips.append(curChip)
        player.chips = chips

        self.totalzhu += curChip
        KBEngine.setSpaceData(self.spaceID, "totalzhu", str(self.totalzhu))
        KBEngine.setSpaceData(self.spaceID, "curDizhu", str(self.curDizhu))

        self.onNextPlayer()
Esempio n. 16
0
    def onDispatchCards(self):
        """
        发牌
        """
        cards = reqRandomCards52()
        for pp in self.players.values():
            pp.cards        = getCardsby(cards, 3)
            pp.cardCount    = len(pp.cards)

            pp.goldC     -= self.curDizhu
            pp.cost      += self.curDizhu
            pp.chip       = self.curDizhu

            self.totalzhu += self.curDizhu
            self.chipsList.append(self.curDizhu)

            KBEngine.setSpaceData(self.spaceID, "totalzhu", str(self.totalzhu))

            INFO_MSG("ZjhRoom::onDispatchCards Player[%r]" % (pp.cid))
Esempio n. 17
0
	def __init__(self):
		KBEngine.Entity.__init__(self)
		
		# 把自己移动到一个不可能触碰陷阱的地方
		self.position = (999999.0, 0.0, 0.0)

		# 这个房间中所有的玩家
		self.avatars = {}
		
		# 这个房间中产生的所有粮食
		self.foods = []
		
		# 这个房间中产生的所有粉碎球
		self.smashs = []
		
		# 告诉客户端加载地图
		KBEngine.addSpaceGeometryMapping(self.spaceID, None, "spaces/gameMap")
		
		DEBUG_MSG('created space[%d] entityID = %i, res = %s.' % (self.roomKeyC, self.id, "spaces/gameMap"))
		
		# 让baseapp和cellapp都能够方便的访问到这个房间的mailbox
		KBEngine.globalData["Room_%i" % self.spaceID] = self.base
	
		# 设置房间必要的数据,客户端可以获取之后做一些显示和限制
		KBEngine.setSpaceData(self.spaceID, "GAME_MAP_SIZE",  str(GameConfigs.GAME_MAP_SIZE))
		KBEngine.setSpaceData(self.spaceID, "ROOM_MAX_PLAYER",  str(GameConfigs.ROOM_MAX_PLAYER))
		KBEngine.setSpaceData(self.spaceID, "GAME_ROUND_TIME",  str(GameConfigs.GAME_ROUND_TIME))
		
		# 开始记录一局游戏时间, 时间结束后将玩家踢出空间同时销毁自己和空间
		self._destroyTimer = self.addTimer(GameConfigs.GAME_ROUND_TIME, 0, TIMER_TYPE_DESTROY)
		
		# 开启一个timer周期性的平衡粮食和粉碎球的数量
		self.addTimer(0.1, GameConfigs.GAME_BALANCE_MASS_TIME, TIMER_TYPE_BALANCE_MASS)
Esempio n. 18
0
    def _nextPlayer(self):

        if self.curCid == 0:

            self.curCid = random.randint(1, len(self.players))
            self.firstCid = self.curCid
            self.players[self.curCid].first = 1

            KBEngine.setSpaceData(self.spaceID, "firstCid", str(self.firstCid))
        else:
            for i in range(0, 5):
                tCid = (self.curCid + i) % 5 + 1
                if tCid in self.players:
                    if self.players[tCid].stateC == ROOM_STATE_INGAME:
                        self.curCid = tCid
                        break

        #计算回合数
        if self.firstCid == self.curCid:
            self.curRound += 1
            KBEngine.setSpaceData(self.spaceID, "curRound", str(self.curRound))

        # 重置房间时间
        self.curRoomtime = self.roomtime
        self._removeUserArgTimer(0)
        self._addUserArgTimer(1, 1, ACTION_ROOM_NEXT)

        data = {}
        data["curCid"] = self.curCid
        data["curDizhu"] = self.curDizhu
        data["curRoomtime"] = self.curRoomtime

        data_json = json.dumps(data)
        KBEngine.setSpaceData(self.spaceID, "ACTION_ROOM_NEXT", data_json)
Esempio n. 19
0
    def nextPlayer(self, userArg):

        if self.curCid == 0:
            # 随机一位玩家先手
            self.curCid = random.randint(1, len(self.players))
        else:
            self.curCid = self.curCid % 3 + 1

        #重置房间时间
        self.curRoomtime = self.roomtime
        self.delTimerMgr(0)
        self.addTimerMgr(1, 1, userArg)

        if userArg == ACTION_ROOM_JIAOPAI_NEXT:

            data = {}
            data["curCid"] = self.curCid
            data["curScore"] = self.curScore
            data["type"] = self.players[self.curCid].type

            KBEngine.setSpaceData(self.spaceID, "ACTION_ROOM_JIAOPAI_NEXT",
                                  json.dumps(data))

        elif userArg == ACTION_ROOM_NEXT:

            data = {}
            data["curCid"] = self.curCid
            data["powerCid"] = self.powerCid

            #如果又是自己,则powerCards为空
            if self.curCid == self.powerCid:
                data["powerCards"] = []
            else:
                data["powerCards"] = copyList(self.powerCards)

            KBEngine.setSpaceData(self.spaceID, "ACTION_ROOM_NEXT",
                                  json.dumps(data))
Esempio n. 20
0
    def __init__(self):
        KBEngine.Entity.__init__(self)

        # 把自己移动到一个不可能触碰陷阱的地方
        self.position = (999999.0, 0.0, 0.0)

        # 这个房间中所有的玩家
        self.redAvatars = []
        self.blueAvatars = []

        # 设置房间必要的数据,客户端可以获取之后做一些显示和限制
        KBEngine.setSpaceData(self.spaceID, "GAME_MAP_SIZE",
                              str(GameConfigs.GAME_MAP_SIZE))
        KBEngine.setSpaceData(self.spaceID, "ROOM_MAX_PLAYER",
                              str(GameConfigs.ROOM_MAX_PLAYER))
        KBEngine.setSpaceData(self.spaceID, "GAME_ROUND_TIME",
                              str(GameConfigs.GAME_ROUND_TIME))

        self._startBattleTime = 0
        self._destroyTimer = 0
Esempio n. 21
0
    def __init__(self):
        KBEngine.Entity.__init__(self)

        # 把自己移动到一个不可能触碰陷阱的地方
        self.position = (999999.0, 0.0, 0.0)

        # 这个房间中所有的玩家
        self.avatars = {}

        # 这个房间中产生的所有地雷
        self.mines = []

        # 这个房间中产生的所有补给箱
        self.surpplyboxs = []

        # 房间内所有物品的位置
        self.spwanPoslist = []

        # 这个地图上创建的entity总数
        self.tmpCreateEntityDatas = copy.deepcopy(d_space_spawns.datas)

        DEBUG_MSG('created Space cell entityID = %i.' % (self.id))

        KBEngine.globalData['Space_%i' % self.spaceID] = self.base

        # 设置房间必要的数据,客户端可以获取之后做一些显示和限制
        KBEngine.setSpaceData(self.spaceID, "GAME_MAP_SIZE",
                              str(GameConfigs.GAME_MAP_SIZE))
        KBEngine.setSpaceData(self.spaceID, "ROOM_MAX_PLAYER",
                              str(GameConfigs.SPACE_MAX_PLAYER))
        KBEngine.setSpaceData(self.spaceID, "GAME_ROUND_TIME",
                              str(GameConfigs.GAME_ROUND_TIME))

        # 开始记录一局游戏时间, 时间结束后将产生毒圈,逐渐缩小毒圈,在毒圈范围外的持续掉血,直到最后一个玩家存活,结束游戏
        #        self._destroyTimer = self.addTimer(SCDefine.POISON_CREATE_TIME, 0, SCDefine.TIMER_TYPE_POISON_BEGINE)

        # 开启一个timer加载道具
        self.addTimer(0.1, SCDefine.PROP_BLANCE_TIME,
                      SCDefine.TIMER_TYPE_SPACE_SPAWN_TICK)
Esempio n. 22
0
    def reset(self):
        #当前玩家cid
        self.curCid = 0
        #当前回合
        self.curRound = 0
        #当前低注
        self.curDizhu = self.dizhuC
        #总下注
        self.totalzhu = 0
        self.curAction = ACTION_ROOM_NONE
        self.setStatus(ROOM_STATE_READY)

        KBEngine.setSpaceData(self.spaceID, "dizhu", str(self.dizhuC))
        KBEngine.setSpaceData(self.spaceID, "curDizhu", str(self.curDizhu))
        KBEngine.setSpaceData(self.spaceID, "totalzhu", str(self.totalzhu))
        KBEngine.setSpaceData(self.spaceID, "roomtime", str(self.roomTime))
        KBEngine.setSpaceData(self.spaceID, "curRound", str(self.curRound))
        KBEngine.setSpaceData(self.spaceID, "status", str(self.statusC))
Esempio n. 23
0
    def onMessage_ACTION_ROOM_JIAOPAI(self, player, action, value):

        score = int(value)
        player.curScore = score

        if score <= 3:

            if self.curScore < score:

                self.dzCid = player.cid
                self.curScore = score
                self.curfen = self.difenC * score

                KBEngine.setSpaceData(self.spaceID, "curfen",
                                      "%.2f" % self.curfen)

            #分值最大的玩家成为地主
            if score == 3 or (getLastCid(self.beginCid) == player.cid and
                              (self.curScore != 0 or self.giveupCount == 0)):

                #如果叫牌流程为0,且未确定dzCid,则beginCid为地主
                if self.giveupCount == 0 and self.dzCid == 0:
                    self.dzCid = self.beginCid

                DEBUG_MSG(
                    "DdzRoom::onMessage_ACTION_ROOM_JIAOPAI dzCid[%d] beginCid[%d]"
                    % (self.dzCid, self.beginCid))

                self.curCid = self.dzCid
                self.powerCid = self.dzCid

                for pp in self.players.values():

                    if pp.cid != self.dzCid:
                        pp.type = 2
                    else:
                        threeCards = getCardsby(self.cards, 3)
                        pp.type = 1

                        pp.cards.extend(threeCards)
                        pp.cards = sortCards(pp.cards)
                        pp.cardCount = len(pp.cards)

                        data = {}
                        data["cards"] = threeCards
                        KBEngine.setSpaceData(self.spaceID, "threeCards",
                                              json.dumps(threeCards))

            elif getLastCid(
                    self.beginCid) == player.cid and self.curScore == 0:
                #如果没人叫分,则重新发牌
                self.beginCid = 0
                self.giveupCount -= 1
                self.addTimerMgr(1, 0, ACTION_ROOM_DISPATCH)
                return

            elif self.beginCid == 0:
                #记录开始叫牌的玩家cid,用于判定是否结束叫分流程
                self.beginCid = player.cid

        elif score > 10 and score <= 12:

            player.multiple = (score - 10)

            if getLastCid(self.dzCid) == player.cid:

                self.nextPlayer(ACTION_ROOM_NEXT)
                return

        self.nextPlayer(ACTION_ROOM_JIAOPAI_NEXT)
Esempio n. 24
0
    def __init__(self):
        KBEngine.Entity.__init__(self)

        self.position = (9999.0, 0.0, 0.0)
        self.timerMgr = {}

        self.players = {}

        # 房间时间
        self.roomtime   = 10
        self.curRoomtime = 0

        #先手ID
        self.firstCid   = 0
        self.victoryID  = 0

        #重置房间数据
        self.reset()

        KBEngine.globalData["Room_%i" % self.spaceID] = self.base

        KBEngine.setSpaceData(self.spaceID, "dizhu",    str(self.dizhuC))
        KBEngine.setSpaceData(self.spaceID, "totalzhu", str(self.totalzhu))
        KBEngine.setSpaceData(self.spaceID, "roomtime", str(self.roomtime))
        KBEngine.setSpaceData(self.spaceID, "curRound", str(self.curRound))
        KBEngine.setSpaceData(self.spaceID, "state", str(self.stateC))

        KBEngine.setSpaceData(self.spaceID, "jzList", self.jzListC)