/// <summary>
    ///  一子弹获得分值
    /// </summary>
    /// <returns>获得分值</returns>
    int _OneBulletGetScore(int bulletScore, FishSim fishFirst, List <FishSim> allFish)
    {
        List <FishSim> fishDieList = new List <FishSim>();
        //鱼死亡
        //排除第一条鱼外的鱼数目
        //bool hitOnlyOne = allFish.Count == 1;//只击中一条鱼

        int oddsTotal = 0;

        foreach (FishSim f in allFish)
        {
            oddsTotal += f.Odds;
        }
        //第一条死亡几率
        //float firstDieRatio = (1F - GameOdds.GainRatio) * fishFirst.Odds / oddsTotal  / fishFirst.Odds;
        float firstDieRatio = (1F - GameOdds.GainRatio) * (fishFirst.Odds + oddsTotal) / (2F * oddsTotal * fishFirst.Odds);

        //Debug.Log("firstDieRatio = " + firstDieRatio + "    odds =" + fishFirst.Odds);
        if (GameOdds.IsHitInOne(firstDieRatio))//第一条鱼命中
        {
            fishDieList.Add(fishFirst);
            //Debug.Log("firstDieRatio = " + firstDieRatio+"    odds ="+fishFirst.Odds);
            //求其他鱼死是否死亡
            //先排除第一条鱼
            List <FishSim> fishOthers = new List <FishSim>();
            for (int i = 0; i != allFish.Count; ++i)
            {
                FishSim fo = allFish[i];
                if (fishFirst != fo)
                {
                    fishOthers.Add(fo);
                }
            }

            //逐条计算几率
            foreach (FishSim f in fishOthers)
            {
                //float dieRatio = (1F  - GameOdds.GainRatio - firstDieRatio * fishFirst.Odds) / (firstDieRatio * f.Odds * fishOthers.Count);
                //float dieRatio = (1F - GameOdds.GainRatio - firstDieRatio * fishFirst.Odds) / (firstDieRatio * oddsTotal);
                float dieRatio = (1F - GameOdds.GainRatio - firstDieRatio * fishFirst.Odds) / (firstDieRatio * /* f.Odds **/ (oddsTotal - fishFirst.Odds));
                //Debug.Log("otherDieRatio = " + dieRatio + "    odds =" + f.Odds);
                if (GameOdds.IsHitInOne(dieRatio))
                {
                    fishDieList.Add(f);
                }
            }
        }

        int scoreTotalGetted = 0;

        foreach (FishSim fDie in fishDieList)
        {
            int numGetted = fDie.Odds * bulletScore;
            scoreTotalGetted += numGetted;
        }
        return(scoreTotalGetted);
    }
Example #2
0
    /// <summary>
    ///  һ�ӵ���÷�ֵ
    /// </summary>
    /// <returns>��÷�ֵ</returns>
    int _OneBulletGetScore(int bulletScore,FishSim fishFirst, List<FishSim> allFish)
    {
        List<FishSim> fishDieList = new List<FishSim>();
        //������
        //�ų���һ�����������Ŀ
        //bool hitOnlyOne = allFish.Count == 1;//ֻ����һ����

        int oddsTotal = 0;
        foreach (FishSim f in allFish)
            oddsTotal += f.Odds;
        //��һ����������
        //float firstDieRatio = (1F - GameOdds.GainRatio) * fishFirst.Odds / oddsTotal  / fishFirst.Odds;
        float firstDieRatio = (1F - GameOdds.GainRatio) * (fishFirst.Odds+oddsTotal) / (2F*oddsTotal *fishFirst.Odds);
        //Debug.Log("firstDieRatio = " + firstDieRatio + "    odds =" + fishFirst.Odds);
        if (GameOdds.IsHitInOne(firstDieRatio))//��һ��������
        {
            fishDieList.Add(fishFirst);
            //Debug.Log("firstDieRatio = " + firstDieRatio+"    odds ="+fishFirst.Odds);
            //�����������Ƿ�����
            //���ų���һ����
            List<FishSim> fishOthers = new List<FishSim>();
            for (int i = 0; i != allFish.Count; ++i)
            {
                FishSim fo = allFish[i];
                if (fishFirst != fo )
                    fishOthers.Add(fo);
            }

            //�������㼸��
            foreach (FishSim f in fishOthers)
            {
                //float dieRatio = (1F  - GameOdds.GainRatio - firstDieRatio * fishFirst.Odds) / (firstDieRatio * f.Odds * fishOthers.Count);
                //float dieRatio = (1F - GameOdds.GainRatio - firstDieRatio * fishFirst.Odds) / (firstDieRatio * oddsTotal);
                float dieRatio = (1F - GameOdds.GainRatio - firstDieRatio * fishFirst.Odds) / (firstDieRatio */* f.Odds **/ (oddsTotal - fishFirst.Odds));
                //Debug.Log("otherDieRatio = " + dieRatio + "    odds =" + f.Odds);
                if (GameOdds.IsHitInOne(dieRatio))
                    fishDieList.Add(f);
            }

        }

        int scoreTotalGetted = 0;
        foreach (FishSim fDie in fishDieList)
        {
            int numGetted = fDie.Odds * bulletScore;
            scoreTotalGetted += numGetted;
        }
        return scoreTotalGetted;
    }