GitHub

谁方便谁拍,谁重要拍谁。在这个砖头满天飞的时代,一个好的生态显得尤为重要。

      红颜小头发,要的很简单。

    也许成绝唱,只因鱼断肠。

姚贝福娃的离去,除感叹人生无常外,活着做点有意义的事情,就显得更为重要。

数年前为学习人工智能,写了围棋程序,却发现其难度超出了我的想象。特将其放到 GitHub 上,希望有人斧正。注意,是斧正,而非小修小改。

调整重绘

窗口大小改变时,棋盘也要作相应的重绘。这个比较简单,我的方法是把 BoardBase 类中的 m_sbSteps 字段改成 public,在主窗口 MainWindows 中保存之。具体的操作参考了 StepBoard 类中的办法,复制粘贴,略作修改而已,代码如下:

     // For Size Change and Show Number

         List<StepContent> m_steps = new List<StepContent>();
public void FillSteps()
{
m_steps.Clear();
string s = m_sbSteps.ToString();
if (s.Length < ) return;
string[] steps = s.Substring(, s.Length - ).Split(',');
StepContent step = new StepContent();
for (int i = ; i < steps.Length; i++)
{
if (i % == )
{
step = new StepContent();
step.Col = Convert.ToInt32(steps[i]);
}
else if (i % == )
{
step.Row = Convert.ToInt32(steps[i]);
}
else if (i % == )
{
step.Count = Convert.ToInt32(steps[i]);
m_steps.Add(step);
}
}
}
public void RenderChess()
{
m_sbSteps.Clear();
foreach (var item in m_steps)
{
NextOne();
}
} int m_count = ;
public void NextOne()
{
if (m_count > m_steps.Count)
{
return;
} foreach (var item in m_steps)
{
if (item.Count == m_count)
{
int col = item.Col;
int row = item.Row; if (Steps[col, row].Color != ChessColor.Empty)
{
return;
} if (NotInPos.X == col && NotInPos.Y == row)
{
return;
}
else
{
// If Pos(struct) is property, must use new.
NotInPos = new Pos(-, -);
} DrawChess(col, row); Eat(col, row);
}
}
m_count++;
} public bool IsShowNumber { get; set; }

for size change

显示步数

为了显示步数,在 Chess 类中加了几个属性,然后在 BoardBase 的 DrawChess 方法中也作了相应的调整。代码如下:

 public string NumberText
{
get { return m_TxtNumber.Text; }
set { m_TxtNumber.Text = value; }
} public double NumberFontSize
{
get { return m_TxtNumber.FontSize; }
set { m_TxtNumber.FontSize = value; }
} public System.Windows.Thickness NumberPadding
{
get { return m_TxtNumber.Padding; }
set { m_TxtNumber.Padding = value; }
}

Chess properties

     if (Steps[col, row].Chess == null)
{
Chess chess = new Chess(brush, ChessSize);
if (IsShowNumber)
{
double size = (double)ChessSize;
chess.NumberFontSize = (m_StepCount + ) >
? size / : (m_StepCount + ) >
? size / 1.6 : size / 1.2;
chess.NumberPadding = (m_StepCount + ) >
? new Thickness(size/, size / 5.5, , ) : (m_StepCount + ) >
? new Thickness(size / , size / , , ) : new Thickness(size / , , , );
chess.NumberText = (m_StepCount + ).ToString();
chess.NumberBrush = (m_StepCount % == ) ? Brushes.Black : Brushes.White;
}
chess.SetShow(IsShowNumber);
Canvas.SetLeft(chess, left);
Canvas.SetTop(chess, top);
m_Canvas.Children.Add(chess);
Steps[col, row].Chess = chess;
}

in the DrawChess()

效果图

代码下载链接:https://github.com/chinax01/x01.Weiqi

2015年5月2日:

1.使用 Code First 来操作数据库。但窗口大小改变时,StepBoard 仍是个问题。
2.使用 GitHub for windows,Sync 时 VS 老跑出来 debug。改用 shell:git init => git push 后问题解决。

2015年5月4日:

1.改正了 StepBoard 重绘时的问题。
2.git 时出现 fast-forward 问题,采用移除本地仓库,Clone 远程仓库,修改后重新 git push 解决,可谓笨也!

2015年5月5日:

1.为在 Windows XP 上运行,只能采取 .Net 4.0,安装 Sql Express 2008,故作了些调整。

2.开发过程,可参见:http://www.cnblogs.com/china_x01/category/685502.html

2015年5月6日:

1.为操作的方便,作了些调整,如中文显示菜单,快捷键等。

2.删除 StepService 类,因为数据操作很少,没有必要加个中间层。

2015年5月7日:

1.Go 大约是 Game 加一个圈,表示围棋的意思。但在表音的语言里,添加象形的东西,多少有些奇怪。
围棋术语,大都采用日语的音译,如:aji,不知何云?名不正则言不顺,在围棋这一特定场景下,统一术语,
是有必要的。当然,有些术语是不需要,如见合等,因为在程序中尚无具体实现。简化术语如下:
    围棋:weiqi; 棋盘:board; 棋子:stone; 棋局:record; 棋步(逻辑棋子):step; 吃:eat; 飞:fly; 跳:jump; 尖:sharp; 长:grow; 征:levy;


2.牵一发而动全身,小作修改,也能导致许多问题,一动不如一静也。

