cscの作法 その433

# 概要
cscの作法、調べてみた。
ブラックジャック、やってみた。

# 参考にしたページ。

https://github.com/iamkaito/BlackJack/tree/master


# サンプルコード

```


using System;
using System.Text;
using System.IO;
using System.Collections;
using System.Collections.Generic;

namespace BlackJack
{
	class returnValue {
		public static string getMark(int i) {
			switch (i)
			{
			case 13:
				return "K";
			case 12:
				return "Q";
			case 11:
				return "J";
			case 1:
				return "A";
			default:
				return i.ToString();
			}
		}
		public static int getValue(string s) {
			try
			{
				switch (s)
				{
				case "K":
					return 10;
				case "Q":
					return 10;
				case "J":
					return 10;
				case "10":
					return 10;
				case "9":
					return 9;
				case "8":
					return 8;
				case "7":
					return 7;
				case "6":
					return 6;
				case "5":
					return 5;
				case "4":
					return 4;
				case "3":
					return 3;
				case "2":
					return 2;
				case "A":
					return 1;
				default:
					Console.WriteLine("【エラー発生】" + s + "の値取得に失敗(swichcase文)");
					return 0;
				}
			}
			catch (Exception e)
			{
				Console.WriteLine("【エラー発生】" + s + "の値の取得に失敗しました。:" + e.Message);
				return 0;
			}
		}
	}
	class User {
		protected string[] cardsAry = new string[10];
		protected int bust = 0;
		protected Random rnd;
		protected int cardNum = 0;
		protected string hyouji;
		public virtual void addCard() {
		}
		public virtual void ShowCards() {
		}
		public User() {
			rnd = new Random();
			cardsAry[0] = returnValue.getMark(rnd.Next(13) + 1);
			cardsAry[1] = returnValue.getMark(rnd.Next(13) + 1);
			cardNum = 2;
		}
		public int Bust {
			get {
				return this.bust;
			}
		}
		public int TotalValue() {
			int total = 0;
			for (int i = 0; i < cardNum; i++)
			{
				total += returnValue.getValue(cardsAry[i]);
			}
			return total;
		}
		public int TotalValueAas10() {
			int aNum = 0;
			int total = 0;
			for (int i = 0; i < cardNum; i++)
			{
				total += returnValue.getValue(cardsAry[i]);
				if (cardsAry[i] == "A")
				{
					aNum += 1;
				}
			}
			for (int i = 0; i < aNum; i++)
			{
				if ((total + 10) <= 21)
				{
					total += 10;
				}
			}
			return total;
		}
	}
	class Dealer: User {
		public override void addCard() {
			while (this.TotalValueAas10() < 17)
			{
				cardsAry[cardNum] = returnValue.getMark(rnd.Next(13) + 1);
				cardNum += 1;
				if (this.TotalValue() > 21)
				{
					bust = 1;
				}
			}
		}
		public override void ShowCards() {
			hyouji = "ﾃﾞｨｰﾗｰ：?";
			for (int i = 1; i < cardNum; i++)
			{
				hyouji += "_" + cardsAry[i];
			}
			Console.WriteLine(hyouji);
		}
		public void ShowAllCards() {
			hyouji = "ﾃﾞｨｰﾗｰ：";
			for (int i = 0; i < cardNum; i++)
			{
				hyouji += cardsAry[i] + "_";
			}
			hyouji = hyouji.Trim('_');
			Console.WriteLine(hyouji);
		}
	}
	class Player: User {
		public override void addCard() {
			cardsAry[cardNum] = returnValue.getMark(rnd.Next(13) + 1);
			cardNum++;
			if (this.TotalValue() > 21)
			{
				bust = 1;
			}
		}
		public override void ShowCards() {
			hyouji = "あなた：";
			foreach (string s in cardsAry)
			{
				hyouji += s + "_";
			}
			hyouji = hyouji.Trim('_');
			Console.WriteLine(hyouji);
		}
	}
	class BlackJackResult {
		public void Result(Player player, Dealer dealer) {
			if (player.Bust == 1)
			{
				Console.WriteLine("対戦結果");
				dealer.ShowAllCards();
				player.ShowCards();
				Console.WriteLine("");
				Console.WriteLine("あなたはバストしました。あなたの負けです");
				return;
			}
			if (dealer.Bust == 1)
			{
				Console.WriteLine("対戦結果");
				dealer.ShowAllCards();
				player.ShowCards();
				Console.WriteLine("");
				Console.WriteLine("ディーラーがバストしましたあなたの勝ちです。");
				return;
			}
			if (player.TotalValueAas10() > dealer.TotalValueAas10())
			{
				Console.WriteLine("対戦結果");
				dealer.ShowAllCards();
				player.ShowCards();
				Console.WriteLine("");
				Console.WriteLine("ディーラー:" + dealer.TotalValueAas10() + "、あなた：" + player.TotalValueAas10() + " あなたの勝ちです。");
				return;
			}
			if (player.TotalValueAas10() <= dealer.TotalValueAas10())
			{
				Console.WriteLine("対戦結果");
				dealer.ShowAllCards();
				player.ShowCards();
				Console.WriteLine("");
				Console.WriteLine("ディーラー:" + dealer.TotalValueAas10() + "、あなた：" + player.TotalValueAas10() + " あなたの負けです。");
				return;
			}
			dealer.ShowAllCards();
			Console.WriteLine("-----------------------------------");
			player.ShowCards();
			Console.WriteLine("");
		}
	}
	class BlackJackDraw {
		const int YES = 1;
		const int NO = 2;
		public void Draw(Player player, Dealer dealer) {
			int endFlag = 0;
			int choice;
			do
			{
				Console.WriteLine("もう一枚引きますか？ YESの場合：1, NOの場合：2");
				choice = int.Parse(Console.ReadLine());
				if (choice == YES)
				{
					player.addCard();
					if (player.Bust == 1)
					{
						endFlag = 1;
						break;
					}
					dealer.ShowCards();
					player.ShowCards();
					Console.WriteLine("");
				}
				if (choice == NO)
				{
					dealer.addCard();
					endFlag = 1;
				}
			} while (endFlag == 0);
		}
	}
	class BlackJackMain {
		static void Main(string[] args) {
			int gameFlg = 1;
			while (gameFlg == 1)
			{
				Player player = new Player();
				System.Threading.Thread.Sleep(500);
				Dealer dealer = new Dealer();
				dealer.ShowCards();
				player.ShowCards();
				BlackJackDraw bjdraw = new BlackJackDraw();
				bjdraw.Draw(player, dealer);
				BlackJackResult bjresult = new BlackJackResult();
				bjresult.Result(player, dealer);
				Console.WriteLine("もう一度対戦しますか？ YES: 1, NO: 2");
				gameFlg = int.Parse(Console.ReadLine());
			}
		}
	}
}

```

