Ejemplo n.º 1
0
        private PrayResult internalPray(IPrayer prayer)
        {
            // TODO: random value of PrayResul according to level and dice throw
#if DEBUG_ALWAY_BAD
            return(PrayResult.Bad);
#elif DEBUG_ALWAY_GOOD
            return(PrayResult.Good);
#elif DEBUG_ALWAY_VERY_GOOD
            return(PrayResult.VeryGood);
#elif DEBUG_ALWAY_NONE
            return(PrayResult.None);
#else
            var thrs       = percentageOfSuccessByLevel[(int)prayer.CurrentLevel].ToList();
            var diceThrow  = Dice.Throws(new Dice(100));
            var prayResult = thrs.IndexOf(thrs.Last(t => t < diceThrow));

#if SHOW_DICE_RESULT
            ((Atom)prayer).NotifyListeners(String.Format("{0}: {1} in [{2};{3}]",
                                                         (PrayResult)prayResult,
                                                         diceThrow,
                                                         thrs[prayResult],
                                                         thrs[Math.Min(prayResult + 1, thrs.Count - 1)]));
#endif
            return((PrayResult)prayResult);
#endif
        }
Ejemplo n.º 2
0
        void SendEmail(string address)
        {
            Debug.WriteLine($"Sending email to {address}");
            var emailTask = CrossMessaging.Current.EmailMessenger;

            if (emailTask.CanSendEmailBodyAsHtml)
            {
                // get a pointer to prayer page so we can retrieve the date details, and the html prayer
                IPrayer iPrayer = FreshMvvm.FreshIOC.Container.Resolve <IPrayer>();

                string subject = iPrayer.PrayerHeading.Replace(" ;", ";").Replace(PrayerSeason._singleLE, "; ");

                // Construct HTML email (iOS and Android only) to single receiver without attachments, CC, or BCC.
                var email = new EmailMessageBuilder()
                            .To(address)
                            .Subject(subject)
                            //.Body(iPrayer.PrayerHtml)
                            .BodyAsHtml(iPrayer.PrayerHtml)
                            .Build();
                emailTask.SendEmail(email);
            }
            Debug.WriteLine($"Sent    email to {address}");

            EmailAddress = "";
            CoreMethods.PopPageModel();
        }
Ejemplo n.º 3
0
        //public abstract PrayResult HearPray();

        public void EffectOfPray(IPrayer prayer)
        {
            switch (currentPrayResult)
            {
            case PrayResult.Bad:
                chooseOneFrom(badReactions[prayer.CurrentLevel]).Invoke(this, new object[] { prayer });
                break;

            case PrayResult.Good:
                chooseOneFrom(goodReactions[prayer.CurrentLevel]).Invoke(this, new object[] { prayer });
                break;

            case PrayResult.VeryGood:
                chooseOneFrom(veryGoodReactions[prayer.CurrentLevel]).Invoke(this, new object[] { prayer });
                break;

            case PrayResult.None:
                break;
            }
        }
Ejemplo n.º 4
0
 public void GiveWeapon(IPrayer prayer)
 {
     ((Atom)prayer).Map.Insert(Weapon.RandomWeapon(prayer.CurrentLevel.Previous()));
 }
Ejemplo n.º 5
0
 public void GiveVeryGoodMod(IPrayer prayer)
 {
     prayer.RegisterTemporaryMod(new DivineModifier<int>(Dice.Throws(new Dice(6)), TemporaryModifier.ModFor.CA, 4));
 }
Ejemplo n.º 6
0
 public void GiveSomething(IPrayer prayer)
 {
     Item.GenerateRandom(prayer.CurrentLevel);
 }
Ejemplo n.º 7
0
 public void GiveVeryBadMod(IPrayer prayer)
 {
     prayer.RegisterTemporaryMod(new DivineModifier <int>(Dice.Throws(new Dice(4), 2), TemporaryModifier.ModFor.CA, -15));
 }
Ejemplo n.º 8
0
 public void GiveWeapon(IPrayer prayer)
 {
     ((Atom)prayer).Map.Insert(Weapon.RandomWeapon(prayer.CurrentLevel.Previous()));
 }
Ejemplo n.º 9
0
 public void GiveVeryGoodMod(IPrayer prayer)
 {
     prayer.RegisterTemporaryMod(new DivineModifier <int>(Dice.Throws(new Dice(6)), TemporaryModifier.ModFor.CA, 4));
 }
