« RZ1Music v0.1.2 公開 | トップページ | ROBOBASIC講座(AD, RCIN) »

ROBOBASIC講座(解りやすく?修正しやすく?カッコ良く?スマートに書くためには)

コードを書く時は、後で見て解りやすい様に、修正しやすい様に、書けるといいですよね。言語ごとで、書き方の基本、決まりみたいなものはあるかと思いますが、自分なりにルールを作って、そのルールに則って書く癖を付けるといいですね。

書式のルール(例)

  • (グローバルな)変数は小文字のgを付ける
    ROBOBASICでは、グローバルな変数しかない
    (以下のコードではgは付けてない
  • 定数には小文字のkを付ける
    名前はその数値が意味する名前にする。
    長過ぎる名称も逆に解りにくくなるので注意
    とはいいつつ、数値のままの方が解りやすい場合もあったりする
    CONSTは、プログラムのサイズに影響しないので、気兼ねなく使ってOK
  • サブルーチンの仕切り線
    goto, gosubで仕切り線を変えてもいいかも
    ラベル名にもルールを決めて、gotoのラベルはtを、gosubのラベルにはsを付けるとかしてもいいかも
  • IF文、FOR...NEXT文のタブの入れ方
    ダブを上手に使って、スッキリさせましょう
    長いIF〜ENDIFや、FOR〜NEXTの場合、同じコメントの線で囲むといい

それから、なかなかできないことなんですが、
コメントは

  • 説明はできるだけ書込む
    後から見ると必ず、コメント書いておけば良かったと後悔する時がよくあります。
  • 修正した箇所には、修正日を入れておくといい
    修正前のコードも消さずに、しばらくはコメントにして残しておく。バグは思わぬ所に潜んでいるものです。修正したコードがちゃんと動くことを確認してから消去する。いつも上書き保存するのでなく、コードを大きく書き換えた場合は、別名(バージョン名、日付)で保存する。
  • ざっと見て、パットわかることが大切なので、日本語で書いておくといい
    フォントを日本語フォントに設定しておく必要がある

など、兎に角、面倒くさがらずに、できるだけ書く癖を付けるといいかなぁ

サンプルとして、夢現工房さんのページにある
Template Plogram For GameCon(Version1.09 20070515).bas

'*************************************************
ADGET:
....
....
....
RETURN
'*************************************************

の間を、解りやすく?修正しやすく?カッコ良く?スマートになるように、以下のように書き換えてみました。ご興味のある方は、この部分を入れ替えて試してみて下さい。なお、※斜めに倒した時の感度にも、少し手を加えています。※日本語のコメントを使っているので、フォントの変更が必要になるかもしれません。※既存のコードを元に、このサブルーチン部分だけを書き換えたので、根本的に書き換えれば、もっと良いコードが書けるかもしれません。

なお、以下のプログラムをRZ1Basicを使って、コンパイル、または、シミュレーションする場合は、最新のver 0.3.1をご使用下さい説明)。

'*************************************************
'感度
CONST kMIN_A=20
CONST kMAX_A=235
CONST kMIN_B=60
CONST kMAX_B=195
'解析番号
CONST kRightStick=0
CONST kLeftStick=1
'傾けた向き
CONST kNONE=0
CONST kStk_Up=1
CONST kStk_Left=1
CONST kStk_Down=2
CONST kStk_Right=2
'通信
CONST kRightStkLR=&H43'="C" 
CONST kRightStkUD=&H44'="D" 
CONST kLeftStkLR=&H45'="E"
CONST kLeftStkUD=&H46'="F"
'結果
CONST kUp=1
CONST kDown=2 
CONST kRight=3
CONST kLeft=4 
CONST kRightUp=5
CONST kRightDown=6
CONST kLeftUp=7
CONST kLeftDown=8
'通信速度
CONST kExSpeed=19200

DIM ADV1 AS BYTE
DIM ADV2 AS BYTE
DIM ADTV AS BYTE
DIM
CASV AS BYTE

'#############################
'斜め具合を調べる
CHECK_DIAGONAL:
IF CASV<kMIN_B THEN
        CASV=1
