印刷用棋盘工具带源码

 

https://files.cnblogs.com/files/blogs/714801/BrdTool.7z 12KB, 含.exe和源码(约150行)

用了www.xqbase.com的棋盘。棋子上的字是DrawText出来的,换字体等方便。

bool isRed = zi < 8;
CRect rc(CPoint(L + x * S, T + y * S), CSize(S, S)); rc.InflateRect(-2, -2);
(isRed ? red : black).Draw(pic, rc.left, rc.top);
pic.SetTextColor(isRed ? RGB(0, 0, 0) : RGB(255, 255, 255));
if (x == sel.x && y == sel.y) pic.SetTextColor(RGB(0, 180, 0));
static const char* Z = "123帅\0仕\0相\0马\0车\0砲\0兵\0將\0士\0象\0马\0车\0炮\0卒";
pic.DrawText(&Z[zi * 3], rc, DT_SINGLELINE | DT_VCENTER | DT_CENTER);

象棋巫师可复制FEN, 如 4k4/9/9/9/9/9/9/9/9/4K4 w - - 0 1

int fen_atoi(int c) {
  switch (toupper(c)) {
  case 'K': return 0; case 'A': return 1; case 'B': return 2; case 'N': return 3;
  case 'R': return 4; case 'C': return 5; case 'P': return 6; default: abort();
  }
}

void FromFEN(const char* s = "rnbakabnr/9/1c5c1/p1p1p1p1p/9/9/P1P1P1P1P/1C5C1/9/RNBAKABNR")
{ // TODO: 错误检查
  memset(pos, 0, sizeof(pos));
  for (int y = 0, x = 0; *s && *s != ' '; ++s) {
    const char c = *s;
    if (c == '/') (x = 0, ++y);
    else if (c >= '1' && c <= '9') x += c - '0';
    else pos[y][x++] = char((c >= 'a' ? 8 : 1) + fen_atoi(c));
  }
}
View Code

推荐用象棋巫师打谱。打开电脑分析窗口可发现:许多时候电脑走的和职业的一样。有时写棋书的人说这步不好该这么走,哎,电脑也这么认为。

圆想没有毛刺?可先画个大个的,再用IfranView缩小到32x32。| 详解用BitBlt实现透明贴图

  

找不到WM_ERASEBKGND? 修改Message filter为Window.

posted @ 2022-12-12 19:12  Fun_with_Words  阅读(71)  评论(0编辑  收藏  举报









 张牌。