Ejemplo n.º 10
0
 public PrayResult HearPray(IPrayer prayer)
 {
     currentPrayResult = internalPray(prayer);
     return(currentPrayResult);
 }
Ejemplo n.º 11
0
        public void action()
        {
            /*宣言*/
            int             mode;
            int             opponent;
            int             digit;
            string          log     = "";
            bool            logFlag = false;
            IPrayer         prayer1 = null;
            IPrayer         prayer2 = null;
            NumelonFunction nf      = new NumelonFunction();
            // Stopwatchクラス生成
            var sw = new System.Diagnostics.Stopwatch();

            Console.WriteLine("Numelon Game");

            /*桁数設定*/
            Console.WriteLine("ゲームの桁数を入力してください(2 ~ 9)");
            digit = nf.scanNum(2, 9);

            /*モード設定*/
            Console.WriteLine("モードを選んでください(Human : 1 , CPU : 2 , 終了 : 0)");
            mode = nf.scanNum(0, 2);
            switch (mode)
            {
            case 0:
                Environment.Exit(0);
                break;

            case 1:
                prayer1 = new Human(digit);
                break;

            case 2:
                prayer1 = new CPU1(digit, "CPU1");
                break;
            }

            /*対戦相手の設定*/
            Console.WriteLine("対戦相手を選んでください(Human : 1 , CPU : 2 , 人工無能 : 3 , 終了 : 0)");
            opponent = nf.scanNum(0, 3);
            switch (opponent)
            {
            case 0:
                Environment.Exit(0);
                break;

            case 1:
                prayer2 = new Human(digit);
                break;

            case 2:
                if (mode == 2)
                {
                    prayer2 = new CPU1(digit, "CPU2");
                }
                else
                {
                    prayer2 = new CPU1(digit, "CPU");
                }
                break;

            case 3:
                prayer2 = new ArtificialIncompetence(digit, "人工無能");
                break;
            }

            /*ゲーム開始*/
            // 計測開始
            sw.Start();
            try
            {
                log = nf.GameStart(digit, prayer1, prayer2);
            }
            //引数にnullがあったとき
            catch (ArgumentNullException)
            {
                Console.WriteLine("エラーが発生しました プログラムを終了します");
            }
            sw.Stop();

            /*ログファイルの処理*/
            Console.WriteLine("ログを出力しますか? yes : 1 no : 0");
            switch (nf.scanNum(0, 1))
            {
            case 0:
                logFlag = false;
                break;

            case 1:
                logFlag = true;
                break;
            }
            if (logFlag)
            {
                DateTime dt   = DateTime.Now;
                string   head = dt.ToString("yyyy年MM月dd日 HH時mm分ss秒") +
                                "  処理時間 " + $" {sw.ElapsedMilliseconds}ミリ秒\n";
                head += "+++++++++++++++++++++++++++++++++++++++++++++++++++++\n";
                log   = head + log;

                Console.WriteLine("ファイルに出力しますか? ");
                Console.WriteLine("ファイルに出力する : 1 , コンソール上に出力する : 2 , 出力しない : 0");
                switch (nf.scanNum(0, 2))
                {
                case 0:
                    logFlag = false;
                    break;

                case 1:
                    nf.logWriteToFile(log);
                    break;

                case 2:
                    Console.WriteLine(log);
                    break;
                }
            }
        }
Ejemplo n.º 12
0
        //public abstract PrayResult HearPray();

        public void EffectOfPray(IPrayer prayer)
        {
            switch(currentPrayResult)
            {
                case PrayResult.Bad:
                    chooseOneFrom(badReactions[prayer.CurrentLevel]).Invoke(this, new object[] { prayer });
                    break;
                case PrayResult.Good:
                    chooseOneFrom(goodReactions[prayer.CurrentLevel]).Invoke(this, new object[] { prayer });
                    break;
                case PrayResult.VeryGood:
                    chooseOneFrom(veryGoodReactions[prayer.CurrentLevel]).Invoke(this, new object[] { prayer });
                    break;
                case PrayResult.None:
                    break;
            }
        }
