/// <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); }
/// <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; }