菅野さんのイベントで間違い探しゲームを作ったので アウトプットも兼ねて、コードと画像を載せます。
コード
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script src="<https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js>" integrity="sha512-894YE6QWD5I59HgZOGReFYm4dnWc1Qt5NtvYSaNcOP+u1T9qYdvdihz0PPSiiqn/+/3e7Jo4EaG7TubfWGUrMQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
<title>間違い探しゲーム</title>
<style>
span {
cursor: pointer;
}
body {
text-align: center;
font-size: 30px;
}
#btn {
cursor: pointer;
height: 50px;
width: 50px;
}
</style>
</head>
<body>
<h1>間違い探しゲーム(3問)</h1>
<p><input id="btn" type="button" value="開始" onclick="gameStart();"></p>
<p id="score"></p>
<div id="cells"></div>
<script>
// ゲームのレベル
let level = 0;
// ゲームで利用する漢字の配列(レベル順)
let games = [
['白', '臼'],
['徴', '微'],
['委', '季']
];
// ゲームの最高レベル
const MAX_LEVEL = games.length - 1;
// 初期の縦横の幅(個数)
const DIM_FIRST = 6;
// レベルアップごとに増える縦横の幅(個数)
const DIM_PLUS = 2;
// 実際の縦横の幅(個数)
let dimension = DIM_FIRST;
// ゲームの処理
function gameStart(){
// ダミーの漢字と正解の漢字を設定
let dummy = games[level][0];
let seikai = games[level][1];
// 初期スタート時の設定
if (level == 0){
// スコア表示を空にする
$('#score').empty();
// 開始時間をセット
start_time = new Date().getTime();
}
//dimension * dimensionのspan要素を#cellsに入れる
let cells = '';
for (let i = 1; i <= dimension * dimension; i++){
cells += '<span id="s' + i + '"></span>';
if(i % dimension == 0){
cells += '<br />';
}
}
// <div id="cells"></div>の要素に漢字が入る枠作成
$('#cells').html(cells);
// dummyで埋められた配列を作る
let chars = [];
for (let i = 1; i <= dimension * dimension; i++){
chars.push(dummy);
}
// 配列のうち1つをseikaiにする
let offset = Math.floor(Math.random() * chars.length)
chars.splice(offset,1,seikai);
// 漢字の箱の要素に漢字自体を入れ込む
for(var i = 1; i <= chars.length; i++){
$('#s'+i).text(chars[i - 1]);
// 漢字をクリックした時の処理(正解の漢字をクリックした場合のみ)
$('#s'+i).click(function(){
// 正解の漢字をクリックした時の処理
if($(this).text() == seikai){
// レベルを上げる処理(漢字を次のセットに設定&縦横幅を増やす)
level++;
dimension += DIM_PLUS;
// 全レベルクリアした後の処理
if (level > MAX_LEVEL){
// 終了時間のセット
end_time = new Date().getTime();
// 時間スコア表示
$('#score').text(Math.round((end_time - start_time) / 1000) + '秒でクリアしました!');
// 初期化
level = 0;
dimension = DIM_FIRST;
return false;
}
// gameStart()の処理を再スタート
gameStart();
}
});
}
}
</script>
</body>
</html>
画面(途中まで)

結果画面

参考