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

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

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

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

UI

UIはUser Interfaceの略であり、人間がコンピュータとやりとりをするためのシステムです。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

1回答

582閲覧

プログラムを思うように動かせません

KS-_-SK

総合スコア39

C#

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

UI

UIはUser Interfaceの略であり、人間がコンピュータとやりとりをするためのシステムです。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2020/02/24 12:18

編集2020/02/24 12:38

こちらの質問の続きです。
フリーズは直ったのですが、プログラムが思う通りに動きません(質問文の1番下をご覧ください。)
ご回答お願い致します。
###C#プログラム

C#

1//問題スクリプト_シャッフルあり_未完成 2using System.Collections; 3using System.Collections.Generic; 4using UnityEngine; 5using UnityEngine.UI; 6using System.IO; 7using System; 8using Random = System.Random; 9 10public class G4B_2020_01_15 : MonoBehaviour 11{ 12 public InputField i_p; 13 public Text t_x; 14 public Text seikaisuu; 15 public Text K_O; 16 int QN;//random専用値 17 bool hantei = true; 18 int RN = 0;//正解数管理 19 public int FN = 10;//メモ帳の行数管理 20 int US;//値を一時保存する変数 21 public Text US1,US2;//問題を一時保存する変数 22 23 // Start is called before the first frame update 24 void Start() 25 { 26 //コンポーネントを扱えるようにする 27 i_p = i_p.GetComponent<InputField>(); 28 t_x = t_x.GetComponent<Text>(); 29 US1 = US1.GetComponent<Text>(); 30 US2 = US2.GetComponent<Text>(); 31 //seikaisuu = seikaisuu.GetComponent<Seikaisuu>(); 32 //t_t = t_t.GetComponent<t_t>(); 33 NS(); 34 35 } 36 37 private void NS() 38 { 39 System.Random random = new Random(); 40 41 42 if (FN < 1)//もし、問題数が3なら、2と記述。 43 { 44 //終了合図 45 t_x.text = "正解数は、" + RN; 46 K_O.text = "右下のTOPボタンでホームへ。"; 47 } 48 else 49 { 50 //*************** 51 QN = random.Next(0, FN++)/*0~11未満の値*/; 52 Debug.Log(QN); 53 US = QN; 54 if (QN < 1) 55 { 56 hantei = true; 57 } 58 while (hantei == false) 59 { 60 File.ReadLines(@"C:\Users\プログラミング\Desktop\g2_b.txt"); 61 File.ReadLines(@"C:\Users\プログラミング\Desktop\g2_ba.txt"); 62 QN--; 63 Debug.Log(QN); 64 65 } 66 if (hantei == true) 67 { 68 File.AppendAllText(@"C:\Users\sk\Desktop\g2_b.txt", ""); 69 File.AppendAllText(@"C:\Users\sk\Desktop\g2_ba.txt", ""); 70 } 71 //*************** 72 US1.text = (@"C:\Users\sk\Desktop\g2_b.txt"); 73 US2.text = (@"C:\Users\sk\Desktop\g2_ba.txt"); 74 t_x.text = "どういう意味?:" + US1.text; 75 } 76 77 78 } 79 80 81 public void IT() 82 { 83 K_O.text = "正しい答え:" + US2.text; 84 //解答が模範解答と同じだった時の処理 85 if (US2.text == i_p.text) 86 { 87 RN++; 88 Debug.Log("できた"); 89 Invoke("NS", 3); 90 FN++; 91 i_p.text = ""; 92 } 93 else 94 { 95 Invoke("NS", 3); 96 FN++; 97 i_p.text = ""; 98 } 99 /*if (ET.Length > 0) 100 { 101 //QN++; 102 ET[QN].Remove(QN); 103 EA[QN].Remove(QN); 104 Invoke("NS", 3); 105 i_p.text = ""; 106 107 //NS(); 108 Debug.Log("Read OK"); 109 }*/ 110 //else 111 } 112 113 /*else 114 {*/ 115 //テキストにi_pの内容を反映 116 //t_x.text = i_p.text; 117 118 // Update is called once per frame 119 void Update() 120 { 121 seikaisuu.text = RN + "/10"; 122 123 if (Input.GetKeyDown(KeyCode.Return)) 124 { 125 IT(); 126 } 127 } 128 129} 130 131/*else 132{*/ 133//テキストにi_pの内容を反映 134//t_x.text = i_p.text;

もっと詳しい情報が必要でしたら、お知らせください。情報量が少なくて、すみません。
###確認したこと
・アタッチされている
・実行様子:
イメージ説明

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

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

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

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

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

