色を変化させた文字をncursesライブラリを使用し,表示できることはわかったのですが,色を変化させた文字を常に変化させておく方法はないのでしょうか?(文字を表示する関数を呼び出しで実行すると2回目呼び出したときに、最初に呼び出した方の文字の色が変化してしまいます・・・)
実行環境はvineLinuxを使用し,C言語で記述しています.(以下に関数のコード記載します)
void MakeCard(int x,int y,char crd[]){
start_color();
init_pair(COLOR_RED,COLOR_RED,COLOR_WHITE);
init_pair(COLOR_BLACK,COLOR_BLACK,COLOR_WHITE);
if(crd[0]=='D' || crd[0]=='H')/*受けた文字列の先頭がDかHなら文字を赤くする*/
attrset(COLOR_PAIR(COLOR_RED));
else
attrset(COLOR_PAIR(COLOR_BLACK));
mvprintw(y+24,x+7,"%s",crd);
refresh();
}
改善点などなんでも良いです。未熟な自分にご享受ください!お願いします!
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);
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) エクセルVBA ダブルクリックしたら色反転を指定したセルのみにしたい 2 2022/04/06 12:52
- HTML・CSS cssの display: flex;で横並びにならずに困ってます 1 2022/12/04 13:18
- その他(プログラミング・Web制作) Latexに関する質問です。 3 2023/05/23 10:18
- その他(IT・Webサービス) cssの@mediaについて 1 2023/05/14 07:34
- HTML・CSS HTMLで特定の文字だけ色を変えたいのですが、指定した色と違う色が反映してしまいます。 下記、「前」 5 2023/06/27 12:08
- HTML・CSS html cssのmargin 5 2022/12/03 11:04
- オープンソース cssで中央寄せ 1 2023/05/19 06:25
- HTML・CSS img と p を縦中央に配置したいのですがうまくいきません。 2 2023/01/12 14:38
- JavaScript Javascriptが機能せず原因が分からないので教えて頂きたいです 3 2023/06/04 14:50
- HTML・CSS スマホ表示用のwebページ、style.cssでは表の中の文字 font-size は指定できない? 1 2023/03/27 18:57
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語のfor文です。 繰り返しの...
-
strchr() の第2引数はなぜ int ...
-
CStringをwchar_tに変換したい
-
_TCHAR*での引数の読み込み
-
間接操作のレベルとは
-
fgetsなどのときのstdinのバッ...
-
c++ 文字列を入力して、一文字...
-
C言語の入力した文字を反転させ...
-
ftoa の作り方
-
標準ライブラリ関数の自作につ...
-
c言語です。
-
ネットワークにつながっている...
-
str系関数を使わずに二つの文字...
-
構造体のアライメント調整
-
間接参照のレベルが異なっています
-
文字列から空白を取り除きたい...
-
起動時の引数の取得方法が分か...
-
コマンドラインに入力されてい...
-
配列をnビットシフトする
-
RGB→YUV変換のプログラム
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
fgetsなどのときのstdinのバッ...
-
charでの計算?
-
C言語のfor文です。 繰り返しの...
-
charからLPTSTRへの変換方法
-
文字列から空白を取り除きたい...
-
C言語の入力した文字を反転させ...
-
'const char *' 型は 'char *' ...
-
配列をnビットシフトする
-
str系関数を使わずに二つの文字...
-
int main()の・・・
-
atoi( ) の反対をやりたい
-
CStringをwchar_tに変換したい
-
c++ 文字列を入力して、一文字...
-
switch文で文字を比較すること...
-
干支のプログラム
-
3桁区切(コンマ)記号をつけ...
-
絶対パスからのファイル名の切...
-
間接操作のレベルとは
-
間接参照のレベルが異なっています
-
型変換
おすすめ情報