0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

クソアプリAdvent Calendar 2021

Day 23

すごくシンプルなタイピングゲームを作ろう

Last updated at Posted at 2022-01-09

今回は、タイピングゲーム*くそ を、作ってみましょう




<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="ja">
<head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
 <meta name="GENERATOR" content="UTF-8 Writer" />
<title>私が作った、タイピングゲーム</title>
<h1>私が作った、タイピングゲーム</h1>
     
<script>

document.onkeydown = typeGame;  //キー押下時に関数typeGame()を呼び出す
    


//文字を格納する配列
var moji = new Array("a","b","c","d","e","f","g","h","i",
                     "j","k","l","m","n","o","p","q","r",
                     "s","t","u","v","w","x","y","z"," "," ");

//キーコードを格納する配列
var kcode = new Array(65,66,67,68,69,70,71,72,73,
                      74,75,76,77,78,79,80,81,82,
                      83,84,85,86,87,88,89,90);

//025までの乱数を格納する配列
var rnd = new Array();





//グローバル変数群
var mondai = "";       //問題の文字列を格納
var cnt=0;             //何問目か格納
var typStart,typEnd;   //開始時と終了時の時刻を格納





//025までの乱数を200個作成して配列rndに格納する関数
function ransu()
{
  for ( var i = 0 ; i < 200 ; i++ )
  {
    rnd[i] = Math.floor( Math.random() * 26 );
  }
}

//タイピングゲームの問題をセットする関数
function gameSet()
{
  //カウント数をクリアする
  cnt=0;
  
  //まずは問題文を作る
  ransu();
  
  //問題文をテーブルを使って表示。各セルはID名「word+数字」を付す
  mondai="<table class='Q'>";
  
  for ( var i = 0 ; i < 10 ; i++ )
  {
    mondai += "<tr>";
    
    for ( var j = 0 ; j < 20 ; j++ )
    {
      var idnum =i*20+j;
      mondai += "<td id='word"+idnum+"'>"+moji[ rnd[idnum] ]+"</td>";
    }
    
    mondai += "</tr>";
  }
  mondai += "</table>";
  
  //問題枠に表示する
  document.getElementById("waku").innerHTML = mondai;
}

//キー入力を受け取る関数
function typeGame(evt)
{
  var kc;  //入力されたキーコードを格納する変数
  
  //入力されたキーのキーコードを取得
  if (document.all)
  {
    kc = event.keyCode;
  }
  else
  {
    kc = evt.which;
  }
  //入力されたキーコードと、問題文のキーコードを比較
  if (kc == kcode[ rnd[cnt] ])
  {
    //以下、キーコードが一致した時の処理
    //最初の1文字が入力された時間を記録する
    if (cnt==0)
    { 
      typStart = new Date();
    }
    
    //入力されたセルの文字色を灰色にする
    var idName = "word"+cnt;
    document.getElementById(idName).style.color="#dddddd";

    cnt++; //カウント数を+1にする
    
    //全文字入力したか確認
    if ( cnt == 200)
    {
      //全文字入力していたら、終了時間を記録する
      typEnd = new Date();
      
      //終了時間-開始時間で掛かったミリ秒を取得する
      var keika = typEnd - typStart;
      
      //1000で割って「切捨て」、秒数を取得
      var sec = Math.floor( keika/1000 );
      
      //1000で割った「余り(%で取得できる)」でミリ秒を取得
      var msec = keika % 1000;
      
      //問題終了を告げる文字列を作成
      var fin=" GAMECLEAR GAMESET 時間:"+sec+"秒"+msec;
      
      //問題枠にゲーム終了を表示
      document.getElementById("waku").innerHTML = fin;
    }
  }
}
</script>

<style type="text/css">
<!--
table.Q td
{
  width:20px;
  height:20px;
  font-size:18pt;
  text-align:center;
}

-->
</style>

</head>
<body onload="gameSet()" bgcolor="#ffffff" text="#000000" link="#0000ff" alink="#ff0000" vlink="#800080">
<h1></h1>
<div id="waku"></div>
<form>
<input type="button" value="問題初期化" onclick="gameSet()"><br>
<input type="button" value="好きなことを入力" onclick="location.href='ここに自分のURLを入力'"><br>

</form>
</body>
</html>



<!DOCTYPE html>
<html lang="ja">
<head>

上記で、シンプルすぎるタイピングゲームを作ってみました
いかがでしょう
まだまだ、記事や、質問を、投稿するので、フォローをお願いいたします
フォローをしてくれたら、
私も、フォローさせていただきます

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?