Created
February 3, 2018 23:35
-
-
Save juner/b1a26b1438e9b10f87d2b5d023a870bc to your computer and use it in GitHub Desktop.
じゃんけんげーむ
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
using System.Collections.Generic; | |
namespace じゃんけんげーむ | |
{ | |
/// <summary> | |
/// じゃんけんの手 | |
/// </summary> | |
enum じゃんけんの手 | |
{ | |
ぐー, | |
ちょき, | |
ぱー, | |
} | |
/// <summary> | |
/// 勝負の結果 | |
/// </summary> | |
enum 勝負の結果 | |
{ | |
勝ち, | |
引き分け, | |
負け, | |
} | |
class Program | |
{ | |
static void Main(string[] args) | |
{ | |
Console.WriteLine(nameof(じゃんけんげーむ)+"!"); | |
var random = new Random(); | |
var 勝ち数 = 0; | |
var 負け数 = 0; | |
var 引き分け数 = 0; | |
while (true) | |
{ | |
Console.WriteLine("次の手を選択してください。: (1=" + nameof(じゃんけんの手.ぐー) + " 2=" + nameof(じゃんけんの手.ちょき) + " 3=" + nameof(じゃんけんの手.ぱー) + " )ESCで終了 "); | |
var te = Console.ReadKey(); | |
Console.WriteLine(); | |
if (te.Key == ConsoleKey.Escape) | |
{ | |
break; | |
} | |
var あなたの手 = じゃんけんの手に(te.Key); | |
if (あなたの手 == null) | |
{ | |
Console.WriteLine($"'{te.KeyChar}'は 不正な手です。"); | |
continue; | |
} | |
Console.WriteLine($"{nameof(あなたの手)}は{あなたの手}です。"); | |
var コンピュータの手 = じゃんけんの手に(random.Next(1, 3)); | |
var 勝負の結果 = あなたの手.勝負(コンピュータの手); | |
Console.WriteLine($"勝負します。 {nameof(あなたの手)}:{あなたの手} {nameof(コンピュータの手)}:{コンピュータの手}"); | |
Console.WriteLine($"{nameof(勝負の結果)}:{勝負の結果}"); | |
switch (勝負の結果) | |
{ | |
case じゃんけんげーむ.勝負の結果.勝ち: | |
勝ち数++; | |
break; | |
case じゃんけんげーむ.勝負の結果.引き分け: | |
引き分け数++; | |
break; | |
case じゃんけんげーむ.勝負の結果.負け: | |
負け数++; | |
break; | |
} | |
Console.WriteLine($"{nameof(勝ち数)}:{勝ち数} {nameof(負け数)}:{負け数} {nameof(引き分け数)}:{引き分け数}"); | |
} | |
Console.WriteLine($"{nameof(勝ち数)}:{勝ち数} {nameof(負け数)}:{負け数} {nameof(引き分け数)}:{引き分け数}"); | |
Console.WriteLine("何かキーを入力して終了します。"); | |
Console.ReadKey(); | |
} | |
/// <summary> | |
/// 変換ルール | |
/// </summary> | |
static Dictionary<ConsoleKey, じゃんけんの手> ConsoleKeyからじゃんけんの手にする辞書 = new Dictionary<ConsoleKey, じゃんけんの手> | |
{ | |
{ConsoleKey.D1,じゃんけんの手.ぐー }, | |
{ConsoleKey.D2,じゃんけんの手.ちょき }, | |
{ConsoleKey.D3,じゃんけんの手.ぱー}, | |
}; | |
/// <summary> | |
/// じゃんけんの手に変換する | |
/// </summary> | |
/// <param name="キー"></param> | |
/// <returns></returns> | |
static じゃんけんの手? じゃんけんの手に(ConsoleKey キー) | |
=> ConsoleKeyからじゃんけんの手にする辞書.TryGetValue(キー, out var 手) | |
? 手 | |
: null as じゃんけんの手?; | |
/// <summary> | |
/// 変換ルール | |
/// </summary> | |
static Dictionary<int, じゃんけんの手> intからじゃんけんの手にする辞書 = new Dictionary<int, じゃんけんの手> | |
{ | |
{1,じゃんけんの手.ぐー }, | |
{2,じゃんけんの手.ちょき }, | |
{3,じゃんけんの手.ぱー }, | |
}; | |
/// <summary> | |
/// じゃんけんの手に変換する | |
/// </summary> | |
/// <param name="キー"></param> | |
/// <returns></returns> | |
static じゃんけんの手? じゃんけんの手に(int キー) | |
=> intからじゃんけんの手にする辞書.TryGetValue(キー, out var 手) | |
? 手 | |
: null as じゃんけんの手?; | |
} | |
/// <summary> | |
/// じゃんけんの手の拡張 | |
/// </summary> | |
internal static class じゃんけんの手Extension | |
{ | |
/// <summary> | |
/// じゃんけんの勝負のルール | |
/// </summary> | |
static Dictionary<じゃんけんの手, Dictionary<じゃんけんの手, 勝負の結果>> 勝負の結果の辞書 = new Dictionary<じゃんけんの手, Dictionary<じゃんけんの手, 勝負の結果>> | |
{ | |
{じゃんけんの手.ぐー,new Dictionary<じゃんけんの手, 勝負の結果>{ | |
{じゃんけんの手.ぐー, 勝負の結果.引き分け }, | |
{じゃんけんの手.ちょき, 勝負の結果.勝ち }, | |
{じゃんけんの手.ぱー, 勝負の結果.負け }, | |
} }, | |
{じゃんけんの手.ちょき,new Dictionary<じゃんけんの手, 勝負の結果>{ | |
{じゃんけんの手.ぐー, 勝負の結果.負け }, | |
{じゃんけんの手.ちょき, 勝負の結果.引き分け }, | |
{じゃんけんの手.ぱー, 勝負の結果.勝ち }, | |
} }, | |
{じゃんけんの手.ぱー,new Dictionary<じゃんけんの手, 勝負の結果>{ | |
{じゃんけんの手.ぐー, 勝負の結果.勝ち }, | |
{じゃんけんの手.ちょき, 勝負の結果.負け }, | |
{じゃんけんの手.ぱー, 勝負の結果.引き分け }, | |
} }, | |
}; | |
/// <summary> | |
/// じゃんけんの勝負をする | |
/// </summary> | |
/// <param name="保持者"></param> | |
/// <param name="挑戦者"></param> | |
/// <returns></returns> | |
public static 勝負の結果? 勝負(this じゃんけんの手? 保持者, じゃんけんの手? 挑戦者) | |
=> 保持者 is じゃんけんの手 _保持者 | |
&& 挑戦者 is じゃんけんの手 _挑戦者 | |
&& 勝負の結果の辞書.TryGetValue(_保持者, out var 勝負の辞書) | |
&& 勝負の辞書.TryGetValue(_挑戦者, out var 勝負の結果) | |
? 勝負の結果 | |
: null as 勝負の結果?; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment