りんご
みかん
めろん
れもん
すいか
いちご
さかな
さくら
もみじ
かえで
からす
ひよこ
すずめ
つばめ
さかな
まぐろ
しゃけ
いくら
くじら
いるか
らくだ
こあら
さんま
さらだ
わかめ
こんぶ
とうふ
ばなな
きつね
ぱんだ
たぬき
ねずみ
きりん
きのこ
とびら
かがみ
てがみ
かめら
かばん
つくえ
はさみ
らじお
くるま
ばいく
あにめ
まんが
くすり
じごく
やかん
たんす
こたつ
ふとん
もうふ
といれ
ぴあの
ぎたー
どらむ
まほう
ひかり
ほのお
こおり
まくら
ますく
めがね
よろい
ぱずる
ぎんが
おうごん
ぷらちな
がっこう
かみなり
ふみきり
てつどう
あきかん
さいころ
おにぎり
たんぽぽ
ぴーまん
らーめん
きゃべつ
かぼちゃ
たまねぎ
はくさい
やきそば
さばみそ
しいたけ
すてーき
ぶたにく
やきにく
からあげ
とんかつ
ころっけ
はちみつ
まっちゃ
すずらん
らいおん
ばくだん
おるがん
ふるーと
わりばし
てぶくろ
ろぼっと
がらくた
おんせん
にわとり
えんぴつ
けしごむ
ひまわり
じしゃく
てぶくろ
こくばん
しゃしん
あいろん
すりっぱ
どんぶり
かいだん
にんげん
どうぶつ
すぷーん
ふぉーく
みそしる
くしゃみ
こむぎこ
こしょう
かみのけ
にんじん
おうさま
でんしゃ
おはよう
おやすみ
あしあと
どらごん
とんかち
そうじき
りもこん
ひこうき
えあこん
ぱそこん
しんじつ
ゆうれい
さっかー
やきゅう
ちきゅう
うちゅう
とうがらし
たらばがに
びすけっと
ましゅまろ
たまごやき
じどうしゃ
じてんしゃ
すべりだい
じゃがいも
さつまいも
ちゃーはん
はんばーぐ
ふらいぱん
にんぎょう
がむてーぷ
ころしあむ
おんどけい
ぴーなっつ
だんぼーる
せんぷうき
きーぼーど
おひめさま
かぶとむし
ありがとう
れいぞうこ
たからばこ
ゆきだるま
ぴらみっど
ぎゅうにゅう
ちゅーりっぷ
ちょこれーと
とうもろこし
ちょきんばこ
さんどいっち
あすれちっく
ぽてとさらだ
かれーらいす
ぶろっこりー
ほうれんそう
さやえんどう
すぱげってぃ
きょうりゅう
ものほしざお
だうんろーど
だいやもんど
がいどぶっく
あこーでぃおん
びにーるぶくろ
いんたーねっと
うそはっぴゃく
いっせきにちょう
いちげきひっさつ
きそうてんがい
せいてんのへきれき
ねこふんじゃった
さるのこしかけ
こーひーぎゅうにゅう
てぃっしゅぺーぱー
いぬもあるけばぼうにあたる
ろんよりしょうこ
はなよりだんご
ちりもつもればやまとなる
たびはみちづれよはなさけ
らくあればくあり
うそからでたまこと
しらぬがほとけ
みからでたさび
ぶたにもしんじゅ
うまのみみにもねんぶつ
あたまかくしてしりかくさず
いそがばまわれ
おににかなぼう
さるもきからおちる
つきとすっぽん
ぜんはいそげ
はるはあけぼの
とうだいもとくらし
なきっつらにはち
ねこにこばん
ぎょふのり
ふくすいぼんにかえらず
へそでちゃをわかす
view source

JavaScript

document.title = '1文字かるた 配列が壊れたキーボードで文字を打つゲーム';

document.oncontextmenu = function () {return false;}

$(function(){
  let textsOrg = 'あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやゆよらりるれろわをんー';
  let textAryOrg = textsOrg.split('');
  clearCount = 0;

  $demo = $('#demo')
  $ult = $('<ul>',{id:'word'});
  $demo.append($ult);
  $ul = $('<ul>',{id:'keyboard'});
  $demo.append($ul);
  $c = $('<c>').text(clearCount);
  $demo.append($c);
  $h1 = $('<h1>').text(document.title);
  $demo.append($h1);
  $p = $('<p>').text('配置ばらばら!疑似かるた!濁点とかは無視できます!');
  $demo.append($p);

  aryOrg = [];

//拗音(ようおん)と促音(そくおん)
  kanaConvAry = [
    ['っ', 'つ'],
    ['ゃ', 'や'],
    ['ゅ', 'ゆ'],
    ['ょ', 'よ'],
    ['ぁ', 'あ'],
    ['ぃ', 'い'],
    ['ぅ', 'う'],
    ['ぇ', 'え'],
    ['ぉ', 'お'],
    ['ゎ', 'わ'],
  ];

  var setWord = function(){
    if(!ary.length){
      setData();
      return;
    }
    clearCount++;
    $c.text(clearCount);
    $ult.empty();
    charAry = ary.pop().split('');
    charAry.forEach(function(v){
      let $li = $('<li>').text(v);
      $ult.append($li);
    });
  }

  var setKeyboard = function(){
    $ul.empty();
    $ul.removeClass('clear');
    texts = _.shuffle(textAryOrg);
    texts.forEach(function(v){
      $li = $('<li>').text(v);
      $ul.append($li);

      let r = Math.random()*9;
      if(r>7){
        $li.css({transform:'scale(-1)'});
      } else if(r>4){
        $li.css({transform:'scaleY(-1)'});
      } else if(r>1){
        $li.css({transform:'scaleX(-1)'});
      }
      $li.on('click', function(){
        $t = $ult.find('li:not(.ok)').eq(0);
        let t = $t.text().normalize('NFD')[0];
        kanaConvAry.forEach(function(k){
          t = t.replace(k[0],k[1]);
        });
        if(v===t){
          $t.addClass('ok');
          if($ult.find('li:not(.ok)').length===0){
            $ul.addClass('clear');

            let key = getURLKEY();
            if(key && clearCount === 3){
               $key = $('<p>',{id:'keyCrypto'}).text(key);
               $key.on('dblclick',function(){$(this).remove();});
               $('#demo').append($key);
               return;
            }
            setTimeout(function(){
              setKeyboard();
              setWord();
            }, 199)
          }
        }
      });
    });
  }
  setKeyboard();

  
  var setData = function(){
    var searchParams = new URLSearchParams(location.search);
    let word = searchParams.get('word');
    if(word){
      word = decodeURI(word);
      console.log(word);
      aryOrg = word.split(',');
      ary = _.shuffle(aryOrg);
      console.log(aryOrg);
      setWord();
    }

    if(!aryOrg.length){
      $.get('/csv/kana.txt', function(data){
        aryOrg = data.split('\n');
        aryOrg.pop();
        ary = _.shuffle(aryOrg);
        setWord();
      });
    }
  }
  setData();

});

CSS

html,body{
  overflow:hidden;
  user-select:none;
}

ul{
  margin:12px auto;
}

li{
  display:inline-block;
  width:9vw;
  height:9vmin;
  line-height:9vmin;
  border:2px solid #000;
  text-align:center;
  margin:1px;
}

#word li{
  height:12vmin;
  line-height:12vmin;
  background-color:#ccc;
}
#word li.ok{
  background-color:#afa;
}
#keyboard li{
}
#keyboard li:hover{
  background-color:#eee;
  cursor:pointer;
}
#keyboard.clear li{
  background-color:#000;
}

c{
  display:block;
  font-size:48px;
  font-weight:bold;
  margin:12px auto;
  text-align:center;
}

HTML

ページのソースを表示 : Ctrl+U , DevTools : F12

view-source:https://hi0a.com/demo/-js/js-game-keyboard-crusher/

ABOUT

hi0a.com 「ひまアプリ」は無料で遊べるミニゲームや便利ツールを公開しています。

プログラミング言語の動作デモやWEBデザイン、ソースコード、フロントエンド等の開発者のための技術を公開しています。

必要な機能の関数をコピペ利用したり勉強に活用できます。

プログラムの動作サンプル結果は画面上部に出力表示されています。

環境:最新のブラウザ GoogleChrome / Windows / Android / iPhone 等の端末で動作確認しています。

画像素材や音素材は半分自作でフリー素材配布サイトも利用しています。LINK参照。

動く便利なものが好きなだけで技術自体に興味はないのでコードは汚いです。

途中放置や実験状態、仕様変更、API廃止等で動かないページもあります。