Scratchでゲーム制作入門 – マウス操作で迷路ゲーム(1) –

こんにちは、まなゲー池田です。
まなゲーらんどの運営と並行して、僕が直接指導できる範囲に限って、小さなプログラミング教室「まなゲーらぼ」をやっています。

今回からは、マウス操作で迷路を進むゲームを作っていきたいと思います。

マウスポインタの後を追って移動するキャラクターをゴールまで導く時間を競うゲームになります。

マウスポインタを追尾するキャラクターを作る

まずはマウスポインタを追いかけるように移動するスプライトを作ります。
キャラクターを自由に動かせるタイプのゲームを作ろうとするとき、色々なやり方がありますが、一番簡単に作ってみることができるのがこれかなと思います。

「追いかける」は「向き」と「移動」の組み合わせ

ひとまず「初期化」として、最初の向きと座標を決めておきます。
そうしないと、2回目以降のプレイのときに、毎回違う場所からのスタートになってしまいます。他にも理由はありますが、面倒でも「初期化」を行うようにしておくと後々スムーズです。

で、「マウスポインタ」を追いかける、という動作は、ポインタの方を向く、近く、ポインタの方を向く、近く、・・・のくりかえしですから、初期化の後に、その二つをずっとくりかえすプログラムが続くようにブロックを並べていきます。

これで動かしてみると、ちゃんとネコさんがマウスポインタを追いかけてきてくれるのがわかります。

ネコから逃げるようにマウスを動かすと、これだけでも結構楽しいです。
今回は、これでプレイヤーキャラを動かすわけですが、追いかけてくるキャラクターから逃げ回るようなゲームを作ることもできそうですね。

「荒ぶるネコさん」をなんとかしたい・・・

ただ、このままだと、マウスポインタに追いついた後も止まらずに、ブルブルと震えるように行ったり来たりをくりかえしてしまいます。面白い動きではあるのですが、これでは迷路の中を進むのに困ってしまいます。

次回は、これをなんとかして自然な動きにするところから始めたいと思います。

第2回へ進む

Scratchでゲーム制作入門 – 4ブロックモグラ叩きの改造(2) –

こんにちは、まなゲー池田です。
前回「4ブロックモグラたたき」を改造して、制限時間や得点表示をつけました
今回はさらに、BGMと効果音を加えて完成させたいと思います。

Scratchではサウンドを鳴らすのもとても簡単

まずは効果音からやっていきます。
ネコさんスプライトの、「音」タブを開いてみると、すでに1つ音声が登録されています。
「ニャー」というやつですね。これはすぐにならしてみることができます。

「スクリプト」タブを開き、「音」パレットを開きます。

「〜の音を鳴らす」というブロックがあるので、これを既に組んであるブロック群に追加します。

ネコさんがクリックされたら、時間がまだ残っているかどうか確認して、残っていたら「ニャー」を鳴らす。という具合ですね。

これだけで、もう効果音については完成です。ゲームをスタートしてネコさんスプライトをクリックしてみましょう。音がつくとぐっと楽しさが増しますね。

たくさんある組み込みサウンドを使ってBGMをつけてみる

効果音がなるようになったので、次はBGMです。自前で用意したサウンドやネット上で公開されている音源をもらってきて使うこともできますが、今回はより手軽にScratchにあらかじめ用意されているBGM向けの音声ファイルを使ってみることにします。

「音」タブの中、「新しい音」という表示の下に、3つのアイコンが見つかるはずです。1番左のスピーカー型のアイコンを選択します。

すると、用意されているサウンドが一覧表示されます。順番に全部聞くのは大変なのでカテゴリで絞り込みます。今回はBGMに使いたいので「音楽のループ」カテゴリを選びます。

BGM向けのループサウンド(繰り返し再生した時に、終わりと最初がスムーズにつながるように作られたサウンド)がリストアップされました。いろいろ聴いてみて気にいる物を選んでください。

今回は「dance magic」を選択

