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 }
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(); }
//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; } }
public void GiveWeapon(IPrayer prayer) { ((Atom)prayer).Map.Insert(Weapon.RandomWeapon(prayer.CurrentLevel.Previous())); }
public void GiveVeryGoodMod(IPrayer prayer) { prayer.RegisterTemporaryMod(new DivineModifier<int>(Dice.Throws(new Dice(6)), TemporaryModifier.ModFor.CA, 4)); }
public void GiveSomething(IPrayer prayer) { Item.GenerateRandom(prayer.CurrentLevel); }
public void GiveVeryBadMod(IPrayer prayer) { prayer.RegisterTemporaryMod(new DivineModifier <int>(Dice.Throws(new Dice(4), 2), TemporaryModifier.ModFor.CA, -15)); }
public void GiveVeryGoodMod(IPrayer prayer) { prayer.RegisterTemporaryMod(new DivineModifier <int>(Dice.Throws(new Dice(6)), TemporaryModifier.ModFor.CA, 4)); }
public PrayResult HearPray(IPrayer prayer) { currentPrayResult = internalPray(prayer); return(currentPrayResult); }
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; } } }
//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; } }
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 }
public PrayResult HearPray(IPrayer prayer) { currentPrayResult = internalPray(prayer); return currentPrayResult; }
public void GiveVeryBadMod(IPrayer prayer) { prayer.RegisterTemporaryMod(new DivineModifier<int>(Dice.Throws(new Dice(4), 2), TemporaryModifier.ModFor.CA, -15)); }
/// <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); }