using System;
namespace Janken
{
// 結果イベント用のデリゲート
public delegate void ResultEvent(object sender, Character chara);
/// <summary>
/// じゃんけんパターン
/// </summary>
enum JankenPattern
{
pa = 1, // パー布
choki, // チョキ剪刀
goo // グー石头
}
/// <summary>
/// じゃんけんゲーム
/// </summary>
class Program
{
public static event ResultEvent resultEvent; // 結果表示用イベント
/// <summary>
/// メイン処理
/// </summary>
/// <param name="args"></param>
[STAThread]
static void Main(string[] args)
{
Character char1; // キャラクター1
Character char2; // キャラクター2
int cnt = 1; // カウンタ
resultEvent += new ResultEvent(result);
// 起動メッセージを表示
Console.WriteLine("キャラクター設定");
// キャラクターのインスタンス化
char1 = new Character("キャラクター1");
// 名前の設定
Console.Write("[キャラクター1]の名前を入力してください > ");
char1.NameValue = Console.ReadLine();
// じゃんけんパターンの設定
char1.J_patternValue = setJPattern(char1.NameValue);
// キャラクターのインスタンス化
char2 = new Character("キャラクター2");
// 名前の設定
Console.Write("[キャラクター2]の名前を入力してください > ");
char2.NameValue = Console.ReadLine();
// じゃんけんパターンの設定
char2.J_patternValue = setJPattern(char2.NameValue);
// じゃんけん開始メッセージを表示する
Console.WriteLine();
Console.WriteLine("じゃけん開始!");
while(true)
{
int result = 0;
result = int.Parse(char1.J_patternValue) - int.Parse(char2.J_patternValue); //じゃんけん結果
if (result == -1 || result == 2)
{
char1.LossCntValue += 1;
char2.WinCntValue += 1;
}
else if(result == 0)
{
char1.DrawCntValue += 1;
char2.DrawCntValue += 1;
}
else
{
char1.WinCntValue += 1;
char2.LossCntValue += 1;
}
Console.WriteLine("{0}回戦 [{1}]{2} : [{3}]{4}", cnt, char1.NameValue, char1.Get_jPattern(), char2.NameValue, char2.Get_jPattern());
cnt++;
if (char1.WinCntValue == 3)
{
resultEvent(null,char1);
break;
}
if(char2.WinCntValue == 3)
{
resultEvent(null, char2);
break;
}
}
}
/// <summary>
/// じゃんけんパターンの設定
/// </summary>
/// <returns></returns>
private static string setJPattern(string name)
{
string pattern = ""; // パターン値格納用
while (!chackJPattern(pattern))
{
Console.Write("[{0}]のじゃんけんパターンを入力してください (1:パーが多い, 2:チョキが多い, 3:グーが多い)> ", name);
pattern = Console.ReadLine();
}
return pattern;
}
/// <summary>
/// じゃんけんパターンの入力値をチェック
/// </summary>
/// <param name="j_pattern"></param>
/// <returns>true:正常、false:異常</returns>
private static bool chackJPattern(string j_pattern)
{
// 入力値が1~3の場合入力OK
if (j_pattern.Equals("1") || j_pattern.Equals("2") ||
j_pattern.Equals("3"))
{
return true;
}
else
{
return false;
}
}
/// <summary>
/// じゃんけんゲームの結果を表示
/// </summary>
/// <param name="chara"></param>
public static void result(object o, Character chara)
{
Console.WriteLine("[{0}]が{1}勝{2}敗{3}分けで勝ちました。", chara.NameValue, chara.WinCntValue,
chara.LossCntValue, chara.DrawCntValue);
}
}
/// <summary>
/// キャラクタークラス
/// キャラクター情報を保持する
/// </summary>
public class Character
{
/// <summary>
/// コンストラクタ
/// 名前の初期化を行う
/// </summary>
/// <param name="initName"></param>
private string initname;
public Character(string initName)
{
this.initname = initName;
}
// 名前の設定、取得
public string NameValue { get; set; } = "";
// じゃんけんパターンの設定、取得
private int j_patternvalue;
public string J_patternValue
{
get
{
//乱数取得
Random rnd = new System.Random();
int rndresult = rnd.Next(1, 10);
switch (j_patternvalue)
{
case (int)JankenPattern.pa:
if (1 <= rndresult && rndresult <= 5)
{
j_patternvalue = (int)JankenPattern.pa;
}
else if (6 <= rndresult && rndresult <= 8)
{
j_patternvalue = (int)JankenPattern.choki;
}
else if (9 <= rndresult && rndresult <= 10)
{
j_patternvalue = (int)JankenPattern.goo;
}
return j_patternvalue.ToString();
case (int)JankenPattern.choki:
if (1 <= rndresult && rndresult <= 5)
{
j_patternvalue = (int)JankenPattern.choki;
}
else if (6 <= rndresult && rndresult <= 8)
{
j_patternvalue = (int)JankenPattern.goo;
}
else if (9 <= rndresult && rndresult <= 10)
{
j_patternvalue = (int)JankenPattern.pa;
}
return j_patternvalue.ToString();
case (int)JankenPattern.goo:
if (1 <= rndresult && rndresult <= 5)
{
j_patternvalue = (int)JankenPattern.goo;
}
else if (6 <= rndresult && rndresult <= 8)
{
j_patternvalue = (int)JankenPattern.pa;
}
else if (9 <= rndresult && rndresult <= 10)
{
j_patternvalue = (int)JankenPattern.choki;
}
return j_patternvalue.ToString();
default:
return j_patternvalue.ToString();
}
}
set
{
j_patternvalue = int.Parse(value);
}
}
// 勝つ回数の設定、取得
public int WinCntValue { get; set; }
// 負け回数の設定、取得
public int LossCntValue { get; set; }
// 引き分け回数の設定、取得
public int DrawCntValue { set; get; }
/// <summary>
/// じゃんけんの手を取得する
/// </summary>
/// <returns>じゃんけんの手</returns>
public string Get_jPattern()
{
if(j_patternvalue == (int)JankenPattern.pa)
{
return "パー";
}
else if(j_patternvalue == (int)JankenPattern.choki)
{
return "チョキ";
}
else
{
return "グー";
}
}
}
}
Random rnd = new System.Random(); 这一行,放在 public string J_patternValue 的上面