スピーカー型アイコンをクリックすると表示が変わるので、それを確認してから、

画面右下の「OK」ボタンをクリック!!

「ニャー」の下に、「dance magic」が追加されましたね。

BGMの再生には「終わるまで〜の音を鳴らす」ブロック

BGMの再生専用に、新しく「旗がクリックされとき」を出して、新たなスクリプトを作ります。
「じかんが0まで繰り返す」を組み立てて、その中に「終わるまでdance magicの音を鳴らす」を入れてやります。

「終わるまで」が重要で、これを間違えて「dance magicの音を鳴らす」だけにしてしまうと、前の音がまだなり始めたばかりなのに、新たな再生を次々と始めてしまっておかしなことになってしまいます。

あとは、残り時間を減らしていくループの終わりに「すべての音を止める」ブロックを追加してやります。これで時間切れと同時にBGMの再生がストップします。

ということで、効果音とBGMもついて、モグラ叩き(ネコ叩き?)の完成です!!

キャラクターや背景を変えたり自作したりして、オリジナル作品に仕上げてもいいでしょう。

Scratchでゲーム制作入門 – 4ブロックモグラ叩きの改造(1) –

こんにちは、まなゲー池田です。
前回作成した「4ブロックモグラたたき」を改造して、もうちょっとゲームらしくしていきます。
今回追加したい要素は、この二つ。

  • 得点が表示されるようにしたい
  • 制限時間を設けたい

難しくなりそうですが、追加するブロックは全部で11個だけ。
しかも、その中にプログラミング学習上、超重要な要素が色々入っています。
早速やってみましょう。

「変数」を使って見る

得点や制限時間など、プレイ中に変化していくデータを扱うには「変数」というデータの入れ物が必要です。

「スクリプト」タブの「データ」パレットにある「変数を作る」ボタンをクリックします。

すると、変数作成用のウィンドウが開くので「てんすう」と入力して「OK」をクリック。

これで、変数「てんすう」が作成され、使用可能になります。
中に、数値や文字を入れたり、入れた数値を増やしたり減らしたりできます。

同じようにして、もう一つの変数「じかん」を作りましょう。

変数ができたら、早速使ってみましょう。次のことをします。

  • 得点を初期化する(ゲームスタート時に毎回0になるようにする)
  • ネコさんクリックで1点ずつ加算

これを実現するために2つのブロックを追加します。

同じようにして、「じかん」も初期化設定しましょう。
ゲームスタート時に10になるようにします。

これで、旗ボタンをクリックしてスタートすると、ネコさんをクリックするごとに、1点ずつ得点が入るようになったはずです。

「くり返し処理」に挑戦

制限時間が1秒ごとに減って、ゼロになるようにしていきましょう。
「制御」パレットを開いて、中から「〜まで繰り返す」ブロックを取り出します。
(画像にそのブロックが写っていませんね。すいません。もう少し下の方にあります。)

その他必要なブロックを「変数」パレットと「演算」パレットから取り出して、画像のように並べます。

これでスタートしてやると、ちゃんと残り時間が減っていきます。
しかし、「じかん」がゼロになっても、ネコさんをクリックして得点できてしまいます。
これではいけませんね・・・。

「分岐(もし〜なら)」を試してみる

ネコさんがクリックされた時に行う処理の方を改造して、
「じかん」がまだ残っていた時だけ、「てんすう」を増やすように変更します。

「制御」パレットから「もし〜なら」ブロックを取りだして、画像のように組み立てます。

はい!これで、制限時間付き、得点表示ありの「モグラ叩きゲーム」ができました!

あとは、BGMとクリック時の効果音ぐらい、つけてみましょうか。

続きの記事「4ブロックモグラ叩きの改造(2)」を読む

Scratchでゲーム制作入門 – ブロック4つでモグラ叩き –

こんにちは、まなゲー池田です。
まなゲーらんどの運営と並行して、僕が直接指導できる範囲に限って、小さなプログラミング教室「まなゲーらぼ」をやっています。

教室の子向けに、いろいろ考えたり作ったりするんですが、せっかくなので一部を記録・公開していこうと思います。

「俺(私)ゲーム作れる!」の為の「超簡単4ブロックゲーム」

今回は、とにかく初めてでもすぐにゲームっぽいものができてしまう「ブロック4つでモグラたたき」です。

はい。タイトル通り、必要なブロックはたったの4つ。超簡単ですね。
全く初めての子でも数分で作ってゲームらしきものを動かしてみることができます。

緑の旗ボタンをクリックしてスタートすると、ネコ君がステージの真ん中に配置されます。
(初めてやるときは、最初からネコ君真ん中にいるので、何も起こらない感じになります。)

で、ネコ君をクリックしてやると、その都度、ランダムな座標へと移動して、画面を飛び回ってくれます。

クリックするごとに移動します。

何てことないんですが、これだけでも結構「わーー」ってなって楽しいです。
スタートから動かしてみるまでの短さがScratchの真骨頂ですので、初めてやる子にはオススメです。
問題は、この時点で楽しくなっちゃって、次へなかなか進んでくれないことが、ままあることですかねw

続きの記事「4ブロックモグラ叩きの改造(1)」を読む

配当漢字チェッカー

こんにちは、まなゲー池田です。
小学校の各学年で習う漢字を「配当漢字」と言います。ある文章を子どもに読ませる、あるいは子ども向けに文章を書くとき、学齢に応じた配慮が必要になりますが、その確認を人力でやるのはかなり手間な上に、漏れのリスクが常に残ります。

そこで、任意の文章を与えてやると、その中で指定された範囲の配当漢字がどのように使われているか、あるいは未習の漢字がどのように混ざっているかを調べて回答してくれる「配当漢字チェッカー」を作ってみました。

手元データとリストを照らし合わせてチェックするという作業は、非常にコンピュータ向けの作業ですので、ちょっとしたプログラムをかけるようになれば、このぐらいのものは割とすぐに作れるようになります。もちろん、データを用意し、アルゴリズムを考え、それをコーティングするのには、一定の時間が必要ですが、手作業でやるよりも、専用のプログラムを作る方が結局早い、ということはよくありますし、繰り返し同様の作業を行う可能性があるならば、どんどん作っていくべきだと思います。

上の画像は、配当漢字チェッカーでデフォルト入力されている「チェックしたい文章をここに入力」という文を、チェック範囲を1年生に設定してチェックした結果です。ここに含まれる漢字のうち「入文力」の3文字は1年生で習うこと、「章」の字はまだ習わないことなどがわかります。

使ってみて、ご意見などありましたら、ぜひ聞かせてください。

「配当漢字チェッカー」を使ってみる

Scratchで作る!生態系シミュレーション

こんにちは、まなゲー池田です。
先日の「1分でつくる!Scratchで拡散シミュレーション」のプログラムをちょっといじって、植物、草食動物・肉食動物が登場する、生態系シムっぽいものができそうだったので、作ってみましたよ。

今回はまず、植物と草食動物を作っていきます。

植物をつくる

こちらが植物の中身、ランダムな場所に種が撒かれて、時間とともに成長(サイズ拡大)していき、草食動物が接触すると縮小していきます(食べられた)。食べ尽くされるといったん消滅しますが、どこからか種が運ばれて復活するイメージで、90秒後に同じ場所から再生し始めます。

草食動物を作る

こちらは草食動物。動物には体力プロパティ(hp)があり、時間とともに体力が減っていきます(空腹から飢餓へ向かう)。体力は植物に接触することで回復・増大し、一定まで増えると分裂して増えます(草食は草食でも単細胞生物っぽいですね。なお、個体のサイズ(=体力)は分裂時に一定減少します。)。肉食動物に接触する(襲われる・食べられる)ことで、急激な体力低下が起こりますが、今回はまだ肉食動物を実装しませんので、敵は空腹だけですね。

動かしてみる

Scratchの操作さえ慣れていれば、ここまで数分というところでしょうか。では早速動かしてみましょう。旗アイコンをクリックしてプログラムを走らせると。

こんな感じで、ステージ上に植物(緑)が出現し、ジワジワ成長し始めます。

しばらくのちに、草食動物(紫)が出現し、ステージをうろうろし始めます。

たくさんある植物をモリモリ食べて、ガンガン増えていきます(擬音多め)

そうこうするうちに、Scratchのスプライト(画像オブジェクト)表示上限まで来てしまいました。この制限は(仕方ないんですが)Scratchでシミュレーション的なモノを作ろうとするときに何かと障害になる厄介な制限です。ずば抜けた手軽さの代償ですね。

あっという間に、植物は食い尽くされ、ステージのあちこちで飢餓が発生します。動物の体力は見た目の大きさとして視認できるようになっていますので、小さいモノほど空腹で体力が低下しており、点のようになってしまっているものは、餓死寸前ということになります。

一定時間ごとに植物は復活しますが、草食動物の個体数が多いうちは、ろくに成長しないうちに食べ尽くされてしまい。ステージ中に飢餓が蔓延しているのが見て取れます。続々と餓死が起こり、個体数が激減していきます。

最盛期に250以上まで増えた個体数が、一気に30代まで減ってしまいました。ここでようやく、植物の復活・成長が追いつくようになり、動物の個体数も少しずつ回復し始めます。

その後は、だいたい個体数が100ぐらいまで行くと、食料が不足して個体数が減り始め、60前後まで減るとまた増加に転じるというのを繰り返すようになり、その範囲で安定してきます。

極めて単純な画面構成ですが、意外と子どもウケはいいようで「あ、ここが危ない。こっちのグループはもうだめだ」とか「こっちはめっちゃ増えてきた!」なんて言いながら、楽しげに眺めていました。

実際のプログラムはこちらで確認できます。

5分でよめる!AIにビビりすぎないために、先生・お母さん・お父さんが絶対知っておくべきこと

AI、AIと騒がしいこの頃ですが、先生、あるいは子育て中のお父さんお母さん的に、これだけは知っとこう、というのをまとめてみたいと思います。なるべく簡潔に短くまとめます。特にお急ぎの方は、見出しだけ読んどくのもありかと!(書いた後で朗読してみたら4分未満で読めました。)

今のAIは、統計と確率とビッグデータで動きます。

強大な計算力を武器に、与えられた膨大なデータに統計処理を施すことで、そこにデータの相関関係を見つけ出す。見つけた関係を用いて次の処理の精度を高める。これらの作業を無数に繰り返すことで特定の問題に対する正解予測能力を高める。というのが今のAIの学習方法です。この方法を採用することで、前世代のAIには対応出来なかった複雑な問題を処理することが可能になりました。

このことは、飛躍をもたらす一方で、およそコンピュータのイメージから遠い、新たな弱点を生み出しました。つまり、

今のAIは「必ずミスする」

ということです。複雑な問題を「確率で」処理しようとするのですから当然こうなります。例えば成功率が99.9%だったとして、それはつまり1,000回に一回ミスするということです。

このミスを、コストとして受け入れらる作業(仕事)であるか否かが、ある仕事をAIに任せられるか否かを問う重要な指標となります。

機械は責任を負うことができない

そして、このことは「AIのミスの責任を誰がとるのか」という新たな問題を生み出します。もちろんAI自身は責任を取ることができません。製造者責任ということになりそうですが、開発会社はこの大きすぎるリスクを決して負おうとはしないでしょう。重大な責任を負う仕事を、AIが単独で担うことは、その能力とは全く別のこの要因によって、少なくとも当面の間は出来ないでしょう。

AIを育てるのには莫大なコストがかかる

