[[2004/C1/練習問題]]&br;
 担当:ふじさわ でんでん1年

 投票
#vote(たいへんよくできました☆[0],かなりふつうです○[0],もうすこしがんばりましょう△[103])
 前置き
これはまず最初に一回転してもっとも明るい方向(懐中電灯の方向)&br;
を探し、次に懐中電灯の光を追いかけて進むプログラムです。光を&br;
見失うと周囲を見回し、再度光を追います。&br;

 プログラム

 int t=0,y=0;
 
 void go_straight()                      
  OnFwd(OUT_A+OUT_C);
  Wait(t);
  Off(OUT_A+OUT_C);
 }
 
 void Light()
 {
  int tmax=0,tpoint=0,lightmax=0;
  SetSensor(SENSOR_1, SENSOR_LIGHT);
  if(y == 0){
   ClearTimer(0);
   OnFwd(OUT_A);
   OnRev(OUT_C);
   Wait(t);
   if(SENSOR_1 >= lightmax){
   lightmax=SENSOR_1;
   tmax=Timer(0);
   }
   if(SENSOR_1 >= 40){
    tpoint=t-tmax;
    OnFwd(OUT_C);
    OnRev(OUT_A);
    Wait(t);
    Off(OUT_A+OUT_C);
   }
  }else{
   ClearTimer(0);
   OnFwd(OUT_C);
   OnRev(OUT_A);
   Wait(t);
   if(SENSOR_1 >= lightmax){
    lightmax=SENSOR_1;
    tmax=Timer(0);
   }
   if(SENSOR_1 >= 40){
    tpoint=t-tmax;
    OnFwd(OUT_C);
    OnRev(OUT_A);
    Wait(t);
    Off(OUT_A+OUT_C);
   }
  }
 }
 
 sub run()
 {
  int x=0;
  SetSensor(SENSOR_1, SENSOR_LIGHT);
  while(true){
   if(SENSOR_1 >= 40){
    x=0;
    t=300;
    go_straight();
   }else if((SENSOR_1 < 40)&&(x == 0)){
    t=150;
    Light();
    y++;
    t=300;
    Light();
    y--;
    t=150;
    Light();
    x++;
   }else{
    t=340;
    Light();
   }
  }
 }
 
 task main()
 {
  t=340;
  Light();
  if(SENSOR_1 >= 40){
   run();
  }
 }


 工夫したところ
一度光を見失ったときに、首を振りふたたび光を探すところです。&br;
グローバル変数の使いスイッチのような二つの状態を作るところが&br;
大変だった。松本先生はローカル変数のほうがいいと言っていたが&br;
、作り手が未熟なためローカル変数でプログラムが組めなかった。&br;

トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS