I2luY2x1ZGUgJmx0O2lvc3RyZWFtJmd0OwojaW5jbHVkZSAmbHQ7c3RyaW5nJmd0OwojaW5jbHVkZSAmbHQ7dmVjdG9yJmd0OwoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCi8vIC0tLSDnlLvpnaLoqK3lrpogLS0tCmNvbnN0IGludCBTQ1JFRU5fVyA9IDMyMDsKY29uc3QgaW50IFNDUkVFTl9IID0gMjQwOwoKLy8gLS0tIOOCsuODvOODoOODh+ODvOOCvyAtLS0Kc3RydWN0IEdhbWVTdGF0ZSB7CiAgICBzdHJpbmcgbmFtZSA9ICZxdW90OyZxdW90OzsKICAgIGludCBtb25leSA9IDUwMDAwMDsKICAgIGludCBxdWFsaXR5ID0gMTsgLy8gMTpNSUQsIDM6VUxUUkEKICAgIGludCBzY2VuZSA9IDA7ICAgLy8gMDpUaXRsZSwgMTpTdG9yeSwgMjpNZW51LCAzOlNldHRpbmcKfTsKCi8vIC0tLSDjgrDjg6njg5XjgqPjg4Pjgq/jgqjjg7Pjgrjjg7PvvIhPU+iHquS9nOmiqO+8iSAtLS0KCi8vIOaMh+WumuW6p+aomeOBq+Wbm+inku+8iOODnOOCv+ODs+etie+8ieOCkuaPj+eUuwp2b2lkIGRyYXdHVUlCb3goaW50IHgsIGludCB5LCBpbnQgdywgaW50IGgsIHN0cmluZyBsYWJlbCkgewogICAgY291dCAmbHQ7Jmx0OyAmcXVvdDtbR1VJX1JFQ1RdIFBvczooJnF1b3Q7ICZsdDsmbHQ7IHggJmx0OyZsdDsgJnF1b3Q7LCZxdW90OyAmbHQ7Jmx0OyB5ICZsdDsmbHQ7ICZxdW90OykgU2l6ZTomcXVvdDsgJmx0OyZsdDsgdyAmbHQ7Jmx0OyAmcXVvdDt4JnF1b3Q7ICZsdDsmbHQ7IGggJmx0OyZsdDsgJnF1b3Q7IExhYmVsOiAmcXVvdDsgJmx0OyZsdDsgbGFiZWwgJmx0OyZsdDsgZW5kbDsKfQoKLy8g6YWN5YiX44OH44O844K/44GL44KJ44OJ44OD44OI57W144KS5o+P55S7CnZvaWQgZHJhd0RvdENhcihpbnQgeCwgaW50IHksIGludCBxdWFsaXR5KSB7CiAgICBpZiAocXVhbGl0eSA9PSAzKSB7CiAgICAgICAgY291dCAmbHQ7Jmx0OyAmcXVvdDtbUkVOREVSX1VMVFJBXSBHVDTnlLvos6rjgrfjgqfjg7zjg4Djg7zpgannlKjvvJrou4rkvZPlj43lsIToqIjnrpfkuK0uLi4mcXVvdDsgJmx0OyZsdDsgZW5kbDsKICAgIH0KICAgIGNvdXQgJmx0OyZsdDsgJnF1b3Q7W1JFTkRFUl9ET1RdIOW6p+aomSgmcXVvdDsgJmx0OyZsdDsgeCAmbHQ7Jmx0OyAmcXVvdDssJnF1b3Q7ICZsdDsmbHQ7IHkgJmx0OyZsdDsgJnF1b3Q7KeOBq+iHqui7iuOCkuaPj+eUuyZxdW90OyAmbHQ7Jmx0OyBlbmRsOwp9CgovLyAtLS0g5ZCE44K344O844Oz44Gu5a6f6KOFIC0tLQoKdm9pZCBydW5UaXRsZShHYW1lU3RhdGUgJmFtcDtncykgewogICAgY291dCAmbHQ7Jmx0OyAmcXVvdDtcbj09PSBUSVRMRSBTQ1JFRU4gPT09JnF1b3Q7ICZsdDsmbHQ7IGVuZGw7CiAgICBkcmF3R1VJQm94KDExMCwgMTgwLCAxMDAsIDMwLCAmcXVvdDtTVEFSVCZxdW90Oyk7CiAgICBjb3V0ICZsdDsmbHQ7ICZxdW90O+WQjeWJjeOCkuWFpeWKm+OBl+OBpuOCueOCv+ODvOODiDogJnF1b3Q7OwogICAgY2luICZndDsmZ3Q7IGdzLm5hbWU7CiAgICBncy5zY2VuZSA9IDE7IC8vIOOCueODiOODvOODquODvOOBuAp9Cgp2b2lkIHJ1blN0b3J5KEdhbWVTdGF0ZSAmYW1wO2dzKSB7CiAgICBjb3V0ICZsdDsmbHQ7ICZxdW90O1xuPT09IFNUT1JZOiDnrKww6Kmx44CM5pyA6YCf44G444Gu6KGd5YuV44CNID09PSZxdW90OyAmbHQ7Jmx0OyBlbmRsOwogICAgLy8gVUxUUkHjgarjgonpq5jnlLvos6rmvJTlh7oKICAgIGlmIChncy5xdWFsaXR5ID09IDMpIGNvdXQgJmx0OyZsdDsgJnF1b3Q744CQVUxUUkHjgqjjg5Xjgqfjgq/jg4jjgJHjg4bjg7zjg6vjg6njg7Pjg5fjga7mrovlg4/jgpLjg5bjg6njg7zmj4/nlLsmcXVvdDsgJmx0OyZsdDsgZW5kbDsKICAgIAogICAgY291dCAmbHQ7Jmx0OyAmcXVvdDtTMTQgIFs9XSAmZ3Q7Jmd0OyZndDsgMjgwa20vaCZxdW90OyAmbHQ7Jmx0OyBlbmRsOwogICAgY291dCAmbHQ7Jmx0OyAmcXVvdDtDQU1BUk8gW09PXSAmZ3Q7Jmd0OyZndDsgMjgwa20vaCZxdW90OyAmbHQ7Jmx0OyBlbmRsOwogICAgCiAgICBjb3V0ICZsdDsmbHQ7ICZxdW90O1xuW1NPVU5EXSDvvovvvp/vva8hIChFVEPnorroqo0pIC0mZ3Q7IO++jO++nu+9q++9q++9q+++nSEgKOWni+WLlSkmcXVvdDsgJmx0OyZsdDsgZW5kbDsKICAgIGRyYXdEb3RDYXIoNTAsIDE1MCwgZ3MucXVhbGl0eSk7CiAgICAKICAgIGNvdXQgJmx0OyZsdDsgJnF1b3Q7XG4xLuasoeOBuCZxdW90OyAmbHQ7Jmx0OyBlbmRsOwogICAgaW50IGM7IGNpbiAmZ3Q7Jmd0OyBjOwogICAgZ3Muc2NlbmUgPSAyOyAvLyDjg6Hjg4vjg6Xjg7zjgbgKfQoKdm9pZCBydW5NZW51KEdhbWVTdGF0ZSAmYW1wO2dzKSB7CiAgICBjb3V0ICZsdDsmbHQ7ICZxdW90O1xuPT09IE1BSU4gTUVOVSAoR1VJKSA9PT0mcXVvdDsgJmx0OyZsdDsgZW5kbDsKICAgIGRyYXdHVUlCb3goMTAsIDEwLCAzMDAsIDQwLCAmcXVvdDtTVEFUVVM6ICZxdW90OyArIGdzLm5hbWUgKyAmcXVvdDsgfCAmcXVvdDsgKyB0b19zdHJpbmcoZ3MubW9uZXkpICsgJnF1b3Q7IENQJnF1b3Q7KTsKICAgIGRyYXdHVUlCb3goMjAsIDcwLCAxMzAsIDgwLCAmcXVvdDtDT1VSU0U6IOWMl+mZuOmBkyZxdW90Oyk7CiAgICBkcmF3R1VJQm94KDE3MCwgNzAsIDEzMCwgODAsICZxdW90O0dBUkFHRSZxdW90Oyk7CiAgICBkcmF3R1VJQm94KDIwLCAxNzAsIDI4MCwgNDAsICZxdW90O1NFVFRJTkcmcXVvdDspOwoKICAgIGNvdXQgJmx0OyZsdDsgJnF1b3Q76YG45oqeKDE66LWw6KGMIC8gMjroqK3lrpogLyAwOue1guS6hik6ICZxdW90OzsKICAgIGludCBjOyBjaW4gJmd0OyZndDsgYzsKICAgIGlmIChjID09IDIpIGdzLnNjZW5lID0gMzsKICAgIGVsc2UgaWYgKGMgPT0gMCkgZXhpdCgwKTsKfQoKLy8gLS0tIOODoeOCpOODs+ODq+ODvOODlyAtLS0KCmludCBtYWluKCkgewogICAgR2FtZVN0YXRlIGdzOwogICAgCiAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgIHN3aXRjaCAoZ3Muc2NlbmUpIHsKICAgICAgICAgICAgY2FzZSAwOiBydW5UaXRsZShncyk7IGJyZWFrOwogICAgICAgICAgICBjYXNlIDE6IHJ1blN0b3J5KGdzKTsgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgMjogcnVuTWVudShncyk7ICBicmVhazsKICAgICAgICAgICAgY2FzZSAzOiAKICAgICAgICAgICAgICAgIGNvdXQgJmx0OyZsdDsgJnF1b3Q7XG5bU0VUVElOR10g55S76LOqKDE6TUlELCAzOlVMVFJBKTogJnF1b3Q7OwogICAgICAgICAgICAgICAgY2luICZndDsmZ3Q7IGdzLnF1YWxpdHk7CiAgICAgICAgICAgICAgICBncy5zY2VuZSA9IDI7IAogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIDA7Cn0K
#include <iostream>
#include <string>
#include <vector>
using namespace std;
// --- 画面設定 ---
const int SCREEN_W = 320;
const int SCREEN_H = 240;
// --- ゲームデータ ---
struct GameState {
string name = "";
int money = 500000;
int quality = 1; // 1:MID, 3:ULTRA
int scene = 0; // 0:Title, 1:Story, 2:Menu, 3:Setting
};
// --- グラフィックエンジン(OS自作風) ---
// 指定座標に四角(ボタン等)を描画
void drawGUIBox(int x, int y, int w, int h, string label) {
cout << "[GUI_RECT] Pos:(" << x << "," << y << ") Size:" << w << "x" << h << " Label: " << label << endl;
}
// 配列データからドット絵を描画
void drawDotCar(int x, int y, int quality) {
if (quality == 3) {
cout << "[RENDER_ULTRA] GT4画質シェーダー適用:車体反射計算中..." << endl;
}
cout << "[RENDER_DOT] 座標(" << x << "," << y << ")に自車を描画" << endl;
}
// --- 各シーンの実装 ---
void runTitle(GameState &gs) {
cout << "\n=== TITLE SCREEN ===" << endl;
drawGUIBox(110, 180, 100, 30, "START");
cout << "名前を入力してスタート: ";
cin >> gs.name;
gs.scene = 1; // ストーリーへ
}
void runStory(GameState &gs) {
cout << "\n=== STORY: 第0話「最速への衝動」 ===" << endl;
// ULTRAなら高画質演出
if (gs.quality == 3) cout << "【ULTRAエフェクト】テールランプの残像をブラー描画" << endl;
cout << "S14 [=] >>> 280km/h" << endl;
cout << "CAMARO [OO] >>> 280km/h" << endl;
cout << "\n[SOUND] ピッ! (ETC確認) -> ブォォォン! (始動)" << endl;
drawDotCar(50, 150, gs.quality);
cout << "\n1.次へ" << endl;
int c; cin >> c;
gs.scene = 2; // メニューへ
}
void runMenu(GameState &gs) {
cout << "\n=== MAIN MENU (GUI) ===" << endl;
drawGUIBox(10, 10, 300, 40, "STATUS: " + gs.name + " | " + to_string(gs.money) + " CP");
drawGUIBox(20, 70, 130, 80, "COURSE: 北陸道");
drawGUIBox(170, 70, 130, 80, "GARAGE");
drawGUIBox(20, 170, 280, 40, "SETTING");
cout << "選択(1:走行 / 2:設定 / 0:終了): ";
int c; cin >> c;
if (c == 2) gs.scene = 3;
else if (c == 0) exit(0);
}
// --- メインループ ---
int main() {
GameState gs;
while (true) {
switch (gs.scene) {
case 0: runTitle(gs); break;
case 1: runStory(gs); break;
case 2: runMenu(gs); break;
case 3:
cout << "\n[SETTING] 画質(1:MID, 3:ULTRA): ";
cin >> gs.quality;
gs.scene = 2;
break;
}
}
return 0;
}