guest

回答1

0

ベストアンサー

※ちなみに、上記のプログラムで行いたいことは、

テキストファイル(g2_b.txt)からランダムの行から単語を読み込み、US1.textに一時的に代入し、同じく、テキストファイル(g2_ba.txt)からランダムの行から単語に対する答えを読み込み、US2.textに一時的に代入し、InputFieldで取得した文字とUS2.textが同じだったら、RNに+1して、これをテキストファイルの中身がなくなるまで処理を続け、中身がなくなったら、正解数を表示するといった感じです。(パスは、しっかりと確認しました)
実行ができないので、このプログラムがどうなのかわからないので、できれば、こちらのプログラムに関しても何かご指摘いただければと思います。

csharp

1using System; 2using System.Diagnostics; 3using System.IO; 4using System.Linq; 5 6 class Class243281 : MonoBehaviour 7 { 8 public string[] Quiz; 9 public string[] Answer; 10 public int pos; 11 public int goodCounter; 12 public int Limit; 13 14 void Start() 15 { 16 var quizs = File.ReadAllLines(@"C:\Users\sk\Desktop\g2_b.txt"); 17 var answs = File.ReadAllLines(@"C:\Users\sk\Desktop\g2_ba.txt"); 18 var shuffledIndex = Enumerable.Range(0, quizs.Length).OrderBy(_ => Guid.NewGuid()).ToArray(); 19 Quiz = shuffledIndex.Select(i => quizs[i]).ToArray(); 20 Answer = shuffledIndex.Select(i => answs[i]).ToArray(); 21 Limit = 10; 22 pos = 0; 23 goodCounter = 0; 24 25 } 26 27 private void NS() 28 { 29 if ((pos + 1) >= Limit) //もし、問題数が3なら、2と記述。 30 { 31 //終了合図 32 t_x.text = $"正解数は、{goodCounter}"; 33 K_O.text = "右下のTOPボタンでホームへ。"; 34 return; 35 } 36 37 t_x.text = $"どういう意味?:{Quiz[pos]}"; 38 } 39 public void IT() 40 { 41 K_O.text = "正しい答え:" + Answer[pos]; 42 //解答が模範解答と同じだった時の処理 43 if (Answer[pos] == i_p.text) 44 { 45 goodCounter++; 46 Debug.Log("できた"); 47 } 48 49 pos++; 50 Invoke("NS", 3); 51 i_p.text = ""; 52 } 53 // Update is called once per frame 54 void Update() 55 { 56 seikaisuu.text = $"{goodCounter}/10"; 57 58 if (Input.GetKeyDown(KeyCode.Return)) 59 { 60 IT(); 61 } 62 } 63 }
  • 思うとおり、がよくわかりません。個人的に理解できないのは、テキストファイルがなくなる、でクイズを出していってどうして問題集のファイルが中身がなくなるようにしないといけないのかわかりませんでした。
  • 動いていない、もよくわかりません。どういう動きがどう想定と違うのか示していただきたいです。
  • 添付いただいた画像を見ると、US1.text = (@"C:\Users\sk\Desktop\g2_b.txt"); でファイル名そのものを渡しているので、ではなく File.ReadAllLines() で取得して QN 番目の行を代入するといた対応が必要ではないかと思います。ただ FN も減算されていませんし、どういうロジックで動作するのかイメージがもてませんでした。
  • やりたいことは最初にシャッフルされた問題と答えの配列を作って、何番目の問題かだけを管理すればいいのではないかと思い、そういうコードをかきました(今おもったんですが、シャッフルしたインデクスだけをキューに持ってデキューしていったほうが処理を圧縮できそう)

投稿2020/02/24 13:16

papinianus

総合スコア12705

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

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

KS-_-SK

2020/02/24 13:38

まさにこのことです!ご指摘いただき、誠にありがとうございます。 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - いろいろ情報が不足していて申し訳ございませんでした。 1つめの疑問に対しての解答: 私が試そうとしたのは、まず、値をランダムに取得します。そのあと、g2_b.txtからランダムに取得した値の行を探し(もし、6という数値が出たら、g2_b.txtの6行目の問題を出力)、それを問題に出すのですが、もう一回ランダムに値を取得した場合、重複する可能性があるのではないか、と思い、そのような理想にたどり着きました。 2つめの疑問に対する回答: ランダムにg2_b.txtから問題を抜き出し、重複しないように問題を出力しようとしていたのですが、添付した画像のようになってしまい、先に進めなくて困っていました。 情報量が大変少なくて、誠に申し訳ございませんでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問