2015年5月9日:

1.解决 BackOne() 时死子不能显示数字的问题。
 2.添加删除棋谱功能,完善数字显示。

x01.Weiqi.7: 调整重绘的更多相关文章

  1. WinForm中重绘TabControl选项卡标题

    最近开发WinForm频繁使用了TabControl控件,这个控件的选项卡没有BackgroundImage这个属性,那么如何为其各个选项卡添加背景图片呢?(这里说的是每个TabPage的头部,也就是 ...

  2. x01.Weiqi.12: 定式布局

    定式 下一步当将定式保存到数据库中,如布局中的代码所示,但其初始的代码更有利于理解.以小飞挂为例: // 0 // + 0 0 // + // // + List<Pos> P_LuSta ...

  3. Reflow(渲染)和Repaint(重绘)

    Reflow(渲染):对于DOM结构中的各个元素都有自己的盒模型,浏览器根据各种样式(浏览器的.开发人员定义的等)来计算,并根据计算结果将元素放到它该出现的位置,这个过程称之为reflow. refl ...

  4. 理解浏览器的重绘与回流(repaint&&reflow)

    今天在做练习的时候,遇到了重绘与回流这个词,表示连个毛都没有听过.遂查之,首先将网上的(http://blog.sina.com.cn/s/blog_8dace7290102wezv.html)关于这 ...

  5. 【转】【C#】C#重绘windows窗体标题栏和边框

    摘要 windows桌面应用程序都有标准的标题栏和边框,大部分程序也默认使用这些样式,一些对视觉效果要求较高的程序,如QQ, MSN,迅雷等聊天工具的样式则与传统的windows程序大不相同,其中迅雷 ...

  6. 重绘TabControl

    本文转载自:http://blog.csdn.net/conmajia/article/details/7596718 作者:野比 (conmajia@gmail.com) 时间:May, 2012 ...

  7. 重绘Winform窗体

    本文转载自:http://www.cnblogs.com/encoding/p/5603080.html 按照惯例,先来几张样例图(注:为了展示窗口阴影效果,截图范围向外扩展了些,各位凭想象吧). 还 ...

  8. 深入Windows窗体原理及控件重绘技巧

    之前有学MFC的同学告诉我觉得Windows的控件重绘难以理解,就算重绘成功了还是有些地方不明白,我觉得可能很多人都有这样的问题,在这里我从Windows窗体的最基本原理来讲解,如果你有类似的疑惑希望 ...

  9. 浏览器的重绘(repaints)与重排(reflows)

    转:http://www.css88.com/archives/4991#more-4991 在项目的交互或视觉评审中,前端同学常常会对一些交互效果质疑,提出这样做不好那样做不好.主要原因是这些效果通 ...

随机推荐

  1. SQL Server 执行计划利用统计信息对数据行的预估原理以及SQL Server 2014中预估策略的改变

    前提  本文仅讨论SQL Server查询时, 对于非复合统计信息,也即每个字段的统计信息只包含当前列的数据分布的情况下, 在用多个字段进行组合查询的时候,如何根据统计信息去预估行数的. 利用不同字段 ...

  2. Moon.Orm 5.0(MQL版)的高性能,将发言权交给你!

    Moon.Orm 5.0性能问题,我将它交给关心它性能的您,让你自己测试,决不让你失望的. Moon.Orm 5.0 (MQL版) 版本维护及下载 (跟踪发布) Moon.Orm 5.0系列文章 火晋 ...

  3. webapi filter过滤器中获得请求的方法详情(方法名,Attributes)

    public class GlobalActionFilter : ActionFilterAttribute { private string _requestId; public override ...

  4. 定制自己的mybatis生成

    MyBatis Generator原生提供的生成方式targetRuntime有几种,但都不符合项目需求或想自定义自己的方法. 网上的文章也很多: 如:http://generator.sturgeo ...

  5. iscroll

    在原生APP的开发中,有一个常见的功能,就是下拉刷新的功能,这个想必大家都是知道的,但是原生APP的开发,有一个很大的问题就是,你每次更新一些功能,就要用户重新下载一次版本,尤其是在iOS系统中,新版 ...

  6. iOS UITabBarController的使用

    UITabBarController 和 UINavigationController 几乎是iOS APP的标配. UITabBarController分栏(标签栏)控制器, 和UINavigati ...

  7. [转]IPython Notebook简介1

    原文:http://hyry.dip.jp/tech/slice/slice.html/35 Python Notebook简介1 作者 : RY    标签: cython ipython-note ...

  8. Android 手机卫士--确认密码对话框编写

    本文接着实现“确认密码”功能,也即是用户以前设置过密码,现在只需要输入确认密码 本文地址:http://www.cnblogs.com/wuyudong/p/5940718.html,转载请注明出处. ...

  9. 深度技术GHOST WIN7系统32.64位j极速安装版 V2016年

    系统来自系统妈:http://www.xitongma.com 深度技术GHOST win7系统64位j极速安装版 V2016年3月 系统概述 深度技术ghost win7系统64位j极速安装版  版 ...

  10. Django model.py表单的默认值 默认允许为空

    Field.null 默认是null=False,这时不能传入NULL型数据,但是可以是空字符. 如果BooleanField中想要null数据类型,可以选择NullBooleanField   Fi ...