/// <summary>Unicode表における一つ前のcodeを返す</summary> /// <param name="hand">対象の手</param> /// <returns>前の手</returns> public Hands.Unicode Previous(Hands.Unicode hand) { System.Collections.Generic.IEnumerable <Hands.Unicode> hands = Enum.GetValues(typeof(Hands.Unicode)).Cast <Hands.Unicode>(); if (hand == Enum.GetValues(typeof(Hands.Unicode)).Cast <Hands.Unicode>().First()) { return(hands.Last()); } return(hands.Where(e => (int)e < (int)hand).OrderBy(e => e).Last()); }
public void Play() { this.writer.Start(Message.Instance.Start()); Hands.Unicode player = HandMaker.Instance.Random(); Hands.Unicode npc = HandMaker.Instance.Random(); this.writer.Hand(Message.Instance.Hand(player, npc)); Rule.Result result = Rule.Instance.Judge(player, npc); this.writer.Result(Message.Instance.Result(result)); }
public void Judge_vs3_ReturnMessage(Hands.Unicode p1, Hands.Unicode p2, Hands.Unicode p3, string expected) { var participants = new List <Hands.Unicode>() { p1, p2, p3 }; var actual = Janken.Message.Instance.Hand(participants); Assert.AreEqual(expected, actual); }
/// <summary>Unicode表における一つ次のcodeを返す</summary> /// <param name="hand">対象の手</param> /// <returns>次の手</returns> public Hands.Unicode Next(Hands.Unicode hand) { // https://stackoverflow.com/questions/642542/how-to-get-next-or-previous-enum-value-in-c-sharp // https://stackoverflow.com/questions/11222256/string-does-not-contain-a-definition-for-cast System.Collections.Generic.IEnumerable <Hands.Unicode> hands = Enum.GetValues(typeof(Hands.Unicode)).Cast <Hands.Unicode>(); if (hand == Enum.GetValues(typeof(Hands.Unicode)).Cast <Hands.Unicode>().Last()) { return(hands.First()); } return(hands.Where(e => (int)e > (int)hand).OrderBy(e => e).First()); }
public void Judge_vs3_ReturnResult(Hands.Unicode p1, Hands.Unicode p2, Hands.Unicode p3, Rule.Result r1, Rule.Result r2, Rule.Result r3) { var input = new List <Hands.Unicode>() { p1, p2, p3 }; var actual = Rule.Instance.Judge(input); var expected = new List <Rule.Result>() { r1, r2, r3 }; Assert.That(expected, Is.EqualTo(actual)); }
public void Judge_vs2_ReturnResult(Hands.Unicode player, Hands.Unicode npc, Rule.Result playerResult, Rule.Result npcResult) { var input = new List <Hands.Unicode>() { player, npc }; var actual = Rule.Instance.Judge(input); var expected = new List <Rule.Result>() { playerResult, npcResult }; Assert.That(expected, Is.EqualTo(actual)); }
/// <summary>ゲームの勝敗判定を返す(Player vs NPC)</summary> /// <param name="player">プレーヤの手</param> /// <param name="npc">NPCの手</param> /// <returns>プレーヤの勝敗結果</returns> public Rule.Result Judge(Hands.Unicode player, Hands.Unicode npc) { if (player == npc) { return(Rule.Result.Draw); } else if (player == Hands.Instance.Winable(npc)) { return(Rule.Result.Win); } else { return(Rule.Result.Lose); } }
} // Start Rock–paper–scissors /// <summary>手を返す</summary> /// <param name="player">Playerの手</param> /// <param name="npc">NPCの手</param> /// <returns>手</returns> public string Hand(Hands.Unicode player, Hands.Unicode npc) { return("You" + Convert.ToChar((int)player) + " " + Convert.ToChar((int)npc) + "NPC"); }
public void Judge_vsNPC_ReturnResult(Hands.Unicode player, Hands.Unicode npc, Rule.Result expected) { var actual = Rule.Instance.Judge(player, npc); Assert.AreEqual(expected, actual); }
/// <summary>指定した手と引き分ける手を返す</summary> /// <param name="hand">対象の手</param> /// <returns>引き分ける手</returns> public Hands.Unicode Drawable(Hands.Unicode hand) { return(hand); }
/// <summary>指定した手に負ける手を返す</summary> /// <param name="hand">対象の手</param> /// <returns>勝てる手</returns> public Hands.Unicode Losable(Hands.Unicode hand) { return(Previous(hand)); }
/// <summary>指定した手に勝てる手を返す</summary> /// <param name="hand">対象の手</param> /// <returns>勝てる手</returns> public Hands.Unicode Winable(Hands.Unicode hand) { return(Next(hand)); }
public void Hand_vsNPC_ReturnMessage(Hands.Unicode player, Hands.Unicode npc, string expected) { var actual = Janken.Message.Instance.Hand(player, npc); Assert.AreEqual(expected, actual); }