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;
}
}
}
コメント