こんにちは、川合です。 ZAKKI さんは 2002/07/17 00:27:08 の「[OSASK 4070] 絶対音感ゲーム 2.0」で書きました: >絶対音感ゲームをバージョンアップしました。 >[OSASK 4047]で川合さんに指摘していただいた点を >改良しました。 ありがとうございます。音が鳴っている間にキーを押しても音が止ま らないのを確認しました。これで致命的な問題はなくなったといえます 。 >バグがあったら教えてください。 2つほど見つけてしまいました。どちらも些細なことです。 1.ウィンドウタイトルのサイズ(10文字・・・9文字しか使っていな いようですが)とウィンドウの横幅(160ドット)が規定を満たし ていない。 この規定は、introaのhelloc4.txtに明記されています。引用すると > タイトルのx_size * 8 + 80 <= ウィンドウのx_size です。ですから、ウィンドウのx_sizeを168にして、タイトルのx_size を9にすればいいと思います。 なお、もしご迷惑でなければ、この修正をしていただいたバージョン に「川合秀実推奨」を出したいと思っています。間に合えばOSASK ver. 2.7にバンドルしたいです。 2.gameover後に表示されるメッセージが、"ONKAN 1.0"になっている 多分、バージョンアップ時に直し忘れただけでしょう。 --- ついでなので、サイズをさらに小さくするレクチャーも書いておきま す。まずは簡単なやつからです。気に入ったら採用してください(これ らを反映しなくても、バグさえ直していただければ推奨するつもりです ので、嫌なら反映しなくていいです)。 ・シグナル定義を簡潔にする シグナル定義で、c,d,e,f,g,h,a,bを別々に定義していますが、以下 のようにすれば行数を減らせて、速度も稼げます。 lib_definesignal1p0(4, 0x0100, 'c', window, 2); /* c-g */ lib_definesignal1p0(1, 0x0100, 'a', window, 7); /* a-b */ さらに、以下のようにすれば、大文字でも小文字でも入力できるように なります(しかも誤って押しっぱなしにしても、一度しか反応しなくな る・・・キーリピートを無視するため)。 lib_definesignal1p0(4, 0x0100, 'C' | 0x00701000, window, 2); /* c-g */ lib_definesignal1p0(1, 0x0100, 'A' | 0x00701000, window, 7); /* a-b */ ・switchの使用を控えて、ifや配列を利用する まず、配列を置きましょう。関数のプロトタイプ宣言の後のところく らいに、 int tone[] = { 0xfa8516, 0xdf371b, 0xc6d5bf, 0xbbacb8, 0xa72f05, 0x94f209, 0x84b7bb }; と書いておきます。そんでもって、 switch(num1){ (82行目) 〜 } (110行目) を以下の一行に置き換えます。 beep(tone[num - 1]); もう一つの大きなswitchである、 switch (getsignal()) { (115行目) 〜 } (148行目) は以下のように書き換えた方がお得です。 num2 = getsignal(); if (2 <= num2 && num2 <= 8) { num2--; break; } if (num2 == 0) { /* シグナルがないので、シグナルが来るまでスリープ */ lib_waitsignal(0x0001, 0, 0); } ・文字表示でスペースを書いてから書き直す必要はない たとえば、start:の直後の、 lib_putstring_ASCII(0x0000, 0, 0, helpbox, 0, 0, " "); lib_putstring_ASCII(0x0000, 0, 0, helpbox, 0, 0, "Hit Space"); は、以下の一行と等価です。 lib_putstring_ASCII(0x0000, 0, 0, helpbox, 0, 0, "Hit Space "); 全体的に、このような例がたくさんあるようなので、それを直すだけで 結構小さくなるように思います。 ・longの使用を控える OSASKのプログラミングにおいては、intは32bitであると想定してか まいません。ですから、関数beep()の引数はlongにしなくていいです 。longにすると64bitになってしまって、コードが大きくなって速度が 低下するかもしれません。 それでは。 -- 川合 秀実(KAWAI Hidemi) OSASK計画代表 / システム設計開発担当 E-mail:kawai !Atmark! imasy.org Homepage http://www.imasy.org/~kawai/