~~```C
コード
typedef struct POINT{ int x; int y; } Point; typedef struct BOX{ Point s; // 左上の座標 int dx; // x方向の辺の長さ int dy; // y方向の辺の長さ } Box; /* プロトタイプ宣言 */ int draw_point( Point a, char c ); int fill_box( Box a, char c); int main(void) { int max_x, max_y; char key; int wait_interval=100000; Point p; /* 画面制御準備 */ initscr(); //画面制御開始 noecho(); //キー入力した際に入力文字を表示しない設定 timeout(0); curs_set(1); //カーソルの表示をする cbreak(); // キー入力の最後にEnterが必要ない getmaxyx( stdscr, max_y, max_x); // 画面の大きさの取得 p.x = max_x /2; p.y = max_y /2; refresh(); // 画面更新 while(1) { key = getch(); // キーボードから1文字入力 if( key == 'd' ) p.x++; // dなら右へ移動 if( key == 's' ) p.x--; // sなら左へ移動 if( key == 'x' ) p.y++; // xなら上へ移動 if( key == 'w' ) p.y--; // wなら下へ移動 if( key == 'q' ) break; // qなら終了 refresh(); usleep( wait_interval); } /* 画面制御終了 */ endwin(); return 0; } int draw_point( Point a, char c ) { int status; int max_y, max_x; getmaxyx( stdscr, max_y, max_x); // 画面の大きさを取得 if( (a.y>=0)&&(a.y<max_y)&&(a.x>=0)&&(a.x<max_x) ){ // 画面の内外の判定 status=0; // 画面内なら move(a.y, a.x); // カーソルの移動 }else { // 画面外なら status=1; } return status; } /* 長方形の描画 */ int fill_box( Box a, char c) { int status=0; int i,j; Point p; for( i=0; i<a.dx; i++){ for( j=0; j<a.dy; j++){ p.col=a.s.col+i; p.row=a.s.row+j; if( (status=draw_point(p, c))==1) break; } if(status==1) break; } return status; }