C#で以下のような記憶ゲームを作ってみよう!

実行例

enterを入力すると3秒間5個の数字が表示されます。

enterキーを押すと5個の数字が表示される。
(この際それぞれの数値は1-100のランダム,重複可)

enterを入力すると3秒間5個の数字が表示されます。
22 34 43 11 96

3秒間表示したあと画面がクリアーされ以下が表示される。
(この際並び順はランダム)

先程の数字の中から4個表示します。
43 22 96 34
足りない数字を入力してください>

足りない数字を入力する。

先程の数字の中から4個表示します。
43 22 96 34
足りない数字を入力してください>11[enter]
OK
Retry?yes or no>

もし間違えた場合の表示は以下

先程の数字の中から4個表示します。
43 22 96 34
足りない数字を入力してください>51[enter]
NG(11)
Retry?yes or no>

Retryかどうか聞かれているのno以外を入力すると再び最初から始まる。

enterを入力すると3秒間5個の数字が表示されます。

作成

1.以下の仕様を満たすメソッドを作成する

引数(乱数の最小値,乱数の最大値,生成する個数)を受け取り,その条件のもとに作られたList<int>を返却するメソッド。

作例

static List<int> CreateNumsList(int min,int max,int count) {
            Random rand = new Random();
            var list = new List<int>();
            for(int i = 0; i < count; i++) {
                list.Add(rand.Next(min, max + 1));
            }
            return list;
        }

2.上で作ったメソッドを利用しMainメソッドを作成する。

作例

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;

namespace flashGame {
    class MainClass {
        const int SECOND = 3;//表示する秒数
        const int MIN = 1, MAX = 100, NUM_COUNT = 5;
        public static void Main(string[] args) {
            Random rand = new Random();
            while (true) {
                Console.Write($"enterを入力すると{SECOND}秒間{NUM_COUNT}個の数字が表示されます。");
                Console.ReadLine();
                var list = CreateNumsList(MIN, MAX, NUM_COUNT);
                string str = string.Join(" ", list);//listの要素を第一引数(今回は半角スペース)で連結した文字列を生成
                Console.WriteLine(str);
                Thread.Sleep(SECOND * 1000);//指定秒停止
                Console.Clear();//コンソールクリア
                int index = rand.Next(list.Count);//非表示にするインデックスを抽選
                int ans = list[index];//そのインデックスの数値を取り出す
                list.RemoveAt(index);//そのインデックスをリストから削除
                Console.WriteLine($"先程の数字の中から{NUM_COUNT - 1}個表示します。");
                //list.OrderBy(v=>Guid.NewGuid())はリストをシャッフルするさいの定石
                Console.WriteLine(string.Join(" ", list.OrderBy(v => Guid.NewGuid())));
                Console.Write("足りない数字を入力してください>");
                //ユーザーからの入力をintに変換
                int input = int.Parse(Console.ReadLine());
                Console.WriteLine($"{(input == ans ? "OK" : "NG(" + ans + ")")}");
                Console.Write("Retry?yes or no>");
                string retry = Console.ReadLine();
                if (retry == "no") {
                    break;
                } else {
                    Console.Clear();
                }
            }
        }
        static List<int> CreateNumsList(int min, int max, int count) {
            Random rand = new Random();
            var list = new List<int>();
            for (int i = 0; i < count; i++) {
                list.Add(rand.Next(min, max + 1));
            }
            return list;
        }
    }
}