# include <Siv3D.hpp> // OpenSiv3D v0.6.10 //どこの関数にも属さないところに宣言された変数 //グローバル変数(大域変数) const int LEFT_MARGIN{ 100 };//左100ピクセルから書き始める const Vec2 CHR_SIZE{ 32, 32 }; const int TOP_MARGIN{ 300 };//上100ピクセルから書き始める const int TITLE_FONT_SIZE{ 60 }; const int GAME_FONT_SIZE{ 30 }; const int GOAL_DIST = 20;//全部で20マス bool isPushButton = false; int diceNum = 0;//サイコロの目は何? int komaPos = 1;//駒の場所 ゴールの条件は komaPos == GOAL_DIST //Mainの上で宣言すると、そのソースコード上の(宣言から下の)どこからでもアクセス可能! enum GAMESTATE { TITLE, PLAY, GAMEOVER, }; void ShowTitleScnene(GAMESTATE& state) { //タイトル画面 FontAsset(U"TFONT")(U"サイコロんZ").drawAt(Scene::Center(), Palette::Yellow); FontAsset(U"GFONT")(U"Click Left Mouse Button") .drawAt({ Scene::Center().x, Scene::Center().y + FontAsset(U"GFONT").height() }, Palette::Black); } void DrawMasu() { for (int i = 0; i < GOAL_DIST; i++) { if(komaPos - 1 == i) TextureAsset(U"dragon").resized(CHR_SIZE).draw(LEFT_MARGIN + i * CHR_SIZE.x, TOP_MARGIN - CHR_SIZE.y); else TextureAsset(U"masu").resized(CHR_SIZE).draw(LEFT_MARGIN + i * CHR_SIZE.x, TOP_MARGIN - CHR_SIZE.y); } } void ShowPlayScnene(GAMESTATE& state) { const Vec2 DICE_POS{ 100,100 }; const Vec2 STRT_STR_POS{ 200, 100 }; const Vec2 STOP_STR_POS{ 200,148 }; //Texture dragon = TextureAsset(U"dragon"); Texture dice[6] = { TextureAsset(U"d1"),TextureAsset(U"d2"),TextureAsset(U"d3"), TextureAsset(U"d4"),TextureAsset(U"d5"),TextureAsset(U"d6"), }; //プレイ画面 //FontAsset(U"TFONT")(U"プレイ中").drawAt(Scene::Center(), Palette::Aliceblue); if (komaPos < GOAL_DIST) { if (FontAsset(U"GFONT")(U"START").draw(STRT_STR_POS, Palette::Aliceblue).leftClicked()) { isPushButton = false; } if (FontAsset(U"GFONT")(U"STOP").draw(STOP_STR_POS, Palette::Orangered).leftClicked()) { isPushButton = true; komaPos = komaPos + (diceNum + 1); } //サイコロの描画処理 if (isPushButton == false) { diceNum = rand() % 6; dice[diceNum].resized(2 * CHR_SIZE).draw(DICE_POS); } else { dice[diceNum].resized(2 * CHR_SIZE).draw(DICE_POS); Print << U"Dice:" << diceNum + 1; Print << U"komaPos:" << komaPos; } //ここまで DrawMasu(); } else { state = GAMESTATE::GAMEOVER; } } void ShowGameOverScnene(GAMESTATE& state) { //ゲームオーバー画面 FontAsset(U"TFONT")(U"GAME OVER").drawAt(Scene::Center(), Palette::Red); } void InitGame() { isPushButton = false; diceNum = 0; } void Main() { //関数などのブロック{}の中で宣言された変数 //ローカル変数(局所変数) //const Vec2 IMG_SIZE = { 32,32 }; const Vec2 SCREEN_SIZE = { Scene::Width(), Scene::Height() }; srand((unsigned int)time(nullptr)); // 背景の色を設定する | Set the background color Scene::SetBackground(ColorF{ 0.6, 0.8, 0.7 }); // 絵文字からテクスチャを作成する | Create a texture from an emoji //const Texture emoji{ U"🦖"_emoji }; TextureAsset::Register(U"dragon", U"🦖"_emoji); TextureAsset::Register(U"masu", U"🟫"_emoji); TextureAsset::Register(U"d1", U"d1.png"); TextureAsset::Register(U"d2", U"d2.png"); TextureAsset::Register(U"d3", U"d3.png"); TextureAsset::Register(U"d4", U"d4.png"); TextureAsset::Register(U"d5", U"d5.png"); TextureAsset::Register(U"d6", U"d6.png"); //const Font titlefont{ 60, Typeface::Heavy }; FontAsset::Register(U"TFONT", TITLE_FONT_SIZE, Typeface::Heavy); //fontアセットに登録 FontAsset::Register(U"GFONT", GAME_FONT_SIZE, Typeface::Light); //fontアセットに登録 //Texture sai = Texture(U"d1.png"); GAMESTATE gameState = GAMESTATE::TITLE;//ステートをタイトルで初期化 InitGame(); while (System::Update()) { if (MouseL.down()) { //count++; //Print << count; switch (gameState) { case TITLE: InitGame(); gameState = GAMESTATE::PLAY; break; case PLAY: //gameState = GAMESTATE::GAMEOVER; break; case GAMEOVER: gameState = GAMESTATE::TITLE; break; default: break; } } switch (gameState) { case TITLE: ShowTitleScnene(gameState); break; case PLAY: ShowPlayScnene(gameState); break; case GAMEOVER: ShowGameOverScnene(gameState); break; default: ShowTitleScnene(gameState); break; } //sai.resized(IMG_SIZE).draw(SCREEN_SIZE.x/2 -IMG_SIZE.x/2, SCREEN_SIZE.y/2 - IMG_SIZE.y /2); } }