\documentclass[a4paper,titlepage]{jsarticle}
\usepackage[dvips]{graphicx}
\usepackage{verbatim}
\pagestyle{empty}
\西暦
\setlength{\textheight}{240mm}
\setlength{\topmargin}{-10mm}
\setlength{\textwidth}{165mm}
\setlength{\oddsidemargin}{-5mm}
\setlength{\evensidemargin}{-5mm}
\hyphenation{front-end}

\title{ゲームを題材としたプログラミング教育支援システムの開発}
\date{}%ここはブランク
\author{06H082 東川諒央}

\begin{document}
\maketitle\pagestyle{empty}

% 目次
\tableofcontents
\clearpage

\pagestyle{plain}
\setcounter{page}{1}

\begin{abstract}
現在、プログラミング教育を行う際に、学習者が理解し易くする為の手法が研究されている。
それらの中に、ゲームを学習利用している研究がいくつかある。ゲームを学習に
利用することで、学習者の意欲維持による自主学習や集中した状態での学習が
望める。しかし、現存している研究ではプログラミング初学者や苦手意識を
持った学習者を対象としていない。その為複雑なアルゴリズムと文法が必要になり、
難易度が高くなる。
本研究では、プログラミング初学者や苦手意識を持った学習者が自分で
プログラミングが出来るようになる為のシステムを考えた。
それには先ず、学習者が学習意欲を維持できる環境が必要と考えた。そして、
学習者が自分でアルゴリズムを考え、実装することで、考案したアルゴリズムの
評価を自身が行えることが学習意欲の維持と同程度重要であると考え、条件に
あうゲームを検討した。

検討した結果、 Battle Ship ゲームを GP(Game Programme) 化した。
GP には攻撃用のアルゴリズムは書かれておらず、学習者が攻撃アルゴリズム用
関数をプログラミングすることで動作する仕様である。
しかし、Battle Ship のルールではアルゴリズムが複雑になってしまうため、
ルールを簡潔化し一人用のゲームとすることでプログラミング時の難易度を
下げた。また、このゲームをクリアする為に、逐次実行、条件分岐、繰り返しと
言ったものが重要になる。その為アルゴリズム概念の理解を手助けするシステムと
なり得ると考えられる。

\end{abstract}

%\section{Introduction}
\section{はじめに}
現在、授業を受けたにも関わらずプログラミングができない学生が数多くいる。
プログラミングが出来ない理由として、アルゴリズム\footnote{ある特定の目的を
達成する為の処理手順。}を理解出来ない事が挙げられる。
アルゴリズムはプログラミングを行う上で非常に大きなウェイトを占めており、
理解が出来なければプログラムを書けないと言っても過言ではない。

先行研究では、プログラミングの学習に於いてアルゴリズムの学習を
一番の課題として取り上げている。この事からプログラミングが出来ないという
課題の解決には、アルゴリズムについての理解が必要であることが伺える。

大阪産業大学工学部情報システム工学科のプログラミング演習\footnote{
プログラミングの演習授業。}の方針では、言語の文法に重点を置いて指導している。
授業工程はテスト、文法指導、演習課題のルーチンで行われている。
授業では全ての学生に対して1対1で指導することは出来ず、
学生の理解が及ぶまで指導する時間も多く取ることは難しい。それに加え、
授業を理解できないと意欲を損なってしまうために自主学習もあまり望めない。
テストや演習課題は穴埋め形式で、書き方の細かい指定迄ついている為、
学生自身がアルゴリズムを考え、実装するという作業を行うことが出来ない。
これでは学生がプログラミングを行う上で必要なアルゴリズムの概念\footnote{本研究で言うアルゴリズムの概念とは次の2点を指す。\\1)アルゴリズムとは単純な仕事の積み重ねであること。\\2)それぞれの手順の解釈には曖昧さがないこと。}を理解することが
難しいと考えた。

この問題を解決するため、本研究ではゲームを用いたアルゴリズムの学習の為
のシステムとして、
 GP\footnote{Game Programme : 本研究において開発したシステムで、教育利用の為にコンピュータゲーム化したもの。} 
を開発した。

\clearpage

%\section{Framework}
\section{先行研究に対する考察}
プログラミング教育についての先行研究はいくつか存在している。
本章では、その中でもプログラミングの初学者、プログラミングに苦手意識を
持つ学習者を対象とした研究、もしくはゲームを利用したプログラミング教育の
研究について整理する。以下2つの先行研究に基いて考察した。

