☆左チーム☆(かずま&サイモン&まさき)
目次
// 「左」を書くプログラム // // 作成者:かずま // 作成日:2005-11-7 #define TURN_TIME 101 // 直角に曲がるのにかかる時間 #define MOVE_TIME 121 // 1秒間に進む距離 #define PEN_TIME 20 // ペンを上下させる時間 sub turn_left() // 左方向に90度回転 { OnRev(OUT_A); OnFwd(OUT_C); Wait(TURN_TIME); Off(OUT_A+OUT_C); } sub turn_right() // 右方向に90度回転 { OnFwd(OUT_A); OnRev(OUT_C); Wait(TURN_TIME); Off(OUT_A+OUT_C); } sub pen_down() // ペンを下ろす { OnFwd(OUT_B); Wait(PEN_TIME); Off(OUT_B); } sub pen_up() // ペンを上げる { OnRev(OUT_B); Wait(PEN_TIME); Off(OUT_B); } task main() { SetPower(OUT_A,7); // パワーを設定 SetPower(OUT_C,7); pen_down(); // ペンを下ろす OnFwd(OUT_A+OUT_C); // 【一画目】行動1(17.1cm直進) Wait(17100/MOVE_TIME); Off(OUT_A+OUT_C); pen_up(); // ペンを上げる Wait(100); turn_left(); // 行動2(左回転) Wait(100); OnFwd(OUT_A+OUT_C); // 行動3(5.2cm直進) Wait(5200/MOVE_TIME); Off(OUT_A+OUT_C); Wait(100); turn_left(); // 行動4(左回転) Wait(100); OnFwd(OUT_A+OUT_C); // 行動5(8.8cm直進) Wait(8800/MOVE_TIME); Off(OUT_A+OUT_C); Wait(100); OnRev(OUT_A); // 行動6(左にある程度回転) OnFwd(OUT_C); Wait(87); Off(OUT_A+OUT_C); pen_down(); // ペンを下ろす Wait(100); SetPower(OUT_A,7); // パワーを変更 SetPower(OUT_C,0); OnFwd(OUT_A+OUT_C); // 【二画目】行動7(左方向に曲がりながら前進) Wait(180); Off(OUT_A+OUT_C); SetPower(OUT_A,7); // パワーを変更 SetPower(OUT_C,7); pen_up(); // ペンを上げる Wait(100); OnFwd(OUT_A); // 行動8(右にある程度回転) OnRev(OUT_C); Wait(165); Off(OUT_A+OUT_C); Wait(100); OnFwd(OUT_A+OUT_C); // 行動9(5.8cm直進) Wait(5800/MOVE_TIME); Off(OUT_A+OUT_C); Wait(100); turn_right(); // 行動10(右回転) Wait(100); OnFwd(OUT_A+OUT_C); // 行動11(2.3cm直進) Wait(2300/MOVE_TIME); Off(OUT_A+OUT_C); pen_down(); // ペンを下ろす Wait(100); OnFwd(OUT_A+OUT_C); // 【三画目】行動12(12.2cm直進) Wait(12200/MOVE_TIME); Off(OUT_A+OUT_C); pen_up(); // ペンを上げる Wait(100); OnRev(OUT_A+OUT_C); // 行動13(5.5cm後退) Wait(5500/MOVE_TIME); Off(OUT_A+OUT_C); Wait(100); turn_right(); // 行動14(右回転) Wait(200); OnRev(OUT_A+OUT_C); // 誤差修正1(1.4cm後退) Wait(1400/MOVE_TIME); Off(OUT_A+OUT_C); pen_down(); // ペンを下ろす Wait(200); OnFwd(OUT_A+OUT_C); // 【四画目】行動15(7.7cm直進) Wait(7700/MOVE_TIME); Off(OUT_A+OUT_C); pen_up(); // ペンを上げる Wait(100); OnFwd(OUT_A+OUT_C); // 誤差修正2(1.1cm直進) Wait(1100/MOVE_TIME); Off(OUT_A+OUT_C); Wait(100); turn_left(); // 行動16(左回転) Wait(100); OnRev(OUT_A+OUT_C); // 行動17(10.3cm後退) Wait(10300/MOVE_TIME); Off(OUT_A+OUT_C); pen_down(); // ペンを下ろす Wait(100); OnFwd(OUT_A+OUT_C); // 行動18(16.7cm直進) Wait(16700/MOVE_TIME); Off(OUT_A+OUT_C); pen_up(); // ペンを上げる }
いちいちWaitが入ってるのは、ロボットの動きに余裕を持たせるためです。
// 「左」を書くプログラム // // 作成者:かずま // 作成日:2006-2-12 #define TURN_TIME 101 // 直角に曲がるのにかかる時間 #define MOVE_TIME 121 // 1秒間に進む距離 #define PEN_TIME 20 // ペンを上下させる時間 #define ACT6_TIME 87 // 行動6,7,8はズレが生じやすく #define ACT7_TIME 218 // 調整することが多いので #define ACT8_TIME 165 // 最初に定義する void go_straight(int t) { OnFwd(OUT_A+OUT_C); Wait(t*100/MOVE_TIME); Off(OUT_A+OUT_C); Wait(100); } void go_back (int t) { OnRev(OUT_A+OUT_C); Wait(t*100/MOVETIME); Off(OUT_A+OUT_C); Wait(100); } void turn_left(int t) // 左方向に90度回転 { OnRev(OUT_A); OnFwd(OUT_C); Wait(t); Off(OUT_A+OUT_C); Wait(100); } void turn_right(int t) // 右方向に90度回転 { OnFwd(OUT_A); OnRev(OUT_C); Wait(t); Off(OUT_A+OUT_C); Wait(100); } sub pen_down() // ペンを下ろす { OnFwd(OUT_B); Wait(PEN_TIME); Off(OUT_B); } sub pen_up() // ペンを上げる { OnRev(OUT_B); Wait(PEN_TIME); Off(OUT_B); } task main() { SetPower(OUT_A,7); // パワーを設定 SetPower(OUT_C,7); pen_down(); // ペンを下ろす go_straight(171); // 【一画目】行動1(17.1cm直進) pen_up(); // ペンを上げる turn_left(TURN_TIME); // 行動2(左回転) go_straight(52); // 行動3(5.2cm直進) turn_left(TURN_TIME); // 行動4(左回転) go_straight(88); // 行動5(8.8cm直進) turn_left(ACT6_TIME); // 行動6(左にある程度回転) pen_down(); // ペンを下ろす SetPower(OUT_A,7); // パワーを変更 SetPower(OUT_C,0); go_straight(ACT7_TIME);// 【二画目】行動7(左方向に曲がりながら前進) SetPower(OUT_A,7); // パワーを変更 SetPower(OUT_C,7); pen_up(); // ペンを上げる turn_right(ACT8_TIME); // 行動8(右にある程度回転) go_straight(58); // 行動9(5.8cm直進) turn_right(TURN_TIME); // 行動10(右回転) go_straight(23); // 行動11(2.3cm直進) pen_down(); // ペンを下ろす go_straight(122); // 【三画目】行動12(12.2cm直進) pen_up(); // ペンを上げる go_back(55); // 行動13(5.5cm後退) turn_right(TURN_TIME); // 行動14(右回転) go_back(14); // 誤差修正1(1.4cm後退) pen_down(); // ペンを下ろす go_straight(77); // 【四画目】行動15(7.7cm直進) pen_up(); // ペンを上げる go_straight(11); // 誤差修正2(1.1cm直進) turn_left(TURN_TIME); // 行動16(左回転) go_back(103); // 行動17(10.3cm後退) pen_down(); // ペンを下ろす go_straight(167); // 行動18(16.7cm直進) pen_up(); // ペンを上げる }
指摘があったので関数を使って簡潔にしました。