アソパソマソを動かそう(理想形)

Fig. 1: アソパソマソを動かそう1
Fig. 2: アソパソマソを動かそう2
Fig. 3: アソパソマソを動かそう3

Windows 64bit アンパンマン理想形(プログラムダウンロード)

3種類の遅いソートアルゴリズムを可視化してみよう

長方形を描く
キー入力

//スペースキーを押して、放した瞬間をキャッチしたら
if(KeySpace.up())
{
    //スペースキーが押された時の処理を描く
}

ランダムににょきにょき

スペースキーを押すとバーがにょきにょき伸びる
これを改造して、スペースを押すたびに、ソートアルゴリズムのステップが進むようにしてみよう。

Fig. 4: ランダムニョキニョキバーの画面
# include <Siv3D.hpp> // OpenSiv3D v0.6.2
 
const int xsize = 800; //デフォルトの画面サイズ幅
const int ysize = 600; //デフォルトの画面サイズ高さ
 
//整数配列のランダムなインデックスの要素に1を足す関数
//_arr 配列名
//_num 配列数
void arrayPlusPlus(int _arr[], int _num) 
{
	int rnum = rand() % _num;
	_arr[rnum]++;
}
 
void drawArray(int _arr[], int _num)
{
	const int barsize = 50;//バーの幅
	const int left = (xsize- barsize * _num) / 2; //バーを_num本描いたときに、真ん中揃えになるように位置調整
	for (int i = 0; i < _num; i++) //幅50の高さ(長さ)_arr[i]*10のバーを、書いていく
	{
            //四角形の左上のx座標、 左上のy座標、 幅、高さを指定
		Rect(left + i * barsize, 50, barsize, _arr[i] * 10) 
		.draw(Palette::Darkorange).drawFrame(2.0, 0,Palette::Black); //drawFrameは輪郭を描く関数
	}
}
 
void Main()
{
	// 背景の色を設定 | Set background color
	Scene::SetBackground(ColorF{ 0.8, 0.9, 1.0 });
 
	// 通常のフォントを作成 | Create a new font
	const Font font{ 60 };
 
	int value[10] = { 0,0,0,0,0,0,0,0,0,0 };//この配列に入っている整数*10がバーの高さ、配列数がバーの本数になるよ
 
	srand((unsigned int)time(nullptr));
 
	while (System::Update())
	{
		//スペースキーを押すたびに配列のどれかが1増える
		if (KeySpace.up())
		{
			arrayPlusPlus(value, 10);
		}
		drawArray(value, 10);
	}
}