scene管理プログラム(解答例)

#include "DxLib.h"
//<プロトタイプ宣言>
void title();
void Init_Dat();
void Kouza_01();
void Kouza_02();
void Kouza_03();
//グローバル変数
int x = 1024 / 2.0;//丸の座標
int y = 768 / 2.0;//丸の座標
double ax = 0.0;//x座標の加速度
double ay = 0.0;//y座標の加速度
int blue;//青色を設定
int Graph;//画像読み込み
int scene = 0;//シーンを管理するフラグ
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int){
ChangeWindowMode(TRUE), SetGraphMode(800, 600, 32),//今回はウィンドウモード
DxLib_Init(), SetDrawScreen(DX_SCREEN_BACK);
blue = GetColor(0, 0, 255);
Graph = LoadGraph("ジョニー.png");
//<ループ処理>
while (ScreenFlip() == 0 && ProcessMessage() == 0 && ClearDrawScreen() == 0 &&
CheckHitKey(KEY_INPUT_ESCAPE) != 1){
//<シーンの切り替え>
switch (scene){
case 0: title();
break;
case 1: Kouza_01();
break;
case 2: Kouza_02();
break;
case 3: Kouza_03();
break;
default:
break;
}
}
//<終了処理>
DxLib_End();
return 0;
}
void title(){
DrawFormatString(200, 300, GetColor(255, 255, 255), "講座用プログラムの実行");
DrawFormatString(240, 350, GetColor(255, 255, 255), "1,2,3キーを押してスタート
");
DrawFormatString(240, 400, GetColor(255, 255, 255), "F1キーでタイトルに戻る");
DrawFormatString(240, 450, GetColor(255, 255, 255), "ESCキーで終了");
if (CheckHitKey(KEY_INPUT_1) == 1)
scene = 1;
if (CheckHitKey(KEY_INPUT_2) == 1)
scene = 2;
if (CheckHitKey(KEY_INPUT_3) == 1)
scene = 3;
}
void Kouza_01(){//第一回の講座でやったプログラムのまとめ
//十字キー操作
if (CheckHitKey(KEY_INPUT_RIGHT) != 0)//右キーを押したら
x++;//右にずれる
if (CheckHitKey(KEY_INPUT_LEFT) != 0)//左キーを押したら
x--;//左にずれる
if (CheckHitKey(KEY_INPUT_UP) != 0)//上キーを押したら
y--;//上にずれる
if (CheckHitKey(KEY_INPUT_DOWN) != 0)//下キーを押したら
y++;//下にずれる
DrawCircle(x, y, 1024 / 8.0, blue, true, 1);//円を描画
if (CheckHitKey(KEY_INPUT_F1) != 0){
Init_Dat();//変数初期化関数
scene = 0;//sceneをタイトルにする
}
}
void Kouza_02(){
//十字キー操作
if (CheckHitKey(KEY_INPUT_RIGHT) != 0)//右キーを押したら
ax = 5.0;//右に一定の加速度を代入
if (CheckHitKey(KEY_INPUT_LEFT) != 0)//左キーを押したら
ax = -5.0;//左に一定の加速度を代入
if (CheckHitKey(KEY_INPUT_RIGHT) == 0 && CheckHitKey(KEY_INPUT_LEFT) == 0)//左右
のキーが押されていない場合
ax *= 0.9;//x座標の減速処理
if (CheckHitKey(KEY_INPUT_UP) != 0)//上キーを押したら
ay = -5.0;//上に一定の加速度を代入
if (CheckHitKey(KEY_INPUT_DOWN) != 0)//下キーを押したら
ay = 5.0;//下に一定の加速度を代入
if (CheckHitKey(KEY_INPUT_UP) == 0 && CheckHitKey(KEY_INPUT_DOWN) == 0)//上下の
キーが押されていない場合
ay *= 0.9;//y座標の減速処理
if (-1.5 < ax && ax < 0 || 0 < ax && ax < 1.5)//-1.5 < ax < 0 か 0 < ax < 1.5に
なったら
ax = 0;//加速度を0にする
if (-1.5 < ay && ay < 0 || 0 < ay && ay < 1.5)//-1.5 < ay < 0 か 0 < ay < 1.5に
なったら
ay = 0;//加速度を0にする
DrawFormatString(20, 20, GetColor(255, 255, 255), "ax ... %f", ax);//axの加速度
を表示する
DrawFormatString(20, 40, GetColor(255, 255, 255), "ay ... %f", ay);//ayの加速度
を表示する
x += ax;//加速度を毎フレームx座標に加算する
y += ay;//加速度を毎フレームy座標に加算する
DrawCircle(x, y, 1024 / 8.0, blue, true, 1);//円を描画
if (CheckHitKey(KEY_INPUT_F1) != 0){
Init_Dat();//変数初期化関数
scene = 0;
}
}
void Kouza_03(){
//十字キー操作
if (CheckHitKey(KEY_INPUT_RIGHT) != 0)//右キーを押したら
ax = 5.0;//右に一定の加速度を代入
if (CheckHitKey(KEY_INPUT_LEFT) != 0)//左キーを押したら
ax = -5.0;//左に一定の加速度を代入
if (CheckHitKey(KEY_INPUT_RIGHT) == 0 && CheckHitKey(KEY_INPUT_LEFT) == 0)//左右
のキーが押されていない場合
ax *= 0.9;//x座標の減速処理
if (CheckHitKey(KEY_INPUT_UP) != 0)//上キーを押したら
ay = -5.0;//上に一定の加速度を代入
if (CheckHitKey(KEY_INPUT_DOWN) != 0)//下キーを押したら
ay = 5.0;//下に一定の加速度を代入
if (CheckHitKey(KEY_INPUT_UP) == 0 && CheckHitKey(KEY_INPUT_DOWN) == 0)//上下の
キーが押されていない場合
ay *= 0.9;//y座標の原則処理
if (-1.5 < ax && ax < 0 || 0 < ax && ax < 1.5)//-1.5 < ax < 0 か
0 < ax < 1.5
になったら
ax = 0;//加速度を0にする
if (-1.5 < ay && ay < 0 || 0 < ay && ay < 1.5)//-1.5 < ay < 0 か
0 < ay < 1.5
になったら
ay = 0;//加速度を0にする
DrawFormatString(20, 20, GetColor(255, 255, 255), "ax ... %f", ax);//axの加速度
を表示する
DrawFormatString(20, 40, GetColor(255, 255, 255), "ay ... %f", ay);//ayの加速度
を表示する
x += ax;//加速度を毎フレームx座標に加算する
y += ay;//加速度を毎フレームy座標に加算する
DrawGraph(x, y, Graph, false);//画像描写
if (CheckHitKey(KEY_INPUT_F1) != 0){
Init_Dat();//変数初期化関数
scene = 0;
}
}
void Init_Dat(){
x = 800 / 2.0;//丸の座標
y = 600 / 2.0;//丸の座標
ax = 0.0;//x座標の加速度
ay = 0.0;//y座標の加速度
}