12. 模様を描く¶
円や長方形をループを使って並べ、模様を描く方法を学びます。
12.1 円を並べる¶
forループと図形描画を組み合わせて、短いコードでたくさんの図形を描くことができます

# include <Siv3D.hpp>
void Main()
{
Scene::SetBackground(Palette::White);
while (System::Update())
{
for (int32 i = 0; i < 6; ++i)
{
Circle{ (i * 100), 100, 30 }.draw(Palette::Skyblue);
}
for (int32 i = 0; i < 6; ++i)
{
Circle{ (50 + i * 100), 200, 30 }.draw(Palette::Seagreen);
}
}
}
12.2 二重ループで円を並べる¶
- 横に図形を並べるループを、さらに縦に並べるループで包むことで、縦横に図形を並べることができます
- 横方向のループ変数は
x, 縦方向のループ変数はyという名前にするとわかりやすいです

# include <Siv3D.hpp>
void Main()
{
Scene::SetBackground(Palette::White);
while (System::Update())
{
for (int32 y = 0; y < 4; ++y) // 縦方向
{
for (int32 x = 0; x < 6; ++x) // 横方向
{
Circle{ (x * 100), (y * 100), 30 }.draw(Palette::Skyblue);
}
}
}
}
12.3 少し複雑にする¶
- 二重ループ内のループ変数
x,yに着目し、その和が奇数か偶数かで図形を変化させると、さらに複雑な模様を描くことができます - ある整数
nが偶数であるかは(n % 2) == 0で判定できます - 整数
nが偶数であるかをbool型で返すIsEven(n)という関数も用意されています

# include <Siv3D.hpp>
void Main()
{
Scene::SetBackground(Palette::White);
while (System::Update())
{
for (int32 y = 0; y < 4; ++y)
{
for (int32 x = 0; x < 6; ++x)
{
if (IsEven(x + y)) // x + y が偶数なら
{
// 大きい円を描く
Circle{ (x * 100), (y * 100), 30 }.draw(Palette::Skyblue);
}
else // 奇数なら
{
// 小さい円を描く
Circle{ (x * 100), (y * 100), 10 }.draw(Palette::Skyblue);
}
}
}
}
}
12.4 長方形を並べる¶
- 柱のように長方形を並べます

# include <Siv3D.hpp>
void Main()
{
Scene::SetBackground(Palette::White);
while (System::Update())
{
for (int32 x = 0; x < 6; ++x)
{
Rect{ (x * 100), 0, 80, 600 }.draw(Palette::Skyblue);
}
}
}
12.5 サイズを徐々に変える¶
- ループ変数
xが大きくなるにつれて、長方形の長さが徐々に大きくなるようにします

# include <Siv3D.hpp>
void Main()
{
Scene::SetBackground(Palette::White);
while (System::Update())
{
for (int32 x = 0; x < 6; ++x)
{
Rect{ (x * 100), 0, 80, ((x + 1) * 100) }.draw(Palette::Skyblue);
}
}
}
12.6 色を徐々に変える¶
- ループ変数
xが大きくなるにつれて、色が徐々に変わるようにします

# include <Siv3D.hpp>
void Main()
{
Scene::SetBackground(Palette::White);
while (System::Update())
{
for (int32 x = 0; x < 6; ++x)
{
Rect{ (x * 100), 0, 80, 600 }.draw(ColorF{ 0.0, (x * 0.15), (x * 0.15) });
}
}
}
12.7 色相を徐々に変える¶
- ループ変数
xが大きくなるにつれて、色相が徐々に変わるようにします - 最も左の長方形と最も右の長方形は、色相がそれぞれ 0, 360 で同じ色です

# include <Siv3D.hpp>
void Main()
{
Scene::SetBackground(Palette::White);
while (System::Update())
{
for (int32 x = 0; x < 10; ++x)
{
Rect{ (x * 80), 0, 80, 600 }.draw(HSV{ (x * 40), 0.5, 1.0 });
}
}
}
🧩 練習¶
次のような模様を描いてみましょう
練習 ① 波紋¶

ヒント
Circleの半径を徐々に変えます
解答例
練習 ② 市松模様¶

ヒント
- 2 重ループを使います
xとyの偶奇で色を変えます
解答例
練習 ③ マス目¶

ヒント
- 2 重ループを使います
Rectの.drawFrame()で枠を描きます- あるいは
Rectの.draw()で内部を塗りつぶします
解答例 1
解答例 2
振り返りチェックリスト¶
- ループと図形描画を組み合わせて、図形を並べて描く方法を学んだ
- 二重ループを使って、縦横に図形を並べる方法を学んだ
- ループ変数を活用して、サイズや色などに変化をつける方法を学んだ