更新が遅れてるのは、挫折したからじゃありませんよ〜。
一発ネタです。しかもまだ仕上がっていません。
関係者の方、問題が有れば、メールで連絡していただければ直ぐに消します。
連打測定器 2 for WonderSwan Ver.0.10
動作はモノホンの動きから見た目で判断しました。高校1年の時に教えて貰った、
輪っかになってるキューで実現。画像はエミュレータのスクリーンショットからですが、
もちろんカセットは持っているので許して下さい。
一応、分からない方のために書いておくと、
元ネタは、ゲームレビューにも書いた、
「迷宮組曲」のタイトル画面です。目指せ16連射。
ソースの分割は、Ver.0.20 でやる予定です。 1 行 80 桁制限( 個人的な趣味 )のために見づらくなってますがご勘弁を。
「テキストウィンドウを作って表示」したいときは以下のようにする。
display_control( DCM_SCR1 | DCM_SCR2 | DCM_SCR2_WIN_INSIDE );
で、SCREEN1 に画像、SCREEN2( ウィンドウ )にテキストが表示される。……今回書き留めておく事はこのくらいでしょうか。
www.WonderWitch.com の ML で前に出た話題ではありますが、あまり複雑すぎるマクロを組むと、
上手く動かないので注意です。私はこれでまるまる 3 日間くらい悩みました。(苦笑
例えば、
#define EXIST( x ) ( ( x ) ? 1 : 0 )
/* 位置xの色を得る */
unsigned short get_pixel( unsigned short w, int x )
{
return ( EXIST( w & ( 0x8000 >> x ) ) << 1 ) | EXIST( w & ( 0x0080 >> x ) );
}
このくらいの複雑さのコードになると、期待した動作が得られません。 計算用に次々とレジスタに値をぶち込んでいって、その結果、 最終的にレジスタが上書きされてしまうようです。 ( x86 アセンブラは良く知らないので、詳しくは解らないのですが )
もちろん、
unsigned short get_pixel( unsigned short w, int x )
{
unsigned short r = 0x0000;
r |= EXIST( w & ( 0x8000 >> x ) ) << 1;
r |= EXIST( w & ( 0x0080 >> x ) );
return r;
}
と書き換えてやればいいだけのことです。 自動変数はスタック上に取られますから問題はありません。 ただ、この場合、前者の方が可読性が良さげなのがちょっと気になりますね。
また、LSI C-86( に限った事じゃないかも )の方には、似たような仕様で、 「関数を繋げすぎると上手く動かない」ってのがあったような気がします。
str = malloc( sizeof( char ) * max( sprintf( buf, "%f", pow( f, 3 ) ), sprintf( buf, "%e", pow( f, 3 ) ) ) );
位になると多分動かないんじゃないでしょうか。(笑
# 考えてみれば、WonderWitch って malloc 無いやん……。
現在待機中(及び進行中)の企画を今一度リストアップ。増えたりしたので。
最後の 2 つは設計から始めないと成らないので一寸難しいかも。 進行速度は pulicker 君の企画とドット打ちに掛かっています(笑
つぎは音を鳴らしてみたいと思います。 ボタンを押したときの「くぅぃ〜ん」という例の音と、 START ボタンを押したときのジングルですね。