コード例 #1
0
    private static List <double> generateFibonacciSphere(int N = 10000, double jitter = 0.75f, int seed = 123)
    {
        var randFloat = Rander.makeRandDouble(seed);

        var a_latlong = new List <double>();

        // Second algorithm from http://web.archive.org/web/20120421191837/http://www.cgafaq.info/wiki/Evenly_distributed_points_on_sphere
        var    s     = 3.6 / Math.Sqrt(N);
        double dlong = Math.PI * (3 - Math.Sqrt(5)),  /* ~2.39996323 */
               _long = 0,
               dz    = 2.0 / N,
               _z    = 1 - dz / 2;

        for (int k = 0; k < N; k++)
        {
            var r      = Math.Sqrt(1 - _z * _z);
            var latDeg = Math.Asin(_z) * 180 / Math.PI;
            var lonDeg = _long * 180 / Math.PI;
            //if (_randomLat[k] === undefined) _randomLat[k] = randFloat() - randFloat();
            //if (_randomLon[k] === undefined) _randomLon[k] = randFloat() - randFloat();
            var _randomLat = randFloat() - randFloat();
            var _randomLon = randFloat() - randFloat();
            latDeg += jitter * _randomLat * (latDeg - Math.Asin(Math.Max(-1, _z - dz * 2 * Math.PI * r / s)) * 180 / Math.PI);
            lonDeg += jitter * _randomLon * (s / r * 180 / Math.PI);

            a_latlong.Add(latDeg);
            a_latlong.Add(lonDeg % 360.0);

            _long += dlong;
            _z    -= dz;
        }
        return(a_latlong);
    }
コード例 #2
0
        public static void calculateMountainDistance(int seed, DualMesh mesh, int[] peak_t, Float spacing, Float jaggedness, NativeArray <Float> t_distance)
        {
            int randIndex = 0;

            for (var i = 0; i < t_distance.Length; ++i)
            {
                t_distance[i] = -1f;
            }

            var queue_t = new List <int>(peak_t);

            for (var i = 0; i < queue_t.Count; i++)
            {
                var current_t = queue_t[i];
                for (var j = 0; j < 3; j++)
                {
                    var s          = 3 * current_t + j;
                    var neighbor_t = mesh.s_outer_t(s);
                    if (t_distance[neighbor_t] == -1f)
                    {
                        var rf1       = Rander.randFloat(seed, randIndex++);
                        var rf2       = Rander.randFloat(seed, randIndex++);
                        var increment = spacing * (1 + jaggedness * (rf1 - rf2));
                        t_distance[neighbor_t] = t_distance[current_t] + increment;
                        queue_t.Add(neighbor_t);
                    }
                }
            }
        }
コード例 #3
0
ファイル: ShopTool.cs プロジェクト: Dolany/DolanyAI
        protected override void ScheduleDo(SchedulerTimer timer)
        {
            var todayRecord = GlobalVarRecord.Get("TodayShopInfo");

            if (!string.IsNullOrEmpty(todayRecord.Value))
            {
                return;
            }

            var records = GetHours(3).Select(hour =>
            {
                var isHalfHour = Rander.RandBool();
                var dateTime   = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, hour, isHalfHour ? 30 : 0, 0);
                var goods      = ArmerSvc.GetRandArmers(5).Select(p => p.Name);
                return(new ShopTimeRecord()
                {
                    OpenTime = dateTime, SellingGoods = goods.ToArray()
                });
            }).ToList();

            todayRecord.Value      = JsonConvert.SerializeObject(records);
            todayRecord.ExpiryTime = CommonUtil.UntilTommorow();
            todayRecord.Update();

            RandShopperSvc.Refresh();
        }
コード例 #4
0
ファイル: DiceAI.cs プロジェクト: Dolany/DolanyAI
        public bool RD(MsgInformationEx MsgDTO, object[] param)
        {
            var rand = Rander.RandInt(100) + 1;

            MsgSender.PushMsg(MsgDTO, $"你掷出了 {rand} 点!", true);
            return(true);
        }
