実行ファイル(とソース)はこちら
↓ソースコートです
► スポイラーを表示
#define _CRT_SECURE_NO_DEPRECATE
#define DIST_X 0.56
#define DIST_Y 0.83
#include "DxLib.h"
#include "vector"
using namespace std;
struct SakuraData{
int x1, y1;
float x2, y2;
int x3, y3;
float x4, y4;
int rotaNum; //平面的な回転数
bool sign;
int distX, distY; //x,yそれぞれの移動量
SakuraData(){
rotaNum = GetRand(3);
sign = 0;
//花びらの初期座標を決める
int st = GetRand(800)-100;
int stY = GetRand(130)*(-1)-70;
x1=st, y1=stY;
x2=(float)(st+40), y2=(float)stY;
x3=st+40, y3=stY+66;
x4=(float)st, y4=(float)stY+66;
//花びらをひらひらさせる
double dists[2][2];
dists[0][0] = DIST_X;
dists[0][1] = -DIST_X;
dists[1][0] = DIST_Y;
dists[1][1] = -DIST_Y;
int num = GetRand(50);
for(int i=0;i x3) sign = !sign;
distX = GetRand(6)-3;
distY = GetRand(2)+1;
}
}
};
int sakuraGH;
char key[256]; //キーの入力状態を記録
vector sakuras;
int WINAPI WinMain(HINSTANCE hI, HINSTANCE hP, LPSTR lpC, int nC){
ChangeWindowMode(TRUE);
SetOutApplicationLogValidFlag(FALSE);
SetWindowText("DxLib");
if(DxLib_Init() == -1) return(-1);
SetAlwaysRunFlag(TRUE);
SetDrawScreen(DX_SCREEN_BACK);
sakuraGH = LoadGraph("sakura.PNG");
//花びらを150枚作成
for(size_t i=0;i sakuras[i].x3) sakuras[i].sign = !(sakuras[i].sign);
//花びらを平面的に回転させて描画
int mx1 = sakuras[i].x1, my1 = sakuras[i].y1;
int mx2 = (int)sakuras[i].x2, my2 = (int)sakuras[i].y2;
int mx3 = sakuras[i].x3, my3 = sakuras[i].y3;
int mx4 = (int)sakuras[i].x4, my4 = (int)sakuras[i].y4;
for(int j=0;j 480){
int st = GetRand(800)-100;
sakuras[i].x1=st, sakuras[i].y1=-40-66;
sakuras[i].x2=(float)(st+40), sakuras[i].y2=(float)(-40-66);
sakuras[i].x3=st+40, sakuras[i].y3=-40;
sakuras[i].x4=(float)st, sakuras[i].y4=(float)-40;
}
}
ScreenFlip();
}
DxLib_End();
return(0);
}
3秒に1回の確立で方向転換しているのですが、変わり方が急速すぎるので、ここはもう少し改良が必要ですね。
それと、桜の花びらの大きさをランダムで変えてみたりするとさらに良かったですね。