====== 問題の作成 ====== ここまで来たら後は、今まで作った関数を駆使して問題を作ってゆく。\\ ランダムでごちゃ混ぜにすればいいじゃん、って思う人もいるかもですが、実は解けない問題ってのがある。\\ なので、どうするかというと、話は簡単で。。。\\ 移動できそうな数字をランダムで出して、一定回数空白タイルと入れ替えを行う。\\ (基本的に、そろった状態から入れ替えを行うと、その逆順の手順で操作すると元に戻せるよ)\\ したがって、手数がかかればかかるほど難しくなるはずなので、何回入れ替え操作をした問題化で何となくの難易度が設定できる。\\ (今回はその機能は搭載しない)\\ * 問題作成のアルゴリズム * 以下の処理を一定回数繰り返す - タイルの数字をランダムで選択 - そのタイルは動かせますか? - YES:タイルを移動 - NO:数字の選択に戻る === 問題作成関数 void MakeProblem(Board& _board) の作成=== void MakeProblem(Board& _board) { //50回ぐらいやっとけばそれなりに混ざるよね int level = 50; Position p; for (int i = 0; i < level; i++) { while (true)//動かせるタイル発見するまでランダムでタイルを選択(効率悪い) { int num = ランダムで1~15まで生成; if (numは動かせる) { break; } } numのタイルを移動; } } === 確認用ソースコード === 関数ができたらInitBoardを以下のように書き換えてみよう。\\ void InitBoard(Board& _board) { //初期化のごにょごにょが書いてある部分(省略)   MakeProblem(_board); } ==== クリア判定 ==== クリア判定は簡単だよね!考えてみよう。\\ クリアしたら、おめでとうのメッセージを表示してみよう。\\ デバッグしやすいように、MakeProblemの\\ //50回ぐらいやっとけばそれなりに混ざるよね int level = 50; => int level = 1; にしておくと、1手で完成させられるよ。\\ (そもそもレベルを引数でとって、ごちゃまぜる回数を。。。おっと誰か来たようだ。ここまでにしようか)\\ これで一応コンソール版は完成させられると思う。\\