- ベストアンサー
ncursesで文字の色を変化させる方法
- 質問者はncursesライブラリを使用して文字の色を変化させることができるとわかっていますが、常に文字の色を変化させておく方法について知りたいと質問しています。
- 質問者の実行環境はvineLinuxで、C言語で記述された関数があります。関数は文字の色を変化させるための処理を行っています。
- 質問者は自身の未熟さを認識しており、改善点やアドバイスを求めています。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
init_pair( )に指定するのは、1から始まる自分定義のペア番号、前景色、背景色ですよ。 で、表示属性はattrset( )で指定するのではなく、attron( )とattroff( )のペアで指定しましょう。 それで以下のようにしてみます。 初期化コードは1回で良いので初期化関数を定義しました。あとカラーペア番号もマクロにしてマジックナンバーにならないようにしています。 全角のスペースでインデントしてあるので試す場合には注意してくださいね。 #include <ncurses.h> #include <stdlib.h> #define RED_SUIT 1 #define BLACK_SUIT 2 void InitScreen(void) { initscr(); if (has_colors() == FALSE) { endwin(); exit(EXIT_FAILURE); } start_color(); init_pair(RED_SUIT, COLOR_RED, COLOR_WHITE); init_pair(BLACK_SUIT, COLOR_BLACK, COLOR_WHITE); } void MakeCard(int x, int y, char *crd) { short suit; switch (crd[0]) { case 'H': case 'D': suit = RED_SUIT; break; case 'S': case 'C': suit = BLACK_SUIT; break; default: return; break; } attron(COLOR_PAIR(suit)); mvprintw(y + 24, x + 7, "%s", crd); attroff(COLOR_PAIR(suit)); refresh(); } int main(int argc, char **argv) { InitScreen(); MakeCard(0, 0, "S 10"); MakeCard(0, 1, "H J"); MakeCard(0, 2, "D 9"); MakeCard(0, 3, "C A"); getch(); endwin(); exit(EXIT_SUCCESS); }
お礼
素早い回答ありがとうございました!おかげで何とかうまくいきそうです!