\begin{itemize}
 \item ボードゲームの戦略プログラミングを題材としたJava演習の支援システムの開発\cite{java-battle}
 \item アルゴリズム構築能力育成の導入教育\cite{arugo}
\end{itemize}

\subsection{ボードゲームの戦略プログラミングを題材としたJava演習の支援システムの開発}
この研究ではボードゲームを題材とした、対戦形式の Java プログラミング演習を
提案している。使用しているゲームは五五ゲーム\footnote{五目並べに石取りの
要素を加えた二抜き連珠というゲームに、勝利条件や禁じ手などのルールを整備
した物。}である。
プログラミング演習の題材にボードゲーム戦略を用いる利点として、
次の点が挙げられる。

\begin{itemize}
 \item 身近な題材による関心と興味
   \begin{itemize}
    \item 学生にとって取っつきやすい題材である。
   \end{itemize}
 \item 試行錯誤的な問題解決の訓練
   \begin{itemize}
    \item 正解が1つに定まらないオープンプロブレムである。
    \item 試行錯誤を通して各自の自由な発想を引き出せる。
   \end{itemize}
 \item 明確な目的と競争による意欲向上
   \begin{itemize}
    \item 勝つという目的が明確である。
    \item 対戦結果による得点比較が客観的な評価基準となる。
    \item 学生の競争意識を刺激し、演習意欲を向上させることが期待できる。
   \end{itemize}
 \item 安易な不正の防止
   \begin{itemize}
    \item 他人にプログラムを写させると自分の戦績が不利になる為、安易なコピーを防げる。
   \end{itemize}
\end{itemize}   

この研究の報告では、戦略のアイデアを実装や戦略の検証を行ったり、
戦譜から他人の戦略を推定し相手に合わせて戦略を修正することを
学習している。
しかし、対戦形式を取っているためプログラムが盤面の把握を
した上で対戦相手への攻撃や防御を行わなくてはならない。
その為アルゴリズムは複雑になり、プログラミング初学者や苦手意識を
もっている学習者にとっては難易度が高い。

\clearpage

\subsection{アルゴリズム構築能力育成の導入教育}
プログラミングの学習に於いて、学習者にアルゴリズムと言語の文法を
同時に学習させることは負担が大きい。その為アルゴリズムと文法の
学習を分割し、先ず実作業によって学習者にアルゴリズムの概念を理解してもらう
ことから始めている。
この研究では実作業によってアルゴリズムの概念を理解した学生に、
``ことだま on Squeak''\footnote{小学生が扱えるように設計された ``Squeak eToys'' 
の日本語拡張版で、ビジュアルプログラミング環境である。 ``ことだま on Squeak'' は、 ``Squeak eToys'' のタイルスクリプティングシステムを引き継いでいるため、
プログラムの文法を覚える必要がない。} を用いてプログラミングを学習させる
手法を提案している。

この研究の提案する手法によって学習する利点は次の点である。

\begin{itemize}
 \item アルゴリズムの概念の理解
   \begin{itemize}
    \item 問題を手作業で解決させることによって、それを解決するためのアルゴリズムを理解できる。
   \end{itemize}
 \item プログラミングによるアルゴリズムの構築体験
   \begin{itemize}
    \item 手作業で行ったことと同様のことをプログラミングするのでアルゴリズムは比較的理解しやすい。
    \item 日本語で記述できる教育用プログラミング言語の ``ことだま on Squeak'' を使用することで、アルゴリズムからプログラミング言語の表現に翻訳する必要がない。
   \end{itemize}
\end{itemize}

この研究の報告ではアルゴリズム概念の理解がアルゴリズム構築における分析や
詳細化の段階の重要性を認識させることが分かった。
しかし、難点として ``ことだま on Squeak'' 自体の言語仕様に学習者の
思考を制限されてしまうことがある。 ``ことだま on Squeak'' は実装可能な
アルゴリズムが一重の繰り返しループを使ったものに制限されるため、入れ子に
なった繰り返しの理解を出来ない可能性がある。

\subsection{プログラミングの学習に必要な要素}
前述した2件の先行研究より得られたものは次の点である。

\begin{itemize}
 \item アルゴリズムの概念の理解はプログラミングにおいて重要。
 \item 他人のプログラムの出力結果からアルゴリズムを推定、学習できる。
 \item 構文エラーは学習者にとっては負担である。
 \item 目的が明確であればアルゴリズムの構築が比較的容易である。
 \item プログラミングに限らず学習を行うには意欲の維持が必要である。
\end{itemize}

先行研究が既に有効である学習方法を提示しているため、
アルゴリズムの学習に関する研究には、これらを念頭におくことが
必要であると考えた。

\clearpage

\section{ゲーム}
現在ゲームという言葉の学術的統一的見解は得られていない~\cite{digital}。
しかし、ゲームを題材として扱う以上定義がなされていなければ
使用するゲームを選定することが出来ない。
ゲームデザイナーのグレッグ・コスティキャンは雑誌\footnote{Interactive Fantasy\cite{interactive}}において、
ゲームとは「十分な情報の下に行われた意思決定をもって、
プレイヤーが与えられた資源を管理しつつ自ら参加し、立ちはだかる
障害物を乗り換えて目標達成を目指すもの」であるとしている。

又、ゲームの定義について語っている web サイト\footnote{Critique of games\cite{game}}が在る。
このサイトでは次の三点をゲームとしての成立条件として扱っている。

\begin{itemize}
 \item ルールによって行動のパターンが限定されている。
 \item 行為、行動、意思決定の指針が目標や評価システムに方向付けられている。
 \item ゲームの参加者のとった行動(選択)の差によってゲームの結果及び過程が異なる物である。
\end{itemize}

ゲームデザイナーであるグレッグの定義と上記三点の条件が酷似している為、
この三点の条件を本研究のゲームの定義として扱う。

\subsection{ゲームを用いた学習の有用性}
学習とは退屈で単調であったり、極端に複雑、もしくはその両方である。
その為、学習者にとって苦痛を与える物であることが多い。
しかし、ゲームを学習に利用することによって単調になりがちな学習に
エンターテインメント要素を取り入れることができ、意欲の向上を
狙うことが出来る。

いくつもの先行研究によってゲームを用いることによる学習対象者の
意欲の向上と、高い学習効果が認められている。
ゲーム学習は既にいくつもの組織において実際に利用されている。

テクノロジー利用学習では、通常の授業と同じ内容を学んだ結果、テストの点数や
持続力で改善し、3割程度の学習時間を短縮したという結果が、数多くある
研究のほとんどで示されている。多くの研究は軍の研究機関で行われており、その研究から
3分の1の法則\footnote{教育にかかる時間とコストをおよそ3分の1削減し、
学習効果が3分の1程度向上している。}が見つけられている。
このことからゲームの学習利用は有効であることが分かる。

\clearpage

\subsection{GP 化するゲームの選択基準}
本研究はプログラミング学習を始める学生や、学習しているが中々理解が
進まない学生を対象にしている。その為 GP 化するゲームは厳選する必要があった。
本研究においてゲームに求める条件は次の5点である。

\begin{itemize}
 \item アルゴリズムの評価を容易に行うことが出来る。
 \item 複雑なアルゴリズムを必要とせず目標達成することが出来る。
 \item 一人用としてゲームをプレイできる。
 \item 多岐に渡る解が存在する。
 \item ルールが簡単であり、且つある程度の知名度がある。
\end{itemize}

条件に合うゲームを探した結果、マインスイーパと Battle Ship が候補に挙がった。
しかしマインスイーパは地雷を踏むとゲームが途中で終了してしまうため、
ゲームとしての難易度が上がってしまう。その為、途中で失敗することがない
 Battle Ship は難易度が比較的低く、プログラミング初学者や苦手意識を持つ学生に
対して抵抗がより少ないと考え、本研究で GP 化するゲームに Battle Ship を
選択した。

\clearpage
%本研究でゲームを GP 化するに辺り、いくつかの制約を設ける必要があった。
%先ず本研究で対象としている人は、 Programming が出来ない人や学習を
%始める人達である。その為、

\subsection{Battle Ship}
Battle Ship とは海戦ゲーム\footnote{紙と筆記用具があればプレイ可能。テーブルゲームの一つで、
戦艦ゲーム、軍艦ゲームなどとも呼ばれる。3人以上でプレイ可能だが、
ゲームが非常に複雑になるのでプレイヤーは基本的に二人。}の変種として
日本でタカラから``レーダー作戦''ゲームの名称で販売されていたゲームで、
アメリカからの輸入ゲーム (英: Battleship) である。
ルールは次の通りである。

\begin{itemize}
 \item マス目の設定は縦横10マス。
 \item 軍艦に耐久力は設定されない。代わりに大きさが設定され、空母（5マス）、戦艦（4マス）、巡洋艦（3マス）、潜水艦（3マス）、駆逐艦（2マス）となっている。軍艦のマス目全部に攻撃を受けると沈没となる。
 \item 軍艦は移動できない。
 \item 軍艦の隣接マスに攻撃を受けた場合、「水しぶき」など\footnote{敵艦を発見する為の要素。}の申告をしなくてよい。
 \item 各軍艦にコストや回数制限付きで特殊な攻撃がある。（索敵・絨毯爆撃・連続攻撃等）
\end{itemize}

\subsection{GP のルール}
元々の Battle Ship を学習利用するにはルールが複雑である。
その為 GP 化するに辺り特殊な攻撃の要素を無くすことでルールを簡略化した。

GP では一人プレイ用。ルールは次の通りである。

\begin{itemize}
 \item 海域としてのマス目の設定は縦横10マス。
 \item 敵の軍鑑のみ配置される。配置はランダムに行われる。
 \item 軍艦には大きさが設定され、戦艦 (5マス) 、巡洋艦 (4マス) 、潜水艦 (3マス) 、駆逐艦 (3マス) 、輸送艦 (2マス) となっている。軍艦のマス目全部に攻撃を受けると沈没となる。
 \item 攻撃は1手につき1マスにのみ行う。海域内且つ未攻撃のマスであれば他に攻撃の制限は無い。
 \item 軍鑑は移動しない。
 \item 全ての軍鑑が沈没した時点でゲームは終了となる。
\end{itemize}

上記のルールに基づいてゲームを行い、より少ない攻撃回数でのクリアを
目指すものとした。

\clearpage

%\section{Result and discussion}

\section{結果と考察}
本研究では3タイプのプログラムを開発した、。
各プログラムには別々の役割りがある。ゲームをアルゴリズムの学習に用いる上で必要な機能を
持たせたプログラムが次の3タイプである。

\begin{description}
 \item [Practice] ゲームをプレイすることでルールを把握し、思考中のアルゴリズムに具体性を持たせる。
 \item [Verification] 記述されたアルゴリズムが理想通りに実装されているかをチェックする。
 \item [Score] アルゴリズムの善し悪しを判断する為、評価を行う。
\end{description}

これらの機能が学習者のガイドラインとなることで、 GP を用いてプログラミングを行う際に、
設計、実行、評価、再構築のルーチンを行いやすくなる。

Verification と Score は Battle Ship の攻撃を担う関数を shoot という名前で
別ファイルに分けている。学習者はこの関数を書き換えることによって攻撃の
アルゴリズムを実装する。
動作はいずれも CUI によって行われる。

\clearpage

\subsection{Practice}
この GP は先に説明した二つとは目的が異なり、人間のプレイ用 GP である。
Battle Ship を実際にプレイし、アルゴリズムを考えるための物で
攻撃したい座標をインタープリタに入力することで指定できる。

Practice の実行画面を図\ref{Practice}に示す。

%%% 図を入れる場合(ふつー EPS)
\begin{figure}[!ht]
 \centering
 \includegraphics[width=16cm]{Practice.eps}
 \caption{Practiceの実行画面}
 \label{Practice}
\end{figure}

\clearpage

\subsection{Verification}
この GP は実装した攻撃関数の挙動を調べるための物で、
攻撃したマスと攻撃結果、そして現在の手数を一手ずつ出力するプログラムである。
軍艦を全て沈没させることによってゲームは終了する。

Verification の実行画面を図\ref{Verification}に示す。

%%% 図を入れる場合(ふつー EPS)
\begin{figure}[!ht]
 \centering
 \includegraphics[width=16cm]{Verification.eps}
 \caption{Verificationの実行画面}
 \label{Verification}
\end{figure}

\clearpage

\subsection{Score}
この GP は shoot 関数によって実装した攻撃アルゴリズムの
ゲーム終了までの平均攻撃回数を調べる物である。100 回ゲームを
繰り返し、その平均攻撃回数を出力する。

Score の実行画面を図\ref{Score}に示す。

