Exemplo n.º 1
0
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
Exemplo n.º 2
0
    else:
        t_rnd.victimDice = diceIndex[dice]
        t_rnd.save(update_fields=['victimDice'])
        
        #if game over
        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'])
	    
	    # TODO:
	    # 清除各pc游戏标志
	else:
	    rvalue["gameover"]=0

	    nextCaster = findNextCaster(gid)
	    newrid = createNewRound(nextCaster,gid)
	    rvalue["crntRid"] = newrid
	    rvalue["pTurn"] = nextCaster
	    rvalue["rtime"] = datetime.datetime.now().strftime('%Y-%B-%d %H:%M:%S')
	    rvalue["rFlag"] = 1
	    rvalue["rollFlag"] = 1

    r["info"] = rvalue
    r["target"] = target
    
    return r