質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

curses

cursesは、 UNIX 系列で使用される端末制御ライブラリです。CUI アプリケーションを作成するために使用されます。表示端末は多くの制御コードをサポートしており、カーソル移動や画面のスクロール、領域消去といった一般的な操作の実行が可能です。

Q&A

1回答

959閲覧

C言語 curses.h 文字でできた長方形の描画を下記のプロトタイプ宣言で示した”fill_box()”で作成し 長方形を動かすプログラムを作成したいですが、上手く出来ません

02200820

総合スコア28

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

curses

cursesは、 UNIX 系列で使用される端末制御ライブラリです。CUI アプリケーションを作成するために使用されます。表示端末は多くの制御コードをサポートしており、カーソル移動や画面のスクロール、領域消去といった一般的な操作の実行が可能です。

0グッド

0クリップ

投稿2019/01/20 15:03

編集2019/01/21 00:41

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;
}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2019/01/20 21:59

このままではコードが見づらいので、質門を編集し、<code>ボタンで、出てくる’’’の枠の中にコードを貼り付けてください
stdio

2019/01/21 00:43

何について質問しているのかが理解できません。 curses.hと言われましても直訳「呪い」では何をしたいのか一切分かりません。
stdio

2019/01/21 00:50

何の描画ライブラリを使い、どのようにしたいのかをしっかりお伝え下さい。 「長方形を動かすプログラムを作成したいですが、上手く出来ません」 と言われましても、例えば、 描画は出来ているが、キーが取得できない。 キーは取得出来ているが、描画ができない。 など具体的にできない事をお伝えください。
pepperleaf

2019/01/21 12:24

> curses コンソール画面でESCシーケンスで、カーソル移動を行うって事? 提示のコードではカーソル移動だけで何の出力もして無いように見えますが、違いますか?
guest

回答1

0

ssssssssssssssssss

投稿2019/01/21 00:48

02200820

総合スコア28

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問