コード例 #5
0
        public bool FishingBottle(MsgInformationEx MsgDTO, object[] param)
        {
            if (OSPersonBuff.CheckBuff(MsgDTO.FromQQ, "昙天"))
            {
                MsgSender.PushMsg(MsgDTO, "你当前无法捞瓶子!(昙天)");
                return(false);
            }

            if (Rander.RandInt(100) < ItemRate)
            {
                FishItem(MsgDTO);
                return(true);
            }

            var query = MongoService <DriftBottleRecord> .Get(r => r.FromQQ != MsgDTO.FromQQ && r.FromGroup != MsgDTO.FromGroup && !r.ReceivedQQ.HasValue);

            if (query.IsNullOrEmpty())
            {
                FishItem(MsgDTO);
                return(true);
            }

            var bottle = query.RandElement();

            PrintBottle(MsgDTO, bottle);

            bottle.ReceivedGroup = MsgDTO.FromGroup;
            bottle.ReceivedQQ    = MsgDTO.FromQQ;
            bottle.ReceivedTime  = DateTime.Now;

            MongoService <DriftBottleRecord> .Update(bottle);

            return(true);
        }
コード例 #6
0
ファイル: PetAgainstEngine.cs プロジェクト: Dolany/DolanyAI
        private void ProcessTurn()
        {
            var randSkills = Rander.RandSort(SelfPet.Skills.Keys.Where(s => s != SelfPet.LastSkill).ToArray()).Take(3);
            var skills     = SelfPet.Skills.Where((skill, level) => randSkills.Contains(skill.Key)).ToList();

            var selectedIdx = Rander.RandInt(skills.Count);

            var(skillName, skillLevel) = skills.ElementAt(selectedIdx);
            var skillModel = PetSkillSvc[skillName];

            SendMessage($"{SelfPet.Name}施放了 【{skillModel.Name}】(lv.{skillLevel})!");

            SelfPet.LastSkill = skillName;

            if (!DoSkillTrigger())
            {
                return;
            }

            if (skillModel.Data.First().Value.Length == skillLevel)
            {
                SendMessage($"{SelfPet.Name}使出了它的绝技!");
            }

            var msg = ProcessEffect(new GamingEffect()
            {
                Name = skillModel.Name,
                Data = skillModel.Data.ToDictionary(p => p.Key, p => (object)p.Value[skillLevel - 1])
            });

            SendMessage(msg);
        }
コード例 #7
0
 public bool GetBoomCode(MsgInformationEx MsgDTO, object[] param)
 {
     BoomCode = Rander.RandInt(100000);
     CodeDate = DateTime.Now;
     MsgSender.PushMsg(MsgDTO, BoomCode.ToString());
     return(true);
 }
コード例 #8
0
        public XunyuanTreasure[] Split()
        {
            Simplify();

            var first  = new XunyuanTreasure();
            var second = new XunyuanTreasure();

            foreach (var(key, value) in NormalArmers)
            {
                var randCount = Rander.RandInt(value + 1);
                first.NormalArmers.Add(key, randCount);
                second.NormalArmers.Add(key, value - randCount);
            }

            foreach (var(key, value) in EscapeArmers)
            {
                var randCount = Rander.RandInt(value + 1);
                first.EscapeArmers.Add(key, randCount);
                second.EscapeArmers.Add(key, value - randCount);
            }

            var randGold = Rander.RandInt(Golds + 1);

            first.Golds  = randGold;
            second.Golds = Golds - randGold;

            return(new[] { first, second });
        }
