C言語ゲームプログラミング 第4回講座




2014年10月より個人の方を対象に、Study C無料提供を開始しました。
C言語を勉強中の方は、学習・教育に最適なC言語インタープリタのStudy Cを使ってみてください(個人の方は無料です)。
大学・高専・高校などの教育機関での採用実績も多数あるロングセラー商品Study Cが、個人向けに無料提供を始めました。
インタープリタの手軽さに加え、ゲームや3Dタートルグラフィックで楽しく勉強したりと、C言語の学習を協力にサポートします。
ブロック崩しゲーム 3Dツリー クリスマスツリー
また、このようなボタンの用意されているページでは、掲載しているプログラムをStudy Cに直接ロードし実行したりすることができます。
Study Cにロードする Study Cにロードし編集する Study Cにロードし実行する
Study C無料利用についての詳細は、このページを参照してください。



1.表示した絵の消し方

ゲームでは画面上を絵が移動します。しかし、実際には「ある位置で絵を描き、その後描いた絵を消し別の位置に絵を描く」と言った動作の繰り返しになります。 Study Cで絵を消すには、gl_fillrect()関数を使用します。この関数はある矩形領域を指定した色で塗りつぶす関数です。 (200, 100)の位置から横16、縦16ドット分の矩形領域を黒で塗りつぶす場合は下記のようになります。

        gl_fillrect(200, 100, 200+16, 100+16, RGB(0, 0, 0));

色の指定には、RGB()というマクロを使用します。黒の場合はRGB(0,0,0)、白の時はRGB(255,255,255)と言うように0から255の間で赤(R)、緑(G)、青(B)の各成分を配合します。 いろいろなRGB値を指定して試してみてください。

#include <graph.h>

main()
{
        gl_openwin(-1, -1, 640, 480, 0);

        gl_fillrect(200, 100, 200+16, 100+16, RGB(255, 255, 0));
        gl_refresh();
}

この例では矩形領域を黄色で塗りつぶします。

矩形領域の塗りつぶし


2.絵の移動

前回作成したボールの絵のビットマップファイルを使用して、表示位置をずらしながら描画と消去を行ってみます。
ボールのビットマップファイルをダウンロードしていない方は、この絵の部分でテニスボールのビットマップファイルを右ボタンメニューの「名前を付けて画像を保存」でダウンロードしてください。

#include <graph.h>

main()
{
        HBITMAP hbmp_ball;

        hbmp_ball = gl_loadbitmap("ball.bmp");
        if(hbmp_ball == NULL){
                printf("ビットマップファイルが見つかりません.\n");
                exit(0);
        }
        gl_openwin(-1, -1, 640, 480, 0);

        //1個目の描画
        gl_drawbitmap(hbmp_ball, 320, 240, 16, 16, 0, 0);
        gl_refresh();
        getchar();

        //1個目を消去して2個目を描画
        gl_fillrect(320, 240, 320+16, 240+16, RGB(0, 0, 0));
        gl_drawbitmap(hbmp_ball, 300, 220, 16, 16, 0, 0);
        gl_refresh();
        getchar();

        //2個目を消去して3個目を描画
        gl_fillrect(300, 220, 300+16, 220+16, RGB(0, 0, 0));
        gl_drawbitmap(hbmp_ball, 280, 200, 16, 16, 0, 0);
        gl_refresh();
        getchar();

        //3個目を消去して4個目を描画
        gl_fillrect(280, 200, 280+16, 200+16, RGB(0, 0, 0));
        gl_drawbitmap(hbmp_ball, 260, 180, 16, 16, 0, 0);
        gl_refresh();
}

このプログラムを実行してEnterキーを3回タイミング良く押してください。 なんとなくボールが動いているように見えると思います。

ボールの消去と移動