blikeライブラリについて

  • (by K, 2015.03.19)

(1) blikeライブラリとは?

  • C言語の標準ライブラリだけでは、コンソールに対する文字表示しかできない。ANSIエスケープシーケンスに対応しているコンソールなら文字に色を付けたりカーソルを移動したりができるが、Windows2000系だとできない。結局、ものすごくつまらないコンソール出力で我慢するか、OSに依存した方法で画面描画に手を出すか、どちらかになる。
  • OSに依存した方法は初心者にはつらいものがある。ANSIエスケープシーケンスも初心者にはつらい。それで結果として、つまらないコンソール出力ではすぐに飽きてしまい、初心者はC言語を学ぶ意欲を失ってしまう。
  • Kは10歳くらいのときにプログラミング言語を覚えたが、その時はF-BASICから入った。BASIC言語ではとても簡単な命令で画面に線を引いたり長方形を描いたりできる。文字色設定やカーソル移動も簡単だった。これで十分だった。時代は進歩したはずなのに、どうして現状はこうなってしまったのだろう。BASICがC言語よりも優れているなんてみじんも思わないが、こと初心者の視点で比べたら何十倍もの差があるように思う。
  • これは打破すべき問題である。しかも解決は難しくない。BASICでできたようなことができる簡単なライブラリがありさえすればいいのだ。それが標準になってしまえばよい。標準になるかどうかはどれだけ普及するかによるけど、とにもかくにも、そういうライブラリがなければ話にならない。ということで、作った。
  • blikeはBASIC-Likeに由来する。

(2) デモ

  • test002a (6行):
    int x, y;
    openWin(256, 256);
    for (y = 0; y < 256; y++) {
        for (x = 0; x < 256; x++)
            setPix(x, y, rgb(x, y, 0));
    }
    • http://khfdpl.osask.jp/download/blike_test002a.jpg
  • boxes00a (6行):
    int i;
    setCol(0x0000ff);
    setBCol(0xc6c6c6);
    openWin(160, 144);
    for (i = 0; i <= 60; i += 3)
        drawRect(19 + i * 2, 139 - i * 2, 71 - i, 3 + i);
    • http://khfdpl.osask.jp/download/blike_boxes00a.jpg
  • bball00a (27行):
    struct POINT {
        int x, y;
    };
    static struct POINT t[16] = {
        { 196, 100 }, { 187,  61 }, { 164,  29 }, { 129,   9 }, {  90,   5 },
        {  53,  17 }, {  23,  44 }, {   7,  81 }, {   7, 119 }, {  23, 156 },
        {  53, 183 }, {  90, 195 }, { 129, 191 }, { 164, 171 }, { 187, 139 },
        { 196, 100 }
    };
    static int c[8] = {
        0x000000, 0xff0000, 0x00ff00, 0xffff00,
        0x0000ff, 0xff00ff, 0x00ffff, 0xffffff
    };
    int i, j, d;
    
    openWin(200, 200);
    setMode(BL_POR);
    for (i = 0; i <= 14; i++) {
        for (j = i + 1; j <= 15; j++) {
            d = j - i; /* 2つの点の距離 */
            if (d >= 8) d = 15 - dis; /* 逆回りに数える */
            if (d != 0) {
                setCol(c[8 - d]);
                drawLine(t[i].x, t[i].y, t[j].x, t[j].y);
            }
        }
    }
    • 構造体を使わないでも書けますし、そのほうが行数は減りますが、読みにくくなるような気がするので、このままにしておきます。
    • http://khfdpl.osask.jp/download/blike_bball00a.jpg
  • test005a (9行):
    int x, y;
    openWin(256, 256);
    for (y = 0; y < 256; y++) {
        for (x = 0; x < 256; x++)
            setPix(x, y, rgb(x, y, 0));
    }
    locate(13, 8);
    color(7, 0);
    printf("hello");
    • http://khfdpl.osask.jp/download/blike_test005a.jpg
    • このようにグラフィックの上に普通にprintfできます(重ねあわせが美しくはないですが)。今までのコンソールでのprintfの知識をむだにすることはありません。
    • ピクセル単位で表示位置を指定できて、大きさも指定できて、さらに重ねあわせが問題ない文字列描画関数drawStrもあります。
    • このようなテキストとグラフィックの混在を許すので、学習者がステップアップしやすくなっています。
  • いろいろ書きましたが、どれもBASICでは何十年も前からできたことばかりです。つまり昔当たり前にできたことをまたできるようにしただけのことです。

(3) バージョン01f時点でのサポート関数

  • printf()
  • putc()
  • puts()
  • color()
  • locate()
  • cls()
  • rnd()
  • setCol() : これだと色を6桁の16進数で書ける
  • setBCol() : これだと色を6桁の16進数で書ける
  • rgb() : rgb(255, 255, 255) とすると 0xffffff が返る
  • openWin() : デフォルトの640x400以外の大きさで使いたいときは、最初にこれを使う
  • setPix() : 点を打つ
  • getPix() : 画面上の(ウィンドウ上の)色を得る
  • fillRect() : 塗りつぶした長方形を描く
  • drawRect() : 枠だけの長方形を描く
  • wait() : ver.w32_01bから使えるようになった
  • bl_clock() : 3週間くらいまでなら使い物になる
  • setMode() : PSET/PAND/POR/PXORを選択できる
  • drawLine()
  • iCol()
  • gets()
  • inkey()
  • fillOval()
  • drawStr()
  • openVWin()
  • slctWin()
  • copyRct0()
  • copyRct1()
  • drawPtrn()

(4) ダウンロード

(5) リンクなど

(6) KH-FDPLとの関係

  • KH-FDPLもグラフィック描画関数などを用意する予定ですが、それはblikeからドライバを流用する予定です。
    • OSECPU-VMのときもそうしていました。

こめんと欄


コメントお名前NameLink

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2016-08-09 (火) 17:22:50 (2834d)