このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。

【6日でできるVisual Basic2022入門】①間違い漢字探しゲームの概要

①間違い漢字探しゲームの概要

 本章では、4×4=16マスに並ぶ漢字の中から「よく似た1文字」を見つける“間違い漢字探しゲーム”の全体像をつかみます。正解の位置は毎回ランダム、経過秒はリアルタイム表示、誤クリックにはペナルティ—、という簡潔なルールで、視覚認識と集中力を楽しみながら、Visual Basic 2022 によるイベント駆動・タイマー・複数コントロールの一括処理(共通ハンドラー)を学びます。
 ここではUIのワイヤー、使用コントロール、VB命令の要点、そして“体験版”の最小コードを示し、次章以降の実装につなげます。

1.ゲームの企画とルール

1.1. 基本ルール

項目内容
盤面4×4(16マス)
目的似た漢字が並ぶ中から正解の1文字を素早くクリック
正解配置毎回ランダムで1か所
計時開始からの経過秒を表示(誤クリックで+ペナルティ)
終了正解クリックでタイマー停止→記録表示

1.2. 出題漢字ペア(例)

ペア読みよくある違い
糊/湖のり/みずうみ右側部首・さんずいの有無
話/語はなす/かたる言偏+構成の差
録/緑ろく/みどり金偏と糸偏、右側の形状
潮/朝しお/あささんずい有無+右側の構造
倍/培ばい/つちかうにんべん vs つちへん
崎/﨑さき異体字(山偏側の差)

1.3. 学習ゴール(VB 2022)

技術キー概念
イベント駆動複数ボタンを共通ハンドラーで処理
レイアウトSplitContainer で上:操作/下:盤面
タイマーTimer.Interval/Start/Stop、実時間の更新
乱数Random.Next(n) で正解位置とペアを決定
反復処理ForControls.OfType(Of Button) の活用

1.4. 画面構成と使用コントロール(設計方針)

1.4.1. ワイヤーフレーム

まず、アプリケーションの完成イメージを描いておきます。

1.4.2. 使うコントロール(概要)

種別(Name) 例主なプロパティ・役割
FormFormGameText="間違い探し", Size 600, 690
StartPosition= CenterScreen
SplitContainerSplitContainer1上下分割、SplitterDistance≈70px
Label(見出し「記録」「秒」)説明・単位表示
TextBoxTextHunt / TextTimer探す文字(Center)/経過秒(Right)
Font: Meiryo UI 18pt
ButtonButtonStartゲーム開始
Font: Meiryo UI 18pt
PanelPanelGridSize 580, 580
TimerTimer120~50ms 程度で Tick 更新
SplitContainer の配置

1.ツールボックスの「コンテナー」を展開します。

2.SplitContainerをフォームに配置して、「SplitContainer」上を右クリックします。

ポップアップメニューから「SplitContainer」を選択します。

3.右上の「▶」をクリックして、メニューを表示します。

「上下スプリッターの方向」を選択します。

パネルが上下分割に切り替わります。

4.「SplitterDistance」を70にします。

Panelの配置

1.ツールボックスの「コンテナー」を展開します。

2.PanelコンテナをPanel2に配置します。

1.5. VB 2022 の要点(このゲームで使う命令・構文)

要素解説
AddHandlerループでイベントを束ねるAddHandler b.Click, AddressOf Buttons_Click
Random.Next(n)0..n-1 を返す正解マスや出題ペアの抽選
Timer.Interval/Start/Stop周期処理計時と表示更新
反復処理For / For Each16ボタンへ一括設定

1.6. 体験版の最小コード(概念実装)

Imports System.Drawing
Imports System.Linq   ' OfType を使うため

Public Class FormGame
    ' 出題ペア(wrong:間違いで並べる、right:正解で1マスだけ)
    Private ReadOnly pairs As (wrong As String, right As String)() = {
        (wrong:="糊", right:="湖"),
        (wrong:="話", right:="語"),
        (wrong:="録", right:="緑"),
        (wrong:="潮", right:="朝"),
        (wrong:="倍", right:="培"),
        (wrong:="崎", right:="﨑")
    }

    Private ReadOnly rnd As New Random()
    Private correct As String
    Private wrong As String
    Private elapsed As Double
    Private Const N As Integer = 4   ' 4×4

    ' ※ PanelGrid(Panel など)、TextHunt(Label など)、TextTimer(Label など)、Timer1 はデザイナで配置しておく
    Private Sub FormGame_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        ' 盤面を 4×4 自動生成(体験用)
        Dim size As Integer = 140
        Dim gap As Integer = 6

        For r As Integer = 0 To N - 1
            For c As Integer = 0 To N - 1
                Dim b As New Button()
                b.Font = New Font("Meiryo", 48.0F, FontStyle.Regular, GraphicsUnit.Point)
                b.Size = New Size(size, size)
                b.Location = New Point(c * (size + gap), r * (size + gap))
                AddHandler b.Click, AddressOf Buttons_Click
                PanelGrid.Controls.Add(b)
            Next
        Next

        StartRound()
    End Sub

    Private Sub StartRound()
        Dim p As (wrong As String, right As String) = pairs(rnd.Next(pairs.Length))
        wrong = p.wrong
        correct = p.right

        TextHunt.Text = $"「{correct}」を探せ!"
        elapsed = 0
        Timer1.Interval = 50
        Timer1.Start()

        ' まず全マスを間違い文字に
        For Each b As Button In PanelGrid.Controls.OfType(Of Button)()
            b.Text = wrong
        Next

        ' ランダムな 1 マスだけ正解に
        Dim idx As Integer = rnd.Next(PanelGrid.Controls.Count)
        Dim btn As Button = CType(PanelGrid.Controls(idx), Button)
        btn.Text = correct
    End Sub

    Private Sub Buttons_Click(sender As Object, e As EventArgs)
        Dim b As Button = DirectCast(sender, Button)
        If b.Text = correct Then
            Timer1.Stop()
            MessageBox.Show($"正解!タイム:{elapsed:0.00} 秒", "お見事")
            StartRound() ' 連続プレイ(体験)
        Else
            elapsed += 2 ' ペナルティ +2 秒
        End If
    End Sub

    Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
        elapsed += Timer1.Interval / 1000.0
        TextTimer.Text = elapsed.ToString("0.00")
    End Sub
End Class

後続章でデザイナ配置・プロパティ表を整備します。ここでは4×4盤面とロジックを小さく体験できるコードを示します(メッセージは本稿向けに変更)。

1.7. 実行イメージ(テキスト)

まとめ

  • 4×4 盤・正解は毎回ランダム・リアルタイム計時という簡潔ルールで、VB 2022 のイベント駆動・乱数・反復処理・タイマーを一気に練習できます。
  • 共通ハンドラーや AddHandler を使えば、16個のボタンでも1本のコードで管理可能。

 次章「②フォームの設定」でプロジェクト作成とフォーム命名を統一し、「③画面の設計①」で SplitContainer を配置、「④画面の設計②」で各コントロールのプロパティを整え、「⑤コードの実装と実行」で完成させます。