Форум программистов, компьютерный форум CyberForum.ru

Как сделать разные символы разных цветов [C++] - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.82
volchonokilli
4 / 4 / 0
Регистрация: 04.01.2012
Сообщений: 41
22.01.2012, 01:55     Как сделать разные символы разных цветов [C++] #1
Здраствуйте!
Мне нужно, чтобы на экран выводились символы разных цветов.
Отрывок из кода :
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
tt:
            switch(color)
            {
                case 1:
            {
                a++;
                system("color 0C");
                color=2;
                break;
            }
                case 2:
            {
                a++;
                system("color 0E");
                color=1;
                break;
            }
            }
            cout<<"a";
            if(a<11)
            {
            goto tt;
            }
            while(getch()!=32);
Но таким образом system("color ") меняет цвет сразу всех символов.
Как сделать так, чтобы выводились символы разных цветов?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.01.2012, 01:55     Как сделать разные символы разных цветов [C++]
Посмотрите здесь:

вертикальные линий разных цветов C++
C++ Не получается чтобы он все символы с текста читал и типа счетчика который считает одинаковые символы как один и плюсует их....Как сделать правильно???
C++ Как в элементе управления CListCtrl в разных строках вывести разные иконки?
C++ Как сделать так, чтобы функция rand() возвращала разные значения
C++ Строки разных цветов
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
22.01.2012, 02:08     Как сделать разные символы разных цветов [C++] #2
Если винда то:
http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx
http://msdn.microsoft.com/en-us/libr...ter_attributes

вот файлики писал когда-то. попробуйте заюзать:

ConsoleGUI.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#ifndef _CONSOLE_GUI_H_
#define _CONSOLE_GUI_H_
 
typedef unsigned Coord;
 
struct Point
{
  Coord x;
  Coord y;
 
  explicit Point(Coord x_ = 0, Coord y_ = 0)
    : x(x_)
    , y(y_)
  {
  }
};
 
enum Color
{
  RED_COLOR   = 0x0C,
  GREEN_COLOR = 0x0A,
  BLUE_COLOR  = 0x09,
  WHITE_COLOR = 0x0F,
  GRAY_COLOR  = 0x07,
  BLACK_COLOR = 0x00
};
 
void gotoxy(Coord x, Coord y);
void gotoxy(const Point& p);
void clrscr(Coord x, Coord y, unsigned width, unsigned height, Color bkgnColor = BLACK_COLOR);
Color gettextcolor();
Color settextcolor(Color color);
Color getbkcolor();
Color setbkcolor(Color color);
 
#endif
ConsoleGUI.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#include <windows.h>
#include <string>
#include <iostream>
#include "ConsoleGUI.h"
 
using namespace std;
 
namespace
{
  typedef WORD Attr;
 
  HANDLE GetConsoleHandle()
  {
    return GetStdHandle(STD_OUTPUT_HANDLE);
  }
 
  // Глобальные объекты - это очень плохо.
  // Но в данном случае это самый простой способ.
  // Эти переменные хранят текущие цвета текста
  // и фона соответственно.
  Color g_currentTextColor = WHITE_COLOR;
  Color g_currentBkColor = BLACK_COLOR;
 
} // namespace
 
 
void clrscr(Coord x, Coord y, unsigned width, unsigned height, Color bkgnColor)
{
  const Color prev = setbkcolor(bkgnColor);
  const string str(width, ' ');
  for (unsigned i = 0; i < height; ++i, ++y)
  {
    gotoxy(x, y);
    cout << str;
  }
  setbkcolor(prev);
}
 
void gotoxy(const Point& p)
{
  gotoxy(p.x, p.y);
}
 
void gotoxy(Coord x, Coord y)
{
  COORD coord = { static_cast<SHORT>(x), static_cast<SHORT>(y) };
  SetConsoleCursorPosition(GetConsoleHandle(), coord);
}
 
Color gettextcolor()
{
  return g_currentTextColor;
}
 
Color settextcolor(Color c)
{
  const Color prev = gettextcolor();
  Attr attr = static_cast<Attr>(getbkcolor());
  attr <<= 4;
  attr |= static_cast<Attr>(c);
  if (SetConsoleTextAttribute(GetConsoleHandle(), attr))
    g_currentTextColor = c;
  return prev;
}
 
Color getbkcolor()
{
  return g_currentBkColor;
}
 
Color setbkcolor(Color c)
{
  const Color prev = getbkcolor();
  Attr attr = static_cast<Attr>(c);
  attr <<= 4;
  attr |= static_cast<Attr>(gettextcolor());
  if (SetConsoleTextAttribute(GetConsoleHandle(), attr))
    g_currentBkColor = c;
  return prev;
}
volchonokilli
4 / 4 / 0
Регистрация: 04.01.2012
Сообщений: 41
22.01.2012, 02:20  [ТС]     Как сделать разные символы разных цветов [C++] #3
Цитата Сообщение от DU Посмотреть сообщение
вот файлики писал когда-то. попробуйте заюзать:
Огромнейшее вам спасибо!
Всё работает!
***
Еще вопрос, а как ввести новые цвета?
Добавляем в enum, например, BROWN_COLOR, а что надо писать после знака равно?
***
Сам нашел, вот тут : http://www.brackeen.com/vga/basics.html
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
22.01.2012, 02:37     Как сделать разные символы разных цветов [C++] #4
там похоже только 16 цветов поддерживается. от нуля до 15. Если все именовать не хочется, а просто с числами из кода вызывать то можете вот так сделать

C++
1
2
3
4
5
6
7
8
9
10
11
typedef unsigned Color;
 
enum
{
  RED_COLOR   = 0x0C,
  GREEN_COLOR = 0x0A,
  BLUE_COLOR  = 0x09,
  WHITE_COLOR = 0x0F,
  GRAY_COLOR  = 0x07,
  BLACK_COLOR = 0x00
};
после этого вызов
C++
1
settextcolor(9);
будет компилироваться. Вроочем енум я специально заводил, чтобы неименованные (читай не проверенные) константы просто так в коде нельзя было использовать.
volchonokilli
4 / 4 / 0
Регистрация: 04.01.2012
Сообщений: 41
22.01.2012, 02:40  [ТС]     Как сделать разные символы разных цветов [C++] #5
Цитата Сообщение от DU Посмотреть сообщение
там похоже только 16 цветов поддерживается. от нуля до 15. Если все именовать не хочется, а просто с числами из кода вызывать то можете вот так сделать
Мне вполне хватит 16, я пишу ультра-олдскульную игру
Сейчас проименую все 16 цветов в enum, и будет всё отлично.
***
Вот :
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
enum Color
{
  BLACK_COLOR = 0x00,
  BLUE_COLOR  = 0x01,
  GREEN_COLOR = 0x02,
  CYAN_COLOR = 0x03,
  RED_COLOR   = 0x04,
  MAGENTA_COLOR = 0x05,
  BROWN_COLOR = 0x06,
  LGRAY_COLOR = 0x07,
  DGRAY_COLOR = 0x08,
  LBLUE_COLOR = 0x09,
  LGREEN_COLOR = 0x0A,
  LCYAN_COLOR = 0x0B,
  LRED_COLOR = 0x0C,
  LMAGENTA_COLOR = 0x0D,
  YELLOW_COLOR = 0x0E,
  WHITE_COLOR = 0x0F,
  GRAY_COLOR  = 0x07,  
};
Yandex
Объявления
22.01.2012, 02:40     Как сделать разные символы разных цветов [C++]
Ответ Создать тему
Опции темы

Текущее время: 00:58. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru