-
Notifications
You must be signed in to change notification settings - Fork 1
15パズル
Reputeless edited this page Mar 14, 2017
·
3 revisions
イラスト提供: 古古米 さん
# include <Siv3D.hpp>
bool Swappable(int32 a, int32 b)
{
return (a / 4 == b / 4 && Abs(a - b) == 1) || (a % 4 == b % 4 && Abs(a - b) == 4);
}
void Main()
{
const Texture texture = Dialog::OpenTexture(TextureDesc::Mipped);
const int32 pieceSize = 100;
Optional<int32> grabbed;
std::array<Optional<int32>, 16> pieces = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 };
for (int32 i = 0; i < 10000; ++i)
{
const int32 a = Random(0, 15);
const int32 b = a + RandomSelect({ -4, -1, 1, 4 });
if (pieces[a] && InRange(b, 0, 15) && !pieces[b] && Swappable(a, b))
{
std::swap(pieces[a], pieces[b]);
}
}
while (System::Update())
{
if (!Input::MouseL.pressed)
{
grabbed = none;
}
for (auto i : step(16))
{
const Rect pieceRect(i % 4 * pieceSize, i / 4 * pieceSize, pieceSize, pieceSize);
if (!pieces[i])
{
if (grabbed && pieceRect.mouseOver && Swappable(i, grabbed.value()))
{
std::swap(pieces[i], pieces[grabbed.value()]);
grabbed = none;
}
continue;
}
const int32 offset = pieces[i].value();
pieceRect(texture.uv(offset % 4 * 0.25, offset / 4 * 0.25, 0.25, 0.25)).draw();
if (pieceRect.leftPressed)
{
grabbed = i;
pieceRect.draw({ 255, 0, 0, 80 });
}
pieceRect.drawFrame();
}
texture.resize(200, 200).draw(440, 200);
}
}
- Siv3D の基本
- 図形を描く
- テクスチャを描く
- テキストを描く
- 文字列と数値の変換
- キーボード入力
- マウス入力
- サウンドの再生
- MIDI の再生
- ウィンドウと背景
- 図形のあたり判定
- 乱数
- ダイアログ
- ドラッグ & ドロップ
- アプリの状態
- テキストファイル
- INI, CSV, JSON
- バイナリファイル
- GUI
- アセット管理
- 画像編集
- Web カメラ
- マイク入力
- 経過時間の測定
- HSV カラー
- ファイルダウンロード
- 3D 描画
- 2D のレンダーステート
- 3D のレンダーステート
- パーティクル
- スクリーンショット
- アプリケーションの公開
- さらに学ぶには
- アプリランチャーを作ろう
- 音楽プレイヤーを作ろう
- 横スクロールゲームを作ろう
- ドット絵エディタを作ろう
- シーン遷移をサポートする SceneManager の使い方
- Siv3D ミニサンプル集
- タスクシステムを使う
- スケッチ
- 画像ビューアー
- オーディオスペクトラム
- マイク入力スペクトラム
- 文字色の反転
- 天気予報
- ドットお絵かき
- 15パズル
- ブロックくずし
- 時計
- 音楽プレイヤー
- ピアノ
- ライフゲーム
- シーン管理
- 地球
- 3Dシーン
- 3D交差判定
- Wooden Mirror
- シューティングゲーム
- Image to Polygon
- Sketch to Polygon
- 軌跡
- Plot3D
- テンポとピッチの変更
- 長方形の影
- Twitterクライアント
- Polygon to Mesh
- 3Dテキスト
- アプリ終了の確認
- 地形の生成
- アーカイブファイル
- GUIのアニメーション
- Aero Glassエフェクト
- Glitch
- リンクテキスト
- 付箋
- シーン切り替え(シルエット)
- MIDIシーケンサー
- 数つなぎ
- 画面を揺らす
- 対称定規
- aobench
- MIDIビジュアライザー
- 電卓
- 手書き文字認識
- 顔検出
- 音声合成
- Image to PhysicsBody