aclライブラリを使ってプログラミング教育 #1

  • (by K, 2021.06.01)

これより前の話

2021.05.06(木) (B)

  • [1] 前からだいぶ間があきましたが、子供がプログラミングに興味を持たなくなってしまったのでした(というか工作とかお絵かきとかのほうが楽しい)。しかしやはりそれではさみしいというか、私が子供に伝えられることなんてプログラミングくらいしかなので、どうしたらいいか考え始めます。
  • プログラミングそのもの(アルゴリズムを考えるとか)が楽しいっていう境地を目指すのは向き不向きがあるだろうと考えて、もっと単純にプログラムをすればパソコンで絵が描ける、そしてパソコンで絵を描くのは面白いって思ってもらえるあたりを当面の目標に据えます。
  • 別にこんな簡単な絵くらいなら、何もC言語なんか使わなくてもWindowsに標準でついてくる「ペイント」で十分なわけですが、プログラミングを使わないとできないことを目指すと「それには興味がない」ってなったらそれで終了なので、(B)の好きなお絵描きでいくことにします。
  • [2] この日のスタイルはこうです。まず私がPCの前に座ります。(B)はマウスにもキーボードにも触りません。画面は見ています。たまに画面を指さすくらいのことはしますが、それ以外はPCに触れません。
  • 私は(B)にどんな絵を描きたいのかを聞いて、それでプログラムを1~2行ほど書き足して、すぐに実行してそれでいいかどうかを聞きます。これを繰り返して絵を描きました。(B)は虹が好きなので、虹を描きました。
  • このスタイルにしたのは、これなら(B)は「自分のやりたいこと」に専念できるからです。「あれをやりたいのにやり方がわからないからできない」という思いをしないで済みます。つまり「いい思い」だけができるわけです。
  • きっとこれを何度か(何十回か?)やっていれば、「私もやってみたい」って言いだすかもしれないと思っています。それまで気長にやろうかな、と。・・・10回目くらいから、(B)の言っていることをわざと少し誤解して、「そうじゃないよ、こうだよ、ちょっと貸してよ!」ってキーボードを奪ってくれるような展開になれば・・・(笑)。
  • [3] なおこの回から、使用言語を「ES-BASIC」から「gcc+aclライブラリ」に変えました。
    • きっと整数演算だけじゃ不便に思うだろうなあ、HL(はりぼて言語)に大急ぎで浮動小数点演算機能を付けるのはちょっと間に合わないかもしれないよなあ。できればHLの開発はせかされずにやりたいし・・・。それにもう英語の小文字も入力できそうな気がするなあ。・・・と思ったあたりが理由です。
      #include <acl.c>
      void aMain()
      {
          AWindow *w = aOpenWin(600, 400, "rainbow", 1);
          aFillRect(w, 600, 400, 0,   0, 0x00ffff);
          float a, b = 0.07;
          a = 1.0 - 0 * b; aFillOval(w, 600 * a, 500 * a, 300 - 300 * a, 400 - 250 * a, 0xff0000);
          a = 1.0 - 1 * b; aFillOval(w, 600 * a, 500 * a, 300 - 300 * a, 400 - 250 * a, 0xffaa00);
          a = 1.0 - 2 * b; aFillOval(w, 600 * a, 500 * a, 300 - 300 * a, 400 - 250 * a, 0xffff00);
          a = 1.0 - 3 * b; aFillOval(w, 600 * a, 500 * a, 300 - 300 * a, 400 - 250 * a, 0xaaff00);
          a = 1.0 - 4 * b; aFillOval(w, 600 * a, 500 * a, 300 - 300 * a, 400 - 250 * a, 0x00ff00);
          a = 1.0 - 5 * b; aFillOval(w, 600 * a, 500 * a, 300 - 300 * a, 400 - 250 * a, 0x00aaff);
          a = 1.0 - 6 * b; aFillOval(w, 600 * a, 500 * a, 300 - 300 * a, 400 - 250 * a, 0x0000ff);
          a = 1.0 - 7 * b; aFillOval(w, 600 * a, 500 * a, 300 - 300 * a, 400 - 250 * a, 0xaa00ff);
          a = 1.0 - 8 * b; aFillOval(w, 600 * a, 500 * a, 300 - 300 * a, 400 - 250 * a, 0x00ffff);
          aFillOval(w, 100, 50, 100, 50, 0xffffff);
          aFillOval(w, 100, 50, 400, 100, 0xffffff);
          aWait(-1);
      }
    • http://k.osask.jp/files/pic20210601a.png
  • [4] これをやってみた感じとしては、(B)はかなり楽しかったと言っていました。
  • [5] これを作った後に思ったことは、 円を描くときに、中心座標を指定する形式があったらいいなと思いました。ということであとで作ろうと思います。

