(57)【要約】【課題】入力自由度が低いハードウェアを用いても、パズルゲームの入力が可能なパズルソフトウェアの入力方法を提供する。【解決手段】通常、ペンシルパズルとしてのクロスワードパズル・ナンバープレースでは空白とされるマスに他のマスで用いる文字を初期配置する。パズルソフトウェアが動作する携帯情報端末が有する十字キーや決定キーで所定のマスを二つ選択すると、マスの文字が入れ替わる。これを全てのマスが一致するまで繰り返すことでクロスワードパズル・ナンバープレースの回答を導出する。【選択図】図１３
2009247525.tif 000002
【特許請求の範囲】
【請求項１】
所定の入力手段を有する携帯情報端末上で動作するパズルゲーム用ソフトウェアの入力方法であって、
該パズルゲーム用ソフトウェアは、操作者に対して開示の対象となる所定の表示データを有する２以上のデータ構造体を管理の対象とする編集用の配列を有し、
前記編集用の配列より第１のデータ構造体を選択する、第１データ構造体選択ステップと、
前記編集用の配列より第２のデータ構造体を選択する、第２データ構造体選択ステップと、
前記第１のデータ構造体の表示データと前記第２のデータ構造体の表示データを入れ替える表示データ入れ替えステップと、を含むことを特徴とするパズルゲーム用ソフトウェアの入力方法。
【請求項２】
所定の入力手段を有する携帯情報端末上で動作するパズルゲーム用ソフトウェアの入力方法であって、
該パズルゲーム用ソフトウェアは、操作者に対して開示の対象となる所定の表示データを有する２以上のデータ構造体を管理の対象とする編集用の配列を有し、
前記編集用の配列より第１のデータ構造体を選択するための第１カーソルを表示する第１カーソル表示ステップと、
前記第１カーソルを操作するための入力を受け付ける第１カーソル操作ステップと、
前記第１カーソルの処理対象を特定すると共に、前記編集用の配列より第２のデータ構造体を選択するための第２カーソルを表示する第１カーソル特定・第２カーソル表示ステップと、
前記第２カーソルを操作するための入力を受け付ける第２カーソル操作ステップと、
前記第２カーソルの処理対象を特定する第２カーソル特定ステップと、
前記第１カーソルが指標するデータ構造体の表示データと前記第２カーソルが指標するデータ構造体の表示データを入れ替える表示データ入れ替えステップと、を有することを特徴とするパズルゲーム用ソフトウェアの入力方法。
【発明の詳細な説明】
【技術分野】
【０００１】
携帯電話機及び携帯端末用（総称して携帯情報端末）のパズルゲーム、特にクロスワードパズル用のソフトウェア、などの入力方法に関する。
【背景技術】
【０００２】
携帯用ゲーム機器や携帯電話機上で動作するパズルゲーム、たとえばクロスワードパズルやナンバープレースと言ったペンシルパズルを起源とするもの、などは短時間でプレイ可能なため定番のコンテンツとなっている。
【０００３】
図１は、一般的なペンシルパズルとしてのクロスワードパズルの概念を説明するための概念図である。
【０００４】
通常、外枠１の中を格子状に区分する。一般的に、縦横同数の格子が用意され、結果として全体の格子の数は平方数となることが多い。各格子は文字の書き込みができない黒マス４とそれ以外の文字の書き込みが可能な白マスに分類される。
【０００５】
白マスは未記入マス２と記入済みマス３とに分かれる。文字通り未記入マス２は字が記入されていない白マスであり、記入済みマス３は文字の記入が終わった白マスである。ペンシルパズルにおいては、消しゴムを用いて記入済みマス３内の文字を消すことで未記入マス２に戻す。
【０００６】
コンピュータでこれを実現する場合、フルキーボードがあれば、上記操作を容易に行うことが可能である。しかし、携帯用ゲーム機器や携帯電話機には、キーボード等の入力手段を有さないものや、入力手段はあるものの入力自由度の低いもの（たとえば携帯ゲーム機の「十字」キーや携帯電話のテンキー拡張キーボードなど）しかないものも多い。
【０００７】
これらの、自由度の低い入力手段を用いて、クロスワードパズル等のペンシルパズルを実現する手段として、特開２００７−１９５８００号公報（特許文献１）ではタッチパネルを用いた手段が提案されている。
【特許文献１】特開２００７−１９５８００号公報
【発明の開示】
【発明が解決しようとする課題】
【０００８】
しかし、特許文献１で開示する携帯用ゲーム機器や携帯電話機はタッチパネルを有するという条件があり、いついかなる状況下においても適用可能なものではない。
【０００９】
本発明は、携帯用ゲーム機器や携帯電話機の入力手段により拘束を受けることなく、より適用範囲の広い入力方法を提供することにある。
【００１０】
また、本発明の別の目的として、入力自由度が低いハードウェアを用いても、パズルゲームの入力が可能なパズルソフトウェアの入力方法を提供することにある。
【００１１】
本発明の前記並びにその他の目的と新規な特徴は、本明細書の記述及び添付図面から明らかになるであろう。
【課題を解決するための手段】
【００１２】
本願において開示される発明のうち、代表的なものの概要を簡単に説明すれば、次の通りである。
【００１３】
本発明の代表的な実施の形態に関わるパズルゲーム用ソフトウェアの入力方法は、編集用の配列より第１のデータ構造体を選択する第１データ構造体選択ステップと、編集用の配列より第２のデータ構造体を選択する第２データ構造体選択ステップと、第１のデータ構造体の表示データと第２のデータ構造体の表示データを入れ替える表示データ入れ替えステップと、を含むことを特徴とする。
【００１４】
また、本発明の代表的な実施の形態に関わるパズルゲーム用ソフトウェアの入力方法は、編集用の配列より第１のデータ構造体を選択するための第１カーソルを表示する第１カーソル表示ステップと、第１カーソルを操作するための入力を受け付ける第１カーソル操作ステップと、第１カーソルの処理対象を特定すると共に、編集用の配列より第２のデータ構造体を選択するための第２カーソルを表示する第１カーソル特定・第２カーソル表示ステップと、第２カーソルを操作するための入力を受け付ける第２カーソル操作ステップと、第２カーソルの処理対象を特定する第２カーソル特定ステップと、第１カーソルが指標するデータ構造体の表示データと第２カーソルが指標するデータ構造体の表示データを入れ替える表示データ入れ替えステップと、を有することを特徴とする。
【発明の効果】
【００１５】
本願において開示される発明のうち、代表的なものによって得られる効果を簡単に説明すれば以下の通りである。
【００１６】
本発明の代表的な実施の形態に関わる携帯電話機及び携帯端末用のパズルゲームの入力手段においては、入力用ハードウェアが制限された中での快適な動作が可能になる。
【発明を実施するための最良の形態】
【００１７】
以下図を用いて本発明の実施の形態を説明する。
【００１８】
（第１の実施の形態）
第１の実施の形態では、本発明の入力手段をクロスワードパズルに適用することを考える。
【００１９】
（ハードウェア及びソフトウェアの構成）
図２は本発明の入力手段が適用されたクロスワードパズル用ソフトウェアが動作する携帯電話機の構成を表すブロック図である。また、図３は本発明の入力手段が適用されたクロスワードパズル用ソフトウェアのモジュール構成を表す図である。
【００２０】
本発明の入力手段が適用されたクロスワードパズル用ソフトウェアが動作する携帯電話機はＣＰＵ１０１、メモリ１０２、無線部１０３、アンテナ１０４、入力部１０５、表示部１０６、スピーカ１０７、バス１０８より構成される。
【００２１】
ＣＰＵ１０１は、図３で図示するクロスワードパズル用ソフトウェアなどのソフトウェアを処理する中央処理装置である。また、メモリ１０２は、ＣＰＵ１０１動作時の一時記憶に用いる揮発性メモリや、電源切断後の再起動用の不揮発性メモリを包括した記憶媒体である。
【００２２】
無線部１０３はアンテナ１０４を経由して図示しない基地局（Ｎｏｄｅ−Ｂ）や無線ＬＡＮのアクセスポイント等と接続するための無線通信用の送受信部である。
【００２３】
入力部１０５は本携帯電話機を操作する操作者が情報を入力するための入力手段である。本発明では、ハードウェアの実装上の制約などにより、この入力部１０５がある程度制限を受けた状態でも適切な入力手段を提供することを目的としている。
【００２４】
なお、以下の説明では「「十字」キー」や「決定キー」などを用いているが、これらはこの入力部１０５に含まれるキーの一つである。「十字」キーは対象の移動を、決定キーは特定の状態の固定を行うキーである。
【００２５】
表示部１０６は本携帯電話機を操作する操作者に情報を提供するための表示用装置である。一般的にはＬＣＤ（液晶表示器）や有機ＥＬパネルなどが用いられる。
【００２６】
スピーカ１０７は圧電素子などで動作する、音を発生・出力するデバイスである。
【００２７】
バス１０８は各モジュール間でデータのやり取りをするためのアドレス・データバスである。
【００２８】
次に、図３を用いてクロスワードパズル用ソフトウェアの構成に付いて説明する。
【００２９】
クロスワードパズル用ソフトウェアは、基本ソフトウェア１５０上で動作する。このクロスワードパズル用ソフトウェアは、入力識別モジュール１５１、クロスワードパズルソフト基本モジュール１５２、初期化モジュール１５３、ヒントモジュール１５４、正誤判定モジュール１５５、表示部描画モジュール１５６より構成される。
【００３０】
入力識別モジュール１５１は、入力部１０５の入力を受け付けるモジュールである。入力部１０５の入力には、クロスワードパズル用ソフトウェアとして有意なもの、無意味なものが存在する。この峻別を行い、有意なものについてはクロスワードパズルソフト基本モジュール１５２に出力する。
【００３１】
クロスワードパズルソフト基本モジュール１５２は、クロスワードパズル用ソフトウェアで用いるデータの管理、入力識別モジュール１５１からの入力を受けての各モジュールの呼び出し、データの受け渡しなどを行う。クロスワードパズル用ソフトウェアの起動時にはこのモジュールが最初に呼び出され、このモジュールが他のモジュールを読み出す構成を取る。
【００３２】
初期化モジュール１５３は、ゲーム開始時の正解用データ５００、操作者に最初に提示され、パズル操作の対象となる編集用データ６００を作成するモジュールである。これらのデータをメモリ１０２上に作成するパズルの再スタートが行われるまで、初期化モジュール１５３は起動しない。メモリ１０２上からも削除すればメモリの有効利用も可能である。
【００３３】
ヒントモジュール１５４はクロスワードパズルで必要となる縦軸、横軸のヒントの抽出を行うモジュールである。縦軸・横軸のヒントは正解用データ５００を構成する正解用格子データ２００に含まれる。適切にこのデータを抽出するのが、このモジュールの処理である。
【００３４】
正誤判定モジュール１５５は、入力によるデータの修正が行われた結果、入力した箇所の正誤を判定するモジュールである。
【００３５】
表示部描画モジュール１５６はクロスワードパズルソフト基本モジュール１５２、ヒントモジュール１５４からの情報を受けて、操作者に対する情報を表示部１０６に表示することを目的としたモジュールである。
【００３６】
なお、上述以外に、スタート用画面やデモ画面を表示するモジュールなどもあっても良いが本発明には直接関係しないので除外する。
【００３７】
なお、本クロスワードパズル用ソフトウェアは、イベントドリブンで駆動するものとして説明する。
【００３８】
（データ構造）
次に本ソフトウェアで取り扱うデータについて説明する。
【００３９】
図４は、本発明を適用したクロスワードパズルの最終的な回答を表す概念図である。図５は正解用データ５００の各格子を表す正解用格子データ２００のデータ構造を表す概念図である。図６は、図４の正解データをメモリ１０２上に格納するための、正解用データ５００のデータ構造を表す概念図である。図７は出題に際し、最初に操作者に対して開示する問題のデータ（編集データ）の各格子を表す編集用格子データ３００のデータ構造を表す概念図である。さらに、図８は、編集用格子データ３００を用いて作成される編集用データ６００のデータ構造を表す概念図である。図９はカーソルデータのデータ構造を表す概念図である。図１０は初期化モジュールにおける処理を表すフローチャートである。
【００４０】
本実施の形態では、正解データは６×６＝３６文字から構成される。したがって、図５のデータ構造を持つ正解用格子データ２００を３６個有する形で、正解用データ５００は構成される。
【００４１】
この正解用格子データ２００の各パラメータについて説明する。
【００４２】
Ｘ座標２０１はこの格子がＸ座標のどこに位置するかを表すパラメータである。また、Ｙ座標２０２はＹ座標のどこに位置するかを表すパラメータである。各モジュールはこれらを参照して正解用データ５００と編集用データ６００の対比や、表示位置の決定を行う。
【００４３】
文字データ２０３は格子の中に入れられる文字を指定するパラメータである。ここで、黒マス４については表示不能なコード、たとえばＮＵＬＬ、などで表現する。なお、本明細書では、ＮＵＬＬを用いて黒マス４を表現する。ここで、文字データ２０３はあくまでも正解の情報であるため、特殊な状況（操作者がパズルの回答を諦めたときなど）を除き、携帯電話機の操作者に対して開示されることはない。
【００４４】
Ｘヒント２０４は操作者に回答のヒントを導くために表示される横軸方向のヒントである。また、Ｙヒント２０５は縦軸方向のヒントである。これらは必要な長さの文字列より構成される。表示の必要が無い格子については、文字データ２０３同様ＮＵＬＬ等の、非表示データが格納される。
【００４５】
ポインタ２０６は次の格子データの格納されているアドレスを指標するパラメータである。ポインタ２０６により、各モジュールは格子間のつながりが表現される。
【００４６】
これらのパラメータを用いて、図４の各格子を例にあげデータの格納状況を説明する。
【００４７】
（０、０）の座標については以下のように正解用格子データ２００が格納される。
【００４８】
Ｘ座標２０１    ：０
Ｙ座標２０２    ：０
文字データ２０３：「ム」
Ｘヒント２０４  ：「中央本線の駅名」
Ｙヒント２０５  ：「タイの格闘技」
ポインタ２０６  ：（０、１）の正解用格子データ２００のアドレス
【００４９】
また、（５、０）の座標については以下のように正解用格子データ２００が格納される。
【００５０】
Ｘ座標２０１    ：５
Ｙ座標２０２    ：０
文字データ２０３：「イ」
Ｘヒント２０４  ：ＮＵＬＬ 
Ｙヒント２０５  ：「言葉の○○を理解する」
ポインタ２０６  ： ＮＵＬＬ
なお、ポインタ２０６がＮＵＬＬになっているのは、ハッシュテーブルを用いることを想定しているためであり、別の方式で正解用データ５００を構成する場合には、この限りではない。
【００５１】
さらに、（２、１）の座標の黒マス４については以下のように正解用格子データ２００が格納される。
【００５２】
Ｘ座標２０１    ：２
Ｙ座標２０２    ：１
文字データ２０３：ＮＵＬＬ
Ｘヒント２０４  ：ＮＵＬＬ 
Ｙヒント２０５  ：ＮＵＬＬ 
ポインタ２０６  ：（２、２）の正解用格子データ２００のアドレス
【００５３】
最後に、（２、４）の座標のヒントが一切無い格子の正解用格子データ２００は以下のようになる。
【００５４】
Ｘ座標２０１    ：２
Ｙ座標２０２    ：４
文字データ２０３：「ス」 
Ｘヒント２０４  ：ＮＵＬＬ 
Ｙヒント２０５  ：ＮＵＬＬ 
ポインタ２０６  ：（２、５）の正解用格子データ２００のアドレス
【００５５】
この正解用格子データ２００から正解用データ５００を作成するこの正解用データ５００の一例を表すのが図６である。図６からも分かるとおり、正解用データ５００はハッシュテーブルで構成されることを念頭においているが、特にこれにこだわる必要は無い。
【００５６】
図６の例では、エントリリスト５０１が各行（横軸）ごとのアクセス先アドレスを用意し、そこから１格子ずつ正解用格子データ２００を処理できるようになっている。
【００５７】
この正解用データ５００は、初期化モジュール１５３によって、クロスワードパズル開始時にメモリ１０２上に作成される。
【００５８】
次にパズル開始時の初期画面であり、かつパズル操作時の作業用の記憶領域になる編集用データ６００について説明する。
【００５９】
編集用データ６００は、操作者に提示されるパズルの初期状態であると同時に、パズル回答中は作業用の記憶領域になるデータ領域である。編集用データ６００は、正解用データ５００と同じ記憶方法（ハッシュテーブルによる構成など）を用いたほうが、ソフトウェアの設計上好ましい。したがって、ここでも、編集用データ６００をハッシュテーブルにより作成する例を挙げる。
【００６０】
図８の通り、編集用データ６００は正解用データ５００同様ハッシュテーブルによる管理を想定する。よって編集用格子データ３００も基本的には、編集用格子データは正解用格子データ２００のパラメータと同じ構成を取る。ソフトウェアの設計上、同一の構成としたほうが好都合だからである。
【００６１】
ただし、Ｘヒント２０４及びＹヒント２０５に相当する項目は無い。その代わりに、その格子の文字データ３０３が正解用格子データ２００の文字データ２０３と一致したか（設計によっては移動を禁止するか）を表す、文字固定フラグ３０４を有する。
【００６２】
Ｘ座標３０１はこの格子がＸ座標のどこに位置するかを表すパラメータである。また、Ｙ座標３０２はＹ座標のどこに位置するかを表すパラメータである。各モジュールはこれらを参照して正解用データ５００と編集用データ６００の対比や、表示位置の決定を行うのは正解用格子データ２００と同様である。
【００６３】
文字データ３０３はその操作がおこなわれる時点で、その格子に表示すべき文字（表示データ）を表すパラメータである。この文字データ３０３の値が、該携帯電話機の操作者に対してゲーム画面上で開示される。正解用格子データ２００同様、黒マス４の時にはここにはＮＵＬＬが入力されることで白マスとの区別がなされる。
【００６４】
文字固定フラグ３０４はパズル操作の結果、文字データ２０３と文字データ３０３が一致した際に「１」にセットされるパラメータである。なお、初期値は「０」（不一致）である。
【００６５】
ポインタ３０５は次の格子データの格納されているアドレスを指標するパラメータである。
【００６６】
これらのパラメータを用いて、図４の各格子を例にあげデータの格納状況を説明する。なお、正解すると文字固定フラグ３０４は「１」になるので、ここでは文字データ３０３には対応する正解用格子データ２００の文字データ２０３と異なる文字が入力されているものとして扱い、黒マス４以外は説明を省く。
【００６７】
（０、０）の座標については以下のように編集用格子データ３００が格納される。
【００６８】
Ｘ座標３０１    ：０
Ｙ座標３０２    ：０
文字固定フラグ３０４：
０
ポインタ３０５  ：（０、１）の編集用格子データのアドレス
【００６９】
また、（５、０）の座標については以下のように編集用格子データが格納される。
【００７０】
Ｘ座標３０１    ：５
Ｙ座標３０２    ：０
文字固定フラグ３０４：
０
ポインタ３０５  ：ＮＵＬＬ
【００７１】
さらに、（２、１）の座標の黒マス４については以下のように編集用格子データが格納される。
【００７２】
Ｘ座標３０１    ：２
Ｙ座標３０２    ：１
文字データ３０３：ＮＵＬＬ
文字固定フラグ３０４：
０
ポインタ３０５  ：（２、２）の編集用格子データのアドレス
【００７３】
最後に、（２、４）の座標のヒントが一切無い格子の編集用格子データは以下のようになる。
【００７４】
Ｘ座標３０１    ：２
Ｙ座標３０２    ：４
文字固定フラグ３０４：
０
ポインタ３０５  ：（２、５）の編集用格子データのアドレス
【００７５】
このようにして、初期化モジュール１５３は編集用格子データ３００を３６個（本実施例の場合）作成し、合わせてエントリリスト６０１を作成することで、ハッシュテーブルである編集用データ６００を作成する。
【００７６】
本発明に関わるクロスワードパズルソフトでは、画面上でどの格子を処理の対象としているか表示するためにカーソルを用いる。クロスワードパズルソフト基本モジュール１５２が、このカーソルを管理するのがカーソルデータである。このカーソルデータの作成も初期化モジュール１５３が行う。
【００７７】
図９はカーソルデータ４００及び４１０を表す図である。
【００７８】
通常のクロスワードパズルと異なり、本発明のクロスワードパズル用ソフトウェアでは図１で説明した未記入マス２は存在しない。では、クロスワードパズルとしての機能を担保するかといえば、選択した格子Ａと選択した格子Ｂに関わる編集用格子データ３００の文字データ３０３を入れ替えることで行う。つまり、画面上には文字データ３０３の交換を行うためのカーソルを最大で２個表示することとなる。
【００７９】
カーソルデータ４００は最初に表示するカーソル（第１のカーソル７００）のためのデータであり、カーソルデータ４１０はカーソルデータ４００がどの格子を指すか確定した後に表示されるカーソル（第２のカーソル７０１）のためのデータである。このため、カーソルデータ４００とカーソルデータ４１０はほぼ同一の構造をとる。
【００８０】
各カーソルデータにはＸ座標４０１（４１１）とＹ座標４０２（４１２）を有する。これは各カーソルがどの編集用格子データ３００を指しているかあらわす。
【００８１】
状態パラメータ４０３（４１３）はカーソルデータが操作対象になっているかを判断するパラメータである。状態パラメータ４０３（４１３）は未確定状態「０」と確定済状態「１」の２つの状態を表す。
【００８２】
なお、操作対象になっている場合、状態パラメータ４０３（４１３）は未確定状態「０」であって、Ｘ座標４０１（４１１）とＹ座標４０２（４１２）に有効な数字が入っている。一方、状態パラメータ４０３（４１３）は未確定状態「０」であって、Ｘ座標４０１（４１１）とＹ座標４０２（４１２）に有効な数字が入っていない、または状態パラメータ４０３（４１３）が確定済状態「１」になっている場合、操作対象ではない。ただし、状態パラメータ４０３（４１３）が確定済状態「１」になっていれば、Ｘ座標４０１（４１１）とＹ座標４０２（４１２）に有効な値が入力されていることを前提として、表示の対象にはなる。
【００８３】
カーソルデータ４００のポインタ４０４はカーソルデータ４１０がどこに記憶されているかを表す。なお、カーソルデータ４１０のポインタ４１４にはＮＵＬＬが入力されている。交換は２つの編集用格子データ３００間で行われるものであり、３つ目のカーソルデータは存在しないためである。
【００８４】
図９のカーソルデータの作成を行うと、初期化モジュール１５３はＸ座標４０１、Ｙ座標４０２にそれぞれ初期位置の座標を入力する。また、状態パラメータ４０３は未確定を表す０が入力される。本実施の形態ではそれぞれ０から５までの値が有効なものとなる。
【００８５】
一方、初期状態では２つ目のカーソルは表示されないことから、初期化モジュール１５３はＸ座標４１１、Ｙ座標４１２にはＮＵＬＬが、状態パラメータ４１３は０を入力する。
【００８６】
これにより、初期化モジュール１５３によってカーソルの表示位置が決定される。
【００８７】
（初期化処理）
次に初期化モジュール１５３における処理について図１０を用いて説明する。
【００８８】
図１０は初期化モジュール１５３における処理を表すフローチャートである。
【００８９】
まず、初期化モジュール１５３は正解用データ５００を定義する（ステップＳ１０００）。この正解用データ５００の構成に際しては、正解用格子データ２００及び正解用格子データ２００の集合である正解用データ５００を複数、予めメモリ１０２に記憶して、そこから正解データを読み出しても良いし、初期化モジュール１５３が３６格子からなる正解用データ５００を所定のデータベースを元に生成しても良い。また、無線部１０３、アンテナ１０４経由で基地局等の先にある図示しないサーバに対して、正解用データ５００を要求するようにしても良い。
【００９０】
次に、初期化モジュール１５３は編集用データ６００を格納するデータ空間を確保し、必要な情報を正解用データ５００よりコピーする等して設定する（ステップＳ１００１）。たとえば、文字データ３０３などは複製の対象となる。また、Ｘ座標３０１及びＹ座標３０２は複製の過程で適宜数値が入力されるパラメータであろう。文字固定フラグ３０４はこの時点で０を入力し、またポインタ３０５については次の編集用格子データのアドレスを格納する。また、エントリリストには各格子行の先頭となる編集用格子データ（ｎ、０）のアドレスが入力される。
【００９１】
次に初期化モジュールは編集用データ６００の編集用格子データ３００間で文字データ３０３の入れ替えを行う（ステップＳ１００２）。ここでいう「入れ替え」とは二つの編集用格子データの文字データ３０３の内容を入れ替えるだけである。ただし、編集用格子データ３００の文字データ３０３の値がＮＵＬＬの場合は入れ替えの対象にはならない。黒マス４が移動するとクロスワードパズルとして成立しなくなるためである。
【００９２】
なお、ステップＳ１００２の入れ替えに際しては、所定の回数以上を反復して行う必要がある。回数が少ないと、入れ替えが行われない格子データが生じるためである。
【００９３】
ステップＳ１００２の入れ替えが終了すると、次に正解用データ５００内の各正解用格子データ２００の文字データ２０３と編集用データ６００内の対応する編集用格子データ３００の文字データ３０３の内容の異同を確認する。すなわち、Ｘ座標２０１とＸ座標３０１、Ｙ座標２０２とＹ座標３０２が同じものの文字データ２０３及び文字データ３０３のパラメータが同じであるかを確認する。
【００９４】
全ての格子（本実施の形態では３６格子）で文字データ２０３及び文字データ３０３の内容が異なれば（ステップＳ１００３：Ｎｏ）、カーソルデータを作成する（ステップＳ１００４）。カーソルデータ４００、正解用データ５００、編集用データ６００と共にクロスワードパズルソフト基本モジュール１５２に参照用の座標が渡される（ステップＳ１００５）。
【００９５】
一つでも文字データ２０３及び文字データ３０３の内容が同じであれば（ステップＳ１００３：Ｙｅｓ）、再度、ステップＳ１００２の入れ替えを行う。
【００９６】
以上により、初期化モジュール１５３の処理は終了する。この後、初期化モジュール１５３からカーソルデータ４００、編集用データ６００及び正解用データ５００（厳密にはこれらのデータ、エントリリストのアドレス座標）がクロスワードパズルソフト基本モジュール１５２に渡される。このときのデータのやり取りはポインタのやり取りという形が一般的であろう。
【００９７】
この後、クロスワードパズルソフト基本モジュール１５２は、操作者に対して、パズル情報を開示すべく出力用の情報を整理する。またメモリ１０２の容量が十分でないときは、初期化モジュール１５３を終了する。
【００９８】
次に、図１１を用いて、初期化モジュール１５３の処理の終了直後のクロスワードパズルソフト基本モジュール１５２のデータの状態について説明をする。
【００９９】
図１１は、初期化モジュール１５３に初期化が行われた後のクロスワードパズルの状態の一例を表す概念図である。
【０１００】
この状態では、カーソルは１つ（第１カーソル７００）しか存在しない。初期化モジュール１５３は、カーソルデータ４００に対してのみ有効なデータを入力しているためである。
【０１０１】
この状態のままでは、クロスワードパズルに必要なヒントなどの準備ができていない。したがって、クロスワードパズルソフト基本モジュール１５２はヒントモジュール１５４に対して、ヒントの抽出を行わせる。
【０１０２】
図１２はこのクロスワードパズルソフト基本モジュール１５２とヒントモジュール１５４間の処理を示すフローチャートである。
【０１０３】
まず、クロスワードパズルソフト基本モジュール１５２は正解用データ５００及びカーソルデータのポインタを送信する（ステップＳ２０００、Ｓ２００１）。ここで、正解用データ５００についてはエントリリスト５０１の座標を送信する。一方、カーソルデータについては、カーソルデータ４１０のＸ座標４１１、Ｙ座標４１２、状態パラメータ１０３または４１３から、カーソルデータ４００またはカーソルデータ４１０のいずれかのアドレスをクロスワードパズルソフト基本モジュール１５２が送信する。
【０１０４】
送信を受けると、カーソルデータのＸ座標、Ｙ座標を抽出し、現在カーソルがあっている箇所がどこの格子なのかヒントモジュール１５４が特定する（ステップＳ２００２）。
カーソル位置が分かれば、ヒントモジュール１５４が、正解用データ５００のハッシュテーブル５０１からヒントデータを抽出すべき正解用格子データ２００を特定する（ステップＳ２００３）。
【０１０５】
ヒントを抽出する正解用格子データ２００が分かれば、該当する正解用格子データ２００のＸヒント２０４、Ｙヒント２０５のアドレスを指標するポインタをヒントモジュール１５４は導出できる（ステップＳ２００４）。この導出したポインタをヒントモジュール１５４がクロスワードパズルソフト基本モジュール１５２へ出力することで、ヒントの導出が可能となる。
【０１０６】
なお、データ構造が決まっているため、Ｘヒント２０４のアドレスポインタの送信を行えば、Ｙヒント２０５のアドレスも決まる。したがって、Ｙヒント２０５のポインタのやり取りを行うかは設計事項である。
【０１０７】
また、ステップＳ２００４では対応する正解用格子データ２００のＸヒント２０４及びＹヒント２００をそのまま表示した。しかし、途中の文字（たとえば図４の（２、０）座標のような箇所）に当たる正解用格子データ２００ではヒントが表示されない。これに対し、先頭の文字（図４で言えば（０，０）座標）を探し出し、対応する正解用格子データ２００のＸヒント２０４を表示するようにしても良い。
【０１０８】
第１のカーソルまたは第２のカーソルのどちらを表示するかの判断は、状態パラメータ４０３（４１３）などを用いることになると思われるが、設計事項であり、ここでは詳述は省略する。ここまでの処理が終われば、クロスワードパズルソフトは表示部１０６を介して図１３に示すような操作者に開示可能な表示が可能になる。クロスワードパズルソフト基本モジュール１５２はヒントモジュール１５４から送信されたＸヒント２０４（設計によってはＹヒント２０５も）、カーソルデータ４００及び編集用データ６００のポインタを表示部描画モジュール１５６に送信する。これに基づいて表示部描画モジュール１５６は表示部１０６に図１３のような描画を行う。
【０１０９】
この際、アニメーションをさせるか否か等は設計事項に付き省略する。
【０１１０】
（パズル中の処理）
初期化が終わると、クロスワードパズルソフト基本モジュール１５２は、入力部１０５からの操作者からの入力待ちの状態になる。
【０１１１】
図１４はパズル中の入力識別モジュール１５１の基本的な動作を表すフローチャートである。
【０１１２】
入力部１０５から入力が行われると、入力識別モジュール１５１は行われたキー操作を解析する（ステップＳ３０００）。すなわち、キーの種類、キーの押し込み／リリースなどである。
【０１１３】
そして、このクロスワードパズルソフトにとって、入力されたキー操作が有意なものであれば（ステップＳ３００１：Ｙｅｓ）、入力識別モジュール１５１はクロスワードパズルソフト基本モジュール１５２に対して、発生したイベントの種別を送信する。発生したイベントの種別の送信を受けて、クロスワードパズルソフト基本モジュール１５２は、イベントの種別によって適切なモジュールが呼び出す（ステップＳ３００２）。
【０１１４】
入力されたキー操作が有意なものでなければ（ステップＳ３００１：Ｎｏ）、入力識別モジュール１５１は再び入力を待つ状態になる。
【０１１５】
以下イベント種別によっての処理を説明する。
【０１１６】
（カーソルの移動について）
入力部１０５のいわゆる「十字」キー、カーソルキーとみなすテンキーの入力時に行われる処理である。図１３では、（０、０）にカーソルが存在するが、これを移動させるための処理である。以下では上記の操作を一括して「カーソルキーの押下」として説明する。
【０１１７】
カーソルキーが押下されると、カーソルキーの方向によって、カーソルデータ４００（４１０）のＸ座標４０１（４１１）、Ｙ座標４０２（４１２）の演算が行われる。たとえば右方向に移動を行う場合にはＸ座標４０１（４１１）が１増分され、左方向に移動を行う場合には、Ｘ座標４０１（４１１）が１減算される。また、下方向に移動を行う場合にはＹ座標４０２（４１２）が１増分され、上方向にカーソルを移動させるときにはＹ座標４０２（４１２）が１減算される。なおカーソルデータ４００を処理の対象に選ぶか、カーソルデータ４１０を処理の対象とするかは、既述のとおり、主に状態パラメータ４０３によって判断される。
【０１１８】
この演算によりカーソルデータのパラメータは変更される。したがって、ヒントモジュール１５４を用いたヒントの抽出（図１２参照）を行い、ヒントモジュール１５４から送信されたＸヒント２０４（設計によってはＹヒント２０５）、カーソルデータ４００及び編集用データ６００のポインタを表示部描画モジュール１５６に送信する。これらを受けて表示部描画モジュール１５６は表示部１０６に表示を行う。
【０１１９】
これらの処理により、移動後の状態が表示部１０６に反映される。
【０１２０】
（決定キーの押下）
図１５は入力部１０５に含まれる決定キーの押下が行われた際の処理の流れを示すフローチャートである。これを用いて決定キー押下時の処理の説明をする。
【０１２１】
まず、クロスワードパズルソフト基本モジュール１５２はまず現在処理対象となっているカーソルデータが第１のカーソルに関わるカーソルデータ４００なのか、第２のカーソルに関わるカーソルデータ４１０なのかを確認する（ステップＳ４０００）。
【０１２２】
現在処理対象となっているカーソルの指標する格子が文字データの交換可能なものであるかクロスワードパズルソフト基本モジュール１５２は確認する（ステップＳ４００１）。すなわち、一度正解であると判断された格子や、黒マス４は文字の交換ができないため、そこでの決定キーの押下はヒントの更新のみの処理となる（ステップＳ４００５以降の処理）。なお、既に正解であると判断された格子は編集用格子データ３００の文字固定フラグ３０４が「１」になっていることから識別できる。また黒マス４か否かは文字データ３０３がＮＵＬＬかどうかで判断できる。
【０１２３】
ステップＳ４００１で入れ替えが可能と判断されれば（ステップＳ４００１：Ｙｅｓ）、操作対象のカーソルデータがカーソルデータ４００か４１０かを判断する（ステップＳ４００２）。
【０１２４】
第１のカーソル７００に関わるカーソルデータ４００であれば（ステップＳ４００２：４００）、状態パラメータ４０３を「１」にセットする（ステップＳ４００３）。カーソルデータ４１０に処理を移行するためである。その後、カーソルデータ４１０の設定を行う一環として、Ｘ座標４１１、Ｙ座標４１２を設定する（ステップＳ４００４）。この際、設定される値は設計事項である。たとえば第１のカーソル７００の右隣の格子に第２のカーソル７０１を最初に表示するような場合にはＸ座標４１１にはＸ座標４０１の値に１を加えたものを入力する。また、第１のカーソル７００の現在の位置に関係なく、第２のカーソルの初期位置（カーソルデータ４１０のＸ座標４１１、Ｙ座標４１２）を（０、０）にすることも考えられる。
【０１２５】
その後、カーソルデータ４１０に基づくヒントの導出をヒントモジュール１５４に対して行う（ステップＳ４００５）。なお具体的な動作は図１２に記載したとおりである。
【０１２６】
ヒントを取得した後は、クロスワードパズルソフト基本モジュール１５２はヒントモジュール１５４から送信されたＸヒント２０４（設計によってはＹヒント２０５も）、カーソルデータ４００及び編集用データ６００のポインタを表示部描画モジュール１５６に送信する。これに基づき表示部描画モジュール１５６は表示部１０６に描画を行う（ステップＳ４００６）。
【０１２７】
図１６はステップＳ４００２を経由し、ステップＳ４００５で操作対象が、カーソルデータ４１０に対応する第２のカーソル７０１に移った後の表示部１０６の表示状況の一例を表す図である。
【０１２８】
第１のカーソル７００が（０、０）に表示された状態で、決定キーを押下すると、右隣に当たる（０、１）に第２のカーソル７０１が出現する。以降これが操作の対象になる。
【０１２９】
そして、第２のカーソルが位置する（１、０）の座標に従ったヒントが表示される。
【０１３０】
一方、対象のカーソルデータがカーソルデータ４１０に関わる第２のカーソル７０１であれば（ステップＳ４００２：４１０）、状態パラメータ４１３を「１」にセットする（ステップＳ４１０１）。その後、状態パラメータ４０３と状態パラメータ４１３が「１」であることを確認した後、カーソル４００が指す編集用格子データ３００の文字データ３０３と、カーソル４１０が指す編集用格子データ３００の文字データ３０３とを入れ替える（ステップＳ４１０２）。
【０１３１】
入れ替えが終わると、正誤判定モジュールにおける正誤判定を行う（ステップＳ４１０３）。これについては後述する。
【０１３２】
ステップＳ４１０３での正解か否か判別されたら、カーソルデータ４００及びカーソルデータ４１０のリセットを行う。具体的には、カーソルデータ４１０のＸ座標４１１、Ｙ座標４１２の内容を、カーソルデータ４００のＸ座標４０１、Ｙ座標４０２にコピーし、Ｘ座標４１１、Ｙ座標４１２の内容を無効なものにする。また、状態パラメータ４０３、状態パラメータ４１３を「０」に書き換える。
【０１３３】
その後、更新したカーソルデータ４００に基づくヒントの導出をヒントモジュール１５４に対して行い（ステップＳ４００５）、表示部１０６の再描画を行う（ステップＳ４００６）。
【０１３４】
また、各カーソルデータの更新に伴い、表示の更新がなされる。図１７は、このステップＳ４１０１経由で、ステップＳ４００５で操作対象がカーソルデータ４００に戻った後の表示部１０６の表示状況の一例を表す図である。このように、（０、０）に表示されていた「ヤ」と（０、１）に表示されていた「ミ」が入れ替わり、かつカーソル表示がカーソルデータ４００に対応した第１のカーソル７００だけになる。また、ヒントモジュール１５４によるヒントの更新も必要があれば行い、表示に反映させる。
【０１３５】
なお、入力部１０５に解除キーなどを用意し、処理の中断等などを行うことも考えられるが、本発明とは直接的な関連性が無いため省略する。
【０１３６】
（正誤判定）
前述の通り、ステップＳ４１０３で入れ替え後の正解の判定を行う。この点について詳述する。
【０１３７】
図１８は正誤判定モジュール１５５による正誤判定処理を表すフローチャートである。
【０１３８】
入れ替えが行われると、カーソルデータ４００で指定されている編集用格子データ３００とカーソルデータ４１０で指定されている編集用格子データ３００の文字データ３０３が変更される。したがって、この２つの編集用格子データ３００について正誤判定を行う必要がある。ただし、実際の処理はいずれの場合でも同じである。したがって、説明はカーソルデータ４００で指定されているもののみについて行う。
【０１３９】
まず、クロスワードパズルソフト基本モジュール１５２は正誤判定モジュール１５５に対して、正解用データ５００及び編集用データ６００のアドレスと、カーソルデータ４００のアドレスを送信する（ステップＳ５０００）。
【０１４０】
正誤判定モジュール１５５は、カーソルデータ４００が指標する座標の編集用格子データ３００の文字データ３０３と、正解用格子データ２００の文字データ２０３が一致しているか否かを確認する（ステップＳ５００１）。一致していなければ（ステップＳ５００１：Ｎｏ）、正誤判定処理は終了する。
【０１４１】
一致していれば（ステップＳ５００１：Ｙｅｓ）、正誤判定モジュール１５５は横方向の文字列一致判定、縦方向の文字列一致判定を行う（ステップＳ５００２、ステップＳ５００３）。この文字一致判定については、ハッシュテーブルを用いた一致判定はよく知られているため省略する。なお、黒マス４によって分断されている箇所については調べる対象から外れるが、これらを除外する方法および一致判定方法も当業者に周知であるため、ここでは述べない。
【０１４２】
この判定が終わると、正誤判定モジュール１５５は横方向または縦方向のいずれか・又は双方の文字列が一致したかを確認する（ステップＳ５００４）。いずれか一方・または双方が一致していれば（ステップＳ５００４：Ｙｅｓ）、対応する編集用格子データの３００の文字固定フラグ３０４を「１」にセットする（ステップＳ５００５）。
【０１４３】
この際、文字固定フラグ３０４が「１」にセットされる対象は、カーソルデータ４００で示唆される編集用格子データ３００だけでなく、一致した文字列を構成する全ての編集用格子データ３００の文字固定フラグ３０４が対象となる。
【０１４４】
なお、このステップＳ５００４及びステップＳ５００５をステップＳ５００２及びステップＳ５００３内に含めても問題は無い。この際、一度「１」にした文字固定フラグ３０４を「０」に戻さないように留意する。
【０１４５】
その後、正誤判定モジュール１５５における処理を終了し、クロスワードパズルソフト基本モジュール１５２に処理を返すこととなる。
【０１４６】
このように、格子間で文字データを入れ替えることでクロスワードの回答を行えるように設計することで、自由度が低い入力部であっても簡単に操作できるようにすることを可能にする。
【０１４７】
（第２の実施の形態）
第１の実施の形態では、操作を簡単に行えるようにする点にのみ着目した。
【０１４８】
しかしクロスワードパズルであっても、携帯電話機を用いてソフトウェア的に処理を行えるようにすることで、よりアクション性を高めたゲーム性を持たせることが可能となる。
【０１４９】
本実施の形態は第１の実施の形態をベースとして、操作に得点を割り当てることを可能とする。
【０１５０】
（ハードウェア及びソフトウェアの構成）
基本的に、ハードウェア及びソフトウェアの全体構成について相違は無い。個々のモジュールの相違は以下に述べる。
【０１５１】
（データ構造と初期化処理）
基本的にはデータ構造についても特に変更点はない。ただし「得点スコア」をつけるための変数が追加されている。この変数はクロスワードパズルソフト基本モジュール１５２で定義する。
【０１５２】
（パズル中の処理）
基本的な動作については第１の実施の形態と同様である。ただし、正誤判定のみ相違する。以下、図１９を元に変更点について説明する。
【０１５３】
第１の実施の形態では正誤判定モジュール１５５に関する図１８の処理では戻り値は特に規定していない。これに対し、第２の実施の形態では、正誤判定モジュール１５５の処理終了時にクロスワードパズルソフト基本モジュール１５２に値を返す。
【０１５４】
この返す値（戻り値）は、正解時の得点を意味する。以下、この得点がどのように計算されるか説明する。
【０１５５】
入れ替えた格子（カーソルデータ４００（４１０）が指す格子）が正解しなければ、正誤判定モジュール１５５の処理から離脱する点については第１の実施の形態と同様である（ステップＳ５００１：Ｎｏ）。このときの戻り値は「０」となる（ステップＳ６００１）。
【０１５６】
一方、入れ替えた格子が正解していた場合（ステップＳ５００１：Ｙｅｓ）、各処理で得点計算の処理が入る。
【０１５７】
ステップＳ５００２からＳ５００４までの処理は、第１の実施の形態同様である。このステップＳ５００２からＳ５００４までの処理の結果を踏まえて、正誤判定モジュール１５５は得点演算を行う（ステップＳ６００２）。
【０１５８】
たとえば、１つのカーソルデータが指標する編集用格子データが置き換わると、
１）縦横どちらも正解していない。
【０１５９】
２）縦一列の完成
３）横一行の完成
４）縦横双方の完成
の４つの結果が考えられる。
【０１６０】
したがって、これに対し
１）０点
２）５０点
３）５０点
４）２００点
という感じで点を割り当てる。これを戻り値として、クロスワードパズルソフト基本モジュール１５２に送信して（ステップＳ６００２）、正誤判定モジュール１５５は処理を終える。
【０１６１】
クロスワードパズルソフト基本モジュール１５２は二つの正誤判定モジュール１５５についての戻り値を受け取ることになる。これらを単純に足すだけでなく、クロスワードパズルソフト基本モジュール１５２が更に加重配点を加えても良い。たとえば、２つの戻り値がいずれも２００点であった場合、２００＋２００＝４００点だけでなく更に３００点加えることで、より高得点を狙えるようにすることも可能である。
【０１６２】
以上、本発明者によってなされた発明を実施の形態に基づき具体的に説明したが、本発明は前記の実施の形態に限定されるものではなく、その要旨を逸脱しない範囲で種々変更が可能であることは言うまでもない。
【産業上の利用可能性】
【０１６３】
上述では、クロスワードパズルへの適用を説明したが、必ずしもこれに限定されるものではない。所定の文字入力項目が存在し、文字の種別が特定されているパズルゲームに対しては適用可能である。たとえば、縦１列、横１行で全ての数字（１から９）が重複しないナンバープレースへの応用などが考慮できる。
【図面の簡単な説明】
【０１６４】
【図１】一般的なペンシルパズルとしてのクロスワードパズルの概念を説明するための概念図である。
【図２】クロスワードパズル用ソフトウェアが動作する携帯電話機の構成を表すブロック図である。
【図３】クロスワードパズル用ソフトウェアのモジュール構成を表す図である。
【図４】本発明を適用したクロスワードパズルの最終的な回答を表す概念図である。
【図５】正解用格子データのデータ構造を表す概念図である。
【図６】正解用データのデータ構造を表す概念図である。
【図７】編集用格子データのデータ構造を表す概念図である。
【図８】編集用データのデータ構造を表す概念図である。
【図９】カーソルデータのデータ構造を表す概念図である。
【図１０】初期化モジュールにおける処理を表すフローチャートである。
【図１１】初期化モジュールに初期化が行われた後のクロスワードパズルの状態の一例を表す概念図である。
【図１２】クロスワードパズルソフト基本モジュールとヒントモジュール間の処理を示すフローチャートである。
【図１３】表示部の表示状況の一例を表す図である。
【図１４】入力識別モジュールの基本的な動作を表すフローチャートである。
【図１５】決定キーの押下が行われた際の処理の流れを示すフローチャートである。
【図１６】表示部の表示状況の一例を表す図である。
【図１７】表示部の表示状況の一例を表す図である。
【図１８】正誤判定モジュールによる正誤判定処理を表すフローチャートである。
【図１９】第２の実施の形態における正誤判定モジュールによる正誤判定処理を表すフローチャートである。
【符号の説明】
【０１６５】
１…外枠、２…未記入マス、３…記入済みマス、４…黒マス、１０１…ＣＰＵ、
１０２…メモリ、１０３…無線部、１０４…アンテナ、１０５…入力部、
１０６…表示部、１０７…スピーカ、１０８…バス、１５０…基本ソフトウェア、
１５１…入力識別モジュール、１５２…クロスワードパズルソフト基本モジュール、
１５３…初期化モジュール、１５４…ヒントモジュール、
１５５…正誤判定モジュール、１５６…表示部描画モジュール、
２００…正解用格子データ、２０１…Ｘ座標、
２０２…Ｙ座標、２０３…文字データ、２０４…Ｘヒント（横のヒント）、
２０５…Ｙヒント（縦のヒント）、２０６…ポインタ、
３００…編集用格子データ、３０１…Ｘ座標、３０２…Ｙ座標、３０３…文字データ、
３０４…文字固定フラグ、３０５…ポインタ、４００…カーソルデ−タ、
４０１…Ｘ座標、４０２…Ｙ座標、４０３…状態パラメータ、４０４…ポインタ、
４１０…カーソルデ−タ、４１１…Ｘ座標、４１２…Ｙ座標、
４１３…状態パラメータ、４１４…ポインタ、
５００…正解用データ、５０１…エントリリスト、
６００…編集用データ、６０１…エントリリスト、
７００…第１カーソル、７０１…第２カーソル。
【図１】
2009247525.tif 000003
【図２】
2009247525.tif 000004
【図３】
2009247525.tif 000005
【図４】
2009247525.tif 000006
【図５】
2009247525.tif 000007
【図６】
2009247525.tif 000008
【図７】
2009247525.tif 000009
【図８】
2009247525.tif 000010
【図９】
2009247525.tif 000011
【図１０】
2009247525.tif 000012
【図１１】
2009247525.tif 000013
【図１２】
2009247525.tif 000014
【図１３】
2009247525.tif 000015
【図１４】
2009247525.tif 000016
【図１５】
2009247525.tif 000017
【図１６】
2009247525.tif 000018
【図１７】
2009247525.tif 000019
【図１８】
2009247525.tif 000020
【図１９】
2009247525.tif 000021