低帧渲染器自制
2026-10-19 20:21:39
发布于:四川
#include<bits/stdc++.h>
#include<windows.h>
using namespace std;
// 隐藏控制台光标函数
void HideCursor()
{
CONSOLE_CURSOR_INFO cursorInfo;
cursorInfo.dwSize = 1;
cursorInfo.bVisible = FALSE;
SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursorInfo);
}
struct Element{
string element=" ";
int colour=0;
int x,y;
};
// 缩小数组!t最大10帧,高度20,宽度40,足够演示动画
Element render[15][20][40];
int getColorCode(int opCode)
{
switch(opCode)
{
case 0: return 0; // 黑色文字
case 1: return FOREGROUND_RED; // 红色
case 2: return FOREGROUND_GREEN; // 绿色
case 3: return FOREGROUND_BLUE; // 蓝色
case 4: return FOREGROUND_RED | FOREGROUND_GREEN; // 黄色
case 5: return FOREGROUND_RED | FOREGROUND_BLUE; // 品红(紫)
case 6: return FOREGROUND_GREEN | FOREGROUND_BLUE; // 青色
case 7: return FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE; // 默认白色
// 亮色前景(加高亮)
case 8: return FOREGROUND_RED | FOREGROUND_INTENSITY; // 亮红
case 9: return FOREGROUND_GREEN | FOREGROUND_INTENSITY; // 亮绿
case 10:return FOREGROUND_BLUE | FOREGROUND_INTENSITY; // 亮蓝
case 11:return FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_INTENSITY; // 亮黄
case 12:return FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_INTENSITY; // 亮品红
case 13:return FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_INTENSITY; // 亮青
case 14:return FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_INTENSITY; //亮白
// ========== 前景+背景组合 ==========
case 20: return FOREGROUND_RED | BACKGROUND_GREEN; //红字,绿背景
case 21: return FOREGROUND_GREEN | BACKGROUND_RED; //绿字,红背景
case 22: return FOREGROUND_RED | BACKGROUND_BLUE; //红字,蓝背景
case 23: return FOREGROUND_GREEN | BACKGROUND_BLUE; //绿字,蓝背景
case 24: return FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE | BACKGROUND_GREEN; //白字绿背景
case 25: return FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE | BACKGROUND_RED; //白字红背景
case 26: return FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE | BACKGROUND_BLUE; //白字蓝背景
default: return 7; // 找不到操作码,返回默认白色
}
}
// 设置颜色函数
void setColor(int opCode)
{
HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
int realColor = getColorCode(opCode);
SetConsoleTextAttribute(hConsole, realColor);
}
// 一键恢复默认(操作码7)
void resetColor()
{
setColor(7);
}
// 把光标移动到左上角,实现画面覆盖(代替system("cls"),减少闪烁)
void GotoXY(int x, int y)
{
COORD pos;
pos.X = x;
pos.Y = y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);
}
// 渲染函数:h=高度,w=宽度,_time总帧数
void Render(int h,int w,int _time){
for(int t=0;t<=_time;t++){
GotoXY(0,0); //光标回到左上角,覆写画面
for(int _h=0;_h<h;_h++){
for(int _w=0;_w<w;_w++){
setColor(render[t][_h][_w].colour);
cout<<render[t][_h][_w].element;
}
resetColor();
cout<<endl;
}
Sleep(1000); //每一帧停留1000ms(1秒)
}
}
// ===================== 初始化10秒动画帧(t从0~9,共10帧)====================
void InitFrame()
{
// 清空全部画面,默认空格,白色
for(int t=0;t<10;t++)
for(int y=0;y<20;y++)
for(int x=0;x<40;x++)
{
render[t][y][x].element = " ";
render[t][y][x].colour =7;
}
// 帧 t=0(第1秒,亮绿文字)
render[0][5][10].element="P"; render[0][5][10].colour=9;
render[0][5][11].element="S"; render[0][5][11].colour=9;
render[0][5][12].element="E"; render[0][5][12].colour=9;
render[0][5][13].element="U"; render[0][5][13].colour=9;
render[0][5][14].element="D"; render[0][5][14].colour=9;
render[0][5][15].element="O"; render[0][5][15].colour=9;
// 帧 t=1(第2秒,红色文字)
render[1][5][10].element="P"; render[1][5][10].colour=8;
render[1][5][11].element="S"; render[1][5][11].colour=8;
render[1][5][12].element="E"; render[1][5][12].colour=8;
render[1][5][13].element="U"; render[1][5][13].colour=8;
render[1][5][14].element="D"; render[1][5][14].colour=8;
render[1][5][15].element="O"; render[1][5][15].colour=8;
// 帧 t=2(第3秒,黄色)
render[2][5][10].element="P"; render[2][5][10].colour=11;
render[2][5][11].element="S"; render[2][5][11].colour=11;
render[2][5][12].element="E"; render[2][5][12].colour=11;
render[2][5][13].element="U"; render[2][5][13].colour=11;
render[2][5][14].element="D"; render[2][5][14].colour=11;
render[2][5][15].element="O"; render[2][5][15].colour=11;
// 帧 t=3(第4秒,青色)
render[3][5][10].element="P"; render[3][5][10].colour=13;
render[3][5][11].element="S"; render[3][5][11].colour=13;
render[3][5][12].element="E"; render[3][5][12].colour=13;
render[3][5][13].element="U"; render[3][5][13].colour=13;
render[3][5][14].element="D"; render[3][5][14].colour=13;
render[3][5][15].element="O"; render[3][5][15].colour=13;
// t=4(第5秒,带背景:白字绿底)
render[4][5][10].element="P"; render[4][5][10].colour=24;
render[4][5][11].element="S"; render[4][5][11].colour=24;
render[4][5][12].element="E"; render[4][5][12].colour=24;
render[4][5][13].element="U"; render[4][5][13].colour=24;
render[4][5][14].element="D"; render[4][5][14].colour=24;
render[4][5][15].element="O"; render[4][5][15].colour=24;
// t=5(第6秒,文字向右移动一格)
render[5][5][11].element="P"; render[5][5][11].colour=25;
render[5][5][12].element="S"; render[5][5][12].colour=25;
render[5][5][13].element="E"; render[5][5][13].colour=25;
render[5][5][14].element="U"; render[5][5][14].colour=25;
render[5][5][15].element="D"; render[5][5][15].colour=25;
render[5][5][16].element="O"; render[5][5][16].colour=25;
// t=6(第7秒,继续右移)
render[6][5][12].element="P"; render[6][5][12].colour=26;
render[6][5][13].element="S"; render[6][5][13].colour=26;
render[6][5][14].element="E"; render[6][5][14].colour=26;
render[6][5][15].element="U"; render[6][5][15].colour=26;
render[6][5][16].element="D"; render[6][5][16].colour=26;
render[6][5][17].element="O"; render[6][5][17].colour=26;
// t=7(第8秒,亮品红)
render[7][5][13].element="P"; render[7][5][13].colour=12;
render[7][5][14].element="S"; render[7][5][14].colour=12;
render[7][5][15].element="E"; render[7][5][15].colour=12;
render[7][5][16].element="U"; render[7][5][16].colour=12;
render[7][5][17].element="D"; render[7][5][17].colour=12;
render[7][5][18].element="O"; render[7][5][18].colour=12;
// t=8(第9秒,亮蓝)
render[8][5][14].element="P"; render[8][5][14].colour=10;
render[8][5][15].element="S"; render[8][5][15].colour=10;
render[8][5][16].element="E"; render[8][5][16].colour=10;
render[8][5][17].element="U"; render[8][5][17].colour=10;
render[8][5][18].element="D"; render[8][5][18].colour=10;
render[8][5][19].element="O"; render[8][5][19].colour=10;
// t=9(第10秒,亮白,文字消失收尾)
render[9][5][15].element=" "; render[9][5][15].colour=7;
render[9][5][16].element=" "; render[9][5][16].colour=7;
render[9][5][17].element=" "; render[9][5][17].colour=7;
render[9][5][18].element=" "; render[9][5][18].colour=7;
render[9][5][19].element=" "; render[9][5][19].colour=7;
render[9][6][12].element="Animation Finish"; render[9][6][12].colour=9;
}
int main(){
HideCursor();
InitFrame();
Render(20,40,9); //高度20,宽度40,总帧数0~9(10帧,10秒)
resetColor();
GotoXY(0,22);
system("pause");
return 0;
}
这里空空如也


















有帮助,赞一个