C++ SetConsoleTextAttribute
时间: 2023-07-03 20:12:25 浏览: 60
C++中的SetConsoleTextAttribute函数用于设置控制台输出的文本颜色和背景颜色。该函数需要两个参数,第一个参数为控制台窗口句柄,第二个参数为一个表示颜色的整数值。具体使用方法如下:
```c++
#include <windows.h>
int main()
{
HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(hConsole, FOREGROUND_RED | BACKGROUND_BLUE | BACKGROUND_GREEN | BACKGROUND_RED);
// 输出红色前景色,蓝色背景色
std::cout << "Hello, world!" << std::endl;
return 0;
}
```
其中,hConsole可以通过GetStdHandle函数获得,可以选择输出标准输出流(STD_OUTPUT_HANDLE)或标准错误流(STD_ERROR_HANDLE)。颜色值可以通过位运算符组合前景色和背景色。例如,FOREGROUND_RED表示红色前景色,BACKGROUND_BLUE表示蓝色背景色。
相关问题
c++数字雨
C++ 数字雨是一种经典的计算机图形效果,它通常用来展示计算机的高速运算和数据流动的感觉。实现数字雨效果的基本思路是利用 C++ 控制台的字符输出功能,不断输出随机的数字或字符,形成一个类似于雨点的效果,并且不断更新字符的位置和颜色,从而形成流动的效果。
以下是一个简单的 C++ 数字雨代码示例:
```c++
#include <iostream>
#include <windows.h>
#include <cstdlib>
#include <ctime>
using namespace std;
int main()
{
srand(time(NULL)); // 初始化随机种子
int width = 80; // 控制台宽度
int height = 25; // 控制台高度
int delay = 50; // 延迟时间,单位为毫秒
int color = 7; // 字符颜色
char chars[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'}; // 字符集
int len = sizeof(chars) / sizeof(chars[0]); // 字符集长度
while (true)
{
// 随机生成字符和位置
char c = chars[rand() % len];
int x = rand() % width;
int y = rand() % height;
// 设置输出位置和颜色,输出字符
COORD coord = { x, y };
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), color);
cout << c;
// 延迟一段时间,清除字符
Sleep(delay);
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
cout << ' ';
}
return 0;
}
```
当然,这只是一个简单的示例,还有很多可以改进和优化的地方。
用c++写
好的,以下是一段基于 C++ 的贪吃蛇代码,你可以运行它来体验一下游戏:
```c++
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <conio.h>
#include <windows.h>
using namespace std;
// 定义游戏界面的大小
const int GAME_WIDTH = 30;
const int GAME_HEIGHT = 20;
// 定义蛇头和食物的符号
const char HEAD_SYMBOL = '@';
const char BODY_SYMBOL = '#';
const char FOOD_SYMBOL = '*';
// 定义颜色
const int WHITE_COLOR = 7;
const int RED_COLOR = 12;
// 定义蛇的初始位置和移动方向
int snake_head_x = GAME_WIDTH / 2;
int snake_head_y = GAME_HEIGHT / 2;
int snake_head_direction = 0; // 0:右,1:左,2:上,3:下
// 定义食物的初始位置
int food_x = 0;
int food_y = 0;
// 定义蛇的身体
int snake_body_x[GAME_WIDTH * GAME_HEIGHT];
int snake_body_y[GAME_WIDTH * GAME_HEIGHT];
int snake_length = 1;
// 定义游戏是否结束的标志
bool game_over = false;
// 定义函数:设置控制台光标的位置
void setCursorPosition(int x, int y) {
HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
COORD position = {x, y};
SetConsoleCursorPosition(handle, position);
}
// 定义函数:设置控制台文本颜色
void setTextColor(int color) {
HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(handle, color);
}
// 定义函数:初始化游戏界面
void initGame() {
// 隐藏控制台光标
CONSOLE_CURSOR_INFO cursor_info = {1, 0};
SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
// 初始化随机数种子
srand(time(NULL));
// 随机生成食物的位置
food_x = rand() % GAME_WIDTH;
food_y = rand() % GAME_HEIGHT;
// 将蛇的初始位置加入到身体数组中
snake_body_x[0] = snake_head_x;
snake_body_y[0] = snake_head_y;
}
// 定义函数:绘制游戏界面
void drawGame() {
// 清空控制台
system("cls");
// 绘制游戏界面
for (int i = 0; i < GAME_HEIGHT; i++) {
for (int j = 0; j < GAME_WIDTH; j++) {
if (i == 0 || i == GAME_HEIGHT - 1 || j == 0 || j == GAME_WIDTH - 1) {
setTextColor(RED_COLOR);
cout << '#';
} else if (i == snake_head_y && j == snake_head_x) {
setTextColor(WHITE_COLOR);
cout << HEAD_SYMBOL;
} else if (i == food_y && j == food_x) {
setTextColor(RED_COLOR);
cout << FOOD_SYMBOL;
} else {
bool is_body = false;
for (int k = 0; k < snake_length; k++) {
if (i == snake_body_y[k] && j == snake_body_x[k]) {
setTextColor(WHITE_COLOR);
cout << BODY_SYMBOL;
is_body = true;
break;
}
}
if (!is_body) {
cout << ' ';
}
}
}
cout << endl;
}
}
// 定义函数:处理游戏逻辑
void updateGame() {
// 处理键盘输入
if (_kbhit()) {
char key = _getch();
if (key == 'a' && snake_head_direction != 0) {
snake_head_direction = 1;
} else if (key == 'd' && snake_head_direction != 1) {
snake_head_direction = 0;
} else if (key == 'w' && snake_head_direction != 3) {
snake_head_direction = 2;
} else if (key == 's' && snake_head_direction != 2) {
snake_head_direction = 3;
}
}
// 根据移动方向更新蛇的位置
if (snake_head_direction == 0) {
snake_head_x++;
} else if (snake_head_direction == 1) {
snake_head_x--;
} else if (snake_head_direction == 2) {
snake_head_y--;
} else if (snake_head_direction == 3) {
snake_head_y++;
}
// 判断是否撞墙
if (snake_head_x == 0 || snake_head_x == GAME_WIDTH - 1 || snake_head_y == 0 || snake_head_y == GAME_HEIGHT - 1) {
game_over = true;
}
// 判断是否吃到了食物
if (snake_head_x == food_x && snake_head_y == food_y) {
// 生成新的食物
food_x = rand() % GAME_WIDTH;
food_y = rand() % GAME_HEIGHT;
// 增加蛇的长度
snake_length++;
// 将新的身体部位加入到身体数组中
snake_body_x[snake_length - 1] = snake_head_x;
snake_body_y[snake_length - 1] = snake_head_y;
}
// 更新蛇的身体
for (int i = snake_length - 1; i > 0; i--) {
snake_body_x[i] = snake_body_x[i - 1];
snake_body_y[i] = snake_body_y[i - 1];
}
snake_body_x[0] = snake_head_x;
snake_body_y[0] = snake_head_y;
// 判断是否撞到了自己的身体
for (int i = 1; i < snake_length; i++) {
if (snake_head_x == snake_body_x[i] && snake_head_y == snake_body_y[i]) {
game_over = true;
break;
}
}
}
// 定义函数:显示游戏结束信息
void showGameOver() {
setCursorPosition(GAME_WIDTH / 2 - 4, GAME_HEIGHT / 2);
setTextColor(RED_COLOR);
cout << "Game Over!" << endl;
}
int main() {
// 初始化游戏
initGame();
// 游戏循环
while (!game_over) {
// 绘制游戏界面
drawGame();
// 处理游戏逻辑
updateGame();
// 等待一段时间,控制游戏帧率
Sleep(100);
}
// 显示游戏结束信息
showGameOver();
return 0;
}
```
这段代码实现了一个基本的贪吃蛇游戏,你可以在其中尝试添加一些新的功能,比如计分、加速等,来让游戏更加丰富有趣。