時間感覚を養うプログラミングとは?――事例で知るガジェットWindows Liveが魅せる次世代マッシュアップ(3/4 ページ)

» 2007年03月15日 08時00分 公開
[森川拓男,ITmedia]

 リスト2に引用した部分では、今回のガジェットの肝となる評価コメントを出すための下準備を行っている。

リスト2■評価コメントを出すための仕掛け(その1)

	var m_comment0 = new Array();// いちばん良い
	var m_comment1 = new Array();// 次に良い
	var m_comment2 = new Array();// その次に良い
	var m_comment3 = new Array();// その次の次に良い
	var m_comment4 = new Array();// 目も当てられない

 リスト2を見て分かる通り、評価コメントは5段階に分かれている。もちろん、ピッタリ正解した場合には、「いちばん良い」というコメントが表示される。以下、順番にランクが下がっていき、最も時間が離れてしまった場合には「目も当てられない」というコメントが表示される。その中には、何のコメントも表示しない、「無視」も用意されている。

 「ブレイントレーニング」に続いてこのガジェットを開発したイーストの永井氏によると、「コメントはランダムに表示されるようになっています。あんまり外れていくと、そっけなくなっていきます。また、ちょっとした外れ具合によって、5段階の中でも5種類のコメントを用意しているのです。これは、最初の小数点の0.1秒によって、何を表示させるか決めています」と語る。

 つまり、それぞれの評価コメントは1つではなく、さらに5種類に細分化されているという。最終的には、25種類の評価コメントが存在するということになるわけだ。

 このようにコメントする永井氏でも、「実際にまだ1回しかピッタリと合わせたことがないんですよ」と笑って語った。それほどピッタリと正解することは難しいだろう。メッセージ自体はソースを見れば分かるが、やはり実際に挑戦してピッタリと合わせることができたとき、「小さなガッツポーズ」をしてしまうに違いない。

 リスト3として、後半部分に記述された、実際に表示される評価コメントと、それをランダムに表示させる部分のソースを引用した。なお、評価コメントに関しては、今回の引用に限り「※※※」として伏せさせていただいた。ぜひ実際に挑戦してコメントを確認してほしい。

リスト3■評価コメントを出すための仕掛け(その2)

	// 結果コメントを作成
	function CreateResultComment()
	{
	    //0
	    m_comment0[0] = "※※※";
	    m_comment0[1] = "※※※";
	    m_comment0[2] = "※※※";
	    m_comment0[3] = "※※※";
	    m_comment0[4] = "※※※";
	    //< 500
	    m_comment1[0] = "※※※";
      〜中略〜
	    m_comment1[4] = "※※※";
	    //< 1000
	    m_comment2[0] = "※※※";
      〜中略〜
	    m_comment2[4] = "※※※";
	    //< 2000
	    m_comment3[0] = "※※※";
      〜中略〜
	    m_comment3[4] = "※※※";
	    //
	    m_comment4[0] = "※※※";
      〜中略〜
	    m_comment4[4] = "※※※×2";
	}
	// 結果のコメントをランダムに選択
	function ChoiceResultComment(level)
	{
	    var comment = "秒を選択して、startボタンで開始!";
	    var index = 0;
	    var num = Math.floor(Math.random() * 10);
	    if(num < 5)
	        index = num;
	    else
	        index = 0;
	        
	    if(level == 0)
	    {
	        comment = m_comment0[index];
	    }
	    else if(level == 1)
	    {
	        comment = m_comment1[index];
	    } 
	    else if(level == 2)
	    {
	        comment = m_comment2[index];
	    } 
	    else if(level == 3)
	    {
	        comment = m_comment3[index];
	    } 
	    else if(level == 4)
	    {
	        comment = m_comment4[index];
	    } 
	    SetComment(comment);
	}

 次ページに挙げるリスト4に引用した個所が、このガジェットの中心となる部分だ。

 「単純な動作ですけど、『start/stopイベント』があって、スタートした時間を保存する。そして、ストップの処理をしたときにその差を求める。要した時間から、指定した時間との差を求めて、コメントを表示するわけです。すべて同じ幅で決めているのですが、10秒と60秒ではその幅の違いがあってもよかったかなと思いますね。これもチューニング次第ですね」(永井氏)

 つまり、まだまだ改良、発展の余地があるということも語っていただいた。ぜひ、このような改良は読者に試してほしい。

Copyright © ITmedia, Inc. All Rights Reserved.

注目のテーマ