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

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

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

Terminalは、Apple社のmacOSに標準で付属しているUNIX端末エミュレータ。UNIXコマンドによってMacの操作および設定を行うことができます。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

ncurses 描画色が変更出来ない。端末は対応している。

退会済みユーザー

退会済みユーザー

総合スコア0

terminal

Terminalは、Apple社のmacOSに標準で付属しているUNIX端末エミュレータ。UNIXコマンドによってMacの操作および設定を行うことができます。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

2回答

0グッド

0クリップ

1495閲覧

投稿2021/09/13 13:32

編集2021/09/14 00:22

提示コードですが描画色を指定してるのですがなぜ画面は灰色になってそのまま文字の描画色が変わらないのでしょうか?文字の色は黄色で背景色は黒のはずです。提示コードのコメント部のコードです。※端末は対応しています。

参考サイトA: https://www.linuxjournal.com/content/programming-color-ncurses
参考サイトB: https://dev.grapecity.co.jp/support/powernews/column/clang/048/page02.htm

イメージ説明

cpp

1#include <string.h> 2#include <iostream> 3#include <fstream> 4#include <memory> 5#include "../lib/ncurses/include/curses.h" 6 7#include "../header/Entry.hpp" 8#include "../header/Bit.hpp" 9 10 11 12int main() 13{ 14 15 std::cout<<"\033[?1003h\n"; //マウス座標を有効化 16 initscr(); //初期化 17 noecho(); //入力した文字を非表示 18 cbreak(); //Enterキー不要のキー入力 19 keypad(stdscr,TRUE); // 特殊キーを有効化 20/////////////////////////////////////////////////////////////////////////////////////////////// 21 start_color(); //カラーを有効化 22 mousemask(ALL_MOUSE_EVENTS| REPORT_MOUSE_POSITION,NULL); // マウスイベントを取得 23 24 if(has_colors() == false) 25 { 26 std::cout<<"\033[?1003l\n"; //マウス座標を無効化 27 endwin(); 28 printf("カラーに対応していません。"); 29 getchar(); 30 exit(1); 31 32 33 } 34/////////////////////////////////////////////////////////////////////////////////////////////// 35 36 std::unique_ptr<Entry> entry = std::make_unique<Entry>(); //Entry 37 38 while (true) 39 { 40 entry->Update(); //更新 41 entry->Renderer(); //描画 42 43 if(entry->getChangeScene() == Scene::SceneType::Exit) 44 { 45 break; 46 } 47 } 48 49 50 std::cout<<"\033[?1003l\n"; //マウス座標を無効化 51 endwin(); //終了 52 53 return 0; 54}

cpp

1#include "../header/Edit.hpp" 2#include "../header/Color.hpp" 3#include <stdlib.h> 4#include <iostream> 5#include <memory> 6 7//コンストラクタ 8Edit::Edit(): Scene() 9{ 10 11 mousePosition.x = 0; 12 mousePosition.y = 0; 13 14 int t = 0; 15 for(int i = 0; i < 8; i++) 16 { 17 for(int j = 0; j<8; j++) 18 { 19 //init_pair(t, i, j); 20 t++; 21 } 22 } 23 24///////////////////////////////////////////////////////////////////////////////////////////// 25 init_pair(0, COLOR_YELLOW, COLOR_BLACK); 26///////////////////////////////////////////////////////////////////////////////////////////// 27 28 file.open("log.txt"); 29 changeScene = Scene::SceneType::Edit; 30} 31 32void Edit::KeyInput() 33{ 34 35 int key = getch(); 36 37 //ESCで終了 38 if(key == 27) 39 { 40 changeScene = Scene::SceneType::Exit; 41 file.close(); 42 } 43} 44 45void Edit::MouseInput() 46{ 47 48 //マウスイベント 49 if(getmouse(&event) == OK) 50 { 51 //マウス座標 52 if(event.bstate & REPORT_MOUSE_POSITION) 53 { 54 file << "MOUSE_MOVE" <<(int)Color::BLACK_BLACK<<std::endl; 55 mousePosition.x = event.x; 56 mousePosition.y = event.y; 57 } 58 59 //Left click 60 if(event.bstate & BUTTON1_PRESSED) 61 { 62 file << "LEFT_CLICKED"<<std::endl; 63 } 64 65 //Right click 66 if(event.bstate & BUTTON3_PRESSED) 67 { 68 file << "RIGHT_CLICKED"<<std::endl; 69 } 70 } 71 72 73} 74 75 76//計算 77void Edit::Update() 78{ 79 MouseInput(); 80 KeyInput(); 81} 82 83//描画 84void Edit::Renderer()const 85{ 86 erase(); 87 move(mousePosition.y,mousePosition.x); 88 89// attron(COLOR_PAIR(Color::BLACK_BLACK)); 90 //attroff(COLOR_PAIR(PLAYER_PAIR)); 91//////////////////////////////////////////////////////////////////////////////////////////// 92 attron(0); 93 addstr("AAAA"); 94 mvaddch(0, 0, 'A'); 95 96 attroff(0); 97//////////////////////////////////////////////////////////////////////////////////////////// 98 99 100 101 102 refresh(); 103} 104 105 106//コンストラクタ 107Edit::~Edit() 108{ 109 110}

以下のような質問にはグッドを送りましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

2021/09/25 15:54

こちらの質問が複数のユーザーから「過去の低評価」という指摘を受けました。

回答2

3

参考サイトAに書いてある通りにやればよいのでは。

c

1 init_pair(0, COLOR_YELLOW, COLOR_BLACK);

カラーペア0番に設定してるので、このペアを使うには

c

1 attron(COLOR_PAIR(0));

でしょう。


https://linux.die.net/man/3/init_pair

The value of the first argument must be between 1 and COLOR_PAIRS-1

カラーペア番号は1以上にしないといけないですね。

投稿2021/09/14 00:36

編集2021/09/14 00:52
int32_t

総合スコア17195

majiponi, m.ts10806👍を押しています

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

1

ベストアンサー

I don't know Linux so much, but does your code follow the usage? The example you cited shows that you have to write

C++

1attron(COLOR_PAIR(...));

instead of

C++

1attron(...);

COLOR_PAIR is a macro, not a typecasting.

投稿2021/09/13 22:35

majiponi

総合スコア1709

退会済みユーザー👍を押しています

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

退会済みユーザー

退会済みユーザー

2021/09/14 00:26

thank you. !! I changed the code as below, but I don't understand why the color scheme is not applied attron(COLOR_PAIR(0)); mvaddch(0, 0, 'A'); attroff(COLOR_PAIR(0));
退会済みユーザー

退会済みユーザー

2021/09/14 01:24

Thank you The question is, why is the background color of the screen gray?
退会済みユーザー

退会済みユーザー

2021/09/14 01:29 編集

miss

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

ただいまの回答率
86.02%

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

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

質問する

関連した質問

同じタグがついた質問を見る

terminal

Terminalは、Apple社のmacOSに標準で付属しているUNIX端末エミュレータ。UNIXコマンドによってMacの操作および設定を行うことができます。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。