ざっと見て指摘事項が沢山あります。まだあると思います。
プログラムを細かく分けて、
- やりたい事通りに書けているか
- やりたい事通に動くか
を少しずつ確認していく必要があります。
- このプログラム内でセル配列:aが初めて出現するのであればアクセスする前にサイズを宣言する必要があります
a = cell(3,1); % aにアクセスする前に追加。https://jp.mathworks.com/help/matlab/ref/cell.html
- return文を実行するとプログラムまたは関数を終了します。ループを抜ける意図ならbreak文に変更してください
- questdlg関数の選択肢として画像を入力する事は出来ません。選択肢及び正解に画像を用いるのではなく文字列を用いる事を提案致します質問ダイアログ ボックスの作成
- questdlg関数に選択肢3つと正解の計4つ入力していますが、最後の入力は既定のボタン(defbtn)で、ユーザーがダイアログ ボックスでボタンをクリックする代わりにキーボードの Return キーを押した場合にMATLABがこの入力を選択します。つまりReturn キーを押すと勝手に正解が選択されてしまう事になり、おそらく意図しない動作となります
- 2番目のwhile文でイテレータ(t)をループ内で使用していません。動作は変わりませんがwhile文よりfor文を使うべきです
- 2番目のwhile文自体不要ではないでしょうか。「ランダムな添字の値を他変数へ代入」を繰り返す意図が不明です。
- 下記のif文を使う意図が不明です。3分岐共実行内容が同じなので、if文が有っても無くても同じです
if n == 1
f = a{n};
elseif n == 2
f = a{n};
elseif n == 3
f = a{n};
end
- 同様にswitch文を使用する意図が不明です。正解を判定するのにswitch文は不要です。
answer = questdlg(txt, '選択肢', fig{b},fig{c},fig{d},fig{f});
if answer==fig{f}
disp(['せいかい!'])
else
disp(['はずれ・・・。せいかいは、',fig{f}]) % これだけで良いと思います
end