コード例 #9
0
        public bool Xunyuan(MsgInformationEx MsgDTO, object[] param)
        {
            var aimQQ = (long)param[0];

            if (aimQQ == MsgDTO.FromQQ)
            {
                MsgSender.PushMsg(MsgDTO, "你无法和自己寻缘!");
                return(false);
            }

            if (!XunYuanMgr.CheckGroup(MsgDTO.FromGroup))
            {
                MsgSender.PushMsg(MsgDTO, "此群正在进行一场寻缘,请稍候再试!");
                return(false);
            }

            if (!XunYuanMgr.CheckQQNum(MsgDTO.FromQQ))
            {
                MsgSender.PushMsg(MsgDTO, "你正在进行一场寻缘,请稍候再试!");
                return(false);
            }

            if (!XunYuanMgr.CheckQQNum(aimQQ))
            {
                MsgSender.PushMsg(MsgDTO, "对方正在进行一场寻缘,请稍候再试!");
                return(false);
            }

            var msg = $"{CodeApi.Code_At(aimQQ)} 你正被邀请参加一次寻缘,是否同意?";

            if (!WaiterSvc.WaitForConfirm(MsgDTO.FromGroup, aimQQ, msg, MsgDTO.BindAi))
            {
                MsgSender.PushMsg(MsgDTO, "操作取消!");
                return(false);
            }

            var Gamers = new[] { MsgDTO.FromQQ, aimQQ }.Select(p =>
            {
                var armerRecord = PersonArmerRecord.Get(p);
                var osPerson    = OSPerson_Doremi.GetPerson(p);
                var levelModel  = LevelSvc.GetByLevel(osPerson.Level);

                var battleArmers = Rander.RandSort(armerRecord.Armers.ToArray()).Take(10).ToDictionary(a => a.Key, a => a.Value);
                return(new XunYuanGamingModel()
                {
                    QQNum = p,
                    Armers = battleArmers,
                    EscapeArmers = armerRecord.EscapeArmers,
                    BasicHP = levelModel.HP,
                    HP = levelModel.HP + ArmerSvc.CountHP(battleArmers),
                    BasicAttack = levelModel.Atk,
                    Attack = levelModel.Atk + ArmerSvc.CountAtk(battleArmers)
                });
            }).ToArray();

            XunYuanMgr.StartGame(Gamers, MsgDTO.FromGroup, MsgDTO.BindAi);
            return(true);
        }
コード例 #10
0
        public XunyuanEngine(XunYuanGamingModel[] Gamers, long GroupNum, string BindAi)
        {
            this.Gamers   = Rander.RandSort(Gamers).ToList();
            this.GroupNum = GroupNum;
            this.BindAi   = BindAi;

            BasicHPTotal  = Gamers.Sum(g => g.BasicHP);
            BasicAtkTotal = Gamers.Sum(g => g.BasicAttack);
        }
コード例 #11
0
ファイル: PetAgainstEngine.cs プロジェクト: Dolany/DolanyAI
        private void JudgeFirst()
        {
            if (Rander.RandBool())
            {
                return;
            }

            SwitchPet();
        }
コード例 #12
0
ファイル: FortuneAI.cs プロジェクト: Dolany/DolanyAI
 private TarotCacheModel GetRandTarotFortune()
 {
     return(new TarotCacheModel()
     {
         CardName = ModelList.RandElement().Name,
         IsPos = Rander.RandBool(),
         SerialName = TarotSerialNames.RandElement()
     });
 }
コード例 #13
0
        public void StartAGame(long GroupNum, long FirstQQ, long SecondQQ, Func <long, long, string, Predicate <string>, string> WaitCallBack, string BindAi)
        {
            var ran       = Rander.RandInt(2);
            var SelfQQNum = ran == 0 ? FirstQQ : SecondQQ;
            var AimQQNum  = ran == 1 ? FirstQQ : SecondQQ;

            var engine = new ChessEngine(GroupNum, SelfQQNum, AimQQNum, WaitCallBack, BindAi);

            WorkingEngine.Add(engine);
            engine.GameStart();
        }
コード例 #14
0
    PlayerStat player;                // 플레이어 라이프, 돈

    public GameManager()
    {
        //-----------------------
        // 각 클래스 인스턴스화                                          // 싱글턴 패턴이 좋을거같은데 어설프게 썻다간 광역딜 들어올거같아서 놔둠
        //-----------------------
        QBurger    = new Burger();
        player     = new PlayerStat();
        customor   = new Customor();
        define     = new Define();
        gameRander = new Rander(QBurger, customor, player);
    }
