難易度の調整と改造について
このゲームでは座標を分かりやすくするために背景画像をグリッド(方眼紙)にしてあります。グリッドを目安にすれば、かなり近い座標をタッチすることが可能です。ゲームをより、難しいものにするには背景画像をなくしてしまう、つまり真っ白など単色にしてしまう方法もあります。また、タッチした瞬間の座標を取得していますが、タッチし終わった時の座標にしてみるのもよいでしょう。
*なお、このプログラムは自由に改造して配布しても問題ありません。画像やプログラム書き換えて楽しんでください。
完成したプログラムコード
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<meta name="viewport" content="initial-scale=1, user-scalable=no">
<title>タッチポイントゲーム</title>
<style type="text/css"><!--
h1 { font-size:14pt; }
body { background-image:url(images/grid.gif) }
--></style>
<script type="text/javascript"><!--
// ===============================================
// イベントを設定
// ===============================================
window.addEventListener("load", function(){
document.addEventListener("touchstart", checkPoint, false);
});
// ===============================================
// タッチした時の座標を求めスコアに加算する
// ===============================================
function checkPoint(){
if (!gameFlag) return; // ゲーム中でなければ処理しない
var x = event.touches[0].pageX; // タッチされた横位置を取得
var y = event.touches[0].pageY; // タッチされた縦位置を取得
var dx = Math.abs(px - x); // 横の差分を求めて得点とする
var dy = Math.abs(py - y); // 縦の差分を求めて得点とする
document.getElementById("result").innerHTML = "タッチした座標 ("+x+","+y+")/";
document.getElementById("result").innerHTML += "誤差 ("+dx+","+dy+")";
score = score + dx + dy;
count--;
if (count > 0) { // 回数があるなら
newPoint(); // 新たな座標を示す
return;
}else{ // 指定回数終わった時の処理
gameFlag = false; // ゲームを終了
var txt = "あなたのタッチ誤差は"+score+"ポイントです。0を目指しましょう";
document.getElementById("msg").innerHTML = txt;
document.getElementById("result").innerHTML = "";
alert(txt);
document.getElementById("gameForm").style.visibility = "visible";
}
}
// ===============================================
// タッチするための座標値を生成
// ===============================================
function newPoint(){
px = Math.floor(Math.random() * 200) + 50; // 横は50~250まで
py = Math.floor(Math.random() * 200) + 100; // 縦は100~300まで
document.getElementById("msg").innerHTML = "座標("+px+","+py+")をタッチせよ!";
}
// ===============================================
// ゲーム開始
// ===============================================
function gameStart(){
document.getElementById("gameForm").style.visibility = "hidden";
gameFlag = true; // ゲーム中であることを示すフラグ
score = 0; // スコア(誤差)を0にする
count = 10; // 10回タッチしたら終わり
document.getElementById("msg").innerHTML = ""; // 表示されているメッセージを消去
document.getElementById("result").innerHTML = ""; // 表示されている座標値を消去
newPoint();
}
// --></script>
</head>
<body>
<h1>タッチポイントゲーム</h1>
<div id="msg"></div>
<div id="result"></div>
<form id="gameForm">
<input type="button" value="ゲーム開始" onClick="gameStart()">
</form>
</body>
</html>