• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ncursesで...)

ncursesで文字の色を変化させる方法

このQ&Aのポイント
  • 質問者はncursesライブラリを使用して文字の色を変化させることができるとわかっていますが、常に文字の色を変化させておく方法について知りたいと質問しています。
  • 質問者の実行環境はvineLinuxで、C言語で記述された関数があります。関数は文字の色を変化させるための処理を行っています。
  • 質問者は自身の未熟さを認識しており、改善点やアドバイスを求めています。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.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); }

ReRife
質問者

お礼

素早い回答ありがとうございました!おかげで何とかうまくいきそうです!

関連するQ&A