diff --git a/c121108-2024.aux b/c121108-2024.aux index a474bf6..27268ab 100644 --- a/c121108-2024.aux +++ b/c121108-2024.aux @@ -33,7 +33,7 @@ \@writefile{lof}{\addvspace {10\jsc@mpt }} \@writefile{lot}{\addvspace {10\jsc@mpt }} \@writefile{toc}{\contentsline {section}{\numberline {3.1}システムの提案}{11}{}\protected@file@percent } -\@writefile{lof}{\contentsline {figure}{\numberline {3.1}{\ignorespaces システムの流れ}}{11}{}\protected@file@percent } +\@writefile{lof}{\contentsline {figure}{\numberline {3.1}{\ignorespaces システム利用の流れ}}{11}{}\protected@file@percent } \newlabel{figure:image}{{3.1}{11}} \@writefile{toc}{\contentsline {section}{\numberline {3.2}問題の解答方法}{12}{}\protected@file@percent } \@writefile{lof}{\contentsline {figure}{\numberline {3.2}{\ignorespaces クイズの解答方法1}}{12}{}\protected@file@percent } @@ -68,53 +68,53 @@ \@writefile{lof}{\contentsline {figure}{\numberline {5.2}{\ignorespaces プログラミング言語説明画面の図}}{17}{}\protected@file@percent } \newlabel{figure:setumei}{{5.2}{17}} \@writefile{toc}{\contentsline {subsection}{\numberline {5.4.2}プログラミング言語説明機能の中身}{17}{}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {5.5}パズルクイズ形式学習機能}{19}{}\protected@file@percent } +\@writefile{toc}{\contentsline {section}{\numberline {5.5}パズルクイズ形式学習機能}{18}{}\protected@file@percent } \@writefile{toc}{\contentsline {subsection}{\numberline {5.5.1}パズルクイズ形式学習機能の概要}{19}{}\protected@file@percent } \@writefile{lof}{\contentsline {figure}{\numberline {5.3}{\ignorespaces 問題回答画面の図}}{19}{}\protected@file@percent } \newlabel{figure:unity}{{5.3}{19}} \@writefile{toc}{\contentsline {subsection}{\numberline {5.5.2}パズルクイズ形式学習機能の中身ーブロックの配置変更について}{19}{}\protected@file@percent } \@writefile{toc}{\contentsline {subsection}{\numberline {5.5.3}パズルクイズ形式学習機能の中身ー正誤判定について}{21}{}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {5.6}問題の内容}{25}{}\protected@file@percent } -\@writefile{lof}{\contentsline {figure}{\numberline {5.4}{\ignorespaces 積算プログラムの図}}{25}{}\protected@file@percent } -\newlabel{figure:sekisan}{{5.4}{25}} -\@writefile{toc}{\contentsline {chapter}{\numberline {第6章}予備実験・実験結果・解釈}{27}{}\protected@file@percent } +\@writefile{toc}{\contentsline {section}{\numberline {5.6}問題の内容}{26}{}\protected@file@percent } +\@writefile{lof}{\contentsline {figure}{\numberline {5.4}{\ignorespaces 積算プログラムのコード提示}}{27}{}\protected@file@percent } +\newlabel{figure:sekisan}{{5.4}{27}} +\@writefile{toc}{\contentsline {chapter}{\numberline {第6章}システムの検証}{29}{}\protected@file@percent } \@writefile{lof}{\addvspace {10\jsc@mpt }} \@writefile{lot}{\addvspace {10\jsc@mpt }} -\@writefile{toc}{\contentsline {section}{\numberline {6.1}実験方法}{27}{}\protected@file@percent } -\@writefile{lof}{\contentsline {figure}{\numberline {6.1}{\ignorespaces 実験の流れ}}{27}{}\protected@file@percent } -\newlabel{figure:test}{{6.1}{27}} -\@writefile{toc}{\contentsline {section}{\numberline {6.2}結果・解釈}{28}{}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {6.3}システムの改善案}{28}{}\protected@file@percent } -\@writefile{lof}{\contentsline {figure}{\numberline {6.2}{\ignorespaces 質問1のアンケート回答結果の図}}{29}{}\protected@file@percent } -\newlabel{figure:anke1}{{6.2}{29}} -\@writefile{lof}{\contentsline {figure}{\numberline {6.3}{\ignorespaces 質問2のアンケート回答結果の図}}{29}{}\protected@file@percent } -\newlabel{figure:anke2}{{6.3}{29}} -\@writefile{lof}{\contentsline {figure}{\numberline {6.4}{\ignorespaces 質問3および4のアンケート回答結果の図}}{30}{}\protected@file@percent } -\newlabel{figure:anke3}{{6.4}{30}} -\@writefile{toc}{\contentsline {chapter}{\numberline {第7章}システムの改善}{31}{}\protected@file@percent } +\@writefile{toc}{\contentsline {section}{\numberline {6.1}実験方法}{29}{}\protected@file@percent } +\@writefile{lof}{\contentsline {figure}{\numberline {6.1}{\ignorespaces 実験の流れ}}{29}{}\protected@file@percent } +\newlabel{figure:test}{{6.1}{29}} +\@writefile{toc}{\contentsline {section}{\numberline {6.2}結果・解釈}{30}{}\protected@file@percent } +\@writefile{toc}{\contentsline {section}{\numberline {6.3}システムの改善案}{30}{}\protected@file@percent } +\@writefile{lof}{\contentsline {figure}{\numberline {6.2}{\ignorespaces 質問1のアンケート回答結果の図}}{31}{}\protected@file@percent } +\newlabel{figure:anke1}{{6.2}{31}} +\@writefile{lof}{\contentsline {figure}{\numberline {6.3}{\ignorespaces 質問2のアンケート回答結果の図}}{31}{}\protected@file@percent } +\newlabel{figure:anke2}{{6.3}{31}} +\@writefile{lof}{\contentsline {figure}{\numberline {6.4}{\ignorespaces 質問3および4のアンケート回答結果の図}}{32}{}\protected@file@percent } +\newlabel{figure:anke3}{{6.4}{32}} +\@writefile{toc}{\contentsline {chapter}{\numberline {第7章}システムの改善}{33}{}\protected@file@percent } \@writefile{lof}{\addvspace {10\jsc@mpt }} \@writefile{lot}{\addvspace {10\jsc@mpt }} -\@writefile{toc}{\contentsline {section}{\numberline {7.1}改善内容1}{31}{}\protected@file@percent } -\@writefile{lof}{\contentsline {figure}{\numberline {7.1}{\ignorespaces 改善後のタイトル画面}}{31}{}\protected@file@percent } -\newlabel{figure:title-scsyo}{{7.1}{31}} -\@writefile{toc}{\contentsline {section}{\numberline {7.2}改善内容2}{31}{}\protected@file@percent } -\@writefile{lof}{\contentsline {figure}{\numberline {7.2}{\ignorespaces 練習問題1}}{32}{}\protected@file@percent } -\newlabel{figure:tyutorial}{{7.2}{32}} -\@writefile{lof}{\contentsline {figure}{\numberline {7.3}{\ignorespaces 練習問題2}}{32}{}\protected@file@percent } -\newlabel{figure:tyutorial2}{{7.3}{32}} -\@writefile{lof}{\contentsline {figure}{\numberline {7.4}{\ignorespaces 練習問題3}}{33}{}\protected@file@percent } -\newlabel{figure:tyutorial3}{{7.4}{33}} -\@writefile{toc}{\contentsline {chapter}{\numberline {第8章}実験}{35}{}\protected@file@percent } +\@writefile{toc}{\contentsline {section}{\numberline {7.1}改善内容1}{33}{}\protected@file@percent } +\@writefile{lof}{\contentsline {figure}{\numberline {7.1}{\ignorespaces 改善後のタイトル画面}}{33}{}\protected@file@percent } +\newlabel{figure:title-scsyo}{{7.1}{33}} +\@writefile{toc}{\contentsline {section}{\numberline {7.2}改善内容2}{33}{}\protected@file@percent } +\@writefile{lof}{\contentsline {figure}{\numberline {7.2}{\ignorespaces 練習問題1}}{34}{}\protected@file@percent } +\newlabel{figure:tyutorial}{{7.2}{34}} +\@writefile{lof}{\contentsline {figure}{\numberline {7.3}{\ignorespaces 練習問題2}}{34}{}\protected@file@percent } +\newlabel{figure:tyutorial2}{{7.3}{34}} +\@writefile{lof}{\contentsline {figure}{\numberline {7.4}{\ignorespaces 練習問題3}}{35}{}\protected@file@percent } +\newlabel{figure:tyutorial3}{{7.4}{35}} +\@writefile{toc}{\contentsline {chapter}{\numberline {第8章}実験}{37}{}\protected@file@percent } \@writefile{lof}{\addvspace {10\jsc@mpt }} \@writefile{lot}{\addvspace {10\jsc@mpt }} -\@writefile{toc}{\contentsline {section}{\numberline {8.1}実験方法}{35}{}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {8.2}実験結果}{35}{}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {8.3}システムの改善案}{36}{}\protected@file@percent } -\@writefile{toc}{\contentsline {chapter}{\numberline {第9章}結論}{37}{}\protected@file@percent } +\@writefile{toc}{\contentsline {section}{\numberline {8.1}実験方法}{37}{}\protected@file@percent } +\@writefile{toc}{\contentsline {section}{\numberline {8.2}実験結果}{38}{}\protected@file@percent } +\@writefile{toc}{\contentsline {section}{\numberline {8.3}システムの改善案}{38}{}\protected@file@percent } +\@writefile{toc}{\contentsline {chapter}{\numberline {第9章}結論}{39}{}\protected@file@percent } \@writefile{lof}{\addvspace {10\jsc@mpt }} \@writefile{lot}{\addvspace {10\jsc@mpt }} -\@writefile{toc}{\contentsline {section}{\numberline {9.1}評価}{37}{}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {9.2}今後の展望}{37}{}\protected@file@percent } +\@writefile{toc}{\contentsline {section}{\numberline {9.1}評価}{39}{}\protected@file@percent } +\@writefile{toc}{\contentsline {section}{\numberline {9.2}今後の展望}{39}{}\protected@file@percent } \bibcite{tebiki}{1} \bibcite{suke}{2} \bibcite{kaigi}{3} @@ -122,5 +122,5 @@ \bibcite{gihu}{5} \bibcite{bizyuron}{6} \bibcite{okamoto}{7} -\@writefile{toc}{\contentsline {chapter}{参考文献}{41}{}\protected@file@percent } -\gdef \@abspage@last{41} +\@writefile{toc}{\contentsline {chapter}{参考文献}{43}{}\protected@file@percent } +\gdef \@abspage@last{43} diff --git a/c121108-2024.dvi b/c121108-2024.dvi index 914e5cd..7474452 100644 --- a/c121108-2024.dvi +++ b/c121108-2024.dvi Binary files differ diff --git a/c121108-2024.log b/c121108-2024.log index 6b5df05..6074441 100644 --- a/c121108-2024.log +++ b/c121108-2024.log @@ -1,4 +1,4 @@ -This is e-pTeX, Version 3.141592653-p3.9.1-210218-2.6 (utf8.euc) (TeX Live 2022/dev/Debian) (preloaded format=platex 2023.1.30) 25 DEC 2024 00:38 +This is e-pTeX, Version 3.141592653-p3.9.1-210218-2.6 (utf8.euc) (TeX Live 2022/dev/Debian) (preloaded format=platex 2024.12.30) 7 JAN 2025 04:08 entering extended mode restricted \write18 enabled. %&-line parsing enabled. @@ -123,41 +123,62 @@ or enter new name. (Default extension: sty) Enter file name: +(/usr/share/texlive/texmf-dist/tex/latex/boites/boites.sty +File: boites.sty +Package: boites 2013/11/21 v1.1 Colored, framed and breakable across pages boxe +s +\bk@bxb=\box76 +\bk@bxa=\box77 +\bk@lcnt=\count198 +) +(/usr/share/texlive/texmf-dist/tex/latex/moreverb/moreverb.sty +Package: moreverb 2008/06/03 v2.3a `more' verbatim facilities + +(/usr/share/texlive/texmf-dist/tex/latex/tools/verbatim.sty +Package: verbatim 2020-07-07 v1.5u LaTeX2e package for verbatim enhancements +\every@verbatim=\toks20 +\verbatim@line=\toks21 +\verbatim@in@stream=\read2 +) +\tab@position=\count199 +\tab@size=\count266 +\listing@line=\count267 +) (/usr/share/texlive/texmf-dist/tex/latex/url/url.sty \Urlmuskip=\muskip16 Package: url 2013/09/16 ver 3.4 Verb mode for urls, etc. ) (/usr/share/texlive/texmf-dist/tex/latex/l3backend/l3backend-dvips.def File: l3backend-dvips.def 2022-01-12 L3 backend support: dvips -\l__pdf_internal_box=\box76 -\g__pdf_backend_object_int=\count198 -\l__pdf_backend_content_box=\box77 -\l__pdf_backend_model_box=\box78 -\g__pdf_backend_annotation_int=\count199 -\g__pdf_backend_link_int=\count266 -\g__pdf_backend_link_sf_int=\count267 +\l__pdf_internal_box=\box78 +\g__pdf_backend_object_int=\count268 +\l__pdf_backend_content_box=\box79 +\l__pdf_backend_model_box=\box80 +\g__pdf_backend_annotation_int=\count269 +\g__pdf_backend_link_int=\count270 +\g__pdf_backend_link_sf_int=\count271 ) (./c121108-2024.aux) \openout1 = `c121108-2024.aux'. -LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 20. -LaTeX Font Info: ... okay on input line 20. -LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 20. -LaTeX Font Info: ... okay on input line 20. -LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 20. -LaTeX Font Info: ... okay on input line 20. -LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 20. -LaTeX Font Info: ... okay on input line 20. -LaTeX Font Info: Checking defaults for TS1/cmr/m/n on input line 20. -LaTeX Font Info: ... okay on input line 20. -LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 20. -LaTeX Font Info: ... okay on input line 20. -LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 20. -LaTeX Font Info: ... okay on input line 20. -LaTeX Font Info: Checking defaults for JY1/mc/m/n on input line 20. -LaTeX Font Info: ... okay on input line 20. -LaTeX Font Info: Checking defaults for JT1/mc/m/n on input line 20. -LaTeX Font Info: ... okay on input line 20. +LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 22. +LaTeX Font Info: ... okay on input line 22. +LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 22. +LaTeX Font Info: ... okay on input line 22. +LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 22. +LaTeX Font Info: ... okay on input line 22. +LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 22. +LaTeX Font Info: ... okay on input line 22. +LaTeX Font Info: Checking defaults for TS1/cmr/m/n on input line 22. +LaTeX Font Info: ... okay on input line 22. +LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 22. +LaTeX Font Info: ... okay on input line 22. +LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 22. +LaTeX Font Info: ... okay on input line 22. +LaTeX Font Info: Checking defaults for JY1/mc/m/n on input line 22. +LaTeX Font Info: ... okay on input line 22. +LaTeX Font Info: Checking defaults for JT1/mc/m/n on input line 22. +LaTeX Font Info: ... okay on input line 22. *geometry* driver: auto-detecting *geometry* detected driver: dvips @@ -194,50 +215,50 @@ * (1in=72.27pt=25.4mm, 1cm=28.453pt) LaTeX Font Info: Font shape `JT1/mc/m/n' will be -(Font) scaled to size 16.60605pt on input line 21. +(Font) scaled to size 16.60605pt on input line 23. LaTeX Font Info: Font shape `JY1/mc/m/n' will be -(Font) scaled to size 16.60605pt on input line 21. +(Font) scaled to size 16.60605pt on input line 23. LaTeX Font Info: Font shape `JT1/mc/m/n' will be -(Font) scaled to size 11.53198pt on input line 21. +(Font) scaled to size 11.53198pt on input line 23. LaTeX Font Info: Font shape `JY1/mc/m/n' will be -(Font) scaled to size 11.53198pt on input line 21. +(Font) scaled to size 11.53198pt on input line 23. LaTeX Font Info: External font `cmex10' loaded for size -(Font) <12> on input line 21. +(Font) <12> on input line 23. LaTeX Font Info: External font `cmex10' loaded for size -(Font) <8> on input line 21. +(Font) <8> on input line 23. LaTeX Font Info: External font `cmex10' loaded for size -(Font) <6> on input line 21. +(Font) <6> on input line 23. LaTeX Font Info: Font shape `JY1/mc/m/n' will be -(Font) scaled to size 5.76599pt on input line 21. +(Font) scaled to size 5.76599pt on input line 23. [1 ] LaTeX Font Info: Font shape `JT1/mc/bx/n' in size <10> not available -(Font) Font shape `JT1/gt/m/n' tried instead on input line 23. +(Font) Font shape `JT1/gt/m/n' tried instead on input line 25. LaTeX Font Info: Font shape `JT1/gt/m/n' will be -(Font) scaled to size 9.60999pt on input line 23. +(Font) scaled to size 9.60999pt on input line 25. LaTeX Font Info: Font shape `JY1/mc/bx/n' in size <10> not available -(Font) Font shape `JY1/gt/m/n' tried instead on input line 23. +(Font) Font shape `JY1/gt/m/n' tried instead on input line 25. LaTeX Font Info: Font shape `JY1/gt/m/n' will be -(Font) scaled to size 9.60999pt on input line 23. +(Font) scaled to size 9.60999pt on input line 25. LaTeX Font Info: External font `cmex10' loaded for size -(Font) <7> on input line 26. +(Font) <7> on input line 28. LaTeX Font Info: External font `cmex10' loaded for size -(Font) <5> on input line 26. +(Font) <5> on input line 28. LaTeX Font Info: Font shape `JY1/mc/m/n' will be -(Font) scaled to size 6.72699pt on input line 26. +(Font) scaled to size 6.72699pt on input line 28. LaTeX Font Info: Font shape `JY1/mc/m/n' will be -(Font) scaled to size 4.805pt on input line 26. +(Font) scaled to size 4.805pt on input line 28. [2] LaTeX Font Info: Font shape `JT1/mc/m/n' will be -(Font) scaled to size 23.90964pt on input line 26. +(Font) scaled to size 23.90964pt on input line 28. LaTeX Font Info: Font shape `JY1/mc/m/n' will be -(Font) scaled to size 23.90964pt on input line 26. +(Font) scaled to size 23.90964pt on input line 28. LaTeX Font Info: Font shape `JT1/gt/m/n' will be -(Font) scaled to size 23.90964pt on input line 26. +(Font) scaled to size 23.90964pt on input line 28. LaTeX Font Info: Font shape `JY1/gt/m/n' will be -(Font) scaled to size 23.90964pt on input line 26. +(Font) scaled to size 23.90964pt on input line 28. (./c121108-2024.toc [3 ]) @@ -247,43 +268,43 @@ [4] 第1章 LaTeX Font Info: Font shape `JT1/mc/m/n' will be -(Font) scaled to size 19.9311pt on input line 27. +(Font) scaled to size 19.9311pt on input line 29. LaTeX Font Info: Font shape `JY1/mc/m/n' will be -(Font) scaled to size 19.9311pt on input line 27. +(Font) scaled to size 19.9311pt on input line 29. LaTeX Font Info: Font shape `JT1/gt/m/n' will be -(Font) scaled to size 19.9311pt on input line 27. +(Font) scaled to size 19.9311pt on input line 29. LaTeX Font Info: Font shape `JY1/gt/m/n' will be -(Font) scaled to size 19.9311pt on input line 27. +(Font) scaled to size 19.9311pt on input line 29. LaTeX Font Info: Font shape `JT1/mc/m/n' will be -(Font) scaled to size 13.83836pt on input line 28. +(Font) scaled to size 13.83836pt on input line 30. LaTeX Font Info: Font shape `JY1/mc/m/n' will be -(Font) scaled to size 13.83836pt on input line 28. +(Font) scaled to size 13.83836pt on input line 30. LaTeX Font Info: Font shape `JT1/gt/m/n' will be -(Font) scaled to size 13.83836pt on input line 28. +(Font) scaled to size 13.83836pt on input line 30. LaTeX Font Info: Font shape `JY1/gt/m/n' will be -(Font) scaled to size 13.83836pt on input line 28. +(Font) scaled to size 13.83836pt on input line 30. [5 ] [6] 第2章 LaTeX Font Info: Font shape `JT1/gt/m/n' will be -(Font) scaled to size 11.53198pt on input line 68. +(Font) scaled to size 11.53198pt on input line 70. LaTeX Font Info: Font shape `JY1/gt/m/n' will be -(Font) scaled to size 11.53198pt on input line 68. +(Font) scaled to size 11.53198pt on input line 70. LaTeX Font Info: Font shape `JT1/mc/m/n' will be -(Font) scaled to size 6.72699pt on input line 69. +(Font) scaled to size 6.72699pt on input line 71. LaTeX Font Info: Font shape `JT1/mc/m/n' will be -(Font) scaled to size 5.76599pt on input line 69. +(Font) scaled to size 5.76599pt on input line 71. LaTeX Font Info: Font shape `JT1/gt/m/n' will be -(Font) scaled to size 7.68799pt on input line 69. +(Font) scaled to size 7.68799pt on input line 71. LaTeX Font Info: Font shape `JY1/gt/m/n' will be -(Font) scaled to size 7.68799pt on input line 69. +(Font) scaled to size 7.68799pt on input line 71. File: scratch.png Graphic file (type bmp) LaTeX Font Info: Font shape `JT1/mc/m/n' will be -(Font) scaled to size 8.64899pt on input line 73. +(Font) scaled to size 8.64899pt on input line 75. LaTeX Font Info: Font shape `JY1/mc/m/n' will be -(Font) scaled to size 8.64899pt on input line 73. +(Font) scaled to size 8.64899pt on input line 75. File: viscuit.png Graphic file (type bmp) File: TILES.png Graphic file (type bmp) @@ -320,82 +341,44 @@ [16] LaTeX Font Info: Font shape `JT1/gt/m/n' will be -(Font) scaled to size 6.72699pt on input line 279. +(Font) scaled to size 8.64899pt on input line 279. LaTeX Font Info: Font shape `JY1/gt/m/n' will be -(Font) scaled to size 6.72699pt on input line 279. - [17] -Overfull \hbox (23.10243pt too wide) in paragraph at lines 321--322 -\JY1/mc/m/n/10 作業を行いながら , []\OT1/cmtt/m/n/10 "img.sprite = Resources.L -oad("Image/photo" + count.ToString())" - [] - -[18] +(Font) scaled to size 8.64899pt on input line 279. + [17] [18] File: bprog.png Graphic file (type bmp) - [19] -Overfull \hbox (29.64891pt too wide) in paragraph at lines 404--405 -\JY1/mc/m/n/10 代入するために \OT1/cmr/m/n/10 Block \JY1/mc/m/n/10 型の[]\OT1/c -mtt/m/n/10 "selectedBlock"\JY1/mc/m/n/10 という変数を宣言しておき\OT1/cmtt/m/n/ -10 "OnSelectedBlock(Block block)" - [] - -[20] [21] -Underfull \hbox (badness 4060) in paragraph at lines 490--492 -[]\OT1/cmtt/m/n/10 "[SerializeField] SpriteSO backSpriteSO;"\JY1/mc/m/n/10 のよ -うに宣言することで\OT1/cmtt/m/n/10 "frontSpriteSO" - [] - - -Underfull \hbox (badness 3240) in paragraph at lines 493--494 -[][]\OT1/cmtt/m/n/10 "public int GetID()"\JY1/mc/m/n/10 関数に\OT1/cmtt/m/n/10 -"if"\JY1/mc/m/n/10 文と\OT1/cmtt/m/n/10 "return"\JY1/mc/m/n/10 を用いることでこ -の関数が呼ばれたと - [] - -[22] -Overfull \hbox (27.98952pt too wide) in paragraph at lines 553--554 -[][]\OT1/cmtt/m/n/10 "[SerializeField] List images;"\JY1/mc/m/n/10 と\OT -1/cmtt/m/n/10 "[SerializeField] List spriteSOList;" - [] - - -Overfull \hbox (56.75894pt too wide) in paragraph at lines 561--562 -[]\JY1/mc/m/n/10 これらの関数[]\OT1/cmtt/m/n/10 "public void SetImages(int[] id -List)"\JY1/mc/m/n/10 と\OT1/cmtt/m/n/10 "List questions = new List()" - [] - -[23] -Overfull \hbox (4.2309pt too wide) in paragraph at lines 566--567 -[][]\OT1/cmtt/m/n/10 "private void Start()"\JY1/mc/m/n/10 関数部分によ って\OT1 -/cmtt/m/n/10 "question"\JY1/mc/m/n/10 変数に[] \OT1/cmr/m/n/10 ``Ques-tion-List -'' \JY1/mc/m/n/10 の[]\OT1/cmtt/m/n/10 "GetQuestion();" - [] - - -Overfull \hbox (29.79024pt too wide) in paragraph at lines 607--610 -\JY1/mc/m/n/10 を[]\OT1/cmtt/m/n/10 "selectedIndex"\JY1/mc/m/n/10 変数に代入し -, \OT1/cmtt/m/n/10 "int currentBlockIndex = blocks.FindIndex(x => x== block);" - + [19] [20] [21] [22] [23] +Overfull \hbox (12.00182pt too wide) in paragraph at lines 357--357 +[][] \OT1/cmtt/m/n/10 SpriteSO spriteSO = spriteSOList.Find(element + => element.ID == idList[i]);[] [] [24] +LaTeX Font Info: Font shape `JT1/gt/m/n' will be +(Font) scaled to size 6.72699pt on input line 385. +LaTeX Font Info: Font shape `JY1/gt/m/n' will be +(Font) scaled to size 6.72699pt on input line 385. + + +Package moreverb Warning: No file QuestionList2.cs. on input line 409. + +[25] File: sekisan.png Graphic file (type bmp) - [25] [26 + [26] [27] [28 ] 第6章 File: test.pdf Graphic file (type pdf) -[27] +[29] File: anke1.pdf Graphic file (type pdf) File: anke2.pdf Graphic file (type pdf) File: ank_hiritu3-4.pdf Graphic file (type pdf) - [28] [29] [30] + [30] [31] [32] 第7章 File: title-scsyo.png Graphic file (type bmp) @@ -405,32 +388,32 @@ File: tyutorial3.png Graphic file (type bmp) -[31 +[33 -] [32] [33] [34 +] [34] [35] [36 ] 第8章 -[35] [36] +[37] [38] 第9章 -[37 +[39 -] [38 +] [40 -] [39] [40 +] [41] [42 -] [41] (./c121108-2024.aux) +] [43] (./c121108-2024.aux) LaTeX Warning: Label(s) may have changed. Rerun to get cross-references right. ) Here is how much of TeX's memory you used: - 2095 strings out of 479850 - 33468 string characters out of 5887378 - 349683 words of memory out of 5000000 - 20387 multiletter control sequences out of 15000+600000 - 485003 words of font info for 105 fonts, out of 8000000 for 9000 + 2264 strings out of 479850 + 36774 string characters out of 5887377 + 347560 words of memory out of 5000000 + 20536 multiletter control sequences out of 15000+600000 + 485284 words of font info for 107 fonts, out of 8000000 for 9000 269 hyphenation exceptions out of 8191 - 55i,11n,62p,1941b,358s stack positions out of 5000i,500n,10000p,200000b,80000s + 55i,11n,62p,1941b,444s stack positions out of 5000i,500n,10000p,200000b,80000s -Output written on c121108-2024.dvi (41 pages, 107616 bytes). +Output written on c121108-2024.dvi (43 pages, 109932 bytes). diff --git a/c121108-2024.pdf b/c121108-2024.pdf index 19d313f..64a8730 100644 --- a/c121108-2024.pdf +++ b/c121108-2024.pdf Binary files differ diff --git a/c121108-2024.tex b/c121108-2024.tex index 3b626a6..41103fe 100644 --- a/c121108-2024.tex +++ b/c121108-2024.tex @@ -9,6 +9,8 @@ \usepackage{ascmac} \usepackage{geometry} \usepackage{fancybx} +\usepackage{boites} +\usepackage{moreverb} \usepackage{url} % 文中にURLを書くときは \url{} で括る \geometry{textwidth=160mm, textheight=225mm} \renewcommand{\bibname}{参考文献} @@ -119,7 +121,7 @@ \begin{figure}[htb] \centering \includegraphics[width=5cm]{sistem-1.pdf} - \caption{システムの流れ} + \caption{システム利用の流れ} \label{figure:image} \end{figure} @@ -182,7 +184,7 @@ 本システムの機能は,プログラミング言語であるRuby言語についての学習をする問題を用意し,その問題に利用者が本システム上でパズル形式で回答するという機能である。 \section{学習内容について} -プログラミング言語学習で学習する単元の一覧は図\ref{tab:unit}のとおりである。 +プログラミング言語学習で主に学習する単元の一覧は図\ref{tab:unit}のとおりである。 本研究で作成したシステムを利用者がWeb上で利用する際に学習するプログラミング言語は東北公益文科大学の基礎プログラミングの授業でも扱われているRubyとし,内容は上記の単元の中でもプログラミングをする際によく使われる制御構造,メソッドの一部の範囲とする。 \begin{table}[hbtp] @@ -205,8 +207,6 @@ \hline ハッシュ & ハッシュとは,ハッシュの利用方法 など \\ \hline - など & \\ - \hline \end{tabular} \end{table} @@ -228,11 +228,12 @@ \begin{itemize} \item Unity version 2021.3.25f1 - Unityとは主に2D,3Dゲームの制作に用いられるゲーム制作エンジンで簡単なゲームから複雑なゲームまで様々なゲーム開発に用いられている。 -\\ 他の選択肢としてJavaScriptを用いてWebサイト上に直接システムを表示する方法や,他の無料ゲーム制作エンジンを利用して制作していくという方法もあったが,JavaScriptだと書くコードの量が多くなりそうであったことと,Unityのシェア率がゲーム制作エンジンの中で1番高いため,インターネット上に落ちている情報が一番多いと考えたため使用することに決めた。 + Unityとは主に2D,3Dゲームの開発に用いられるゲーム開発エンジンで簡単なゲームから複雑なゲームまで様々なゲーム開発に用いられている。 + + 他の選択肢としてJavaScriptを用いてWebサイト上に直接システムを表示する方法や,他の無料ゲーム開発エンジンを利用して制作していくという方法もあったが,2D,3Dのどちらでシステムを作っていくかを決めたときにUnityであればどちらも対応できること,開発したシステムを様々なプラットフォームに対応させたいときに他のゲーム開発エンジンを使用するよりも簡単であると考えたため使用することに決めた。 \item C# - C#とはマイクロソフトが開発したプログラミング言語でオブジェクト指向型の言語であり,GUIアプリ開発や,Webアプリ開発,ゲーム開発などに使われる。今回はUnityにプログラムを入力する際に使用。 + C#とはマイクロソフトが開発したプログラミング言語でオブジェクト指向型の言語であり,GUIアプリ開発や,Webアプリ開発,ゲーム開発などに使われる。今回はUnityにプログラムを入力する際に使用する。 \end{itemize} \section{Unityの用語説明} @@ -272,62 +273,26 @@ \subsection{プログラミング言語説明機能の中身} %説明機能の画像と説明機能で用いたスクリプトを貼る。あとスクリプトの説明 ここではプログラミング言語説明機能の際にどのようにして画面の説明部分の切り替えを行っているのかを説明していく。 -\\ プログラミング言語説明機能では説明したいプログラミング言語についての説明が書かれた画像を必要な分用意,表示させ,BACKおよびNEXTボタンで画像が切り替わるようにそれぞれのボタンにスクリプトを当てることで制御している。今回ボタンに実装しているスクリプトは以下ようにしている。 -\begin{itembox}[l]{説明画面の切り替え} - \scriptsize - \begin{verbatim} -using System.Collections; -using System.Collections.Generic; -using UnityEngine; -using UnityEngine.UI; - -public class PhotoChange : MonoBehaviour -{ - private Image img; - private int count = 1; - - void Start() - { - img = GameObject.Find("Images").GetComponent(); - } - - public void Next() - { - count++; - if(count>=7) - count=1; - - img.sprite = Resources.Load("Image/photo" + count.ToString()); - } - - public void Back() - { - count--; - if(count<=0) - count=6; - - img.sprite = Resources.Load("Image/photo" + count.ToString()); - } -} - \end{verbatim} -\end{itembox} +プログラミング言語説明機能では説明したいプログラミング言語についての説明が書かれた画像を必要な分用意,表示させ,BACKおよびNEXTボタンで画像が切り替わるようにそれぞれのボタンにスクリプトを当てることで制御している。今回ボタンに実装しているスクリプトは以下のようにしている。 + +\listinginput[1]{1}{PhotoChange.cs} %このスクリプトを作成する前に,まずUnityでAssetsにResourcesという名前でフォルダを作成し,その直下にImageという用意した画像ファイルを入れるフォルダを用意しておく。画像の名前は今回の場合photo+数字にする。この数字は表示させたい画像の順番にしておく。このスクリプトの内容としては''private Image img''という行で変数に画像のを代入できるようにするためにimage型のimgという変数の宣言を行い,''private int count = 1''という行で用意した画像をどこまで表示させたかを数えるためにcountという変数を宣言しておく。''void Start()''関数ではプログラミング言語説明機能の画面が始まったとき,Unityのヒエラルキー上からImagesという名前のオブジェクトを探し出し、その中のImageコンポーネントをimg変数に取得するということを行ってる。このときUnity上ではヒエラルキーのImages内のImageコンポーネントに1番目に表示したい画像を配置しておく。''public void Next()''関数では実行されるたびにcount変数を増加させていき,用意した説明画像の枚数分以上に数値が大きくなったら(今回用意した枚数は6枚なので7以上になったら)1に戻すという作業を行いながら,''img.sprite = Resources.Load("Image/photo" + count.ToString())''という部分でimgに取得させたImageコンポーネントにResourcesフォルダの中のImageフォルダからスプライト型として”photo”+その時のcountの数値の名前の画像を呼び出して表示している。''public void Back()''関数では呼び出されるごとにcount変数を減らしていき,数値が0になったら用意した説明画像の最後の枚数の数値に戻すということを行いながら,''public void Next()''関数と同じ方法で画像を表示している。この2つ関数の呼び出し方は、Unityの機能を利用している。UnityのUIであるボタンにはOn Click関数というものがあり,そこにこのスクリプトを当てはめたヒエラルキーを渡すことでボタンを押したときにそのヒエラルキー内のスクリプト内にある任意の関数を呼び出すことができるようになっている。そのため,NEXTボタンには''public void Next()''関数をむすびつけ,BACKボタンには''public void Back()''関数を結びつけてそれぞれのボタンが押されたとき対応する関数を呼び出せるようにしている。 \begin{enumerate} \item[] 先にAssetsという場所にResourcesという名前でフォルダを作成し,その中にImageという用意した画像ファイルを入れるためのフォルダを用意しておく。中に入れる画像はphoto+表示させたい順番の数字にしておく。 -\item \verb|"private Image img"|という行で変数に画像のを代入できるようにするためにimage型のimgという変数の宣言を行い,\verb|"private int count = 1"|という行で用意した画像をどこまで表示させたかを数えるためにcountという変数を宣言しておく。 -\item \verb|"void Start()"|関数ではプログラミング言語説明機能の画面が始まったとき,Unityのヒエラルキー上からImagesという名前のオブジェクトを探し出し、その中のImageコンポーネントをimg変数に取得するということを行ってる。このときUnity上ではヒエラルキーのImages内のImageコンポーネントに1番目に表示したい画像を配置しておく。 -\item \verb|"public void Next()"|関数では実行されるたびにcount変数を増加させていき,用意した説明画像の枚数分以上に数値が大きくなったら(今回用意した枚数は6枚なので7以上になったら)1に戻すという作業を行いながら,\verb|"img.sprite = Resources.Load("Image/photo" + count.ToString())"|という部分でimgに取得させたImageコンポーネントにResourcesフォルダの中のImageフォルダからスプライト型として``photo''+その時のcountの数値の名前の画像を呼び出して表示している。 -\item \verb|"public void Back()"|関数では呼び出されるごとにcount変数を減らしていき,数値が0になったら用意した説明画像の最後の枚数の数値に戻すということを行いながら,\verb|public void Next()|関数と同じ方法で画像を表示している。 -\item[] この2つの関数の呼び出し方は、Unityの機能を利用している。UnityのUIであるbuttonには\verb|"On Click"|関数というものがあり,そこにこのスクリプトを当てはめたヒエラルキー内のオブジェクトを渡すことでボタンを押したときにそのオブジェクト内のスクリプト内にある任意の関数を呼び出すことができるようになっている。そのため,NEXTボタンには\verb|"public void Next()"|関数をむすびつけ,BACKボタンには\verb|"public void Back()"|関数を結びつけてそれぞれのボタンが押されたとき対応する関数を呼び出せるようにしている。 +\item 7行目で変数に画像のを代入できるようにするためにimage型の\verb|img|という変数の宣言を行い,8行目で用意した画像をどこまで表示させたかを数えるために\verb|count|という変数を宣言しておく。 +\item 9行目の\verb|Start|関数ではプログラミング言語説明機能の画面が始まったとき,Unityのヒエラルキー上からImagesという名前のオブジェクトを探し出し、その中のImageコンポーネントを\verb|img|変数に取得するということを行ってる。このときUnity上ではヒエラルキーのImages内のImageコンポーネントに1番目に表示したい画像を配置しておく。 +\item 13行目の\verb|Next|関数では実行されるたびに\verb|count|変数を増加させていき,用意した説明画像の枚数分以上に数値が大きくなったら(今回用意した枚数は6枚なので7以上になったら)1に戻すという作業を行いながら,18行目の部分で\verb|img|に取得させたImageコンポーネントにResourcesフォルダの中のImageフォルダからスプライト型として``photo''+その時のcountの数値の名前の画像を呼び出して表示している。 +\item 20行目の\verb|Back|関数では呼び出されるごとに\verb|count|変数を減らしていき,数値が0になったら用意した説明画像の最後の枚数の数値に戻すということを行いながら,\verb|Next|関数と同じ方法で画像を表示している。 +\item[] この2つの関数の呼び出し方は、Unityの機能を利用している。UnityのUIであるbuttonには\verb|On Click|関数というものがあり,そこにこのスクリプトを当てはめたヒエラルキー内のオブジェクトを渡すことでボタンを押したときにそのオブジェクト内のスクリプト内にある任意の関数を呼び出すことができるようになっている。そのため,NEXTボタンには\verb|Next|関数をむすびつけ,BACKボタンには\verb|Back|関数を結びつけてそれぞれのボタンが押されたとき対応する関数を呼び出せるようにしている。 \end{enumerate} \section{パズルクイズ形式学習機能} -本節では,パズルクイズ形式学習機能の画面とそこの含まれる機能を説明する。 +本節では,パズルクイズ形式学習機能の画面とそこに含まれる機能を説明する。 \subsection{パズルクイズ形式学習機能の概要} -パズルクイズ形式学習機能は,システムの利用者が問題の解答を始めたとき問題と解答に使うブロックが表示され,それに対して利用者はパズル形式で回答する機能である。Webに投稿したパズルクイズ形式学習機能の画面を図\ref{figure:unity}に示す。この図の黒い背景の部分が問題および解答欄であり黄色い線でできた四角形一つ一つがブロックである。この解答欄に表示されているブロックの位置を,このコードが正しく動作するように入れ替えることで問題に解答する。解答が終わったら``Complete''と書かれたボタンを押して正解・不正解の判定を行う。このような構図にしたのはシステムの利用者がWebサイトにアクセスする媒体が計算機であってもスマートフォンであっても同じ画面の構図で利用できるようにするためである。 +パズルクイズ形式学習機能は,システムの利用者が問題の解答を始めたとき問題と解答に使うブロックが表示され,それに対して利用者はパズル形式で解答する機能である。Webに投稿したパズルクイズ形式学習機能の画面を図\ref{figure:unity}に示す。この図の黒い背景の部分が問題および解答欄であり黄色い線でできた四角形一つ一つがブロックである。この解答欄に表示されているブロックの位置を,このコードが正しく動作するように入れ替えることで問題に解答する。解答が終わったら``Complete''と書かれたボタンを押して正解・不正解の判定を行う。このような構図にしたのはシステムの利用者がWebサイトにアクセスする媒体が計算機であってもスマートフォンであっても同じ画面の構図で利用できるようにするためである。 \begin{figure}[htb] \centering @@ -341,229 +306,77 @@ ここではパズルクイズ形式学習機能機能の際にどのようにしてブロックの配置変更を行っているのかを説明していく。 \\ ブロックの配置変更は,ブロックすべてを管理しているヒエラルキーにブロックをクリックしたときスクリプト内の変数にそのブロックを保持させ,そこから条件によって動作が変わるようにスクリプトを当てはめることで行っている。今回そのヒエラルキーに当てているスクリプトは以下の通りである。なおこのスクリプトは波線でブロックの配置変更に関わらない部分を省略している。 -\begin{itembox}[l]{ブロックの配置変更(BlockList.cs)} - \scriptsize - \begin{verbatim} -using System.Collections; -using System.Collections.Generic; -using UnityEngine; -public class BlockList : MonoBehaviour -{ - [SerializeField] QuestionList questionList; - [SerializeField] QuestionPanel questionPanel; - [SerializeField] List blocks; - [SerializeField] ResultPanel resultPanel; - [SerializeField] Timer timer; - [SerializeField] GameEndPanel gameEndPanel; - Block selectedBlock; - int[] question; - private void Start() - { - question = questionList.GetQuestion(); - questionPanel.SetImages(question); - timer.CountStart(); - } - 〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜 - public void OnSelectedBlock(Block block) - { - if (selectedBlock == null) - { - Debug.Log("select and have block"); - selectedBlock = block; - selectedBlock.SetSelected(true); - } - else if (selectedBlock != block) - { - Debug.Log("change block"); - (selectedBlock.transform.position, block.transform.position)= - (block.transform.position, selectedBlock.transform.position); - int selectedIndex = blocks.FindIndex(x => x == selectedBlock); - int currentBlockIndex = blocks.FindIndex(x => x== block); - (blocks[selectedIndex], blocks[currentBlockIndex]) = (blocks[currentBlockIndex], blocks[selectedIndex]); - ResetSelectedBlock(); - } - else - { - Debug.Log("anselect block"); - ResetSelectedBlock(); - } - } +\listinginput[1]{1}{BlockList.cs} - void ResetSelectedBlock() - { - selectedBlock.SetSelected(false); - selectedBlock = null; - } - \end{verbatim} -\end{itembox} %このスクリプトを作成する前に,まずブロック自身の情報とブロック自身に対する処理を管理するスクリプトを別で''Block.cs''という名前で作っておく。このBlockという名前はそのままクラス名となる。UnityではC#スクリプトを使用してクラスと呼ばれる独自のオブジェクト型を作成できるため,これにより別のスクリプトで変数を宣言するときなどにBlockという型を使うことができるようになる。このスクリプトの内容としては''Block selectedBlock;''というところでBlockの情報を変数に代入するためにBlock型のselectedBlockという変数を宣言しておき''public void OnSelectedBlock(Block block)''と''void ResetSelectedBlock()''という関数を作成し,組み合わせて実行することでブロックの配置変更が行われるというものになっている。''public void OnSelectedBlock(Block block)''関数ではまずブロックが押されたときにBlock型のblockという変数にそのブロック自身を取得する。この関数の呼び出しとブロックの取得はブロックに個別にOnClick関数を当てはめ、そこにこのスクリプトとこの関数,そのブロック自身を当てはめることで行っている。ブロック自身を取得後if文の部分によって,selectedBlockに何も入っていないとき,すなわちブロックをまだ選択していないとき,selectedBlockに取得したブロックを代入することで保持するという処理を行う。else ifの部分では,selectedBlockにすでにブロックが保持されていて取得したブロックと異なるとき,すなわち1回目とは別のブロックを選択したとき,''(selectedBlock.transform.position, block.transform.position)=(block.transform.position, selectedBlock.transform.position);''の部分によって保持していブロックの座標に今選択したブロックの座標を代入し,今選択したブロックの座標に保持していたブロックの座標を代入するという方法でブロックの位置を入れ替え,''void ResetSelectedBlock()''関数で選択を解除するという処理を行っている。elseの部分では,1回目と2回目で同じブロックを選んだとき''void ResetSelectedBlock()''関数で選択を解除するという処理を行っている。 \begin{enumerate} \item[] まずブロック自身の情報とブロック自身に対する処理を管理するスクリプトを別で``Block.cs''という名前で作っておく。このBlockという名前はそのままクラス名となる。UnityではC#スクリプトを使用してクラスと呼ばれる独自のオブジェクト型を作成できるため,これにより別のスクリプトで変数を宣言するときなどにBlockという型を使うことができるようになる。 -\item[] このスクリプトの大まかな内容は\verb|"Block selectedBlock;"|というところでBlockの情報を変数に代入するためにBlock型の\verb|"selectedBlock"|という変数を宣言しておき\verb|"OnSelectedBlock(Block block)"|と\verb|"void ResetSelectedBlock()"|という関数を作成し,組み合わせて実行することでブロックの配置変更が行われるというものになっている。 -\item \verb|"OnSelectedBlock(Block block)"|関数ではまずブロックが押されたときにBlock型の\verb|"block"|という変数にそのブロック自身を取得する。この関数の呼び出しとブロックの取得はブロックに個別に\verb|"OnClick"|関数を当てはめ、そこにこのスクリプトとこの関数,そのブロック自身を当てはめることで行っている。 -\item \verb|"if"|文の部分によって,\verb|"selectedBlock"|に何も入っていないとき,すなわちブロックをまだ選択していないとき,\verb|"selectedBlock"|に取得したブロックを代入することで保持するという処理を行う。 -\item \verb|"else if"|の部分では,\verb|"selectedBlock"|にすでにブロックが保持されていて取得したブロックと異なるとき,すなわち1回目とは別のブロックを選択したとき, +\item[] このスクリプトの大まかな内容は12行目で\verb|Block|の情報を変数に代入するためにBlock型の\verb|selectedBlock|という変数を宣言しておき21行目の\verb|OnSelectedBlock|関数と46行目の\verb|ResetSelectedBlock|関数を作成し,組み合わせて実行することでブロックの配置変更が行われるというものになっている。 +\item 21行目の\verb|OnSelectedBlock|関数ではまずブロックが押されたときにBlock型の\verb|block|という変数にそのブロック自身を取得する。この関数の呼び出しとブロックの取得はブロックに個別にOnClick関数を当てはめ、そこにこのスクリプトとこの関数,そのブロック自身を当てはめることで行っている。 +\item 23行目の\verb|if|文の部分によって,\verb|selectedBlock|に何も入っていないとき,すなわちブロックをまだ選択していないとき,\verb|selectedBlock|に取得したブロックを代入することで保持するという処理を行う。 +\item 29行目の\verb|else if|の部分では,\verb|selectedBlock|にすでにブロックが保持されていて取得したブロックと異なるとき,すなわち1回目とは別のブロックを選択したとき,32,33行目の部分で %(selectedBlock.transform.position, block.transform.position)=(block.transform.position, selectedBlock.transform.position)の部分によって -保持していブロックの座標に今選択したブロックの座標を代入し,今選択したブロックの座標に保持していたブロックの座標を代入するという方法でブロックの位置を入れ替え,\verb|"void ResetSelectedBlock()"|関数で選択を解除するという処理を行っている。 -\item elseの部分では,1回目と2回目で同じブロックを選んだとき\verb|"void ResetSelectedBlock()"|関数で選択を解除するという処理を行っている。 +保持していブロックの座標に今選択したブロックの座標を代入し,今選択したブロックの座標に保持していたブロックの座標を代入するという方法でブロックの位置を入れ替え,\verb|ResetSelectedBlock|関数で選択を解除するという処理を行っている。 +\item \verb|else|の部分では,1回目と2回目で同じブロックを選んだとき\verb|ResetSelectedBlock|関数で選択を解除するという処理を行っている。 \end{enumerate} \subsection{パズルクイズ形式学習機能の中身ー正誤判定について} ここではパズルクイズ形式学習機能機能の際にどのようにして問題の正誤判定を行っているのかを説明していく。 \\ 正誤判定はそれぞれのブロックにidと画像をひも付けた情報をもたせ,解答を完了したとき問題ごとの正しいブロックの位置の要素番号とidが一致しているかどうかで行っている。正誤判定の際に使用しているスクリプトは以下のとおりである。なお波線の部分はスクリプトの内容を省略している。 -\begin{itembox}[l]{ブロックに画像とidの情報をもたせる(SpriteSO.cs)} - \scriptsize - \begin{verbatim} -using System.Collections; -using System.Collections.Generic; -using UnityEngine; -[CreateAssetMenu] -public class SpriteSO : ScriptableObject -{ - [SerializeField] Sprite sprite; - [SerializeField] int id; +\listinginput[1]{1}{SpriteSO.cs} - public Sprite Sprite { get => sprite; } - public global::System.Int32 ID { get => id; } -} - \end{verbatim} -\end{itembox}  %まずSpriteSO.csの説明から行う。UnityではScriptableObjectというものを使うことでデーテベース作成の際に画像と数値をひも付けるなどをすることができるため,このスクリプト上で''[CreateAssetMenu]''から''[SerializeField] int id''のように書くことで,Asset上に画像データとidをひも付けられるデータベースを作成できるようになる。そして,他のスクリプトで編集はできないが利用はできるようにするため''public Sprite Sprite { get => sprite; }''''public global::System.Int32 ID { get => id; }''というように書くことで画像と数値を他のスクリプトや関数で使えるように公開する。その後Unity上でSpriteSOのデータベースをブロックの種類分作成し,画像とidとなる数値を与えていく。これでブロックのデータベースは完成である。 \begin{enumerate} \item[] ``まずSpriteSO.cs''の説明から行う。 -\item[] Unityでは``ScriptableObject''というものを使うことでデーテベース作成の際に画像と数値をひも付けるなどをすることができるため,今回はそれを使う。 -\item このスクリプト上で\verb|"[CreateAssetMenu]"|から\verb|"[SerializeField] int id"|までのように書くことで,Asset上に画像データとidをひも付けられるデータベースを作成できるようになる。 -\item 他のスクリプトでも利用できるようにするため\verb|"public Sprite Sprite { get => sprite; }"|と -\verb|"public global::System.Int32 ID { get => id; }"|というように書くことで画像と数値を他のスクリプトや関数で使えるように公開する。 +\item[] 今回はUnityの機能である``ScriptableObject''を使う。``ScriptableObject''とはデータベース作成の際に画像と数値をひも付け,マスターデータとしての使用などをすることができる機能である。 +\item このスクリプト上で5行目から9行目までのように書くことで,Asset上に画像データとidをひも付けられるデータベースを作成できるようになる。 +\item 他のスクリプトでも利用できるようにするため11行目と12行目というように書くことで画像と数値を他のスクリプトや関数で使えるように公開する。 \item Unity上でSpriteSOのデータベースをブロックの種類分作成し,画像とidとなる数値を与えていく。 \item[] これでブロックのデータベースは完成である。 \end{enumerate} -\begin{itembox}[l]{ブロックに画像とidの情報をブロックに渡す(Block.cs)} - \scriptsize - \begin{verbatim} -using System.Collections; -using System.Collections.Generic; -using UnityEngine; -using UnityEngine.UI; +\listinginput[1]{1}{Block.cs} -public class Block : MonoBehaviour -{ - bool isFrontSprite; - [SerializeField] SpriteSO frontSpriteSO; - [SerializeField] SpriteSO backSpriteSO; - [SerializeField] GameObject backImage; - [SerializeField] Image image; -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - void SetSprite() - { - if(isFrontSprite) - { - image.sprite = frontSpriteSO.Sprite; - } - else - { - image.sprite = backSpriteSO.Sprite; - } - } -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - public int GetID() - { - if(isFrontSprite) - { - return frontSpriteSO.ID; - } - return backSpriteSO.ID; - } -} - \end{verbatim} -\end{itembox} % 次に``Block.cs''の説明を行う。このスクリプトはブロック自身のことを管理しており各ブロックに実装している。このスクリプトで''[SerializeField] SpriteSO frontSpriteSO;''''[SerializeField] SpriteSO backSpriteSO;''と宣言することでfrontSpriteSOとbackSpriteSOにSpriteSO.csから情報を読み取れるようにしている。そして''void SetSprite()''関数でこの関数が呼ばれたとき先に宣言しておいた''bool isFrontSprite;''がtrueならUIのimageの画像にfrontSpriteSOの画像を代入し,そうでなければbackSpriteSOの画像を代入することでブロックに表と裏の情報をもたせている。次に''public int GetID()''関数にif文とreturnを用いることでこの関数が呼ばれたときisFrontSpriteがtrueのときfrontSpriteSOのIDを返しそうでなければbackSpriteSOのIDを返すということを行っている。その後Unity上でヒエラルキー上の各ブロックについているBlockコンポーネントのFrontSpriteSOとBackSpriteSOの部分に対応させたいAsset上のSpriteSOを当てはめる。これにより各ブロックへのデータベースから画像とIDの受け渡しは完了である。 \begin{enumerate} \item[] 次に``Block.cs''の説明を行う。 \item[] このスクリプトはブロック自身のことを管理しており各ブロックに実装している。 -\item このスクリプトで\verb|"[SerializeField] SpriteSO frontSpriteSO;"|と -\\\verb|"[SerializeField] SpriteSO backSpriteSO;"|のように宣言することで\verb|"frontSpriteSO"|と\verb|"backSpriteSO"|に``SpriteSO.cs''から情報を読み取れるようにしている。 -\item \verb|"void SetSprite()"|関数でこの関数が呼ばれたとき先に宣言しておいた\verb|"bool isFrontSprite;"|がtrueならUIの\verb|"image"|\verb|"frontSpriteSO"|の画像を代入し,そうでなければ\verb|"backSpriteSO"|の画像を代入することでブロックに表と裏の情報をもたせている。 -\item \verb|"public int GetID()"|関数に\verb|"if"|文と\verb|"return"|を用いることでこの関数が呼ばれたとき\verb|"isFrontSprite"|のIDを返しそうでなければ\verb|"backSpriteSO"|のIDを返すということを行っている。 +\item このスクリプトで9行目と10行目のように宣言することで\verb|frontSpriteSO|と\verb|backSpriteSO|に``SpriteSO.cs''から情報を読み取れるようにしている。 +\item \verb|SetSprite|関数でこの関数が呼ばれたとき先に宣言しておいた8行目の\verb|isFrontSprite|がtrueならUIの\verb|"image"|に\verb|"frontSpriteSO"|の画像を代入し,そうでなければ\verb|"backSpriteSO"|の画像を代入することでブロックに表と裏の情報をもたせている。 +\item GetID関数に\verb|"if"|文と\verb|"return"|を用いることでこの関数が呼ばれたとき\verb|"frontSpriteSO"|のIDを返しそうでなければ\verb|"backSpriteSO"|のIDを返すということを行っている。 \item Unity上でヒエラルキー上の各ブロックについている``Block''コンポーネントの``FrontSpriteSO''と``BackSpriteSO''の部分に対応させたいAsset上の``SpriteSO''を当てはめる。 \item[] これにより各ブロックへのデータベースから画像とIDの受け渡しは完了である。 - - \end{enumerate} -\begin{itembox}[l]{答えを配置する(QuestionPanel.cs)} - \scriptsize - \begin{verbatim} -using System.Collections; -using System.Collections.Generic; -using UnityEngine; -using UnityEngine.UI; -public class QuestionPanel : MonoBehaviour -{ - [SerializeField] List images; - [SerializeField] List spriteSOList; +\listinginput[1]{1}{QuestionPanel.cs} +\listinginput[1]{1}{QuestionList.cs} - public void SetImages(int[] idList) - { - for (int i = 0; i < idList.Length; i++) - { - SpriteSO spriteSO = spriteSOList.Find(element => element.ID == idList[i]); - images[i].sprite = spriteSO.Sprite; - } - } -} - \end{verbatim} -\end{itembox} -\begin{itembox}[l]{答えを配置する(QuestionList.cs)} - \scriptsize - \begin{verbatim} -using System.Collections; -using System.Collections.Generic; -using UnityEngine; -public class QuestionList : MonoBehaviour -{ - List questions = new List() - { - new int[8] {0,1,2,3,4,5,6,7}, - }; - - public int[] GetQuestion() - { - return questions[0]; - } -} - \end{verbatim} -\end{itembox} % 次にQuestionPanel.csとQuestionList.csの説明を行う。QuestionPanel.csでは,答えの配置を行っている。スクリプトを書く前に,ヒエラルキーにQuestionPanelというオブジェクトを作成,その中に答え用のブロックを管理するListというオブジェクトを作成し,その中に答え用のブロックを作成する。このスクリプトはQuestionPanelオブジェクトに当てる。スクリプトに移り,''[SerializeField] List<Image> images;''''[SerializeField] List<SpriteSO> spriteSOList;''と書くことでQuestionPanelオブジェクトのコンポーネントに答え用のブロックとSpriteSOを当てることができるようになるため,当てていく。''public void SetImages(int[] idList)''関数ではこの関数が呼ばれたときに,答えのidが入った配列を受け取ってその配列のidの数だけ受け取った配列の中のidと一致するidを持つものをspriteSOListから探してきてspriteSOに代入し,そのidに対応する画像を配列の要素番号に合ったimagesコンポーネントの画像に代入して表示するということを繰り返し行っている。 -\\% QuestionList.csでは答えを複数持てるように答えの配列を配列化している。''List<int[]> questions = new List<int[]>()''の部分が答えの配列を配列化した部分である。 -\\% これらの関数''public void SetImages(int[] idList)''と''List<int[]> questions = new List<int[]>()''は上記したBlockList.csで呼び出している。このスクリプトの''int[] question;''''[SerializeField] QuestionList questionList;''''[SerializeField] QuestionPanel questionPanel;''の宣言によってBlockListオブジェクトのコンポーネントにQuestionListとQuestionPanelが追加されるためそれぞれ同じ名前のスクリプトを当てはめる。''private void Start()''関数部分によってquestion変数にQuestionListの''GetQuestion();''関数が代入される形で答えの配列呼び出され,''questionPanel.SetImages(question);''と書くことでQuestionPanelの''SetImages()''関数にquestion変数の配列が入った形で呼び出される。 +% QuestionList.csでは答えを複数持てるように答えの配列を配列化している。''List<int[]> questions = new List<int[]>()''の部分が答えの配列を配列化した部分である。 +% これらの関数''public void SetImages(int[] idList)''と''List<int[]> questions = new List<int[]>()''は上記したBlockList.csで呼び出している。このスクリプトの''int[] question;''''[SerializeField] QuestionList questionList;''''[SerializeField] QuestionPanel questionPanel;''の宣言によってBlockListオブジェクトのコンポーネントにQuestionListとQuestionPanelが追加されるためそれぞれ同じ名前のスクリプトを当てはめる。''private void Start()''関数部分によってquestion変数にQuestionListの''GetQuestion();''関数が代入される形で答えの配列呼び出され,''questionPanel.SetImages(question);''と書くことでQuestionPanelの''SetImages()''関数にquestion変数の配列が入った形で呼び出される。 \begin{enumerate} -\item[] ``QuestionPanel.cs''と``QuestionList.cs''の解説を行う。 +\item[] 次に``QuestionPanel.cs''と``QuestionList.cs''の解説を行う。 \item[] ``QuestionPanel.cs''では答えの配置を行っている。 \item ヒエラルキーに``QuestionPanel''というオブジェクトを作成,その中に答え用のブロックを管理する``List''というオブジェクトを作成し,その中に答え用のブロックを作成する。 -\item このスクリプトをQuestionPanelオブジェクトに当てる。 -\item \verb|"[SerializeField] List images;"|と\verb|"[SerializeField] List spriteSOList;"|と書くことで``QuestionPanel''オブジェクトのコンポーネントに答え用のブロックと``SpriteSO''を当てることができるようになるため,当てていく。 -\item \verb|"public void SetImages(int[] idList)"|関数ではこの関数が呼ばれたときに,答えのidが入った配列を受け取ってその配列のidの数だけ受け取った配列の中のidと一致するidを持つものを``spriteSOList''から探してきて``spriteSO''に代入し,そのidに対応する画像を配列の要素番号に合った``images''コンポーネントの画像に代入して表示するということを繰り返し行っている。 +\item このスクリプトを``QuestionPanel''オブジェクトに当てる。 +\item 8行目と9行目のように書くことで``QuestionPanel''オブジェクトのコンポーネントに答え用のブロックと``SpriteSO''を当てることができるようになるため,当てていく。 +\item SetImages関数ではこの関数が呼ばれたときに,答えのidが入った配列を受け取ってその配列のidの数だけ受け取った配列の中のidと一致するidを持つものを``spriteSOList''から探してきて``spriteSO''に代入し,そのidに対応する画像を配列の要素番号に合った``images''コンポーネントの画像に代入して表示するということを繰り返し行っている。 \end{enumerate} \begin{enumerate} \item[] ``QuestionList.cs''では答えを複数持てるように答えの配列を配列化している。 -\item \verb|"List questions = new List()"|の部分が答えの配列を配列化した部分である。 -\item[] これらの関数\verb|"public void SetImages(int[] idList)"|と\verb|"List questions = new List()"|は上記した``BlockList.cs''で呼び出している。 -\item このスクリプトの\verb|"int[] question;"| -\\\verb|"[SerializeField] QuestionList questionList;"| -\\\verb|"[SerializeField] QuestionPanel questionPanel;"| -\\の宣言によってBlockListオブジェクトのコンポーネントにQuestionListとQuestionPanelが追加されるためそれぞれ同じ名前のスクリプトを当てはめる。 -\item \verb|"private void Start()"|関数部分によって\verb|"question"|変数に``QuestionList''の\verb|"GetQuestion();"|関数が代入される形で答えの配列呼び出され,\verb|"questionPanel.SetImages(question);"|と書くことで``QuestionPanel''の\verb|"SetImages()"|関数に\verb|"question"|変数の配列が入った形で呼び出される。 +\item 7から10行目の部分が答えの配列を配列化した部分である。この配列の中身はは\verb|GetQuestion|関数によって選ばれ,値が返される。 +\item[] これらの\verb|SetImages|関数と選ばれた配列の値は,上記した``BlockList.cs''の17行目で呼び出している。 +\item ``BlockList.cs''スクリプトの6,7,13行目の宣言によってBlockListオブジェクトのコンポーネントに``QuestionList''と``QuestionPanel''が追加されるためそれぞれ同じ名前のスクリプトを当てはめる。 +\item \verb|Start|関数部分によって\verb|"question"|変数に``QuestionList''の\verb|GetQuestion|関数が代入される形で答えの配列呼び出され,17行目のようにと書くことで``QuestionPanel''のSetImages関数に\verb|"question"|変数の配列が入った形で呼び出される。 \end{enumerate} @@ -592,39 +405,50 @@ } \end{verbatim} \end{itembox} + +\listinginput[1]{1}{QuestionList2.cs} + % ここから正誤判定について解説を行う。正誤判定のための関数はBlockList.csにかかれている。正誤判定を行うために,まず''[SerializeField] List<Block> blocks;''を宣言ることでこのスクリプトが当ててあるBlockListオブジェクトのコンポーネントにブロックの情報を入れることができるようになるため,Unity上で操作しておく。このときのブロックを入れる順番は解答開始時に表示したい順番にしておく。これでこのスクリプトは解答用の各ブロックの画像とidの情報と答えの各ブロックのidと画像を持つようになる。そして''public void CheckAnswer()''関数によって,答えの配列が入ったquestion配列のそのときの繰り返し回数番目のidと並び替えたブロックのその時の繰り返し番目が持っているidが一致していないときがあれば不正解を示す処理を行い値を返すということをquestion配列の要素の数だけ繰り替えし,繰り返しが終わって間違いがなければ正解を示す処理を行うことで正誤判定を行っている。その後,Unityの画面で解答完了のボタンUIを作成し,そこのOnClick関数を利用してボタンが押されたとき''public void CheckAnswer()''関数が呼ばれるように当てはめる。しかし,これだけでは画面上の解答用のブロックが配置変更されるのみで内部的にブロックの配列の変更が行われない。そのため,BlockList.csのブロックの配置変更の説明の際に表示した部分の''int selectedIndex = blocks.FindIndex(x => x == selectedBlock);''の宣言で取得したすべてのブロックの情報から1回目に選んだブロックと一致する場所の要素番号をselectedIndex変数に代入し''int currentBlockIndex = blocks.FindIndex(x => x== block);''の宣言で取得したすべてのブロックの情報から2回目に選んだブロックと一致する場所の要素番号をcurrentBlockIndex変数に代入する。そして''(blocks[selectedIndex], blocks[currentBlockIndex]) = (blocks[currentBlockIndex], blocks[selectedIndex]);''の処理によって1回目で選んだブロックの要素番号と2回目で選んだブロックの要素番号を入れ替え,内部的なブロックの配列変更を行っている。 + + + + + + +\listinginput[1]{1}{BlockList2.cs} + \begin{enumerate} \item[] ここから正誤判定について解説を行う。 \item[] 正誤判定のための関数は``BlockList.cs''にかかれている。 -\item \verb|"[SerializeField] List blocks;"|を宣言ることでこのスクリプトが当ててある``BlockList''オブジェクトのコンポーネントにブロックの情報を入れることができるようになるため,Unity上で操作しておく。 +\item 5行目の\verb|blocks|変数を宣言することでこのスクリプトが当ててある``BlockList''オブジェクトのコンポーネントにブロックの情報を入れることができるようになるため,Unity上で操作しておく。 \\このときのブロックを入れる順番は解答開始時に表示したい順番にしておく。これでこのスクリプトは解答用の各ブロックの画像とidの情報と答えの各ブロックのidと画像を持つようになる。 -\item \verb|"public void CheckAnswer()"|関数によって,答えの配列が入った\verb|"question"|配列のそのときの繰り返し回数番目のidと並び替えたブロックのその時の繰り返し番目が持っているidが一致していないときがあれば不正解を示す処理を行い値を返すということを\verb|"question"|配列の要素の数だけ繰り替えし,繰り返しが終わって間違いがなければ正解を示す処理を行うことで正誤判定を行っている。 -\item Unityの画面で解答完了のボタンUIを作成し,そこの\verb|"OnClick"|関数を利用してボタンが押されたとき\verb|"public void CheckAnswer()"|関数が呼ばれるように当てはめる。 +\item 8行目の\verb|CheckAnswer|関数によって,答えの配列が入った\verb|"question"|配列のそのときの繰り返し回数番目のidと並び替えたブロックのその時の繰り返し番目が持っているidが一致していないときがあれば不正解を示す処理を行い,値を返すということを\verb|"question"|配列の要素の数だけ繰り替えし,繰り返しが終わって間違いがなければ正解を示す処理を行うことで正誤判定を行っている。 +\item Unityの画面で解答完了のボタンUIを作成し,そこの\verb|"OnClick"|関数を利用してボタンが押されたとき\verb|CheckAnswer|関数が呼ばれるように当てはめる。 \end{enumerate} \begin{enumerate} \item[]しかし,これだけでは画面上の解答用のブロックが配置変更されるのみで内部的にブロックの配列の変更が行われないため以下のことを行う。 -\item ``BlockList.cs''のブロックの配置変更の説明の際に表示した部分の -\\\verb|"int selectedIndex = blocks.FindIndex(x => x == selectedBlock);"| -\\の宣言で取得したすべてのブロックの情報から1回目に選んだブロックと一致する場所の要素番号を\verb|"selectedIndex"|変数に代入し,\verb|"int currentBlockIndex = blocks.FindIndex(x => x== block);"|の宣言で取得したすべてのブロックの情報から2回目に選んだブロックと一致する場所の要素番号を\verb|"currentBlockIndex"|変数に代入する。 -\item \verb|"(blocks[selectedIndex], blocks[currentBlockIndex]) =| -\\\verb|(blocks[currentBlockIndex], blocks[selectedIndex]);"| -\\の処理によって1回目で選んだブロックの要素番号と2回目で選んだブロックの要素番号を入れ替え,内部的なブロックの配列変更を行っている。 +\item ``BlockList.cs''のブロックの配置変更の説明の際に表示した部分の34行目の宣言で取得したすべてのブロックの情報から1回目に選んだブロックと一致する場所の要素番号を\verb|"selectedIndex"|変数に代入し,35行目の宣言で取得したすべてのブロックの情報から2回目に選んだブロックと一致する場所の要素番号を\verb|"currentBlockIndex"|変数に代入する。 +\item 36から37行目の処理によって1回目で選んだブロックの要素番号と2回目で選んだブロックの要素番号を入れ替え,内部的なブロックの配列変更を行っている。 \end{enumerate} - - 以上がどのようにして正誤判定を行っているかの説明である。 + + + + + + \section{問題の内容} -問題の内容は、東北公益文科大学が「基礎プログラミングI・II」で使用している教授が作成したWebページの中にある積算プログラムのコード(図.\ref{figure:sekisan})を参考にし,そのコード内の単語の配置を変えたものを出題する。 +問題の内容は、東北公益文科大学が「基礎プログラミングI・II」の講義ノートにある積算プログラムのコード(図.\ref{figure:sekisan})を参考にし,そのコード内の単語の配置を変えたものを出題する。 \begin{figure}[htb] \centering \includegraphics[width=11cm]{sekisan.png} - \caption{積算プログラムの図} + \caption{積算プログラムのコード提示} \label{figure:sekisan} \end{figure} -\chapter{予備実験・実験結果・解釈} +\chapter{システムの検証} \section{実験方法} 本研究では,予備実験として山形県立酒田光陵高等学校情報科の2年生の生徒20名を被験者とし,個人のスマートフォンからシステムを利用してもらった後,アンケートに回答してもらいその結果によって評価をシステム改良に取り入れた。実験では20名全員がシステムの利用,およびアンケートの記入を行った(図.\ref{figure:test})。 前提として酒田高陵高校の生徒らはすでに授業でテキスト型言語を学んだ経験はあるが,アンケートに答えてもらう際には,自身が初めてテキスト型言語を学習する学習者であった場合を想定してもらっている。 @@ -637,23 +461,35 @@ アンケートの内容は以下のとおりである。 \begin{itemize} +\begin{breakbox} \item[質問1]1週間のうち家でプログラミングの勉強を行う際,合計どのくらいの時間行いますか。 + \end{breakbox} この質問の回答結果から,被験者のプログラミングの学習頻度を調べることで被験者のプログラミング能力がどれくらいあるのかを判断する。 +\begin{breakbox} + \item[質問2]小学校または中学校でスクラッチなどのブロックを使ったプログラミングを行ったことがありますか。また,高校にPyhonやJavaなどのプログラミング言語を使った授業はありますか。 + \end{breakbox} この質問の回答結果から,被験者のビジュアル型言語使用経験と高校でのテキスト型言語使用経験を調べ,今回の実験の被験者としてふさわしいかを調べる。 +\begin{breakbox} \item[質問3]文字や記号のみを使ってプログラミングを学習するのに比べ,今回のようなプログラミング学習方法は簡単でしたか。[4段階評価] + \end{breakbox}  この質問の回答結果から,被験者がテキスト型言語を教科書や参考書を使用して学習するのに比べ,このシステムを使用して学習する方法は簡単であったかを調べる。 +\begin{breakbox} \item[質問4]今回行ってもらったプログラムの学習方法は分かりやすかったですか。[4段階評価] + \end{breakbox}  この質問の回答結果から,被験者がこのシステムを使用して学習する際に操作方法やどのように進めていけばよいかなどが分かりやすかったかどうかを調べる。 +\begin{breakbox} \item[質問5]今回行ってもらった方法によるプログラミング学習方法はプログラミング能力向上や学校の授業の予習に役立つと思いますか。 + \end{breakbox}  この質問の回答結果から,システムの学習方法がプログラミング能力向上や授業の予習に役立ちそうかどうかを調べる。 - +\begin{breakbox} \item[質問6]どうしたらこのプログラムがもっと良くなるか自由にお書きください。 + \end{breakbox} 被験者からシステムに対する意見を書いてもらい,システムの改善に繋げられるようにする。 \end{itemize} @@ -736,28 +572,45 @@ \chapter{実験} \section{実験方法} -システムの改善内容の効果を確認するための実験として,東北公益文科大学が実施している小学5年生から中学3年生までが対象であるプログラミングの学習を目的とした塾である「ジュニアドクター鳥海塾」の塾生3名と20から22歳の大学生13名の計16名を被験者とし,改良後のシステムを使用してもらったあとにアンケートに答えてもらうことを行った。予備実験の際には生徒目線の結果得ることができたため,今回は教師目線の意見を得るために,前提として他人にプログラミングを教えた経験のある人には,アンケート回答時に教師としての立場から答えてもらっている。 +システムの改善内容の効果を確認するための実験として,東北公益文科大学が実施している将来科学技術革新を牽引する傑出した人材育成に向けて,小学5年生から中学3年生までを対象にし,その能力を更に伸ばすことを目的とした塾である「ジュニアドクター鳥海塾」の第2段階塾生3名と20から22歳の大学生13名の計16名を被験者とし,改良後のシステムを使用してもらったあとにアンケートに答えてもらうことを行った。予備実験の際には生徒目線の結果得ることができたため,今回は指導者目線の意見を得るために,前提として他人にプログラミングを教えた経験のある人には,アンケート回答時に指導者としての立場から答えてもらっている。 \\ アンケートの内容は以下のとおりである。 \begin{itemize} +\begin{breakbox} \item[質問1]他人にプログラミングを教えたことはありますか。 - - この質問の回答結果から,その被験者がプログラミングの先生としての経験があるかどうかを確認する。 +\end{breakbox} + この質問の回答結果から,その被験者がプログラミングの指導者としての経験があるかどうかを確認する。 +\begin{breakbox} \item[質問2]文字や記号のみを使ってプログラミングを学習するのに比べ,今回のようなプログラミング学習方法は簡単でしたか。[4段階評価] +\end{breakbox}  この質問の回答結果から,被験者がテキスト型言語を教科書や参考書を使用して学習するのに比べ,このシステムを使用して学習する方法は簡単であったかを調べる。 +\begin{breakbox} \item[質問3]今回行ってもらったプログラムの学習方法は分かりやすかったですか。[4段階評価] +\end{breakbox}  この質問の回答結果から,被験者がこのシステムを使用して学習する際に操作方法やどのように進めていけばよいかなどが分かりやすかったかどうかを調べる。 +\begin{breakbox} \item[質問4]問題の難易度はどうでしたか[4段階評価] +\end{breakbox}  この質問の回答結果から,新しく追加した練習問題の難易度はどうだったかを判断する。 +\begin{breakbox} \item[質問5]今回のプログラムの改良内容やプログラム自信についての意見をお書きください。  +\end{breakbox}  この質問の回答結果から,改良内容に対する意見や他に改良すべきところはないかなどの意見をもらう。 \end{itemize} \section{実験結果} -アンケートの結果,質問1であると答えた人は11人で全体の68.75%,ないと答えた人は5人で全体の31.25%であった。この11人の回答結果は教師目線の意見として考える。質問2の全体の結果は,「まあまあ簡単」以上の回答を行った人が14人の87.5%であり,そのうち教師目線の回答は11人中全員が「まあまあ簡単」以上の回答を行った。このことから予備実験と合わせてこのシステムによる学習方法は,生徒目線から見ても教師目線から見ても簡単であるということが示された。また,この質問で「簡単」と回答した人は全体である16人中10人のであり,予備実験と比べてこの回答の割合が上昇していることから,今回の改善内容は学習方法を簡単にするということに関してうまくできたと考えられる。質問3の全体の結果は,「まあまあわかりやすい」以上の回答を行ったのは14人の87.5%であり,そのうち教師目線の回答は11人中10人の90.91%であった。このことから予備実験と合わせてこのシステムの操作方法がわかりやすかったことが示された。しかし,この質問で「わかりやすい」と回答した人は全体である16人中6人で予備実験と比べて割合が増加することがなかった。このことから,今回の改善内容だけではシステムの操作方法をわかりやすくすることに関しては足りないということが示された。質問4の全体の結果は,「まあまあ簡単」以上の回答を行った人が14人の87.5%であり,そのうち教師目線の回答は11人中10人が「まあまあ簡単」以上の回答を行った。この結果より追加した問題から元あった問題の難易度はちょうどよかったと考える。質問5にあった意見としては,「説明を見ながら解答ができたら良かった」「説明のページに詰め込みすぎ」「もっと様々な難易度を選べるようにしてほしい」「SEやBGM,アニメーションの追加,点数の記録やどこを間違えたか,ランキングがあると学習意欲が高まると思う」「``Tutorial''などの操作部分の表記方法が統一されればわかりやすいと思う」などがあった。 +アンケートの結果,質問1であると答えた人は11人で全体の68.75%,ないと答えた人は5人で全体の31.25%であった。この11人の回答結果は指導者目線の意見として考える。 + +質問2の全体の結果は,「まあまあ簡単」以上の回答を行った人が14人の87.5%であり,そのうち指導者目線の回答は11人中全員が「まあまあ簡単」以上の回答を行った。このことから予備実験と合わせてこのシステムによる学習方法は,生徒目線から見ても指導者目線から見ても簡単であるということが示された。また,この質問で「簡単」と回答した人は全体である16人中10人のであり,予備実験と比べてこの回答の割合が上昇していることから,今回の改善内容は学習方法を簡単にするということに関してうまくできたと考えられる。 + +質問3の全体の結果は,「まあまあわかりやすい」以上の回答を行ったのは14人の87.5%であり,そのうち指導者目線の回答は11人中10人の90.91%であった。このことから予備実験と合わせてこのシステムの操作方法がわかりやすかったことが示された。しかし,この質問で「わかりやすい」と回答した人は全体である16人中6人で予備実験と比べて割合が増加することがなかった。このことから,今回の改善内容だけではシステムの操作方法をわかりやすくすることに関しては足りないということが示された。 + +質問4の全体の結果は,「まあまあ簡単」以上の回答を行った人が14人の87.5%であり,そのうち指導者目線の回答は11人中10人が「まあまあ簡単」以上の回答を行った。この結果より追加した問題から元あった問題の難易度はちょうどよかったと考える。 + +質問5にあった意見としては,「説明を見ながら解答ができたら良かった」「説明のページに詰め込みすぎ」「もっと様々な難易度を選べるようにしてほしい」「SEやBGM,アニメーションの追加,点数の記録やどこを間違えたか,ランキングがあると学習意欲が高まると思う」「``Tutorial''などの操作部分の表記方法が統一されればわかりやすいと思う」などがあった。 \section{システムの改善案} 今回のアンケートの結果,質問4から今回の改善だけではシステムのわかりやすさを向上させることはできなかった。原因として質問5の意見にもあった「``Tutorial''などの操作部分の表記方法が統一されればわかりやすいと思う」というところが改善されればシステムのわかりやすさが向上すると考えられる。この問題は,操作部分の文字を日本語にすることで改善されると考えられる。そうすることで,そのボタンを押したときにどのような画面に移動するのかやなんのためのボタンなのかがわかりやすくなると考えられるためである。 diff --git a/c121108-2024.toc b/c121108-2024.toc index 1c6a6bf..027d1aa 100644 --- a/c121108-2024.toc +++ b/c121108-2024.toc @@ -28,23 +28,23 @@ \contentsline {section}{\numberline {5.4}プログラミング言語説明機能}{16}{}% \contentsline {subsection}{\numberline {5.4.1}プログラミング言語説明機能の概要}{16}{}% \contentsline {subsection}{\numberline {5.4.2}プログラミング言語説明機能の中身}{17}{}% -\contentsline {section}{\numberline {5.5}パズルクイズ形式学習機能}{19}{}% +\contentsline {section}{\numberline {5.5}パズルクイズ形式学習機能}{18}{}% \contentsline {subsection}{\numberline {5.5.1}パズルクイズ形式学習機能の概要}{19}{}% \contentsline {subsection}{\numberline {5.5.2}パズルクイズ形式学習機能の中身ーブロックの配置変更について}{19}{}% \contentsline {subsection}{\numberline {5.5.3}パズルクイズ形式学習機能の中身ー正誤判定について}{21}{}% -\contentsline {section}{\numberline {5.6}問題の内容}{25}{}% -\contentsline {chapter}{\numberline {第6章}予備実験・実験結果・解釈}{27}{}% -\contentsline {section}{\numberline {6.1}実験方法}{27}{}% -\contentsline {section}{\numberline {6.2}結果・解釈}{28}{}% -\contentsline {section}{\numberline {6.3}システムの改善案}{28}{}% -\contentsline {chapter}{\numberline {第7章}システムの改善}{31}{}% -\contentsline {section}{\numberline {7.1}改善内容1}{31}{}% -\contentsline {section}{\numberline {7.2}改善内容2}{31}{}% -\contentsline {chapter}{\numberline {第8章}実験}{35}{}% -\contentsline {section}{\numberline {8.1}実験方法}{35}{}% -\contentsline {section}{\numberline {8.2}実験結果}{35}{}% -\contentsline {section}{\numberline {8.3}システムの改善案}{36}{}% -\contentsline {chapter}{\numberline {第9章}結論}{37}{}% -\contentsline {section}{\numberline {9.1}評価}{37}{}% -\contentsline {section}{\numberline {9.2}今後の展望}{37}{}% -\contentsline {chapter}{参考文献}{41}{}% +\contentsline {section}{\numberline {5.6}問題の内容}{26}{}% +\contentsline {chapter}{\numberline {第6章}システムの検証}{29}{}% +\contentsline {section}{\numberline {6.1}実験方法}{29}{}% +\contentsline {section}{\numberline {6.2}結果・解釈}{30}{}% +\contentsline {section}{\numberline {6.3}システムの改善案}{30}{}% +\contentsline {chapter}{\numberline {第7章}システムの改善}{33}{}% +\contentsline {section}{\numberline {7.1}改善内容1}{33}{}% +\contentsline {section}{\numberline {7.2}改善内容2}{33}{}% +\contentsline {chapter}{\numberline {第8章}実験}{37}{}% +\contentsline {section}{\numberline {8.1}実験方法}{37}{}% +\contentsline {section}{\numberline {8.2}実験結果}{38}{}% +\contentsline {section}{\numberline {8.3}システムの改善案}{38}{}% +\contentsline {chapter}{\numberline {第9章}結論}{39}{}% +\contentsline {section}{\numberline {9.1}評価}{39}{}% +\contentsline {section}{\numberline {9.2}今後の展望}{39}{}% +\contentsline {chapter}{参考文献}{43}{}%