2021.05.31(月) [前半の部] (B)

  • [1] この少し前から、(B)はプログラミングにすさまじい興味を示しました。というのは、私の方針により「算数の成績が一定レベルに達しなければおこづかいやならいごとに大きな制限をかける」ということになっていたところを、「もしプログラミングで著しい能力を示せば、算数の成績は免除する」という追加ルールを発表したためです。(B)は算数の勉強に疲れてきていて、ここで一発逆転を狙いに来たのです。
  • ついでにいうと、前回の親子プログラミングも楽しくて、あの延長線上なら自分でもやれると感じたのかもしれません。
  • [2] 今回はサンリオキャラクタのシナモロールを描きました。基本的にaFillOval()とaFillRect()の組み合わせだけで書くので、そんなにうまくは描けないのですが、それでもまあ「それっぽく見えるかもしれないもの」が描けました。
    #include "edu.c"
    void aMain()
    {
        AWindow *w = aOpenWin(1200, 650, "shinamo", 1);
        int c = 0xffffff;
        aFill(w, 0, 0, 0x00cccc); // 背景.
        aFillOvalC(w, 600, 300, 600, 200, c); // 顔.
        aFillOvalC(w, 32, 40, 500, 170, 0x00aaff); // 左目.
        aFillOvalC(w, 32, 40, 700, 170, 0x00aaff); // 右目.
        aFillOvalC(w, 60, 60, 430, 240, 0xffcccc); // 左ほほ.
        aFillOvalC(w, 60, 60, 770, 240, 0xffcccc); // 右ほほ.
        aFillOvalC(w, 60, 60, 600, 260, 0xff8888); // 口.
        aFillRect(w, 100, 40, 550, 200, c); // 口修正.
        aFillOvalC(w, 320, 80, 150, 170, c); // 左耳.
        aFillOvalC(w, 320, 80, 1050, 170, c); // 右耳.
        aFillOvalC(w, 440, 320, 600, 450, c); // 体.
        aFillOvalC(w, 120, 80, 360, 360, c); // 左手.
        aFillOvalC(w, 120, 80, 840, 360, c); // 右手.
        aFillOvalC(w, 140, 100, 360, 560, c); // 左足.
        aFillOvalC(w, 140, 100, 840, 560, c); // 右足.
        aWait(-1);
    }

2021.05.31(月) [後半の部] (B)

  • [1] シナモロールを描くときに、いろんな色の指定があり、もっと他の色を知りたいと言ってきたので、親子で一緒に
    • https://www.colordic.org/ を見ました。(B)は気に入った色のいくつかをせっせとノートにメモしていました。
  • [2] その後、aFillOvalC()だけを教えて、これで何か書いてみようということになり、ぶどうを描きました。座標計算は少し手伝いましたが、基本的に(B)が自分でプログラムを書きました。なかなかの上達です。
    • aFillOvalCと打鍵するのは現時点では難しそうだったので、#defineしてabcで代用しています(これは(B)が決めました)。

こめんと欄


コメントお名前NameLink

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2021-06-07 (月) 16:44:39 (111d)