コード例 #1
0
ファイル: createNewRound.py プロジェクト: MZASTR/cdsite
def createNewRound(caster,gid):
    #rnum = 0
    try:
        rnum = Round.object.filter(gameID = gid).count() +1
    except:
        rnum = 0
    
    if rnum ==0:
        casterID = caster
    
    gr = Round()    
    gr.gameID_id = gid
    gr.roundNum = rnum
    gr.caster = casterID
    gr.victim = -1
    gr.attackTimeBegin = datetime.datetime.now()
    gr.casterDice = -1
    gr.victimDice = -1
    gr.roundStatue = 0
    gr.save()
    rnd = getLastRound(gid)

    if rnd:
        return rnum

    return -1
コード例 #2
0
ファイル: findNextCaster.py プロジェクト: MZASTR/cdsite
def findNextCaster(gid):
    # 获取当前轮开始时间
    rnd = getLastRound(gid)

    game = GameInfo.objects.get(pk = gid)
    pl = game.pclist.split(",")
    bi = findPCInList(rnd.caster,pl)
    if bi == -1:
        return -1

    if bi+1>=len(pl):
        index = 0
    else:
        index = bi+1
    return int(pl[index])
コード例 #3
0
ファイル: isNextCaster.py プロジェクト: MZASTR/cdsite
def isNextCaster(uid,gid):
    r = {"errmsg": "", "found": False, "rcntPC":-1,"low":-1, "high":-1, "victim":False}
    # 获取当前轮开始时间
    rnd = getLastRound(gid)
    if rnd.fbTimeBegin:
        btime = rnd.fbTimeBegin
        #判断是否当前轮受害者
        if uid == rnd.victim:
            r["victim"] = True
            r["found"] = True
            return r
    else:
        btime = rnd.attackTimeBegin
    
    rt =  datetime.datetime.now() - btime
    border = rt.seconds/intervalSeconds
    pc_num = PC.objects.filter(gameStatue=gid).count()
    if border >=pc_num:	#6: #超时一轮,游戏结束
        r["errmsg"] = "overtime"
        return r   #
    else:
        game = GameInfo.objects.get(pk = gid)
        pl = game.pclist.split(",")
        bi = findPCInList(uid,pl)
        if bi == -1:
            r["errmsg"] = "no such pc"
            return r
        r["low"] = bi
        r["rcntPC"] = int(pl[bi])
        l = bi + border
        LA = len(pl)
        for i in range(bi,l):
            if i<LA:
                index = i
            else:
                index = (LA - i)*(-1)
            if int(pl[index]) == uid:
                r["found"] = True
                r["high"] = index
                return r
    return r
コード例 #4
0
ファイル: roll.py プロジェクト: MZASTR/cdsite
def roll(request, target, gid, cRound, turnFlg):
    debugLog("roll() begin aaa")
    uid = request.user.id
    
    attFlag = turnFlg["RollTurnInfo"]["grStatue"]
    
    r = {"errmsg":""}
    targetStatue = ifMad(target)
    
    if targetStatue["errmsg"]=="":
        mad = targetStatue["mad"]
    else:
        r["errmsg"] = targetStatue["errmsg"]
        return r
    if mad and attFlag==0:
	r["errmsg"] = "target mad" #u"目标已疯,不能进行此操作。"
        return r
    else:
        # 生成骰数
	num = random.randint(0,11)
	#num = 9
	
        # 根据骰数决定对应操作
        diceIndex =["Cthulhu","Yellow","Tentacle","Tentacle","Yellow","Yellow","Yellow","Yellow","Elder","Eye","Tentacle","Tentacle"]

        debugLog("roll()  randint: diceNum="+str(num)+" dice="+str(diceIndex[num]) )
        debugLog("roll() *** attFlag="+str(attFlag))

        #设置攻击及受害者
        if attFlag==0:
            caster = uid
            victim = target
        elif attFlag == 1:
            lastRnd = getLastRound(gid)
            caster = lastRnd.victim
            victim = lastRnd.caster
        else:
            r["errmsg"] = "unknow"
            return r
        
        r["target"] = victim
        
        if not turnFlg["PCTURN"]:
            ot = True
        else:
            ot = False
            
        # 进行相应操作:扣除被伤害者相应神智/...等
        va = {"dice":diceIndex[num],
              "gid":gid,
              "caster":caster,
              "victim":victim,
              "flag":attFlag,
              "overtime":ot
              }
        rvalue = switch(va)
        
        if len(rvalue)==0:
            return r
        rvalue["rid"] = cRound

	rnd_list = Round.objects.filter(gameID=gid).order_by('-id')[:1]
	t_rnd = rnd_list[0]
        
        rvalue["rollFlag"] = attFlag

        #更新
        if attFlag==0:
	    if diceIndex[num]!="Eye":
	        rvalue["pTurn"] = target
	    else:
	        rvalue["pTurn"] = caster
            t_rnd.casterDice = num
            t_rnd.fbTimeBegin = datetime.datetime.now()
            t_rnd.victim = target
            t_rnd.save(update_fields=['casterDice','victim','fbTimeBegin'])
        elif attFlag == 1:
            t_rnd.victimDice = num
            t_rnd.save(update_fields=['victimDice'])

            # 若本轮结束则更新本轮;
            if diceIndex[num]!="Eye":
	        # 游戏结束:sanity<1的人有5个;查找是否有获胜者;返回数据格式:
	        gameover = ifGameOver(gid)
	        if gameover>=0:
		    rvalue["gameover"]=1
		    rvalue["winner"]=gameover
		    game = GameInfo.objects.get(pk=gid)
		    game.statue = 0
		    game.winner = gameover
		    game.save(update_fields=['statue','winner'])
		else:
		    rvalue["gameover"]=0
		    
		    #查找下一个玩家,开启下一回合(轮)
		    nextCaster = findNextCaster(gid)
		    newrid = createNewRound(nextCaster,gid)
		    
		    rvalue["crntRid"] = newrid
		    rvalue["pTurn"] = nextCaster
		    rvalue["rtime"] = datetime.datetime.now()
		    rvalue["rFlag"] = 1
            else:
	        rvalue["pTurn"] = uid
	        rvalue["rollFlag"] = attFlag+3
        else:
            pass
	    
        r["info"] = rvalue

    return r
コード例 #5
0
ファイル: checkPCTurn.py プロジェクト: MZASTR/cdsite
        es = str(Exception) + ":" + str(data)
        debugLog("check PCTurn () line 38:" + es)
        return r

    # 无论是否超时,只要当前是该玩家投骰则返回True
    if r["RollTurnInfo"]["crntPC"] == uid:
        r["PCTURN"] = True
        r["RollToken"] = True
        return r
    elif r["RollTurnInfo"]["overtime"] == True:

        # 非uid投骰,且当前超时:
        #  检查下一个投骰者是否uid
        nextpc = isNextCaster(uid, gid)

        #    若是则设置当前轮状态,生成新轮,并返回新生成的轮信息
        ##if uid == nextpc:
        if nextpc["found"]:
            r["RollToken"] = True
            # set crnt turn statue;
            rnd = getLastRound(gid)
            rnd.roundStatue = 1
            rnd.save(update_fields=["roundStatue"])
            # generate new turn;
            createNewRound(nextpc["rcntPC"], gid)
            r["rndID"] = rnd.id
            return r
    else:
        return r
    return r