Ejemplo n.º 13
0
        private PrayResult internalPray(IPrayer prayer)
        {
            // TODO: random value of PrayResul according to level and dice throw
#if DEBUG_ALWAY_BAD
            return PrayResult.Bad;
#elif DEBUG_ALWAY_GOOD
            return PrayResult.Good;
#elif DEBUG_ALWAY_VERY_GOOD
            return PrayResult.VeryGood;
#elif DEBUG_ALWAY_NONE
            return PrayResult.None;
#else
            var thrs = percentageOfSuccessByLevel[(int)prayer.CurrentLevel].ToList();
            var diceThrow = Dice.Throws(new Dice(100));
            var prayResult = thrs.IndexOf(thrs.Last(t => t < diceThrow));

#if SHOW_DICE_RESULT
            ((Atom)prayer).NotifyListeners(String.Format("{0}: {1} in [{2};{3}]",
                (PrayResult)prayResult,
                diceThrow, 
                thrs[prayResult], 
                thrs[Math.Min(prayResult+1, thrs.Count - 1)]));
#endif
            return (PrayResult)prayResult;
#endif
        }
Ejemplo n.º 14
0
 public PrayResult HearPray(IPrayer prayer)
 {
     currentPrayResult = internalPray(prayer);
     return currentPrayResult;
 }
Ejemplo n.º 15
0
 public void GiveVeryBadMod(IPrayer prayer)
 {
     prayer.RegisterTemporaryMod(new DivineModifier<int>(Dice.Throws(new Dice(4), 2), TemporaryModifier.ModFor.CA, -15));
 }
Ejemplo n.º 16
0
 public void GiveSomething(IPrayer prayer)
 {
     Item.GenerateRandom(prayer.CurrentLevel);
 }
Ejemplo n.º 17
0
        /// <summary>
        /// ゲーム処理
        /// </summary>
        /// <param name="digit"></param>
        /// <param name="prayer1"></param>
        /// <param name="prayer2"></param>
        /// <returns></returns>
        public string GameStart(int digit, IPrayer prayer1, IPrayer prayer2)
        {
            /*エラーチェック*/
            if (prayer1 == null || prayer2 == null)
            {
                throw new ArgumentNullException();
            }

            /*宣言*/
            int times = 0;

            int[][] eatBite = new int[2][]
            {
                new[] { 0, 0 },
                new[] { 0, 0 }
            };
            int[]  call   = new int[digit];
            string winner = "";
            string log    = "";

            /*ゲーム開始前処理*/
            prayer1.Start();
            prayer2.Start();

            Console.WriteLine("Game Start!!");

            //各prayer の答えを含むため ゲーム開始前処理後に記述
            log += prayer1.getName() + ": " + ToString(prayer1.getAns()) + "  " +
                   prayer2.getName() + " : " + ToString(prayer2.getAns()) + "\n";

            /*どちらかがゲームに勝利するまでループ*/
            while (true)
            {
                times++;
                /*Player1*/
                prayer1.Call(eatBite[0]).CopyTo(call, 0);
                prayer2.Div(call).CopyTo(eatBite[0], 0);
                Console.WriteLine(prayer1.getName() + " : " + ToString(call));
                Console.WriteLine(prayer1.getName() + " : " + ToString(eatBite[0]));
                log += "(" + prayer1.getName() + ")の入力値 " + ToString(call) + "  " +
                       "判定 " + ToString(eatBite[0]) + "  ";

                /*勝利したとき*/
                if (eatBite[0][0] == digit)
                {
                    winner = prayer1.getName();
                    log   += "\n";
                    break;
                }

                /*Player2*/
                prayer2.Call(eatBite[1]).CopyTo(call, 0);
                prayer1.Div(call).CopyTo(eatBite[1], 0);
                Console.WriteLine(prayer2.getName() + " : " + ToString(call));
                Console.WriteLine(prayer2.getName() + " : " + ToString(eatBite[1]));
                log += "(" + prayer2.getName() + ")の入力値 " + ToString(call) + "  " +
                       "判定 " + ToString(eatBite[1]) + "\n";
                /*勝利したとき*/
                if (eatBite[1][0] == digit)
                {
                    winner = prayer2.getName();
                    break;
                }
            }

            Console.WriteLine("*************************************");
            Console.WriteLine("winner is " + winner);
            log += "++++++++++++++++++++++++++++++++++++++++++++++\n";
            log += winner + "の勝利  ターン数" + times + "\n";

            return(log);
        }