//電光石火:javascript //定義値 var ranking_script = "http://www.web-parts.info/b_parts/sekka/ranking.php?score="; var images_dir = "http://www.web-parts.info/b_parts/sekka/"; var style_round_cd = "'font-size:20px;color:#eac64a;font-weight:bold;text-align:center;line-height:1em;'"; var style_msg_cd = "'font-size:48px;color:#FFFFFF;text-align:center;line-height:1em;'"; var style_round_game = "'font-size:12px;color:#eac64a;font-weight:bold;text-align:center;'"; var style_msg_nice = "'font-size:36px;color:#00FFFF;text-align:center;'"; var style_msg_miss = "'font-size:36px;color:#FF0000;line-height:1.1em;text-align:center;'"; var style_msg_start = "'font-size:14px;color:#eac64a;font-weight:bold;line-height:1.2em;text-align:left;margin:5px 0px;'"; var style_msg_start2 = "'font-size:10px;color:#ffffff;line-height:1.1em;text-align:left;margin:5px 0px;'"; var style_msg_result = "'font-size:12px;color:#FFFFFF;line-height:1.2em;padding:0;margin-top:14px;margin-bottom:0;text-align:center;'"; //変数 var img_bg_game = null; var img_start = null; var img_bg_cd = null; var img_target = null; var img_bg_result = null; var img_retry = null; var round_cnt = 1; var total_time = 0; var countdown_cnt = 3; var score = 0; var roundMsg = null; var lyBg = null; var lyTarget = null; var lyText1 = null; var lyText2 = null; var start_time = 0; var flg_skip_bg = false; var flg_time_up = null; var rnd=new Randomize(); //ゲーム開始 initGame(); //レイヤー作成 function createLayers() { var divs = "
"; divs += "
"; divs += "
"; divs += "
"; divs += "
"; document.write(divs); //リンクstyle document.writeln(" "); } //ゲーム初期化処理 function initGame(){ createLayers(); initVals(); showStart(); } //全gameレイヤのイベントハンドラ無効化 function disableHandler(){ lyBg.onclick = null; lyTarget.onclick = null; lyText1.onclick = null; lyText2.onclick = null; } //スタートボタンをクリック function onStartClick(){ round_cnt = 1; total_time = 0; flg_time_up = new Array; startCountdown(); } function startCountdown(){ if(round_cnt > 5){ showGameResult(); return; } disableHandler(); lyBg.style.backgroundImage = "url(" + img_bg_cd.src + ")"; lyText1.style.visibility = "visible"; lyText1.style.width = "129px"; lyText1.style.height = "20px"; lyText1.style.top = "120px"; lyText1.style.left = "23px"; lyText2.style.visibility = "visible"; lyText2.style.width = "129px"; lyText2.style.height = "100px"; lyText2.style.top = "150px"; lyText2.style.left = "23px"; lyTarget.style.visibility = "hidden"; countdown_cnt = 3; countdown(); } //カウントダウン function countdown(){ if ( round_cnt <5 ){ roundMsg = "Round " + round_cnt; }else { roundMsg = "Final Round "; } if(3 >= countdown_cnt && countdown_cnt >= 1){ lyText1.innerHTML = "

" + roundMsg + "

"; lyText2.innerHTML = "

" + countdown_cnt + "

"; } else if(0 == countdown_cnt){ lyText2.innerHTML = "

GO!

"; } else{ startRound(); return; } countdown_cnt--; window.setTimeout("countdown()", 1000); } //ゲーム(ラウンド)スタート function startRound(){ if(round_cnt > 5){ showGameResult(); return; } //ランダムで位置作成 var posX = rnd.randomi(130) + 17;//17-147 var posY = rnd.randomi(180) + 100;//100-280 //的を表示 lyTarget.style.visibility = "visible"; lyTarget.style.top = posY + "px"; lyTarget.style.left = posX + "px"; lyTarget.style.width = "10px"; lyTarget.style.height = "10px"; lyTarget.style.backgroundImage = "url(" + img_target.src + ")"; //文字ではラウンド数を表示 lyText1.style.visibility = "visible"; lyText1.style.width = "129px"; lyText1.style.height = "12px"; lyText1.style.top = "71px"; lyText1.style.left = "23px"; lyText1.innerHTML = "

" + roundMsg + "

"; lyText2.style.visibility = "hidden"; //背景レイヤのイベント無視フラグは初期化 flg_skip_bg = false; lyBg.style.backgroundImage = "url(" + img_bg_game.src + ")"; //現在時刻(ミリ秒)を取得 var dt = new Date(); start_time = dt.getTime(); //ハンドラを設定 lyBg.onclick = onMissClick; lyTarget.onclick = onNiceClick; //10秒経過で時間切れ flg_time_up[round_cnt] = true; window.setTimeout("timeUp(" + round_cnt + ")", 1000 * 10); } //ゲームで10秒経過したとき function timeUp(on_round){ if(! flg_time_up[on_round]){ return; } if(on_round != round_cnt){ flg_time_up[on_round] = false; return; } flg_time_up[round_cnt] = false; //背景レイヤのイベント無効化フラグをONにする flg_skip_bg = true; //10秒かかったことにする total_time += 10 * 1000; //ラウンド回数を増やす round_cnt++; //タイムアップした旨、結果を表示 showTimeUp(); } //タイムアップした旨、結果を表示 function showTimeUp(){ //●を消す lyTarget.style.visibility = "hidden"; //文字を表示 lyText2.style.visibility = "visible"; lyText2.style.width = "129px"; lyText2.style.height = "40px"; lyText2.style.top = "150px"; lyText2.style.left = "23px"; lyText2.innerHTML = "

Time UP!

"; //ハンドラを解除 lyBg.onclick = null; lyTarget.onclick = null; //1秒後にカウントダウンから window.setTimeout("startCountdown()", 1000 * 1); } //ゲームで正確にクリックしたとき function onNiceClick(){ flg_time_up[round_cnt] = false; //背景レイヤのイベント無効化フラグをONにする flg_skip_bg = true; //現在時刻(ミリ秒)を取得して開始時との差分を取る var dt = new Date(); now_ms = dt.getTime(); total_time += now_ms - start_time; //ラウンド回数を増やす round_cnt++; //成功した旨、結果を表示 showRoundResult(); } //成功した旨、結果を表示 function showRoundResult(){ //●を消す lyTarget.style.visibility = "hidden"; //文字を表示 lyText2.style.visibility = "visible"; lyText2.style.width = "129px"; lyText2.style.height = "40px"; lyText2.style.top = "150px"; lyText2.style.left = "23px"; lyText2.innerHTML = "

Nice!

"; //ハンドラを解除 lyBg.onclick = null; lyTarget.onclick = null; window.setTimeout("startCountdown()", 1000 * 1); } //ゲームでクリックに失敗したとき function onMissClick(){ if(flg_skip_bg){ //背景レイヤのイベント無効化フラグONならonNiceClickと同時 return; } suspendRound(); } //ゲームでクリック失敗により1秒中断 function suspendRound(){ //●を消す lyTarget.style.visibility = "hidden"; //文字を表示 lyText2.style.visibility = "visible"; lyText2.style.width = "129px"; lyText2.style.height = "100px"; lyText2.style.top = "150px"; lyText2.style.left = "23px"; lyText2.innerHTML = "

Miss!
+1sec

"; //ハンドラを解除 lyBg.onclick = null; lyTarget.onclick = null; window.setTimeout("resumeRound()", 1000); } //ゲームでクリック失敗により1秒中断後の再開 function resumeRound(){ //文字をラウンド数のみに lyText2.style.visibility = "hidden"; //●を表示 lyTarget.style.visibility = "visible"; //ハンドラを設定 lyBg.onclick = onMissClick; lyTarget.onclick = onNiceClick; } //スタート画面表示 function showStart(){ lyBg.style.backgroundImage = "url(" + img_bg_game.src + ")"; lyTarget.style.backgroundImage = "url(" + img_start.src + ")"; lyTarget.style.visibility = "visible"; lyText1.style.visibility = "hidden"; lyText2.style.visibility = "visible"; lyText2.style.width = "129px"; lyText2.style.height = "100px"; lyText2.style.top = "90px"; lyText2.style.left = "23px"; lyText2.innerHTML = "

