あみだくじを作ってみよう9

   2012/08/07

作った本人がこれでいいだろうと思っても
他の人に使ってもらうと、色々ご意見を頂戴したりします。

毎度、管理人イガジーです。

ご意見を頂けるのは、大変ありがたいことだと思っています。
(イガジーへは、お気軽にメールフォームからご連絡ください)

そんなわけで、あみだくじも昨日で完成(完了)のつもりだったのですが
「横棒をたどる動きが速すぎる(動きが不自然)」とのご指摘を
頂戴したので、改善を試みました。

横棒は1回で描画していたのですが、棒をたどる動きの速度を一定に
保つためには、縦方向と同じく「yh2 の長さで描画して待つ」を繰り返す
ようにしなければなりません。
右方向に進む所は、次のようにすれば良いですね。

if (((j^i)&1)==0){  // 偶数上段 or 奇数下段
	// 右を見る
	if (i<(nn-1)){ // 右端でなければ
		if (hb[i][j/2]) { // 右に横棒あり?
			int nh=xlen/yh2;
			for (int h=0;h<nh;++h) {
				g.fillRect(x+h*yh2, yt-1,yh2 , 3);
				repaintwait(wtt);
			}
			g.fillRect(x, yt-1, xlen+2, 3);
			repaintwait(wtt);
			++i;
		}
	}
}

横棒の長さ xlen を yh2 で割った回数ぶん(引く1)回します。
最後は、端数含めて横線を全部引きます(その方が安全で簡単なので)。
左に進む部分は、右から描画するので端数を算出しておく必要があります。
次のような感じになると思います。

else{ // 偶数下段 or 奇数上段
	// 左を見る
	if (i>0) { // 左端でなければ
		if (hb[i-1][j/2]) { // 左に棒あり?
			int nh=xlen/yh2;
			int hm=xlen%yh2;
			for (int h=nh-1;h>=0;--h) {
				g.fillRect(x-xlen+hm+h*yh2, yt-1,yh2 , 3);
				repaintwait(wtt);
			}
			g.fillRect(x-xlen, yt-1, xlen+2, 3);
			repaintwait(wtt);
			--i;
		}
	}
}

hm=xlen%yh2; が端数(余り)です。
これで、だいたい一定の速度であみだをたどるアニメーションが動くように
なったと思います。

この記事へのコメントはこちら

メールアドレスは公開されませんのでご安心ください。
また、* が付いている欄は必須項目となりますので、必ずご記入をお願いします。

内容に問題なければ、下記の「コメント送信」ボタンを押してください。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)