配列を2行・3列に並べる考え方

割り算と余りで画面配置を作る

Windows Forms でカードや画像を並べるとき、 最初はこのようなコードを書くことが多いと思います。

// 横に並べる
cards[i].Left = startX + i * space;
cards[i].Top = 30;

このコードは 横一列に並びます。

[0] [1] [2] [3] [4]

しかし、アプリでは次のように 複数行・複数列で並べることがあります。

[0] [1] [2]
[3] [4] [5]

今回は 配列を2次元のように表示する方法を説明します。


配列は1列しかない

まず大事なことです。

配列は基本的に 1列です。

0 1 2 3 4 5

しかし、画面では次のように表示したいことがあります。

[0] [1] [2]
[3] [4] [5]

つまり

1列の配列 ↓ 2行3列の画面

に変換しています。


行と列を計算する

ここで使うのが

  • 余り(%)
  • 割り算(/)

です。

列が3つの場合は次の式になります。

列 = i % 3
行 = i / 3

表で確認する

ii % 3i / 3
000
110
220
301
411
521

ここで見るポイントはこれです。

  • 余り → 横(列)
  • 割り算 → 縦(行)

図で見るとこうなる

i = 0 → (0,0)
i = 1 → (1,0)
i = 2 → (2,0)

i = 3 → (0,1)
i = 4 → (1,1)
i = 5 → (2,1)

つまり画面では

[0] [1] [2]
[3] [4] [5]

になります。


コードにするとこうなる

int cols = 3;

for (int i = 0; i < cards.Length; i++)
{
    cards[i] = new PictureBox();

    int col = i % cols;
    int row = i / cols;

    cards[i].Left = startX + col * space;
    cards[i].Top = 30 + row * 170;

    cards[i].Width = 100;
    cards[i].Height = 150;

    cards[i].SizeMode = PictureBoxSizeMode.StretchImage;
    cards[i].Image = Image.FromFile("card.png");

    this.Controls.Add(cards[i]);
}

実はこの考え方はよく使われる

この仕組みはアプリ開発でとてもよく使われます。

例えば

  • トランプゲーム
  • 将棋盤
  • マインスイーパー
  • 画像一覧
  • Excelのセル

これらはすべて

1列のデータ ↓ 2次元の画面表示

という仕組みで作られています。


今日のポイント

今回のポイントは次の2つです。

列 = i % 列数
行 = i / 列数

そして

  • 余り → 横
  • 割り算 → 縦

この考え方を理解すると、

画面に 自由な配置を作れるようになります。


訪問数 17 回, 今日の訪問数 17回

記事下広告

C#

Posted by hidepon