コード例 #15
0
        private static void RandBless(RandomFortuneCache rf)
        {
            if (rf.FortuneValue >= 50 || Rander.RandInt(100) > 20)
            {
                return;
            }

            var item = FortuneItemList.RandElement();

            rf.BlessName  = item.Name;
            rf.BlessValue = item.Value;
        }
コード例 #16
0
ファイル: _MapJobs.Thread.cs プロジェクト: cyecp/Mapgen4Unity
        /**********************************************************************
         * Plates
         */
        static HashSet <int> pickRandomRegions(DualMesh mesh, int N, int seed)
        {
            var randInt    = Rander.makeRandInt(seed);
            var numRegions = mesh.numRegions;

            var chosen_r = new HashSet <int>();

            while (chosen_r.Count < N && chosen_r.Count < numRegions)
            {
                chosen_r.Add(randInt(numRegions));
            }
            return(chosen_r);
        }
コード例 #17
0
ファイル: AdvGameSvc.cs プロジェクト: Dolany/DolanyAI
        public void GameStart(long groupNum, long firstPlayer, long secondPlayer, int CaveNo, string BindAi)
        {
            var players = new[] { AdvPlayer.GetPlayer(firstPlayer), AdvPlayer.GetPlayer(secondPlayer) };

            players = Rander.RandSort(players);

            var engine = new AdvGameEngine(players, groupNum, CaveNo, BindAi);

            Engines.Add(engine);
            engine.GameStart();

            Engines.Remove(engine);
        }
コード例 #18
0
        private static DailySellItemModel[] CreateDailySellItems_Rare()
        {
            var honors   = AutofacSvc.Resolve <HonorSvc>().HonorList.Where(h => !h.IsLimit);
            var items    = honors.SelectMany(h => h.Items).Where(p => p.Price >= 500).ToArray();
            var randSort = Rander.RandSort(items).Take(5);

            return(randSort.Select(rs => new DailySellItemModel
            {
                Name = rs.Name,
                Price = rs.Price * 2,
                Attr = string.Join(",", rs.Attributes)
            }).ToArray());
        }
コード例 #19
0
        private void MonsterTurn(XunyuanMonsterModel monster)
        {
            var target = Gamers[Rander.RandInt(Gamers.Count)];

            target.HP = Math.Max(0, target.HP - monster.Atk);
            PushMsg($"{CodeApi.Code_At(target.QQNum)} 受到了 {monster.Name} 的 {monster.Atk}点攻击伤害!剩余 {target.HP}点生命");
            if (!target.IsDead)
            {
                return;
            }

            PushMsg($"{CodeApi.Code_At(target.QQNum)} 被移除了队伍!");
            Gamers.Remove(target);
        }
コード例 #20
0
ファイル: DiceAI.cs プロジェクト: Dolany/DolanyAI
        private static DiceResultModel ConsoleDice(DiceModel model)
        {
            var result = new DiceResultModel
            {
                Modify = model.Modify,
                Result = new List <int>()
            };

            for (var i = 0; i < model.Count; i++)
            {
                var value = Rander.RandInt(model.Size) + 1;
                result.Result.Add(value);
            }

            return(result);
        }
コード例 #21
0
ファイル: Loader.cs プロジェクト: cyecp/Mapgen4Unity
        public static List <Float[]> applyJitter(short[] points, Float dr, int seed)
        {
            var randFloat = Rander.makeRandFloat(seed);

            var tmp = new List <Float[]>();

            for (int i = 0; i < points.Length / 2; ++i)
            {
                var r  = dr * Math.Sqrt(Math.Abs(randFloat()));
                var a  = Math.PI * randFloat();
                var dx = r * Math.Cos(a);
                var dy = r * Math.Sin(a);
                tmp.Add(new Float[] { (Float)(points[i * 2] + dx), (Float)(points[i * 2 + 1] + dy) });
            }
            return(tmp);
        }
