[OSASK 4088] Re: 絶対音感ゲーム4.0

  こんにちは、川合です。


ZAKKI さんは 2002/07/17 23:19:49 の「[OSASK 4084] 絶対音感ゲーム
4.0」で書きました:

>絶対音感ゲームをバージョンアップしました。(本日三回目)
>http://zslash.s5.xrea.com/onkan.zip
>
>[OSASK 4081]で川合さんに教えてもらったテクニックを組み込んでいます。
>あと、goto文を使わないような仕組みを考えてみました。

  おお、しっかりできています。僕が考えていた案よりも良いかもしれ
ないくらいです。

  こうなると、もう細かいことしか残っていません。最後の詰めをやり
ましょう。最終回です。

1.ウィンドウタイトル表示をputstr()で。

2.48〜49行目のmissやscoreへの初期値代入は不要なのでやめます。

3.num1について、1を足したり引いたりするのはなんだかばかばかし
いので、

        num1 = rand() % 7;       68行目
        beep(tone[num1]);        71行目
             77行目のnum2--;は削除
        if (num1 == num2 - 2) {  79行目

という風に変更します。

4.スコア表示方法を再検討。

  61行目以降は以下のようになっていますが、

>        /* メッセージを表示 */
>        putstr(textbox, "ONKAN 4.0   ");
>        putstr(scorebox, "00000000");
>        while(miss < 3){
>            putstr(helpbox, "Hit Space           ");

これを以下のように変えます。

        /* メッセージを表示 */
        putstr(textbox, "ONKAN 4.0   ");
        do {
            putstr(scorebox, setdec8(score, s));
            putstr(helpbox, "Hit Space           ");

そんでもって、88行目は、

        } while (miss < 3);

にします。その上で、82行目のスコア表示は不要になるので削除します
。whileよりも、do - whileの方がコンパクトなんです。

  ここまでは、まあ常識的な改良だろうと思います。ここからはやって
もやらなくてもいいようなことです。

5.関数beep()について。

  この関数は別に関数として独立させておく意義があまりありません。
他のアプリでそのまま使えるってこともないでしょうし。だから、Osas
kMain()の中に入れちゃっていいと僕は思います。そうすると関数が一
つ減って、サイズは縮んで速度は上がります。・・・もし読みにくくな
るような気がするのでしたら、やらなくてもいいです。

6.関数initsignalbox()について。

  これはintroシリーズでは関数にしてありましたが、大した関数では
ありませんので、OsaskMain()の中に入れてしまう方がコンパクトで速
くなります。この関数は他のアプリでもそのまま使えるなどの汎用性が
あるので関数にしておくことは一応意味がありますが、サイズが小さく
て速くなるならそっちの方がいいや、と思うのでしたら、OsaskMain()
に入れちゃってください。

7.introeのhellocaテクニックの導入。

  これはソースが少し汚れます(5行ほど)。しかし効果は大きいです
。やるかやらないかはどちらでもかまいませんが、僕としては効果が大
きいのでお勧めです。やり方は、

>#define SYSTEM_TIMER 0x01c0

の後くらいに、以下の3行を追加します。

static int MALLOC_ADDR;
#define malloc(bytes)  (void *) (MALLOC_ADDR -= ((bytes) + 7) & ~7)
#define free(addr)     for (;;); /* freeがあっては困るので永久ループ */

そして、関数OsaskMain()の/*初期化*/の前に、以下の2行を追加します
。

    /* 何よりも最初にやるべきこと(lib_initよりも先!) */
    MALLOC_ADDR = lib_readCSd(0x0010);

これでおしまいです。

8.一通りの改良が終わったら、bim2bin2で圧縮をかけます。リリース
モードみたいなものです。

    bim2bin2 in:onkan.bin out:onkan.bin -osacmp -tek0

これで多分、1.0KBくらいになるでしょう。

  あ、そうそう、lcc-win32が半年以上古いバージョンでしたら、新し
いバージョンに変えるというのも有効な手だてかもしれません。最適化
能力がUPしているかもしれないので。


  それでは。

--
    川合 秀実(KAWAI Hidemi)
OSASK計画代表 / システム設計開発担当
E-mail:kawai !Atmark! imasy.org
Homepage http://www.imasy.org/~kawai/


ML番号でジャンプ
ML単語検索