c語言控制檯 之 彈幕實現
阿新 • • 發佈:2019-02-14
彈幕從從控制檯的右端到控制檯的左端,位置範圍右端要能顯示字串,左端要>=0
結構體儲存每個訊息的內容 移動速度 顏色 和初始位置(初始位置不能變,用於下次還原)
#include<stdio.h> #include<windows.h> #include<string.h> struct node { char text[10][300];//內容 int speed[10];//移動的速度 int color[10];//字串顏色 int in[10]; //每個字串的初始位置 }; struct node DM ={{"111","222","333","444","555","666","777","888","999","10000"}, {4,5,7,8,9,10,11,12,4,5}, {4,5,7,8,9,10,11,12,4,5} }; //出現位置 void gotoxy(int x, int y) { HANDLE hout; COORD pos; pos.X = x; pos.Y = y; hout = GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleCursorPosition(hout, pos); } /*隱藏游標*/ void show_cursor(int hide) { CONSOLE_CURSOR_INFO cciCursor; HANDLE hout; hout = GetStdHandle(STD_OUTPUT_HANDLE); if(GetConsoleCursorInfo(hout, &cciCursor)) { cciCursor.bVisible = hide; SetConsoleCursorInfo(hout, &cciCursor); } } /*設定顏色*/ void set_color(int color) { SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), color); } main() { int i,a[10],b[10],x=9; show_cursor(0);//隱藏游標 //求每個字串長度,用於開始出現的地址 for (i=0;i<10;i++) { DM.in[i] = 80-strlen(DM.text[i]); } for (i=0;i<10;i++) b[i]=DM.in[i]; while (1) { for (i=0; i<10; i++) { b[i]<0 ? b[i]=DM.in[i] : b[i]=b[i]-DM.speed[i]; gotoxy(b[i],i);//讓字串從右到左移動,b[i]是自減的 set_color(DM.color[i]); printf("%s\n",DM.text[i]); } system("cls"); Sleep(120); } }