畫象棋盤來淺顯學習了解easyx
了解象棋盤的構成:
如圖就為一個基本的象棋棋盤我們下面就用esayx來畫出這個棋盤,我的感覺這個棋盤大概分為兩個部分:第一部分就是棋盤的大致布局,第二個就是棋盤的細節實現
棋盤的代碼實現:
首先根據網上的數據我們可以得到一個棋盤的長大概為420像素點,寬大概370個像素點,
1 initgraph(720, 640);// 初始化720x640的繪圖屏幕 2 setorigin(150, 100);//設置坐標原點 3 //畫外邊框 4 setlinestyle(PS_SOLID,3); 5 rectangle(0,0,wide,length); 6 setfillcolor(RGB(219, 195, 35)); 7 fillrectangle(0, 0, wide, length); 8 //畫內邊框 9 setlinestyle(PS_SOLID, 1); 10 rectangle(10, 10, wide-10, length-10);
如上代碼easyx這個庫通過在划線或是矩形前設置矩形或是線的一些屬性然后繪制,記得這些操作是不會改變得當且僅當你重新設置后才會有所變化
1 //畫網格 2 for (int i = 1; i <= 7; i++) 3 { 4 line(10 + i*gridx, 10, 10 + i*gridx, length - 10); 5 } 6 setbkmode(TRANSPARENT); 7 fillrectangle(10, 10 + 4 * gridy, wide - 10, 10 + 5 * gridy); 8 for (int i = 1; i <= 8; i++) 9 { 10 line(10, 10 + i*gridy, wide - 10, 10 + i*gridy); 11 } 12 //輸入漢字 13 RECT r = { 10 + 44, 10 + 4 * gridy, 10 + 44 * 3, 10 + 5 * gridy }; 14 drawtext(_T("楚 河"), &r, DT_CENTER | DT_VCENTER | DT_SINGLELINE); 15 RECT c = { 10 + 5 * 44, 10 + 4 * gridy, 10 + 44 * 7, 10 + 5 * gridy }; 16 drawtext(_T("漢 界"), &c, DT_CENTER | DT_VCENTER | DT_SINGLELINE); 17 18 //細節補充 19 line(10 + 3 * gridx, 10, 10 + 5 * gridx, 10 + 2 * gridy); 20 line(10 + 5 * gridx, 10, 10 + 3 * gridx, 10 + 2 * gridy); 21 line(10 + 3 * gridx, 10 + 7 * gridy, 10 + 5 * gridx, 10 + 2 * gridy + 7 * gridy); 22 line(10 + 5 * gridx, 10 + 7 * gridy, 10 + 3 * gridx, 10 + 2 * gridy + 7 * gridy);
接下來就是畫網格這里我們注意一下當我們填充矩形顏色實如果我們還要在這塊矩形上進行操作那么我們最好使用 setbkmode(TRANSPARANT);來設置透明填充這樣就相當於真正的背景填充。另外我們在輸入漢字時我們這里要使用TCHAR這種字符串,如果非UNICODE模式兩者是相同的都是char如果UNICODE模式下(支持寬字節)TCHAR 為雙字節, 為unsigned short 類型比如漢字和一些擴展字符都是2個字節表示的, 剛好可以和這個類型對應上,微軟將這兩種ANSI和UNICODE進行了統一,可以再“”前加上 _T 來轉換成TCHAR類型。下圖為完成的效果圖:
下面貼上總的代碼供小伙伴們參考!
1 #include<graphics.h> 2 #include<conio.h> 3 #include<string> 4 5 enum {shiftingx=150,shiftingy=100,wide=372,length=425}; 6 const int gridx = (wide - 20) / 8; 7 const int gridy = (length - 20) / 9; 8 9 using namespace std; 10 11 void main() 12 { 13 initgraph(720, 640);// 初始化720x640的繪圖屏幕 14 setorigin(150, 100);//設置坐標原點 15 //畫外邊框 16 setlinestyle(PS_SOLID,3); 17 rectangle(0,0,wide,length); 18 setfillcolor(RGB(219, 195, 35)); 19 fillrectangle(0, 0, wide, length); 20 //畫內邊框 21 setlinestyle(PS_SOLID, 1); 22 rectangle(10, 10, wide-10, length-10); 23 //畫網格 24 for (int i = 1; i <= 7; i++) 25 { 26 line(10 + i*gridx, 10, 10 + i*gridx, length - 10); 27 } 28 setbkmode(TRANSPARENT); 29 fillrectangle(10, 10 + 4 * gridy, wide - 10, 10 + 5 * gridy); 30 for (int i = 1; i <= 8; i++) 31 { 32 line(10, 10 + i*gridy, wide - 10, 10 + i*gridy); 33 } 34 //輸入漢字 35 RECT r = { 10 + 44, 10 + 4 * gridy, 10 + 44 * 3, 10 + 5 * gridy }; 36 drawtext(_T("楚 河"), &r, DT_CENTER | DT_VCENTER | DT_SINGLELINE); 37 RECT c = { 10 + 5 * 44, 10 + 4 * gridy, 10 + 44 * 7, 10 + 5 * gridy }; 38 drawtext(_T("漢 界"), &c, DT_CENTER | DT_VCENTER | DT_SINGLELINE); 39 40 //細節補充 41 line(10 + 3 * gridx, 10, 10 + 5 * gridx, 10 + 2 * gridy); 42 line(10 + 5 * gridx, 10, 10 + 3 * gridx, 10 + 2 * gridy); 43 line(10 + 3 * gridx, 10 + 7 * gridy, 10 + 5 * gridx, 10 + 2 * gridy + 7 * gridy); 44 line(10 + 5 * gridx, 10 + 7 * gridy, 10 + 3 * gridx, 10 + 2 * gridy + 7 * gridy); 45 _getch(); 46 closegraph(); 47 }