<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
這個標頭檔案是用來在C++控制檯繪圖的,借鑑了 pygame 的一些思想,提供了一些函數用來繪圖,可以有效的避免多次繪製重複影象時屏閃等問題。
初始化螢幕, 將螢幕大小設定為 x , 字型大小為 fz 。
用來將整個螢幕填充為一定的顏色。
注意!繪畫完後的影象並不會立刻出現在控制檯上,使用這個函數來更新。
獲取滑鼠座標並存到 p 中
將控制檯遊標移到(x,y)的位置,x,y 從1開始
隱藏控制檯遊標
設定文字顏色
設定背景顏色
以(sx, sy)為左上端點、(ex, ey)為右下端點,繪製顏色為color的矩形。
繪製一條從(sx, sy)到(ex, ey)的線。
在(x,y)的位置畫一個點
先介紹到這裡
裡面更多的功能、函數會在以後的文章後詳細解釋。
我這裡將標頭檔案命名為 Drawer.h ,如果用了別的名字儲存標頭檔案,這裡也要改過來。
功能是從(1,1)到滑鼠的位置畫線。
#include "Drawer.h" using namespace std; Pos mp; // Mouse_Pos void game() { while(1) { getmousepos(mp); // Get Mouse Pos fill(black); // Let Screen be black line(1, 1, mp.x, mp.y, green); // from (1, 1) to (mp.x, mp.y) draw Line // ^ // | // You can change this to red, blue, white or more update(); // Update Screen } } int main(){ system("mode con cols=102 lines=52"); init(50, 16);// 50x50 Screen and font size is 16 game(); }
截圖截不到滑鼠。。。
#include <windows.h> #include <algorithm> #include <cstdio> #include <cmath> #include <ctime> #ifndef KEY_DOWN #define KEY_DOWN(VK_NONAME) ((GetAsyncKeyState(VK_NONAME) & 0x8000) ? 1:0) #endif #define clean 0x2 #define box 0x4 #define full 0x1 using namespace std; enum concol { black = 0, dark_blue = 1, dark_green = 2, dark_aqua = 3, dark_cyan = 3, dark_red = 4, dark_purple = 5, dark_pink = 5, dark_magenta = 5, dark_yellow = 6, dark_white = 7, gray = 8, blue = 9, green = 10, cyan = 11, red = 12, purple = 13, pink = 13, yellow = 14, white = 15 }; struct pixel { concol color; }; struct Pos { int x, y; }; struct Pos3d { int x, y, z ; }; CONSOLE_CURSOR_INFO CursorInfo; COORD _GoToPos; HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE); HWND hwnd = GetForegroundWindow(); int backcol, textcol; pixel _LastScreen[1000][1000]; pixel _NewScreen[1000][1000]; int _ScreenSideLength; int Py3dx = 0, Py3dy = 0 ; int xzlen = 2, yzlen = 1 ; int fontsize = 16; inline void getmousepos(Pos &p) { POINT pt; GetCursorPos(&pt); ScreenToClient(hwnd, &pt); p.y = (pt.y / fontsize + 0.5); p.x = (pt.x / fontsize + 0.5); } inline void gt(short x, short y) { --x; --y; _GoToPos = {x * xzlen, y * yzlen}; SetConsoleCursorPosition(hOut, _GoToPos); } inline void HideCursor() { GetConsoleCursorInfo(hOut, &CursorInfo); CursorInfo.bVisible = false; SetConsoleCursorInfo(hOut, &CursorInfo); } inline void settextcolor(concol textcolor) { textcol = textcolor; unsigned short wAttributes = ((unsigned int)backcol << 4) | (unsigned int)textcol; SetConsoleTextAttribute(hOut, wAttributes); } inline void setbackcolor(concol backcolor) { hOut = GetStdHandle(STD_OUTPUT_HANDLE); backcol = backcolor; unsigned short wAttributes = ((unsigned int)backcol << 4) | (unsigned int)textcol; SetConsoleTextAttribute(hOut, wAttributes); } struct Button { Pos mp; const char* name; int len, qx, px, py; void rename(const char* ne) { name = ne; len = strlen(ne); } void setpos(int x, int y) { py = y; qx = (x - len / 2); px = (x + len / 2); gt(qx, y); printf(name); } bool check() { getmousepos(mp); if (mp.x <= px and mp.x >= qx and mp.y <= py and mp.y >= py - 2) { gt(qx - 2, py); printf(">>"); gt(px, py); printf("<<"); if (KEY_DOWN(MOUSE_MOVED)) return true; } else { gt(qx - 2, py); printf(" "); gt(px, py); printf(" "); } return false; } }; inline void init(int x, int fz) { fontsize = fz; GetConsoleCursorInfo(hOut, &CursorInfo); CursorInfo.bVisible = false; SetConsoleCursorInfo(hOut, &CursorInfo); _ScreenSideLength = x; } inline void update() { for (int i = 1; i <= _ScreenSideLength ; ++i) { for (int j = 1; j <= _ScreenSideLength ; ++j) { if (_LastScreen[j][i].color != _NewScreen[j][i].color) { gt(j, i); setbackcolor(_NewScreen[j][i].color); for(int i=1;i<=yzlen;++i) { for(int j=1;j<=xzlen;++j) putchar(' '); puts("n"); } _LastScreen[j][i] = _NewScreen[j][i]; } } } } void fill(concol color) { for (int i = 1; i <= _ScreenSideLength; ++i) { for (int j = 1; j <= _ScreenSideLength; ++j) { if (_NewScreen[j][i].color != color) { _NewScreen[j][i].color = color; } } } } void rect(int sx, int sy, int ex, int ey, concol color) { if (ey < sy) swap(ey, sy); if (ex < sx) swap(ex, sx); for (int i = sy; i <= ey; ++i) { for (int j = sx; j <= ex; ++j) { _NewScreen[j][i].color = color; } } } void ChangePy(int x, int y) { Py3dx = x; Py3dy = y; } inline void dot(int x, int y, concol color) { _NewScreen[x][y].color = color; } inline void line(int sx, int sy, int ex, int ey, concol color) { int xlen = ex - sx ; int ylen = ey - sy ; int len = sqrt(pow(xlen, 2) + pow(ylen, 2)) ; for(double i=0; i<=len; i += 1) { int x = xlen * i / len ; int y = ylen * i / len ; _NewScreen[x + sx][y + sy].color = color ; } } inline Pos pos3t2(Pos3d pos) { if(pos.z == 0) { return Pos {pos.x, pos.y} ; } return Pos{pos.x / (log10(pos.z)) + Py3dx, pos.y / (log10(pos.z)) + Py3dy} ; } inline void line3d(Pos3d a, Pos3d b, concol color) { Pos a2 = pos3t2(a); Pos b2 = pos3t2(b); // line(a2.x, b2.y, a2.y, b2.x, color); line(a2.x, a2.y, b2.x, b2.y, color); } inline int dis3d(Pos3d a, Pos3d b) { int x = abs(a.x - b.x); int y = abs(a.y - b.y); int z = abs(a.z - b.z); return sqrt(pow(x, 2) + pow(y, 2) + pow(z, 2)) ; } /* Q------W / A--S */ inline void rect3d(Pos3d q, Pos3d w, Pos3d a, Pos3d s, concol color) { int qlen = dis3d(q, a); int plen = dis3d(w, s); int len = max(qlen, plen); for(double i=1;i<=len; i+=0.1) { Pos3d qpos = Pos3d {abs(q.x-a.x)*i/len + q.x, abs(q.y-a.y)*i/len + q.y, abs(q.z-a.z)*i/len + q.z} ; Pos3d ppos = Pos3d {abs(w.x-s.x)*i/len + w.x, abs(w.y-s.y)*i/len + w.y, abs(w.z-s.z)*i/len + w.z} ; line3d(qpos, ppos, color); } } struct cube { Pos3d pos ; int xlen, ylen, zlen ; void init(int xp, int yp, int zp, int xl, int yl, int zl) { pos = Pos3d {xp - Py3dx, yp - Py3dy, zp}; xlen = xl; ylen = yl; zlen = zl; } inline Pos3d getdotpos(int doti) { switch(doti) { case 8: return Pos3d {pos.x + xlen, pos.y + ylen, pos.z + zlen} ; case 7: return Pos3d {pos.x, pos.y + ylen, pos.z + zlen} ; case 6: return Pos3d {pos.x + xlen, pos.y, pos.z + zlen} ; case 4: return Pos3d {pos.x + xlen, pos.y + ylen, pos.z} ; case 5: return Pos3d {pos.x, pos.y, pos.z + zlen} ; case 3: return Pos3d {pos.x, pos.y + ylen, pos.z} ; case 2: return Pos3d {pos.x + xlen, pos.y, pos.z} ; case 1: return Pos3d {pos.x, pos.y, pos.z} ; } return {0, 0, 0}; //Else } /* 5----------6 /| /| / | / | / | / | 1----------2 | | 7------|---8 ylen| / | / | / | /zlen |/ xlen |/ 3----------4 ^ | O */ inline void draw(concol color, int mode) { if(mode & full) { rect3d(getdotpos(5), getdotpos(7), getdotpos(6), getdotpos(8), green); rect3d(getdotpos(1), getdotpos(3), getdotpos(5), getdotpos(7), red); rect3d(getdotpos(5), getdotpos(1), getdotpos(6), getdotpos(2), blue); rect3d(getdotpos(7), getdotpos(3), getdotpos(8), getdotpos(4), pink); rect3d(getdotpos(2), getdotpos(4), getdotpos(6), getdotpos(8), yellow); rect3d(getdotpos(1), getdotpos(3), getdotpos(2), getdotpos(4), white); } if(mode & clean) { line3d(getdotpos(1), getdotpos(2), color) ; line3d(getdotpos(1), getdotpos(3), color) ; line3d(getdotpos(1), getdotpos(5), color) ; line3d(getdotpos(2), getdotpos(6), color) ; line3d(getdotpos(2), getdotpos(4), color) ; line3d(getdotpos(3), getdotpos(4), color) ; line3d(getdotpos(3), getdotpos(7), color) ; line3d(getdotpos(4), getdotpos(8), color) ; line3d(getdotpos(5), getdotpos(6), color) ; line3d(getdotpos(5), getdotpos(7), color) ; line3d(getdotpos(6), getdotpos(8), color) ; line3d(getdotpos(7), getdotpos(8), color) ; } if(mode & box) { line3d(getdotpos(1), getdotpos(4), color) ; line3d(getdotpos(1), getdotpos(7), color) ; line3d(getdotpos(2), getdotpos(3), color) ; line3d(getdotpos(2), getdotpos(8), color) ; line3d(getdotpos(3), getdotpos(5), color) ; line3d(getdotpos(3), getdotpos(8), color) ; line3d(getdotpos(4), getdotpos(7), color) ; line3d(getdotpos(4), getdotpos(6), color) ; line3d(getdotpos(5), getdotpos(2), color) ; line3d(getdotpos(5), getdotpos(8), color) ; line3d(getdotpos(6), getdotpos(1), color) ; line3d(getdotpos(6), getdotpos(7), color) ; } } };
到此這篇關於C++控制檯繪圖示頭檔案的文章就介紹到這了,更多相關C++控制檯繪圖示頭檔案內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45