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}
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 秒
int32 time = 20;
Log << L"残り時間 {} 秒"_fmt(time); // 残り時間 20 秒
中心が (30, 30), 大きさが (40, 50) の長方形を作る
const Rect r = Rect(40, 50).setCenter(30, 30);
const Rect r(Arg::center(30, 30), 40, 50);
10 秒経過するまで実行
for (Stopwatch s(true); s.elapsed() < 10s; )
{
// DoWork();
}
for (Stopwatch s(true); s < 10s; )
{
// DoWork();
}
コンソールウィンドウから数を入力し、その 2 倍の数をログに出力する
Console::Open();
int32 n;
std::wcin >> n;
Log(n * 2);
Log << Console.read<int32>() * 2;
さいころの結果を 10 個生成
Array<int32> v;
for (int32 i = 0; i < 10; ++i)
{
v.push_back(Random(1, 6));
}
const Array<int32> v(10, Arg::generator = RNG(1, 6));
このほかに現時点での特筆すべき機能として
- 実行時のクラッシュの回避 (Windows 構造化例外処理)
- 新しいファイル圧縮方式 (Zstandard)
- constexpr 対応の強化
- マルチスレッド処理の強化
が挙げられます。
OpenSiv3D の今後のアップデートにご期待ください。
開発への参加は Siv3D Slack #open-siv3d チャンネル にてお待ちしています。