C
1コード
#include <curses.h>
#include <unistd.h>
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;
}