あなたの反応速度を測定します。世界No.1を目指そう!

ランダムに現れるターゲットを正確にクリックしてください。ミスするとペナルティとして1秒加算されます。5回の平均値があなたの反応速度です。

"; //Styleを初期化 lyTarget.style.fontSize = "6px"; disableHandler(); lyTarget.onclick = onStartClick; } //ゲームの結果を送信 function sendval(arg){ var scriptId = 'sendval'; var api = ranking_script + arg; var head = document.getElementsByTagName('head').item(0); if(document.getElementById(scriptId)!=null){ head.removeChild(document.getElementById(scriptId)); } var s = document.createElement('script'); s.setAttribute('type', 'text/javascript'); s.setAttribute('src', api); s.setAttribute('id', scriptId) s.setAttribute('charset', 'UTF-8'); head.appendChild(s); } //ゲームの結果を表示 function showGameResult(){ //結果を計算 score = Math.round(total_time / (round_cnt - 1)); //DB処理が失敗した時にでも表示されるように showResultWithoutRanking(); //DB処理 sendval(score); } //DB処理前に結果を表示 function showResultWithoutRanking(){ lyBg.style.backgroundImage = "url(" + img_bg_result.src + ")"; lyTarget.style.backgroundImage = "url(" + img_retry.src + ")"; lyTarget.style.visibility = "visible"; lyTarget.style.width = "98px"; lyTarget.style.height = "40px"; lyTarget.style.top = "240px"; lyTarget.style.left = "38px"; lyText1.style.visibility = "hidden"; lyText2.style.visibility = "visible"; lyText2.style.width = "129px"; lyText2.style.height = "150px"; lyText2.style.top = "80px"; lyText2.style.left = "24px"; lyText2.innerHTML = "

あなたの平均反応速度は " + score / 1000 + "秒 です。

"; disableHandler(); lyTarget.onclick = onStartClick; } function ranking(ranks){ if("" == ranks['num'] || "" == ranks['rank'] || "" == ranks['average']) { //DB処理に失敗していたら平均速度のみ表示 return; } var rankText = "

あなたの平均反応速度は " + score / 1000 + "秒 です。

" + "

全世界の平均反応速度は " + Math.round(ranks['average']) / 1000 + "秒 です。

" + "

あなたの世界ランキングは " + ranks['rank'] + "位(" + ranks['num'] + "人中)です。

"; //文字を表示 lyText2.innerHTML = rankText; } //変数初期化 function initVals(){ img_bg_game = new Image(); img_bg_game.src = images_dir + "bg_game.gif"; img_start = new Image(); img_start.src = images_dir + "start.gif"; img_bg_cd = new Image(); img_bg_cd.src = images_dir + "bg_cd.gif"; img_target = new Image(); img_target.src = images_dir + "target.gif"; img_bg_result = new Image(); img_bg_result.src = images_dir + "bg_result.gif"; img_retry = new Image(); img_retry.src = images_dir + "retry.gif"; lyBg = getLayer("lyGameBg"); lyTarget = getLayer("lyGameTarget"); lyText1 = getLayer("lyGameText1"); lyText2 = getLayer("lyGameText2"); } function getLayer(layerId){ var layerObj = document.getElementById(layerId);//NN6 or IE5+ if(!layerObj){ layerObj = document.all[layerId];//IE4 } if(! layerObj){ layerObj = document.layers[layerId];//NN4 } return layerObj; } function Randomize(seed) { this.srand=function(seed) { tmpdt=new Date(); this.seed=this.srand.arguments.length ? seed : tmpdt.getSeconds()*1000+tmpdt.getMilliseconds(); } this.random=function() { this.seed=(this.seed*2061+7)%65536; return this.seed/65536; } this.randomi=function(range) { return Math.floor(this.random()*range*10)%range; } Randomize.arguments.length ? this.srand(seed) : this.srand(); }