# 実行結果

```
>black2
ﾃﾞｨｰﾗｰ：?_3
あなた：10_5
もう一枚引きますか？ YESの場合：1, NOの場合：2
1
対戦結果
ﾃﾞｨｰﾗｰ：5_3
あなた：10_5_10

あなたはバストしました。あなたの負けです
もう一度対戦しますか？ YES: 1, NO: 2
1
ﾃﾞｨｰﾗｰ：?_10
あなた：K_4
もう一枚引きますか？ YESの場合：1, NOの場合：2
1
対戦結果
ﾃﾞｨｰﾗｰ：7_10
あなた：K_4_8

あなたはバストしました。あなたの負けです
もう一度対戦しますか？ YES: 1, NO: 2
1
ﾃﾞｨｰﾗｰ：?_8
あなた：5_7
もう一枚引きますか？ YESの場合：1, NOの場合：2
1
対戦結果
ﾃﾞｨｰﾗｰ：6_8
あなた：5_7_K

あなたはバストしました。あなたの負けです
もう一度対戦しますか？ YES: 1, NO: 2
1
ﾃﾞｨｰﾗｰ：?_A
あなた：10_8
もう一枚引きますか？ YESの場合：1, NOの場合：2
1
ﾃﾞｨｰﾗｰ：?_A
あなた：10_8_3

もう一枚引きますか？ YESの場合：1, NOの場合：2
2
対戦結果
ﾃﾞｨｰﾗｰ：5_A_Q_4
あなた：10_8_3

ディーラー:20、あなた：21　あなたの勝ちです。
もう一度対戦しますか？ YES: 1, NO: 2


```

以上。