hspmath.asは中身を見るとわかるけどもglobal宣言されていないので、
モジュール内で使う場合はモジュール内でインクルードしないといけませんよ。とエスパーしてみる。
下向きの時に左入力、左向きの時に下入力時は曲がる扱いにしないってことでいいのかな?
与えられた向き、キーの数値情報から直感的な挙動をビット演算で実装するとこうなる。
#module
#defcfunc GetTurnStr int key, int dir
if ( key & ((%10001<<dir)>>0) & %1111 ) : return "直進"
if ( key & ((%10001<<dir)>>1) & %1111 ) : return "左折"
if ( key & ((%10001<<dir)>>2) & %1111 ) : return "逆走"
if ( key & ((%10001<<dir)>>3) & %1111 ) : return "右折"
return "不動"
#global
// 以降テスト用
#module
#deffunc TEST_STREQ str testname,str expect,str factval,local resultstr
if ( expect == factval ) : resultstr = " ○ " : else : resultstr = "[!]"
mes strf("%s:%s 期待値[%s] 実効値[%s]",resultstr,testname,expect,factval)
return
#global
#const KEY_NONE 0
#const KEY_LEFT 1
#const KEY_UP 2
#const KEY_RIGHT 4
#const KEY_DOWN 8
#const DIRECTION_LEFT 0
#const DIRECTION_UP 1
#const DIRECTION_RIGHT 2
#const DIRECTION_DOWN 3
TEST_STREQ "左向きでの無入力","不動",GetTurnStr(KEY_NONE ,DIRECTION_LEFT )
TEST_STREQ "上向きでの無入力","不動",GetTurnStr(KEY_NONE ,DIRECTION_UP )
TEST_STREQ "右向きでの無入力","不動",GetTurnStr(KEY_NONE ,DIRECTION_RIGHT)
TEST_STREQ "下向きでの無入力","不動",GetTurnStr(KEY_NONE ,DIRECTION_DOWN )
TEST_STREQ "左向きでの左入力","直進",GetTurnStr(KEY_LEFT ,DIRECTION_LEFT )
TEST_STREQ "左向きでの上入力","右折",GetTurnStr(KEY_UP ,DIRECTION_LEFT )
TEST_STREQ "左向きでの右入力","逆走",GetTurnStr(KEY_RIGHT,DIRECTION_LEFT )
TEST_STREQ "左向きでの下入力","左折",GetTurnStr(KEY_DOWN ,DIRECTION_LEFT )
TEST_STREQ "上向きでの左入力","左折",GetTurnStr(KEY_LEFT ,DIRECTION_UP )
TEST_STREQ "上向きでの上入力","直進",GetTurnStr(KEY_UP ,DIRECTION_UP )
TEST_STREQ "上向きでの右入力","右折",GetTurnStr(KEY_RIGHT,DIRECTION_UP )
TEST_STREQ "上向きでの下入力","逆走",GetTurnStr(KEY_DOWN ,DIRECTION_UP )
TEST_STREQ "右向きでの左入力","逆走",GetTurnStr(KEY_LEFT ,DIRECTION_RIGHT)
TEST_STREQ "右向きでの上入力","左折",GetTurnStr(KEY_UP ,DIRECTION_RIGHT)
TEST_STREQ "右向きでの右入力","直進",GetTurnStr(KEY_RIGHT,DIRECTION_RIGHT)
TEST_STREQ "右向きでの下入力","右折",GetTurnStr(KEY_DOWN ,DIRECTION_RIGHT)
TEST_STREQ "下向きでの左入力","右折",GetTurnStr(KEY_LEFT ,DIRECTION_DOWN )
TEST_STREQ "下向きでの上入力","逆走",GetTurnStr(KEY_UP ,DIRECTION_DOWN )
TEST_STREQ "下向きでの右入力","左折",GetTurnStr(KEY_RIGHT,DIRECTION_DOWN )
TEST_STREQ "下向きでの下入力","直進",GetTurnStr(KEY_DOWN ,DIRECTION_DOWN )
適当に単体テストもしておきましょう。単体テスト間違えてて再投稿した人が言えるセリフじゃないけど。