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

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

新規登録して質問してみよう
ただいま回答率
85.35%
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

解決済

2回答

2293閲覧

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つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿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}

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

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

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

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

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

guest

回答2

0

参考サイト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

総合スコア21695

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

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

0

ベストアンサー

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

総合スコア1722

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

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

退会済みユーザー

退会済みユーザー

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
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問