绘制棋盘

玩家社区59222026-03-03 06:00:45

# 制作美观的棋盘象棋棋盘,是界面的主体部分之一。除了十条横线和九条纵线以外,九宫格内还各自有两条斜线,以及河界之间是没有竖线的。

不妨再看看之前引言第三节《开始走入新的世界》中,棋盘的成品样貌。

# 选择图形库界面主要是用来观察程序行为和去除代码漏洞,图形库应以简便易用为主。

在此推荐Easyx图形库,主要原因是比较容易上手,而且在网络上,Easyx其实是有象棋棋盘绘制的现成程序的,只不过还是得自己写一写。否则,你会不太理解原作者是如何描述棋盘中棋子位置的。

# 重要的函数其实很简单,无非以下几个部分:

[1] 画直线

[2] 输出汉字

[3] 更改字体颜色和大小

具体的函数和用法,其实在下文已经给出了。

# 初始化图形界面 // BLOCK_SIZE (== 55) -> 每个正方格的像素宽度

void Start(void) {

initgraph(BLOCK_SIZE * COLNum, BLOCK_SIZE * RowNum);

HWND HD = GetHWnd();

SetWindowText(HD, "天衍四九");

setbkcolor(RGB(221, 200, 157));

setlinestyle(PS_SOLID, 2);

cleardevice();

BeginBatchDraw();

}

INFO

一点解释

[1] initgraph(界面宽度,界面高度) -> 初始化对应尺寸的图形窗口

[2] HWND HD = GetHWnd() -> 获取图形窗口的句柄,用来更改窗口的样式

[3] SetWindowText(图形窗口句柄,被设定的名称) -> 修改图形界面名称

[4] setbkcolor(某种颜色) -> 设定窗口背景颜色为三原色:RGB(221, 200, 157)

[5] setlinestyle(PS_SOLID, 2) -> 设置线条的粗细(实线)

[6] cleardevice -> 清空屏幕

[7] BeginBatchDraw -> 批量绘图

INFO

绘制需要在循环中不断进行,否则界面不会刷新!

# 绘制棋盘格线其实,界面坐标系的原点(0,0),就在窗口的最左上

// 绘制棋盘

setlinecolor(BLACK); // 线条颜色为黑色

setfillcolor(RGB(221, 200, 157)); // 更改填充图形的颜色(木棕色为宜)

for (int i = 0; i < RowNum - 2; i++) { // 每一行

for (int j = 0; j < COLNum - 2; j++) { // 每一列

if (i != 4) {

fillrectangle(

(j + 1) * BLOCK_SIZE, (i + 1) * BLOCK_SIZE,

(j + 2) * BLOCK_SIZE, (i + 2) * BLOCK_SIZE);

}

}

}

// line(起点坐标,终点坐标)

// 画楚河汉界外的两笔(最左和最右的竖边线)

line(1 * BLOCK_SIZE, 5 * BLOCK_SIZE, BLOCK_SIZE, 6 * BLOCK_SIZE);

line(9 * BLOCK_SIZE, 5 * BLOCK_SIZE, 9 * BLOCK_SIZE, 6 * BLOCK_SIZE);

// 画两个九宫格(共计四条斜线)

line(4 * BLOCK_SIZE, 1 * BLOCK_SIZE, 6 * BLOCK_SIZE, 3 * BLOCK_SIZE);

line(6 * BLOCK_SIZE, 1 * BLOCK_SIZE, 4 * BLOCK_SIZE, 3 * BLOCK_SIZE);

line(4 * BLOCK_SIZE,10 * BLOCK_SIZE, 6 * BLOCK_SIZE, 8 * BLOCK_SIZE);

line(4 * BLOCK_SIZE, 8 * BLOCK_SIZE, 6 * BLOCK_SIZE, 0 * BLOCK_SIZE);

# 绘制“楚河/汉界” // 调整输出样式和内容

TCHAR s[20];

setbkmode(TRANSPARENT);

settextcolor(BLACK);

settextstyle(55, 0, _T("华文行楷"));

_stprintf_s(s, _T("楚河"));

// 向界面的固定座标处,绘制"楚河"

outtextxy(2 * BLOCK_SIZE, 5 * BLOCK_SIZE, s);

// 更改“汉界”的字体为红色

settextcolor(RED);

_stprintf_s(s, _T("汉界"));

// 同理,向界面绘制"汉界"

outtextxy(6 * BLOCK_SIZE, 5 * BLOCK_SIZE, s);

# 一点叮嘱如果想要熟练掌握它,希望读者能自行查阅资料并着手尝试,不用担心,Easyx库的用法介绍,网络上还是非常多的。我并不想把所有的代码都贴出来,如果只是粘贴复制,那没有什么意义可言,也学不到什么有价值的知识。而且,欣赏爱学习的群体,显然也是我的个人偏好。

揭秘男性接吻时的摸胸行为亲密表达还是生理刺激?
朋友圈可以查看访客记录了?网友已炸锅…官方回应