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 |