質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

LINQ

LINQとはLanguage INtegrated Queryの略で、「統合言語クエリ」という意味です。C#やVisual Basicといった言語のコード内に記述することができるクエリです。

Q&A

解決済

1回答

4340閲覧

チンチロリンの役を判定するプログラム

tarot_shogun

総合スコア29

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

LINQ

LINQとはLanguage INtegrated Queryの略で、「統合言語クエリ」という意味です。C#やVisual Basicといった言語のコード内に記述することができるクエリです。

0グッド

0クリップ

投稿2019/05/04 12:54

編集2019/05/04 14:02

チンチロリンの役を判定するプログラム

チンチロリンというすごろくゲームの役判定プログラムを作成しました。
しかしながら、コードがいかにも残念な出来になってしまったので
プログラムの改善を行いたいと思っています。
より良いアイデアをお持ちの方はご教授いただけると幸いです。

三つのサイコロの値に応じて役を決めます。
役は以下の通りです。

(強)
アラシ : 3つのサイコロすべてがゾロ目
シゴロ : サイコロの目が(4, 5, 6)
ロッポウ : 3つ中2つのサイコロがゾロ目、ゾロ目でないサイコロが6の目(例:5, 5, 6)
ゴケ : 3つ中2つのサイコロがゾロ目、ゾロ目でないサイコロが5の目
ヨツヤ : 3つ中2つのサイコロがゾロ目、ゾロ目でないサイコロが4の目
サンタ : 3つ中2つのサイコロがゾロ目、ゾロ目でないサイコロが3の目
ニゾウ : 3つ中2つのサイコロがゾロ目、ゾロ目でないサイコロが2の目
ピン : 3つ中2つのサイコロがゾロ目、ゾロ目でないサイコロが1の目
目なし : 3つの目それぞれ値が違ったとき
ヒフミ : サイコロの目が(1, 2, 3)
(弱)
※参考

C#

1enum hand 2{ 3 HIFUMI = -1, 4 MENASHI, 5 PIN = 1, 6 NIZO, 7 SANTA, 8 YOTSUYA, 9 GOKE, 10 ROPPOU, 11 SHIGORO, 12 ARASHI, 13} 14 15class Program 16{ 17 static void Main(string[] args) 18 { 19 var dice = new List<int>() { 6, 5, 4 }; 20 Console.WriteLine(Check(dice)); 21 } 22 23 static private hand Check(List<int> dice) 24 { 25 hand ret; 26 27 switch (dice.Distinct().Count()) 28 { 29 case 1: 30 ret = hand.ARASHI; 31 break; 32 case 2: 33 ret = (hand) (2 * dice.Distinct().Sum() - dice.Sum()); 34 break; 35 case 3: 36 if (dice.All(x => x == 1 || x == 2 || x == 3)) 37 { 38 ret = hand.HIFUMI; 39 } 40 else if (dice.All(x => x == 4 || x == 5 || x == 6)) 41 { 42 ret = hand.SHIGORO; 43 } 44 else 45 { 46 ret = hand.MENASHI; 47 } 48 break; 49 default: 50 ret = hand.MENASHI; 51 break; 52 } 53 54 return ret; 55 } 56}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Zuishin

2019/05/04 13:09

残念というか、要件を満たしていません。1 の目や 6 の目、また子の役が考慮されていません。戻り値が何を意味するのかも定まっていないようです。言語はどちらかに決めた方がいいと思います。
Zuishin

2019/05/04 13:19

また、すごろくとチンチロリンは別のゲームです。 それと、作成の動機がわかりませんが、他人に作らせたのでは結局自分が損をすることになるでしょう。技術的な問題は何もなく、単にアルゴリズムの問題だと思いますが、それがあなたにとって複雑すぎるなら、コーディングより前に場合分けしてフローチャートを作るのが良いかもしれません。
Zuishin

2019/05/04 13:27

ああ、返事をしない人か。
tarot_shogun

2019/05/04 14:14 編集

>> ああ、返事をしない人か。 申し訳ございません。どんな回答をするべきか考えているところでした。 >> 戻り値が何を意味するのかも定まっていないようです。 コードが不正確でした。本来はすべてEnum値を返す予定でした。 >> 1 の目や 6 の目、また子の役が考慮されていません。 1の目、6の目については質問上に記載がありませんでした。修正します。 >>また、すごろくとチンチロリンは別のゲームです。 すごろく=サイコロだと考えていましたが、違うのですね。 >>他人に作らせたのでは結局~ 現状でも例にあるようにサンプルプログラムは完成しておりますが、より良いプログラムにするためにどうすべきか質問させていただきました。 >>言語について そうですね。こちらの質問ではC#に絞ることにします。
Zuishin

2019/05/04 14:44

早とちりだったようですね。回答するために曖昧な部分を尋ねても返事をしない人が多いので失礼しました。
papinianus

2019/06/20 22:33

今更なんですが、ゲームを成立させるのではなく、単に手を判定すると考えたとき間違ってないやり方だと感じました。自分だったらretを使わずその場でリターンするとは思いますが。
guest

回答1

0

ベストアンサー

3つのサイコロを振って出る目の組み合わせは

111 112 113 114 115 116 122 123 124 125 126 133 134 135 136 144 145 146 155 156 166 222 223 224 225 226 233 234 235 236 244 245 246 255 256 266 333 334 335 336 344 345 346 355 356 366 444 445 446 455 456 466 555 556 566 666

56通りしかないので、"役表"を作っておくのが速くて安直。

投稿2019/05/04 13:48

episteme

総合スコア16614

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tarot_shogun

2019/05/04 14:09

ご回答ありがとうございます。役表を作るというのは考えにありませんでした。サイコロが三つだけなので、定義するのもそれほど難しくなさそうですね。
episteme

2019/05/05 01:40

上記56通りをあなたの"その"コードに食わせれば役表が生成されますし。
tarot_shogun

2019/05/05 04:24

なるほど、コードから役表を作ることもできるんですね。大変勉強になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問