memorandums

日々の生活で問題解決したこと、知ってよかったことなどを自分が思い出すために記録しています。

Sunabaで画像を表示するプログラムをプログラムで作る

今年の1年生との少人数ゼミで、以下の書籍を利用しています。

この本を各自のペースで読んでもらい実習もしてもらいます。

先生は何をしているのか?

わからなかったらヘルプするだけです。(わからない、ということがそもそも無いようなのですが)

正直、楽チンです。

ただ、これは楽をしたいからではなく、これがよいのではないかという判断からの試行です。

これまで様々なスタイルを試してきました。講義形式、輪読形式、自由作品作成などです。

僕が下手なせいもあるのでしょうけど、どれもこれも途中で頓挫してしまいます。講義や輪読はとりあえず形式的には終えることはできるのですが、結果的に何も残っていない場合が多いです。自由作品はさらに難しい。。。テーマを決めるだけで数週間を使います。

この本は、見事なくらい丁寧に思考過程が文章になっていますので、ただただ読んでいけばプログラマの考え方を学ぶことができます。

残り4回くらい講義があるのですが、進捗はおおよそ書籍の半分というところです。

さて、終わりますやら。。。

ただ、待機しているのももったいないので、表記のようなツールを作って見せてあげました。

現在、学生さんらが学習中のRubyで作りたかったのですがrmagickがなぜかインストールできず、後期から学習するProcessingで作りました。プログラムでプログラムを作るという発想はプログラミング学習中の学生さんには少しは刺激になるかな。。。と期待しましたが。。。どうでしょうか?

100x100pxの画像ファイルを用意してdataフォルダにいれます。実行するとa.txtというファイルが生成されますので、それをSunabaにドラッグ&ドロップすれば実行できます。

int address = 60000;
ArrayList<String> list = new ArrayList<String>();
PImage img = loadImage("a.png");

for (int y = 0; y < img.height; y++) {
  for (int x = 0; x < img.width; x++) {
    color c = img.get(x, y);
    int r = int(map(red(c), 0, 255, 0, 99));
    int g = int(map(green(c), 0, 255, 0, 99));
    int b = int(map(blue(c), 0, 255, 0, 99));
    list.add("メモリ[" + (address++) + "] → " + nf(r, 2)  + nf(g, 2) + nf(b, 2));
  }
}

String[] out = list.toArray(new String[0]);
saveStrings("a.txt", out);
image(img, 0, 0);

f:id:ke_takahashi:20170627130814p:plain

あまり関心のある人は少ないネタかもしませんが。。。とりあえず作業ログとして。

あ、ちなみにこの方、以下の書籍も書かれています。ゼミ室においていますが。。。誰か読んだかな?

ゲームプログラマになる前に覚えておきたい技術

ゲームプログラマになる前に覚えておきたい技術