Категории: Все

по Yuki 1no 15 лет назад

386

Tees.exe

あるプログラムは、複数の関数とラベルを用いて特定の動作を制御している。プログラムの主な流れは、初期設定から始まり、メインループ内で各種の条件判定が行われる。センサーの値を読み取り、異常があれば特定のラベルにジャンプする。また、一定時間ごとにスリープし、キー入力をチェックする。キー入力に応じて電話を切る、メインループを抜けるなどの動作が行われる。特定の条件下では、フラグを切り替えて動作モードを変更する仕組みも含まれている。

Tees.exe

Tees.exe

nekoSDK.cpp(最終版)

Winmain関数
ラベル:End
ラベル:retake(復活の呪文2)
メインループ

Cかっこと全く同じ条件なので、既にこの時点でソースコードがアレだったんでしょうね

内容:


  • Sound関数
  • 指文字モードから抜けるフラグ切り替え部分(st.flag=0,syuwa=0)
  • if(syuwa==1000)

    st.flag==0,syuwa=0;

    if(st.flag==4$$syuwa==1)

    if(i%10==0)

    いわゆるCかっこに当たる部分だと思います。

    内容:


  • 誤動作判定(st.flag:0から1)
  • 誤動作判定後の待機(st.flag:1から2)
  • 電気
  • テレビ
  • 指文字モードへのフラグ切り替え部分のみ(st.flag=4)
  • 扇風機
  • Skypeモード(st.flag=3)

    Skypeモードだけ、フラグ切り替え部分と実行部分の2つに分かれてます。

  • if(st.flag==3)

    Subtopic

    if(st.flag==2)

    Skypeと指文字以外の、ふつうの判定受付モード

    条件判定:は手の形と向きを検出する条件です。

    条件判定:Skype

    st.flag=3;

    条件判定:扇風機

    st.fan=0,st.flag=0;

    if(st.fan==0)

    st.fan=1,st.flag=0;

    条件判定:指文字

    Sound関数

    syuwa=0,st.flag==4;

    条件判定:テレビ

    st.tv=0,st.flag=0;

    if(st.tv==0)

    st.tv=1,st.flag=0;

    条件判定:電気

    else

    st.light=0,st.flag=0;

    if(st.light!=1)

    st.light=1,st.flag=0;

    goto afterbreak;

    if(st.flag==1)

    if(counter>=16) st.flag==2;

    閾値を超えたかチェック

    誤動作の動きかどうか検出

    st.flag=1,counter=0とする

    絶対値を合計する(sumx,sumy,sumz)

    if(counter>100)

    st.flag=0,counter=0;

    display関数

    datatuning関数

    kbhit()でキー入力をチェック

    A,B,Cを押すと電話を切ったりメインループを抜けたりする

    変数sensorbuf[i][0]をチェック

    変な値が入っていたらメインループを抜けラベルretakeへ(復活の呪文2)

    sensorread関数

    st.flagのチェック

    (st.flag==1)||(st.flag==2)だったらcounter++

    50msのSleep()

    変数iのチェック

    (i==250)だったらリセット

    ウィンドウのメッセージチェック

    終了メッセージを受け取ったらメインループを抜ける

    ラベル:afterbreak
    初期設定