Help us understand the problem. What is going on with this article?

OpenSiv3D の機能紹介[1]

More than 3 years have passed since last update.

Window と macOS に対応する次世代 Siv3D 「OpenSiv3D」 の開発がオープンソースで進行中です。
OpenSiv3D は Siv3D の公開から 4 年間で積み上げてきた知見と技術をもとにゼロベースから設計を見直し、これまで以上に短いコードと便利な機能を実現する計画です。

現在の最新バージョンは 2016 年 12 月 14 日にリリースされた OpenSiv3D 0.0.5 です。
現時点では低レイヤ部分の実装がメインで、まだ画面への描画や音楽の再生はできませんが、リンク先の SDK をインストールすれば、通常の Siv3D Package のように簡単にインストールし、実装されている機能を試せます。

今回の記事ではその中からいくつかの面白い機能を紹介します。
これだけではゲームやアプリ開発にどう便利なのかイメージがつきにくいかもしれませんが、のちのち開発が進めばその威力が発揮されます。楽しみにしていてください。

0 から 100 までの合計を求める

Log << Range(0, 100).sum(); // 5050

0 から 100 のうち 20 未満の個数を調べる

Log << Range(0, 100).count_if(LessThan(20)); // 20

100 の階乗 (100!)

Log << Range(1, 100).reduce1(Multiplies<BigInt>());
// 93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000

111122223333 以上の素数を小さい順に 5 つ探す

Log << InfiniteList(111122223333).filter(IsPrime).take(5);
// {111122223337,111122223347,111122223353,111122223361,111122223367}

0 から 9 の数をシャッフル

従来
Array<int32> v = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };

Shuffle(v);

Log(v); // {8,4,3,7,0,5,6,2,9,1}
OpenSiv3D
const Array<int32> v = Range(0, 9).asArray().shuffle();

Log << v; // {8,4,3,7,0,5,6,2,9,1}

文字列フォーマット

従来
int32 time = 20;
Log(L"残り時間 {} 秒"_fmt, time); // 残り時間 20 秒
OpenSiv3D
int32 time = 20;
Log << L"残り時間 {} 秒"_fmt(time); // 残り時間 20 秒

中心が (30, 30), 大きさが (40, 50) の長方形を作る

従来
const Rect r = Rect(40, 50).setCenter(30, 30);
OpenSiv3D
const Rect r(Arg::center(30, 30), 40, 50);

10 秒経過するまで実行

従来
for (Stopwatch s(true); s.elapsed() < 10s; )
{
    // DoWork();
}
OpenSiv3D
for (Stopwatch s(true); s < 10s; )
{
    // DoWork();
}

コンソールウィンドウから数を入力し、その 2 倍の数をログに出力する

従来
Console::Open();

int32 n;

std::wcin >> n;

Log(n * 2);
OpenSiv3D
Log << Console.read<int32>() * 2;

さいころの結果を 10 個生成

従来
Array<int32> v;

for (int32 i = 0; i < 10; ++i)
{
    v.push_back(Random(1, 6));
}
OpenSiv3D
const Array<int32> v(10, Arg::generator = RNG(1, 6));

このほかに現時点での特筆すべき機能として

  • 実行時のクラッシュの回避 (Windows 構造化例外処理)
  • 新しいファイル圧縮方式 (Zstandard)
  • constexpr 対応の強化
  • マルチスレッド処理の強化

が挙げられます。

OpenSiv3D の今後のアップデートにご期待ください。
開発への参加は Siv3D Slack #open-siv3d チャンネル にてお待ちしています。

Reputeless
小さくなってもコードはモダン!▼ 未定義動作なしの名コーダー!▼ 実装はいつも 3 つ!!(GCC/Clang/MSVC)▼ OpenSiv3D, cppmap 作者
https://ryo-suzuki-contact.github.io/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away