%%% 図を入れる場合(ふつー EPS)
\begin{figure}[!ht]
 \centering
 \includegraphics[width=14cm]{Score.eps}
 \caption{Scoreの実行画面}
 \label{Score}
\end{figure}

\clearpage

%\section{Conclusion}

\section{まとめ}
本研究ではプログラミングが出来ない学生、学習しようという学生が
アルゴリズム概念の理解を補助するためのシステムの開発を行った。
そのため簡潔なルールと複数の攻略アルゴリズムが存在し、攻略難易度が
低いゲームを検討した。そして条件に当てはまるゲームを GP 化し、
学習者が攻撃関数のみをプログラミングすればよい限定的なプログラミングシステムを開発した。

次に示した4点は、先行研究から得られたプログラミング学習に
必要と考える要素を実装できたと言えるものである。

\begin{enumerate}
 \item 他人のプログラムの出力結果からアルゴリズムを推定、学習できる。
 \item 明確な目的が存在している。
 \item 学習意欲の維持が可能である。
 \item アルゴリズムの善し悪しが数値によって判断できる。
\end{enumerate}
 
次に実装したと言える根拠を示す。

1 は一手ずつ攻撃の状態を出力する GP により、他人が作成した攻撃関数の
動作を確認することができる。これにより自分が思いつかなかった
アルゴリズムを出力結果より推定、実装を行うことが出来る。

2 はランダムに配置された軍艦を全て沈没させることがクリア条件である。
その為クリア条件が、この場合の明確な目的となる。そのためプログラミングが出来無い
人にありがちな、設計段階で何をすれば良いのか分らないという事態が起りにくい。

3 は学習者がゲームをプレイしながらアルゴリズムを考えることが出来るため
学習意欲の維持が可能である。自分の書いたプログラムからフィードバックを
得られる要素も意欲の維持に繋がる。

4 は Score によって出力された平均攻撃回数を元に学習者が自身でアルゴリズムの
評価を下せる。これにより自己による学習が成立ち、他人の介在を常に必要とするわけでは無くなる。

以上の点からアルゴリズムの学習を支援するプログラムの開発という目標は
達成できた。

%\section{まとめ}
%本研究ではゲームを学習利用し、プログラミング教育の為のシステムを開発した。
%先行研究を基にゲームの学術的利用の有用性を確認し、学習において重要な要素を
%調べた。要素を満たす

\clearpage

\subsection{今後の課題}
今後の課題は、実装出来なかった要素を実装することである。
前述したアルゴリズムの学習に必要と考える要素で実装出来なかったものを
次に示す。

\begin{enumerate}
 \item システムによってアルゴリズムの概念の理解が可能。
 \item 複雑な文法を必要とせず、学習者がアルゴリズムの考察に専念することが可能。
\end{enumerate}

上記2点はアルゴリズムのみの学習を行うためには必ず必要になる要素である。
前述したが、プログラミングを学習するには、アルゴリズムと言語の文法は
同時に行うべきではない。その為、学習者がプログラミングを行わずに
アルゴリズムを実装する方法を考える必要がある。

\clearpage

%\section*{Acknowledgment}
\section*{謝辞}
本研究を進めていく上で、藤井 信夫教授、大垣 斉講師、御指導及び
御協力を戴きました。
また、研究室の OB として指導して下さった、水野 貴弘先輩、小山 翔平先輩、
fken メイルリストのメンバの方々には御助言を賜りました。
ここに深く感謝の意を表します。

% 参考文献
\bibliographystyle{junsrt}
\bibliography{ronbun}
%\begin{thebibliography}{99}
% \bibitem{rfc792}RFC792, Internet Control Message Protocol

%\end{thebibliography}

※ URL はすべて 2010年1月16日時点のもの

\clearpage

\appendix

\section{ソースコード}
\subsection{Practice}
Prctice とは実際にゲームをプレイすることで学習者がルールを把握し、アルゴリズムを
考察する為のプログラムである。
\subsubsection{senkanplay.c}
\verbatiminput{senkanplay.c}
\clearpage

\subsection{Verification}
Verification とは攻撃関数の挙動を調べる為のプログラムである。
\subsubsection{senkan001.c}
\verbatiminput{senkan001.c}
\clearpage

\subsection{Score}
Score とは攻撃関数のアルゴリズムを平均攻撃回数によって評価するプログラムである。
\subsubsection{senkan100.c}
\verbatiminput{senkan100.c}
\end{document}
