# 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);
}
}