11. クッキークリッカーを作る
完成図
完成プログラム
# include <Siv3D.hpp>
/// @brief アイテムのボタン
/// @param rect ボタンの領域
/// @param texture ボタンの絵文字
/// @param font 文字描画に使うフォント
/// @param name アイテムの名前
/// @param desc アイテムの説明
/// @param count アイテムの所持数
/// @param enabled ボタンを押せるか
/// @return ボタンが押された場合 true, それ以外の場合は false
bool Button(const Rect& rect, const Texture& texture, const Font& font, const String& name, const String& desc, int32 count, bool enabled)
{
if (enabled)
{
rect.draw(ColorF{ 0.3, 0.5, 0.9, 0.8 });
rect.drawFrame(2, 2, ColorF{ 0.5, 0.7, 1.0 });
if (rect.mouseOver())
{
Cursor::RequestStyle(CursorStyle::Hand);
}
}
else
{
rect.draw(ColorF{ 0.0, 0.4 });
rect.drawFrame(2, 2, ColorF{ 0.5 });
}
texture.scaled(0.5).drawAt(rect.x + 50, rect.y + 50);
font(name).draw(30, rect.x + 100, rect.y + 15, Palette::White);
font(desc).draw(18, rect.x + 102, rect.y + 60, Palette::White);
font(count).draw(50, Arg::rightCenter((rect.x + rect.w - 20), (rect.y + 50)), Palette::White);
return (enabled && rect.leftClicked());
}
void Main()
{
// クッキーの絵文字
Texture texture{ U"🍪"_emoji };
// 農場の絵文字
Texture farmEmoji{ U"🌾"_emoji };
// 工場の絵文字
Texture factoryEmoji{ U"🏭"_emoji };
// フォント
Font font{ FontMethod::MSDF, 48, Typeface::Bold };
// クッキーのクリック円
Circle cookieCircle{ 170, 300, 100 };
// クッキーの表示サイズ(倍率)
double cookieScale = 1.5;
// クッキーの個数
double cookies = 0;
// 農場の所有数
int32 farmCount = 0;
// 工場の所有数
int32 factoryCount = 0;
// 農場の価格
int32 farmCost = 10;
// 工場の価格
int32 factoryCost = 100;
// クッキーの毎秒の生産量
int32 cps = 0;
// ゲームの経過時間の蓄積
double accumulatedTime = 0.0;
while (System::Update())
{
// クッキーの毎秒の生産量を計算する
cps = (farmCount + factoryCount * 10);
// ゲームの経過時間を加算する
accumulatedTime += Scene::DeltaTime();
// 0.1 秒以上蓄積していたら
if (0.1 <= accumulatedTime)
{
accumulatedTime -= 0.1;
// 0.1 秒分のクッキー生産を加算する
cookies += (cps * 0.1);
}
// 農場の価格を計算する
farmCost = 10 + (farmCount * 10);
// 工場の価格を計算する
factoryCost = 100 + (factoryCount * 100);
// クッキー円上にマウスカーソルがあれば
if (cookieCircle.mouseOver())
{
Cursor::RequestStyle(CursorStyle::Hand);
}
// クッキー円が左クリックされたら
if (cookieCircle.leftClicked())
{
cookieScale = 1.3;
++cookies;
}
// クッキーの表示サイズを回復する
cookieScale += Scene::DeltaTime();
if (1.5 < cookieScale)
{
cookieScale = 1.5;
}
// 背景を描く
Rect{ 0, 0, 800, 600 }.draw(Arg::top = ColorF{ 0.6, 0.5, 0.3 }, Arg::bottom = ColorF{ 0.2, 0.5, 0.3 });
// クッキーの数を整数で表示する
font((int32)cookies).drawAt(60, 170, 100);
// クッキーの生産量を表示する
font(U"毎秒: {}"_fmt(cps)).drawAt(24, 170, 160);
// クッキーを描画する
texture.scaled(cookieScale).drawAt(cookieCircle.x, cookieCircle.y);
// 農場ボタン
if (Button(Rect{ 340, 40, 420, 100 }, farmEmoji, font, U"クッキー農場", U"C{} / 1 CPS"_fmt(farmCost), farmCount, (farmCost <= cookies)))
{
cookies -= farmCost;
++farmCount;
}
// 工場ボタン
if (Button(Rect{ 340, 160, 420, 100 }, factoryEmoji, font, U"クッキー工場", U"C{} / 10 CPS"_fmt(factoryCost), factoryCount, (factoryCost <= cookies)))
{
cookies -= factoryCost;
++factoryCount;
}
}
}
11.1 背景とクッキーを描く
# include <Siv3D.hpp>
void Main()
{
// クッキーの絵文字
Texture texture{ U"🍪"_emoji };
while (System::Update())
{
// 背景を描く
Rect{ 0, 0, 800, 600 }.draw(Arg::top = ColorF{ 0.6, 0.5, 0.3 }, Arg::bottom = ColorF{ 0.2, 0.5, 0.3 });
// クッキーを描画する
texture.scaled(1.5).drawAt(170, 300);
}
}
11.2 クッキーの個数を表示する
- この先、0.1 秒ごとにクッキーの枚数を更新することを考え、クッキーの枚数を小数で表します
- 表示するときは
(int32)
で整数にキャストします
# include <Siv3D.hpp>
void Main()
{
// クッキーの絵文字
Texture texture{ U"🍪"_emoji };
// フォント
Font font{ FontMethod::MSDF, 48, Typeface::Bold };
// クッキーの個数
double cookies = 0;
while (System::Update())
{
// 背景を描く
Rect{ 0, 0, 800, 600 }.draw(Arg::top = ColorF{ 0.6, 0.5, 0.3 }, Arg::bottom = ColorF{ 0.2, 0.5, 0.3 });
// クッキーの数を整数で表示する
font((int32)cookies).drawAt(60, 170, 100);
// クッキーを描画する
texture.scaled(1.5).drawAt(170, 300);
}
}
11.3 クッキーを押せるようにする
- クッキーの領域に沿った
Circle
で処理します
# include <Siv3D.hpp>
void Main()
{
// クッキーの絵文字
Texture texture{ U"🍪"_emoji };
// フォント
Font font{ FontMethod::MSDF, 48, Typeface::Bold };
// クッキーのクリック円
Circle cookieCircle{ 170, 300, 100 };
// クッキーの個数
double cookies = 0;
while (System::Update())
{
// クッキー円上にマウスカーソルがあれば
if (cookieCircle.mouseOver())
{
Cursor::RequestStyle(CursorStyle::Hand);
}
// クッキー円が左クリックされたら
if (cookieCircle.leftClicked())
{
++cookies;
}
// 背景を描く
Rect{ 0, 0, 800, 600 }.draw(Arg::top = ColorF{ 0.6, 0.5, 0.3 }, Arg::bottom = ColorF{ 0.2, 0.5, 0.3 });
// クッキーの数を整数で表示する
font((int32)cookies).drawAt(60, 170, 100);
// クッキーを描画する
texture.scaled(1.5).drawAt(cookieCircle.x, cookieCircle.y);
}
}
11.4 クッキーを押したときのアニメーションを付ける
- 押したときにサイズを小さくし、時間の経過とともにサイズを元に戻します
# include <Siv3D.hpp>
void Main()
{
// クッキーの絵文字
Texture texture{ U"🍪"_emoji };
// フォント
Font font{ FontMethod::MSDF, 48, Typeface::Bold };
// クッキーのクリック円
Circle cookieCircle{ 170, 300, 100 };
// クッキーの表示サイズ(倍率)
double cookieScale = 1.5;
// クッキーの個数
double cookies = 0;
while (System::Update())
{
// クッキー円上にマウスカーソルがあれば
if (cookieCircle.mouseOver())
{
Cursor::RequestStyle(CursorStyle::Hand);
}
// クッキー円が左クリックされたら
if (cookieCircle.leftClicked())
{
cookieScale = 1.3;
++cookies;
}
// クッキーの表示サイズを回復する
cookieScale += Scene::DeltaTime();
if (1.5 < cookieScale)
{
cookieScale = 1.5;
}
// 背景を描く
Rect{ 0, 0, 800, 600 }.draw(Arg::top = ColorF{ 0.6, 0.5, 0.3 }, Arg::bottom = ColorF{ 0.2, 0.5, 0.3 });
// クッキーの数を整数で表示する
font((int32)cookies).drawAt(60, 170, 100);
// クッキーを描画する
texture.scaled(cookieScale).drawAt(cookieCircle.x, cookieCircle.y);
}
}
11.5 アイテムのボタンを作る (1)
# include <Siv3D.hpp>
/// @brief アイテムのボタン
/// @param rect ボタンの領域
/// @param texture ボタンの絵文字
/// @param enabled ボタンを押せるか
/// @return ボタンが押された場合 true, それ以外の場合は false
bool Button(const Rect& rect, const Texture& texture, bool enabled)
{
if (enabled)
{
rect.draw(ColorF{ 0.3, 0.5, 0.9, 0.8 });
rect.drawFrame(2, 2, ColorF{ 0.5, 0.7, 1.0 });
if (rect.mouseOver())
{
Cursor::RequestStyle(CursorStyle::Hand);
}
}
else
{
rect.draw(ColorF{ 0.0, 0.4 });
rect.drawFrame(2, 2, ColorF{ 0.5 });
}
texture.scaled(0.5).drawAt(rect.x + 50, rect.y + 50);
return (enabled && rect.leftClicked());
}
void Main()
{
// クッキーの絵文字
Texture texture{ U"🍪"_emoji };
// 農場の絵文字
Texture farmEmoji{ U"🌾"_emoji };
// 工場の絵文字
Texture factoryEmoji{ U"🏭"_emoji };
// フォント
Font font{ FontMethod::MSDF, 48, Typeface::Bold };
// クッキーのクリック円
Circle cookieCircle{ 170, 300, 100 };
// クッキーの表示サイズ(倍率)
double cookieScale = 1.5;
// クッキーの個数
double cookies = 0;
while (System::Update())
{
// クッキー円上にマウスカーソルがあれば
if (cookieCircle.mouseOver())
{
Cursor::RequestStyle(CursorStyle::Hand);
}
// クッキー円が左クリックされたら
if (cookieCircle.leftClicked())
{
cookieScale = 1.3;
++cookies;
}
// クッキーの表示サイズを回復する
cookieScale += Scene::DeltaTime();
if (1.5 < cookieScale)
{
cookieScale = 1.5;
}
// 背景を描く
Rect{ 0, 0, 800, 600 }.draw(Arg::top = ColorF{ 0.6, 0.5, 0.3 }, Arg::bottom = ColorF{ 0.2, 0.5, 0.3 });
// クッキーの数を整数で表示する
font((int32)cookies).drawAt(60, 170, 100);
// クッキーを描画する
texture.scaled(cookieScale).drawAt(cookieCircle.x, cookieCircle.y);
// 農場のボタン
Button(Rect{ 340, 40, 420, 100 }, farmEmoji, true);
// 工場のボタン
Button(Rect{ 340, 160, 420, 100 }, factoryEmoji, false);
}
}
11.6 アイテムのボタンを作る (2)
# include <Siv3D.hpp>
/// @brief アイテムのボタン
/// @param rect ボタンの領域
/// @param texture ボタンの絵文字
/// @param font 文字描画に使うフォント
/// @param name アイテムの名前
/// @param desc アイテムの説明
/// @param count アイテムの所持数
/// @param enabled ボタンを押せるか
/// @return ボタンが押された場合 true, それ以外の場合は false
bool Button(const Rect& rect, const Texture& texture, const Font& font, const String& name, const String& desc, int32 count, bool enabled)
{
if (enabled)
{
rect.draw(ColorF{ 0.3, 0.5, 0.9, 0.8 });
rect.drawFrame(2, 2, ColorF{ 0.5, 0.7, 1.0 });
if (rect.mouseOver())
{
Cursor::RequestStyle(CursorStyle::Hand);
}
}
else
{
rect.draw(ColorF{ 0.0, 0.4 });
rect.drawFrame(2, 2, ColorF{ 0.5 });
}
texture.scaled(0.5).drawAt(rect.x + 50, rect.y + 50);
font(name).draw(30, rect.x + 100, rect.y + 15, Palette::White);
font(desc).draw(18, rect.x + 102, rect.y + 60, Palette::White);
font(count).draw(50, Arg::rightCenter((rect.x + rect.w - 20), (rect.y + 50)), Palette::White);
return (enabled && rect.leftClicked());
}
void Main()
{
// クッキーの絵文字
Texture texture{ U"🍪"_emoji };
// 農場の絵文字
Texture farmEmoji{ U"🌾"_emoji };
// 工場の絵文字
Texture factoryEmoji{ U"🏭"_emoji };
// フォント
Font font{ FontMethod::MSDF, 48, Typeface::Bold };
// クッキーのクリック円
Circle cookieCircle{ 170, 300, 100 };
// クッキーの表示サイズ(倍率)
double cookieScale = 1.5;
// クッキーの個数
double cookies = 0;
while (System::Update())
{
// クッキー円上にマウスカーソルがあれば
if (cookieCircle.mouseOver())
{
Cursor::RequestStyle(CursorStyle::Hand);
}
// クッキー円が左クリックされたら
if (cookieCircle.leftClicked())
{
cookieScale = 1.3;
++cookies;
}
// クッキーの表示サイズを回復する
cookieScale += Scene::DeltaTime();
if (1.5 < cookieScale)
{
cookieScale = 1.5;
}
// 背景を描く
Rect{ 0, 0, 800, 600 }.draw(Arg::top = ColorF{ 0.6, 0.5, 0.3 }, Arg::bottom = ColorF{ 0.2, 0.5, 0.3 });
// クッキーの数を整数で表示する
font((int32)cookies).drawAt(60, 170, 100);
// クッキーを描画する
texture.scaled(cookieScale).drawAt(cookieCircle.x, cookieCircle.y);
// 農場のボタン
Button(Rect{ 340, 40, 420, 100 }, farmEmoji, font, U"クッキー農場", U"C10 / 1 CPS", 0, true);
// 工場のボタン
Button(Rect{ 340, 160, 420, 100 }, factoryEmoji, font, U"クッキー工場", U"C100 / 10 CPS", 0, false);
}
}
11.7 変数と連動させる
# include <Siv3D.hpp>
/// @brief アイテムのボタン
/// @param rect ボタンの領域
/// @param texture ボタンの絵文字
/// @param font 文字描画に使うフォント
/// @param name アイテムの名前
/// @param desc アイテムの説明
/// @param count アイテムの所持数
/// @param enabled ボタンを押せるか
/// @return ボタンが押された場合 true, それ以外の場合は false
bool Button(const Rect& rect, const Texture& texture, const Font& font, const String& name, const String& desc, int32 count, bool enabled)
{
if (enabled)
{
rect.draw(ColorF{ 0.3, 0.5, 0.9, 0.8 });
rect.drawFrame(2, 2, ColorF{ 0.5, 0.7, 1.0 });
if (rect.mouseOver())
{
Cursor::RequestStyle(CursorStyle::Hand);
}
}
else
{
rect.draw(ColorF{ 0.0, 0.4 });
rect.drawFrame(2, 2, ColorF{ 0.5 });
}
texture.scaled(0.5).drawAt(rect.x + 50, rect.y + 50);
font(name).draw(30, rect.x + 100, rect.y + 15, Palette::White);
font(desc).draw(18, rect.x + 102, rect.y + 60, Palette::White);
font(count).draw(50, Arg::rightCenter((rect.x + rect.w - 20), (rect.y + 50)), Palette::White);
return (enabled && rect.leftClicked());
}
void Main()
{
// クッキーの絵文字
Texture texture{ U"🍪"_emoji };
// 農場の絵文字
Texture farmEmoji{ U"🌾"_emoji };
// 工場の絵文字
Texture factoryEmoji{ U"🏭"_emoji };
// フォント
Font font{ FontMethod::MSDF, 48, Typeface::Bold };
// クッキーのクリック円
Circle cookieCircle{ 170, 300, 100 };
// クッキーの表示サイズ(倍率)
double cookieScale = 1.5;
// クッキーの個数
double cookies = 0;
// 農場の所有数
int32 farmCount = 0;
// 工場の所有数
int32 factoryCount = 0;
// 農場の価格
int32 farmCost = 10;
// 工場の価格
int32 factoryCost = 100;
while (System::Update())
{
// クッキー円上にマウスカーソルがあれば
if (cookieCircle.mouseOver())
{
Cursor::RequestStyle(CursorStyle::Hand);
}
// クッキー円が左クリックされたら
if (cookieCircle.leftClicked())
{
cookieScale = 1.3;
++cookies;
}
// クッキーの表示サイズを回復する
cookieScale += Scene::DeltaTime();
if (1.5 < cookieScale)
{
cookieScale = 1.5;
}
// 背景を描く
Rect{ 0, 0, 800, 600 }.draw(Arg::top = ColorF{ 0.6, 0.5, 0.3 }, Arg::bottom = ColorF{ 0.2, 0.5, 0.3 });
// クッキーの数を整数で表示する
font((int32)cookies).drawAt(60, 170, 100);
// クッキーを描画する
texture.scaled(cookieScale).drawAt(cookieCircle.x, cookieCircle.y);
// 農場ボタン
if (Button(Rect{ 340, 40, 420, 100 }, farmEmoji, font, U"クッキー農場", U"C{} / 1 CPS"_fmt(farmCost), farmCount, (farmCost <= cookies)))
{
cookies -= farmCost;
++farmCount;
}
// 工場ボタン
if (Button(Rect{ 340, 160, 420, 100 }, factoryEmoji, font, U"クッキー工場", U"C{} / 10 CPS"_fmt(factoryCost), factoryCount, (factoryCost <= cookies)))
{
cookies -= factoryCost;
++factoryCount;
}
}
}
11.8 クッキーの自動生産
- アイテムの所有数に応じてクッキーが自動で増えるようにします
- 0.1 秒ごとに、毎秒のクッキー生産量の 10% を獲得するようにします
# include <Siv3D.hpp>
/// @brief アイテムのボタン
/// @param rect ボタンの領域
/// @param texture ボタンの絵文字
/// @param font 文字描画に使うフォント
/// @param name アイテムの名前
/// @param desc アイテムの説明
/// @param count アイテムの所持数
/// @param enabled ボタンを押せるか
/// @return ボタンが押された場合 true, それ以外の場合は false
bool Button(const Rect& rect, const Texture& texture, const Font& font, const String& name, const String& desc, int32 count, bool enabled)
{
if (enabled)
{
rect.draw(ColorF{ 0.3, 0.5, 0.9, 0.8 });
rect.drawFrame(2, 2, ColorF{ 0.5, 0.7, 1.0 });
if (rect.mouseOver())
{
Cursor::RequestStyle(CursorStyle::Hand);
}
}
else
{
rect.draw(ColorF{ 0.0, 0.4 });
rect.drawFrame(2, 2, ColorF{ 0.5 });
}
texture.scaled(0.5).drawAt(rect.x + 50, rect.y + 50);
font(name).draw(30, rect.x + 100, rect.y + 15, Palette::White);
font(desc).draw(18, rect.x + 102, rect.y + 60, Palette::White);
font(count).draw(50, Arg::rightCenter((rect.x + rect.w - 20), (rect.y + 50)), Palette::White);
return (enabled && rect.leftClicked());
}
void Main()
{
// クッキーの絵文字
Texture texture{ U"🍪"_emoji };
// 農場の絵文字
Texture farmEmoji{ U"🌾"_emoji };
// 工場の絵文字
Texture factoryEmoji{ U"🏭"_emoji };
// フォント
Font font{ FontMethod::MSDF, 48, Typeface::Bold };
// クッキーのクリック円
Circle cookieCircle{ 170, 300, 100 };
// クッキーの表示サイズ(倍率)
double cookieScale = 1.5;
// クッキーの個数
double cookies = 0;
// 農場の所有数
int32 farmCount = 0;
// 工場の所有数
int32 factoryCount = 0;
// 農場の価格
int32 farmCost = 10;
// 工場の価格
int32 factoryCost = 100;
// クッキーの毎秒の生産量
int32 cps = 0;
// ゲームの経過時間の蓄積
double accumulatedTime = 0.0;
while (System::Update())
{
// クッキーの毎秒の生産量を計算する
cps = (farmCount + factoryCount * 10);
// ゲームの経過時間を加算する
accumulatedTime += Scene::DeltaTime();
// 0.1 秒以上蓄積していたら
if (0.1 <= accumulatedTime)
{
accumulatedTime -= 0.1;
// 0.1 秒分のクッキー生産を加算する
cookies += (cps * 0.1);
}
// クッキー円上にマウスカーソルがあれば
if (cookieCircle.mouseOver())
{
Cursor::RequestStyle(CursorStyle::Hand);
}
// クッキー円が左クリックされたら
if (cookieCircle.leftClicked())
{
cookieScale = 1.3;
++cookies;
}
// クッキーの表示サイズを回復する
cookieScale += Scene::DeltaTime();
if (1.5 < cookieScale)
{
cookieScale = 1.5;
}
// 背景を描く
Rect{ 0, 0, 800, 600 }.draw(Arg::top = ColorF{ 0.6, 0.5, 0.3 }, Arg::bottom = ColorF{ 0.2, 0.5, 0.3 });
// クッキーの数を整数で表示する
font((int32)cookies).drawAt(60, 170, 100);
// クッキーの生産量を表示する
font(U"毎秒: {}"_fmt(cps)).drawAt(24, 170, 160);
// クッキーを描画する
texture.scaled(cookieScale).drawAt(cookieCircle.x, cookieCircle.y);
// 農場ボタン
if (Button(Rect{ 340, 40, 420, 100 }, farmEmoji, font, U"クッキー農場", U"C{} / 1 CPS"_fmt(farmCost), farmCount, (farmCost <= cookies)))
{
cookies -= farmCost;
++farmCount;
}
// 工場ボタン
if (Button(Rect{ 340, 160, 420, 100 }, factoryEmoji, font, U"クッキー工場", U"C{} / 10 CPS"_fmt(factoryCost), factoryCount, (factoryCost <= cookies)))
{
cookies -= factoryCost;
++factoryCount;
}
}
}
11.9 (完成)アイテムのインフレを実装する
- アイテムの所有数が増えたときに、アイテムの価格がインフレするようにします
# include <Siv3D.hpp>
/// @brief アイテムのボタン
/// @param rect ボタンの領域
/// @param texture ボタンの絵文字
/// @param font 文字描画に使うフォント
/// @param name アイテムの名前
/// @param desc アイテムの説明
/// @param count アイテムの所持数
/// @param enabled ボタンを押せるか
/// @return ボタンが押された場合 true, それ以外の場合は false
bool Button(const Rect& rect, const Texture& texture, const Font& font, const String& name, const String& desc, int32 count, bool enabled)
{
if (enabled)
{
rect.draw(ColorF{ 0.3, 0.5, 0.9, 0.8 });
rect.drawFrame(2, 2, ColorF{ 0.5, 0.7, 1.0 });
if (rect.mouseOver())
{
Cursor::RequestStyle(CursorStyle::Hand);
}
}
else
{
rect.draw(ColorF{ 0.0, 0.4 });
rect.drawFrame(2, 2, ColorF{ 0.5 });
}
texture.scaled(0.5).drawAt(rect.x + 50, rect.y + 50);
font(name).draw(30, rect.x + 100, rect.y + 15, Palette::White);
font(desc).draw(18, rect.x + 102, rect.y + 60, Palette::White);
font(count).draw(50, Arg::rightCenter((rect.x + rect.w - 20), (rect.y + 50)), Palette::White);
return (enabled && rect.leftClicked());
}
void Main()
{
// クッキーの絵文字
Texture texture{ U"🍪"_emoji };
// 農場の絵文字
Texture farmEmoji{ U"🌾"_emoji };
// 工場の絵文字
Texture factoryEmoji{ U"🏭"_emoji };
// フォント
Font font{ FontMethod::MSDF, 48, Typeface::Bold };
// クッキーのクリック円
Circle cookieCircle{ 170, 300, 100 };
// クッキーの表示サイズ(倍率)
double cookieScale = 1.5;
// クッキーの個数
double cookies = 0;
// 農場の所有数
int32 farmCount = 0;
// 工場の所有数
int32 factoryCount = 0;
// 農場の価格
int32 farmCost = 10;
// 工場の価格
int32 factoryCost = 100;
// クッキーの毎秒の生産量
int32 cps = 0;
// ゲームの経過時間の蓄積
double accumulatedTime = 0.0;
while (System::Update())
{
// クッキーの毎秒の生産量を計算する
cps = (farmCount + factoryCount * 10);
// ゲームの経過時間を加算する
accumulatedTime += Scene::DeltaTime();
// 0.1 秒以上蓄積していたら
if (0.1 <= accumulatedTime)
{
accumulatedTime -= 0.1;
// 0.1 秒分のクッキー生産を加算する
cookies += (cps * 0.1);
}
// 農場の価格を計算する
farmCost = 10 + (farmCount * 10);
// 工場の価格を計算する
factoryCost = 100 + (factoryCount * 100);
// クッキー円上にマウスカーソルがあれば
if (cookieCircle.mouseOver())
{
Cursor::RequestStyle(CursorStyle::Hand);
}
// クッキー円が左クリックされたら
if (cookieCircle.leftClicked())
{
cookieScale = 1.3;
++cookies;
}
// クッキーの表示サイズを回復する
cookieScale += Scene::DeltaTime();
if (1.5 < cookieScale)
{
cookieScale = 1.5;
}
// 背景を描く
Rect{ 0, 0, 800, 600 }.draw(Arg::top = ColorF{ 0.6, 0.5, 0.3 }, Arg::bottom = ColorF{ 0.2, 0.5, 0.3 });
// クッキーの数を整数で表示する
font((int32)cookies).drawAt(60, 170, 100);
// クッキーの生産量を表示する
font(U"毎秒: {}"_fmt(cps)).drawAt(24, 170, 160);
// クッキーを描画する
texture.scaled(cookieScale).drawAt(cookieCircle.x, cookieCircle.y);
// 農場ボタン
if (Button(Rect{ 340, 40, 420, 100 }, farmEmoji, font, U"クッキー農場", U"C{} / 1 CPS"_fmt(farmCost), farmCount, (farmCost <= cookies)))
{
cookies -= farmCost;
++farmCount;
}
// 工場ボタン
if (Button(Rect{ 340, 160, 420, 100 }, factoryEmoji, font, U"クッキー工場", U"C{} / 10 CPS"_fmt(factoryCost), factoryCount, (factoryCost <= cookies)))
{
cookies -= factoryCost;
++factoryCount;
}
}
}