C言語でグラフィックス 目次へ 
 前へ 【4】グラフィックスを動かす 次へ 

(3)キーでボールを動かす

◆サンプルプログラム 〔mvball31.c〕
 カーソル移動キー「↑↓←→」でボールを移動させる。

#include <GrWin.h>

int main(void)
{
    int     width = 640, height = 400;
    float   xx, dx, yy, dy, rr = 20.0;
    int     moji;

    GWopen(0);
    GWsize(-5, &width, &height);
    GWsize(-3, NULL, NULL);
    GWvport(0.0, 0.0, (float)width / (float)height, 1.0);
    GWindow(0.0, 0.0, (float)width - 1.0, (float)height - 1.0);
/* -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= */
    GWclear(-1);
    dx = 15.0;        /* 移動量 */
    dy = 15.0;
    xx = (float)width / 2.0;    /* 円の初期位置 */
    yy = (float)height / 2.0;
    GWsetpen(0, 1, 1, -1);      /* ペン黒色 */
    GWellipse(xx, yy, xx + rr, yy + rr);
    while(1){
        moji = GWevent(NULL, NULL);    /* キー入力 */
        if(moji <= 0)                  /* 何も押されてない */
            continue;
        if(moji == 0x51)               /* 'q' で終了 */
            break;
        GWsetpen(19, 1, 1, -1);    /* ペン白色 */
        GWellipse(xx, yy, xx + rr, yy + rr);
        if(moji == 0x26)           /* ↑キー */
            yy = yy + dy;              /* 移動量計算 */
        else if(moji == 0x28)      /* ↓キー */
            yy = yy - dy;
        else if(moji == 0x25)      /* ←キー */
            xx = xx - dx;
        else if(moji == 0x27)      /* →キー */
            xx = xx + dx;
        if(yy + rr >= height)      /* 上の壁 */
            yy = (float)height - rr;
        else if(yy < 0.0)          /* 下の壁 */
            yy = 0.0;
        if(xx + rr >= width)       /* 右の壁 */
            xx = (float)width - rr;
        else if(xx < 0.0)          /* 左の壁 */
            xx = 0.0;
        GWsetpen(0, 1, 1, -1);    /* ペン黒色 */
        GWellipse(xx, yy, xx + rr, yy + rr);
    }
/* -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= */
    GWquit();
    return 0;
}

 キー入力にGWevent関数を使っている。座標データは必要ないので、引数はNULLとしている。ほかに、GWkybrd関数を使った次の文と入れ替えることもできる。引数は動作(4番目)以外は必要ないのでNULLとすることができる。GWkybrd関数を使った場合は、次のifブロック(if(moji <= 0)continue;)は不要である。

moji = GWkybrd(NULL, NULL, NULL, 2);

 カーソル移動キーを押したときGWevent関数、GWkybrd関数で返却される文字コードは次のとおりである。

「↑」…0x26、 「↓」…0x28、 「←」…0x25、 「→」…0x27

 実行して、カーソル移動キーを押すと、そのキーに対応した方向にボールが移動する。


 前へ 次へ 
 Copyright © 2005 Hiroshi Masuda 

 

 

inserted by FC2 system