ごく卑近な例からいきましょう。フリーで使えるAIを、自宅に設置した個人で買えるレベルの良いパソコンにのっけて、多少混みいった学習をさせてみます。計算を始めたパソコンは数時間から数日、ぶっ通しで計算を行います。これを繰り返しながらAI育成を行うとどうなるか?・・・翌月、確実に家計が破綻する金額の請求書が電力会社から届きます(笑)

これをずっとずっと大規模におこないつつ、処理させる膨大なデータを用意するコスト、希少なAIエンジニアに支払う高給というコスト、もろもろでエライ事になるのが、現段階でのAI育成です。(ただし、一旦学習を済ませたAIを、複製しあちこちで同じ仕事をさせることには、それほどのコストを要さないだろうことも覚えておきましょう。)

今のAIもそれほど融通はきかない

高度な学習が可能となり、複雑な問題解決や状況判断を行えるようになったAIですが、学習済みでない新しい状況やデータにはまるで対応できません。この問題は、コンピュータの性能が上がっても解決せず、現状とは異なる新しいアプローチが必要になります。いわゆる「汎用AI」、人のように新しい状況に対応できるAIは、まだまだお話世界の存在です。

まとめると、今のAIは

高度に複雑な問題を処理できるようになった
でも、一定の確率で必ずミスを犯す
育成にすごくお金がかかる
出来上がるのは結局融通のきかない専門バカ

で、現場で働かせようとすると

機械なので責任を負うことはできない(人間の「上司」が必要になる)
運用コストは専門家を雇うより(うまくいけば)ずっと安い(ここで投資を回収)
研修が必要になるたびに、ビッグデータと専門家が必要になる(=高くつく)

結論、すごいんだけど微妙なところも多い

実際、今AIを導入してる企業・組織を見ても、話題作りとイメージアップと株価上昇が目的、という感じだし・・・。

もちろん、コンピュータとソフトウェアの進歩、IoTやロボティクスの組み合わせで、消えていく仕事はたくさんあるでしょう。でも、そんなの今に始まった事ではありません。そして、今回の話だけでも、どんな仕事から消えていきそうか、なんとなく見えてきますよね。労働者にとっての「おいしい仕事」は、投資家にとっての「無駄な出費」。忘れてはいけないのは、AI云々以上に、そんな昔からのコスト観のようです。

こんな感じかなぁ。

1分でつくる!Scratchで拡散シミュレーション

水槽にポトっと垂らされた色水が、モワモワーっと拡がってやがて水槽の中全体へ均等に広がり行く、そんな拡散現象ですが、あれは水分子が互いにぶつかり合って、結果それぞれが全くランダムに移動するうちに起こるのだというのを本で読んで、「へぇーっ!」っとなったら、無性に試してみたくなりました。

こういうシンプルなのをパッと試してみようと思ったら、やはりScratchです。何しろ新規作成した時点で、スプライト(画像オブジェクト)が配置されてて、わずかなブロックを追加してやるだけで、すぐに「動かしてみられる」のですから。

で、早速組んでみたのがこんなスクリプト。1分でできます。何をしているかというと・・・、

  • 自分(猫のキャラクター)のクローン(複製)を300個つくる
  • 300個のクローンそれぞれに、ランダムな角度を向いては、ほんの少し移動を2000回ずつ実行させる

300個というクローン数はScratchの限界によるもので。Scratchでは同時に表示できるスプライト・クローンの数の上限が約300(正確には302だったかな)になっているためです。これ以上クローンしようとしても表示されません。2000回というのは適当です。増やしたり減らしたりして色々試してみました。

大量の猫(cat)がクローンされ、同一座標上に重なって配置されます(一匹に見えるけど三百匹が重なっています)。その後まもなく、それぞれてんでにチョコチョコ動き始め、あとは確率の問題でN回移動後の座標の散らばりがどんどん大きくなっていきます。

こんな感じで、

散らばっていって、

なるほど、見事に拡散していきます。
ひとつひとつを見ると、かなりふらふらと動き回っているのですが、全体としてみると、最初の一点に重なった状態から、一貫して散らばっていくのがわかります。まなゲーらぼの子どもたちにも見せてみましたが、こういうワラワラ動くやつは見ていて楽しいらしく結構好評でした。

実物はこちらでご覧いただけます。
(Scratchはflashで動いているので基本PC限定です。windowsタブレットならいけるかも)

こういうちょっとしたシミュレーションは、実験や観察の代わりとしても面白いと思います。
また何か作ったら報告します。

子供向け特化のタイピング学習ゲームをつくる(1)

こんにちは、まなゲー池田です。
タイピング練習ができるサービスは色々あるみたいですが、どうせならついでに漢字の勉強や復習もしちゃったり、できることなら語彙も増やしたりしたいなぁ、何よりレベルデザインを自分でやりたい!と以前から思っていて、問題や設定を自分で決めたいので、この際だから作ってウチの「まなゲーらんど」で公開しちゃおう。ということで、ハイ作ります!!

ひとまずゲーム云々はおいといて

タイトルも詳細も全く未定ですが、ひとまずゲーム以前にタイピング練習サービスとして必須の機能を作っていきたいと思います。

  • (1)キーボードからの入力を受けて画面に英数字や記号を表示したり変数に格納したり
  • (2)ローマ字正答データと入力されたデータを随時照合して、正誤評価を行う

というイメージで作っていきます。

ローマ字データの手動作成は絶対無理だと気がついた

(1)はサクッと出来ました。

window.addEventlistener(‘keydown’,catchInput);

こんな感じで、キー入力(キーコード)を受け取れるので、受け取ったキーコードに応じた文字・記号をそれ用の変数に入れてやるだけです。

(2)も、とりあえず仮の正答データを作って、キー入力を受け取るたびに、そこまでに入力された回答と正答データ(仮)の同じ文字数の部分までが一致するかどうかを判定して、一致していればそこまでの入力結果を画面に出してやる。という感じで行けたんですが、ここでハタと気がつきました。

これ・・・正答データ作るの超めんどくさいんじゃないか?

かな文字をローマ字に変換する際、例えば「し」はsiでもいいし、shiでもいけます。となると、ローマ字解答データを2つ作っておいて、両方を入力結果と照合しながら、どちらかと一致していればそこまでは正解、という具合に処理していかなければなりません。2種類ずつ、ぐらいならなんとか根性で乗り切ることも可能なのかもしれませんが、例えば「しんぶんし」とかだと、「ん」をnnで入力するパターンとnで済ませるパターンも合わせると…

“sinnbunnsi”, “shinnbunnsi”, “sinbunnsi”, “shinbunnsi”, “sinnbunsi”, “shinnbunsi”, “sinbunsi”, “shinbunsi”, “sinnbunnshi”, “shinnbunnshi”, “sinbunnshi”, “shinbunnshi”, “sinnbunshi”, “shinnbunshi”, “sinbunshi”, “shinbunshi”

たかがひらがな5文字の変換パターンが16種類もあるではありませんか・・・。これは絶対心が折れる、いや、根性以前の問題として、手動では絶対きちんと網羅できそうにない。少なくとも数百問、もしかしたら1000問単位で問題を作るかもしれないというのに・・・っ!

ということで、追加クエスト「(3)ひらがな正答データをもとにローマ字正答データを自動作成できるアルゴリズムを組む」が発生しました。

絶対作っとかないといけないデータを我慢して作る

自動作成アルゴリズムを作ると言っても、「ローマ字早見表」レベルの情報は人が作って与えてやらねばなりません。
こんな感じの微妙な配列データを作成します。

//かな >> ローマ字変換用データ
var listRoman = [
[“あ”,[“a”]],[“い”,[“i”]],[“う”,[“u”]],[“え”,[“e”]],[“お”,[“o”]],
[“か”,[“ka”]],[“き”,[“ki”]],[“く”,[“ku”]],[“け”,[“ke”]],[“こ”,[“ko”]],
[“さ”,[“sa”]],[“し”,[“si”,”shi”]],[“す”,[“su”]],[“せ”,[“se”]],[“そ”,[“so”]],
[“た”,[“ta”]],[“ち”,[“ti”,”chi”]],[“つ”,[“tu”,”tsu”]],[“て”,[“te”]],[“と”,[“to”]],
[“な”,[“na”]],[“に”,[“ni”]],[“ぬ”,[“nu”]],[“ね”,[“ne”]],[“の”,[“no”]],
[“は”,[“ha”]],[“ひ”,[“hi”]],[“ふ”,[“hu”,”fu”]],[“へ”,[“he”]],[“ほ”,[“ho”]],
[“ま”,[“ma”]],[“み”,[“mi”]],[“む”,[“mu”]],[“め”,[“me”]],[“も”,[“mo”]],
[“や”,[“ya”]],[“ゆ”,[“yu”]],[“よ”,[“yo”]],
……
];

単純作業が死ぬほど苦手なので、これだけでもう心が折れそうなんですが、歯を食いしばってカチカチ入力しました。

ひらがな → ローマ字変換アルゴリズムを考える

ひらがなで与えられた任意の文字列データを、ローマ字データへと変換するには、
si、shiなどのAltな変換に加え、「拗音」「促音」「発音」を含む文字列への対策を施さなければいけません。

「拗音」対策

「ゃ、ゅ、ょ」を含むやつです。「きゃ」とか「ちょ」とか、セットで扱われようとしてくる困ったやつら。「1文字ずつ変換だというとろーが!」と叫びたくなりますが、ぐっとこらえて、「先に次の文字を確認して、そこに拗音が見つかったら2文字セットで変換候補を探す」というルールを作ります。

「促音」対策

「っ」を見つけたら、「っ」があったぞ!という情報だけをキープしておいて次の文字へ進みます。で、次の文字を変換・追加するときに、最初の子音を2重にすることで対策としました。

「撥音」対策

「ん」ですね。nnかn。「n」だけで大丈夫なケースも多いですが、次の文字が「あいうえお」「なにぬねの」のいずれかの場合は「nn」としておかないと、「こんいちは」みたいなことになります。(今、入力してみて気づいたんですが「こんいちは」と打とうとしても勝手に「こんにちは」になおしてくれました。タイプミスが減ったのだと思っていたら、こっそりPC側でフォローしてくれてたのか。)

これらの、拗音・促音・撥音対策を施しつつ、複数の変換候補を持つ「かな」が出てくるたびに、場合分けして、正解となりうるローマ字変換パターンを網羅していきます。

しばらくウンウン唸って、かな文字列を与えられたら、ローマ字変換パターンを網羅して返す関数(80行ほど)をひねり出しました。

こうして数時間の格闘の結果、ひとまず動くようになったのがこちら。

まなゲータイピング(仮)ver.00

かな文字が問題。グレーがローマ字正答例。黄色が入力済みの部分です。
正答例がひとつしか表示されませんが、zikannをjikannなどとしてもちゃんと正解になるはず。

サンプル問題20問ほどしか入っていませんので、ちょいちょい同じのが連続で出ちゃいますが、ひとまず動きます。(ゲーム性どころか、得点も評価も、終わりすらありません;;)

あちこち調整が必要になるかもしれませんが、必須な部分はだいたい出来ましたので、次から評価など行えるようにしつつ、遊びっぽさを加えていきたいと思います。

この程度でも、書いたプログラムが狙い通りに動くと、じわっと脳から何かが出る感じがしますね。
シミュレーション系のゲームの攻略や、クラフト系ゲームで狙い通りに行った時に通じる気持ちの良さがあります。
しかも、書いたコードをあらためて見てみると、配列やら文字列操作の基本がええ具合に網羅されてて、教材にするのもいいなぁと思うったりして、一石二鳥の制作となりました。

つづく