コード例 #22
0
ファイル: PetAI.cs プロジェクト: Dolany/DolanyAI
        public bool SetPetAttr(MsgInformationEx MsgDTO, object[] param)
        {
            var      pet       = PetRecord.Get(MsgDTO.FromQQ);
            var      needGolds = false;
            OSPerson osPerson  = null;

            if (!string.IsNullOrEmpty(pet.Attribute))
            {
                osPerson = OSPerson.GetPerson(MsgDTO.FromQQ);

                if (osPerson.Golds < 300)
                {
                    MsgSender.PushMsg(MsgDTO, $"金币余额不足!({osPerson.Golds.CurencyFormat()}/{300.CurencyFormat()})");
                    return(false);
                }

                if (!WaiterSvc.WaitForConfirm_Gold(MsgDTO, 300))
                {
                    MsgSender.PushMsg(MsgDTO, "操作取消");
                    return(false);
                }

                needGolds = true;
            }

            var randAttrs   = Rander.RandSort(PetExtent.AllAttributes.ToArray());
            var msg         = $"请选择宠物食性:\r\n{string.Join("\r\n", randAttrs.Select((p, idx) => $"{idx + 1}:{p}"))}";
            var selectedIdx = WaiterSvc.WaitForNum(MsgDTO.FromGroup, MsgDTO.FromQQ, msg, i => i > 0 && i <= randAttrs.Length, MsgDTO.BindAi);

            if (selectedIdx == -1)
            {
                MsgSender.PushMsg(MsgDTO, "操作取消");
                return(false);
            }

            pet.Attribute = randAttrs[selectedIdx - 1];
            pet.Update();

            if (needGolds)
            {
                osPerson.Golds -= 300;
                osPerson.Update();
            }

            MsgSender.PushMsg(MsgDTO, "设定成功!");
            return(true);
        }
コード例 #23
0
        private void FishItem(MsgInformationEx MsgDTO)
        {
            if (OSPersonBuff.CheckBuff(MsgDTO.FromQQ, "梅雨") && Rander.RandInt(100) < 30)
            {
                MsgSender.PushMsg(MsgDTO, "欸呀呀,捞瓶子失败了!(梅雨)", true);
                return;
            }

            var item      = HonorSvc.RandItem();
            var record    = ItemCollectionRecord.Get(MsgDTO.FromQQ);
            var honorName = HonorSvc.FindHonorName(item.Name);

            var count     = 1;
            var vipArmers = VipArmerRecord.Get(MsgDTO.FromQQ);

            if (vipArmers.CheckArmer("安妮的镜子"))
            {
                count = 2;
            }
            vipArmers.Armers.Remove(p => p.Name == "安妮的镜子");
            vipArmers.Update();

            DriftBottleAnalyzeRecord.Record(item.Name, count);

            var s   = record.ItemIncome(item.Name, count);
            var msg = "你捞到了 \r\n" +
                      $"{(string.IsNullOrEmpty(item.PicPath) ? string.Empty : $"{CodeApi.Code_Image_Relational(item.PicPath)}\r\n")}" +
                      $"{item.Name}{(count > 1 ? $"*{count}" : string.Empty)} \r\n" +
                      $"    {item.Description} \r\n" +
                      $"稀有率为 {HonorSvc.ItemRate(item)}%\r\n" +
                      $"售价为:{item.Price} 金币\r\n" +
                      $"特性:{(item.Attributes == null ? "无" : string.Join(",", item.Attributes))}\r\n" +
                      $"你总共拥有该物品 {record.HonorCollections[honorName].Items[item.Name]}个";

            if (!string.IsNullOrEmpty(s))
            {
                msg += $"\r\n{s}";
            }

            if (OSPersonBuff.CheckBuff(MsgDTO.FromQQ, "钻石尘") && Rander.RandInt(100) < 50)
            {
                OSPerson.GoldConsume(MsgDTO.FromQQ, 40);
                msg += "\r\n欸呀呀,你丢失了40金币(钻石尘)";
            }

            MsgSender.PushMsg(MsgDTO, msg, true);
        }
