Skip to content

Instantly share code, notes, and snippets.

@juner
Created February 3, 2018 23:35
Show Gist options
  • Save juner/b1a26b1438e9b10f87d2b5d023a870bc to your computer and use it in GitHub Desktop.
Save juner/b1a26b1438e9b10f87d2b5d023a870bc to your computer and use it in GitHub Desktop.
じゃんけんげーむ
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