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