2007年6月7日木曜日

stick命令をgetkey命令で実装する

HSP掲示板で以前話題になっていたのを思い出し、作成。
ビット演算さえ理解できれば案外簡単。

#constで定数をすべて定義しているけれど、やりすぎだったかも知れません。// stickをgetkeyで実装する [stick.hsp]
#undef stick
#module mdl_stick

// getkeyキーコード
#const GETKEY_LEFT          37
#const GETKEY_UP            38
#const GETKEY_RIGHT         39
#const GETKEY_DOWN          40
#const GETKEY_SPACE         32
#const GETKEY_ENTER         13
#const GETKEY_CTRL          17
#const GETKEY_ESC           27
#const GETKEY_LEFTCLICK      1
#const GETKEY_RIGHTCLICK     2
#const GETKEY_TAB            9

#deffunc _initStick
    dim KEY_CODE, 11
    KEY_CODE( 0 ) = GETKEY_TABGETKEY_RIGHTCLICKGETKEY_LEFTCLICK
    KEY_CODE( 3 ) = GETKEY_ESCGETKEY_CTRLGETKEY_ENTER
    KEY_CODE( 6 ) = GETKEY_SPACEGETKEY_DOWNGETKEY_RIGHT
    KEY_CODE( 9 ) = GETKEY_UPGETKEY_LEFT
    return

#deffunc _stick var vTarget, int NO_TRIGGER, int CHECK_MODE, local tmp
    vTarget = 0
    repeat length( KEY_CODE )
        getkey tmp, KEY_CODE( cnt )
        vTarget = vTarget << 1 | tmp
    loop
    if ( CHECK_MODE == 1 ) & ( ginfo_act == -1 ){
        // HSPウィンドウがアクティブでない
        prev = vTarget
        vTarget = 0
    } else {
        tmp = vTarget
        vTarget &= ( -1 ^ prev ) | NO_TRIGGER
        prev = tmp
    }
    return
#define global stick%1%2=0%3=1 ) _stick %1%2%3
#global
    _initStick       // 配列の初期化

7 件のコメント:

kz3 さんのコメント...

コピペできないのは初心者対策かなと思ってました。笑。
初心者ほど手で打ち込んだ方がいいですからね^^
ブログの文字コード(UTF-8?)とスクリプトエディタの文字コード(Shift-JIS)が異なるせいでしょうかねぇ??

eller さんのコメント...

kz3さんこんにちは。最近Wikiにいらっしゃらないので少し心配していました^^;。
公式BBSではありがとうございました。

じつはコピペできないのは対策ではなかったのです。動作確認を怠っていたのですね。いい薬になりました。

どうやらこのブログの仕様で、記事が1行にまとめられてしまうようなので、それが原因かなと思っています。表示上では改行されていてもソースコード上では改行されていないので、コピーがうまく利かないのかと。
テキストのアップロードはできないようなので、根本的な対策は無理っぽいですね。

kz3 さんのコメント...

私はコピペ対策って嘘ついてもいいと思いますよ(笑)
最近はアセンブリの本を読んだり、『組込み現場のCプログラミング』っていう本を買って読んでます。
C関連の文法書はある程度読み漁ったので、趣向を変えた内容の本があると興味を惹かれますね。
特に"プロ"グラマじゃないので実際の業務ではどうなのかとか、覗きたくなります。

eller さんのコメント...

それではコピペ対策ということにします。
……と言うのは冗談としても、躍起になって解決することでもないですから現状のままにしておきます。プログラミングのネタ(題材)の提供ができればとりあえず充分ですから。

C関連の文法書ですか。私はまだ独習Cを片手に勉強し始めたところなのでこれからです。C/C++はHSPとは比べ物にならないほど書籍が充実していて面白いですね。
私もプログラマに近い職業に就く予定なので実際の業務には興味があります。その関連で最近「プログラミングでメシが食えるか!?」という本を読みまして、やはり"プロ"グラマの方々は非常に気を使うのだなぁと感心しました。命令ひとつで動作スピードが極端に変わることもあるそうで…。

何か面白い本があったらぜひ教えてください。

eller さんのコメント...

特選スクリプト掲載をきっかけに、2007/08/05からこの記事もコピーペースト可能になりました。

ここのコメントは記事に「今まではコピペできなかったけど、この記事からはできるかもしれません」と書いてあったことに起因しています。
ちなみに「根本的な対策」はCSSによって実現されました。

FUJI さんのコメント...

こんにちは。
<span class="hsp3_comment">// 配列の初期化
のspanが閉じられていないために、以降の文字の色もおかしくなっているようです。

eller さんのコメント...

FUJIさん、ご指摘ありがとうございました。
HTX自体の不具合で、コメントで終わるスクリプトをうまく変換できていないようです。こんな簡単な不具合を見落とすとは自分でもびっくりです。
最新版(v1.41)でも対応していない不具合ですので、急遽更新して対応したいと思います。ありがとうございました。