コード例 #24
0
        public void SetPositions(Vector3[] points)
        {
            var ii = new List <int>();

            BezierCurve.iiii(points, 0, ii);

            var rd = Rander.makeRandFloat(Random.Next());

            SetPositions(points, ii.ToArray(), new Color(rd(), rd(), rd(), rd()));

            //var render = gameObject.AddComponent<LineRenderer>();
            //render.positionCount = points.Length;
            //render.SetPositions(points);
            //render.startWidth = 0.5f;
            //render.endWidth = 0.5f;
            //render.loop = true;
        }
コード例 #25
0
        private string GetRandKind()
        {
            var rand    = Rander.RandInt(SumRate);
            var tempSum = 0;

            foreach (var(key, value) in KindDic)
            {
                if (tempSum + value > rand)
                {
                    return(key);
                }

                tempSum += value;
            }

            return(string.Empty);
        }
コード例 #26
0
    private void buildPermutationTable(int seed)
    {
        int i;

        for (i = 0; i < 256; i++)
        {
            p256[i] = (byte)i;
        }
        for (i = 0; i < 255; i++)
        {
            var f = Rander.randFloat(seed, i);
            //  JS 中 ~~符号 它被用作一个更快的替代 Math.floor()
            var r   = (byte)(i + Math.Floor(f * (256 - i)));
            var aux = p256[i];
            p256[i] = p256[r];
            p256[r] = aux;
        }
    }
コード例 #27
0
ファイル: CaveDataModel.cs プロジェクト: Dolany/DolanyAI
        private string RandCaveType()
        {
            var sum  = Rates.Sum(p => p.Value);
            var rand = Rander.RandInt(sum);
            var temp = 0;

            foreach (var(key, value) in Rates)
            {
                if (temp + value >= rand)
                {
                    return(key);
                }

                temp += value;
            }

            return(Rates.FirstOrDefault().Key);
        }
コード例 #28
0
        public IEnumerable <ExpeditionSceneModel> TodayExpedition()
        {
            var cache = GlobalVarRecord.Get("TodayExpedition");

            if (!string.IsNullOrEmpty(cache.Value))
            {
                var modelNames = JsonConvert.DeserializeObject <string[]>(cache.Value);
                return(Scenes.Where(s => modelNames.Contains(s.Name)).ToList());
            }

            var todayScenes = Rander.RandSort(Scenes.ToArray()).Take(3).ToList();

            cache.Value      = JsonConvert.SerializeObject(todayScenes.Select(s => s.Name).ToArray());
            cache.ExpiryTime = CommonUtil.UntilTommorow();
            cache.Update();

            return(todayScenes);
        }
コード例 #29
0
        private MajFortuneCache NewFortune(long QQNum)
        {
            var fortuneStar = Rander.RandInt(11);
            var position    = PosArray.RandElement();
            var kind        = GetRandKind();

            var(key, value) = CharactorsDic.RandElement();

            return(new MajFortuneCache
            {
                CharactorName = key,
                CharactorPath = value,
                FortuneStar = fortuneStar,
                Kind = kind,
                Position = position,
                QQNum = QQNum
            });
        }
コード例 #30
0
        public static DailySellItemRareRecord GetTomorrow()
        {
            var dataStr = DateTime.Now.AddDays(1).ToString("yyyyMMdd");
            var record  = MongoService <DailySellItemRareRecord> .GetOnly(p => p.DateStr == dataStr);

            if (record != null)
            {
                return(record);
            }

            record = new DailySellItemRareRecord()
            {
                DateStr = dataStr,
                Hour    = 6 + Rander.RandInt(16),
                Items   = CreateDailySellItems_Rare()
            };
            MongoService <DailySellItemRareRecord> .Insert(record);

            return(record);
        }