ELSEIF kMAX_B<CASV THEN
        CASV=2
ELSE
        CASV=kNONE
ENDIF
RETURN

'#############################
'結果を割り当てる
ASSIGNED_STICK_RESULT:
IF ADV1=kStk_Up AND ADV2=kNONE THEN
   
ADTV=kUp
ELSEIF
ADV1=kStk_Down AND ADV2=kNONE THEN
   
ADTV=kDown
ELSEIF
ADV1=kNONE AND ADV2=kStk_Right THEN
   
ADTV=kRight
ELSEIF
ADV1=kNONE AND ADV2=kStk_Left THEN
   
ADTV=kLeft
ELSEIF
ADV1=kStk_Up AND ADV2=kStk_Right THEN
   
ADTV=kRightUp
ELSEIF
ADV1=kStk_Down AND ADV2=kStk_Right THEN
   
ADTV=kRightDown
ELSEIF
ADV1=kStk_Up AND ADV2=kStk_Left THEN
   
ADTV=kLeftUp
ELSEIF
ADV1=kStk_Down AND ADV2=kStk_Left THEN
   
ADTV=kLeftDown
ENDIF
 
RETURN

'############################################
'ゲームパッドのアナログスティックの状態を取得
ADGET:

'<<シグナルを取得する>>
ADSET=kRightStkLR '"C"
ETX kExSpeed,ADSET
ADGET1:
ERX
kExSpeed,ADR2,ADGET1

ADSET=kRightStkUD '"D"
ETX kExSpeed,ADSET
ADGET2:
ERX kExSpeed,ADR1,ADGET2

ADSET=kLeftStkLR '"E"
ETX kExSpeed,ADSET
ADGET3:
ERX kExSpeed,ADL2,ADGET3

ADSET=kLeftStkUD '"F"
ETX kExSpeed,ADSET
ADGET4:
ERX kExSpeed,ADL1,ADGET4

'<<シグナルを解析する>>
' I=0
右スティックの解析
' I=1 左スティックの解析

'右スティックの値をセットする 
ADV1=ADR1
ADV2=ADR2
FOR I=kRightStick to kLeftStick
    '傾き具合を調べる 
    IF ADV1<kMIN_A THEN
        ADV1=kStk_Up
        CASV=ADV2
        GOSUB CHECK_DIAGONAL
        ADV2=CASV
        GOSUB ASSIGNED_STICK_RESULT
    ELSEIF kMAX_A<ADV1 THEN
        ADV1=kStk_Down
        CASV=ADV2
        GOSUB CHECK_DIAGONAL
        ADV2=CASV
        GOSUB ASSIGNED_STICK_RESULT
    ELSEIF ADV2<kMIN_A THEN
        ADV2=kStk_Left
        CASV=ADV1
        GOSUB CHECK_DIAGONAL
        ADV1=CASV
        GOSUB ASSIGNED_STICK_RESULT
    ELSEIF kMAX_A<ADV2 THEN
        ADV2=kStk_Right
        CASV=ADV1
        GOSUB CHECK_DIAGONAL
        ADV1=CASV
        GOSUB ASSIGNED_STICK_RESULT
    ELSE
        ADV1=kNONE
        ADV2=kNONE
        ADTV=kNONE 'ここで0にしちゃう!
    ENDIF

    '結果を整理
    IF I=kRightStick THEN
        '右
スティック結果は10の位
        PSDT=ADTV*10
        '左スティックの値をセットする
        ADV1=ADL1
        ADV2=ADL2
    ENDIF
 
NEXT I

'最終結果:右左の結果を足す
PSDT=PSDT+ADTV

RETURN

'*************************************************

----------------
にほんブログ村 科学ブログ 
ロボットへ
にほんブログ村

|

« RZ1Music v0.1.2 公開 | トップページ | ROBOBASIC講座(AD, RCIN) »

ROBOBASIC講座」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック


この記事へのトラックバック一覧です: ROBOBASIC講座(解りやすく?修正しやすく?カッコ良く?スマートに書くためには):

« RZ1Music v0.1.2 公開 | トップページ | ROBOBASIC講座(AD, RCIN) »