刚开始用新的编程环境设计一个项目,需要学习和不断积累,通过这些过程不断的汲取经验教训。下面是我们小组做的一个关于中国象棋棋盘的项目。

1.设计思路与分析

首先规定一个起始点(*,*),水平方向长度用x表示(共分为8格),垂直方向的宽度用h表示(共分为9格),象棋的每个小格都是正方形的。长和宽的比例为8:9,可以规定长度a=(1/8)x,同理宽度为h的1/9,然后可以利用公式计算行列的坐标*+na。以及兵格和炮格的位置设计思路在下图标出。(其中楚河汉界字也是通过坐标调好位置)

2.若是追求设计的美观,可以给棋盘设计一个背景板。

3.棋盘的初步设计代码
Graphics g = e.Graphics;
            g.Clear(Color.Coral);
            Image img = Image.FromFile("33.jpg");
            double x = 400;
            double h = 1.125 * x;
            g.DrawImage(img, 10, 10, 700, 700);
            g.DrawRectangle(new Pen(Color.Black, 3), new Rectangle(new Point(20, 20), new Size((int)(x + 10), (int)(h + 10))));
            Pen pen = new Pen(Color.Black, 1);
            for (int i = 0; i < 10; i++)
            {
                g.DrawLine(pen, new Point(25, 25 + (i * (int)(h / 9))), new Point((int)(x + 25), 25 + (i * (int)(h / 9))));
            }
            for (int j = 0; j < 9; j++)
            {
                g.DrawLine(pen, new Point(25 + (j * (int)(x / 8)), 25), new Point(25 + (j * (int)(x / 8)), 25 + (int)((h / 9) * 4)));
            }
            for (int j = 0; j < 9; j++)
            {
                g.DrawLine(pen, new Point(25 + (j * (int)(x/8)), 25 + (int)((h / 9) * 5)), new Point(25 + (j * (int)(x / 8)), ((int)(25 + h))));
            }
            g.DrawLine(pen, new Point(25 + (int)((x / 8) * 3), 25), new Point(25 + (int)((x / 8) * 5), 25 + (int)((h / 9) * 2)));
            g.DrawLine(pen, new Point(25 + (int)((x / 8) * 5), 25), new Point(25 + (int)((x / 8) * 3), 25 + (int)((h / 9) * 2)));
            g.DrawLine(pen, new Point(25 + (int)((x / 8) * 3), 25 + (int)((h / 9) * 7)), new Point(25 + (int)((x / 8) * 5), ((int)(25 + h))));
            g.DrawLine(pen, new Point(25 + (int)((x / 8) * 5), 25 + (int)((h / 9) * 7)), new Point(25 + (int)((x / 8) * 3), ((int)(25 + h))));
            Font font = new Font("黑体", (int)(x / 20));
            g.DrawString("楚  河", font, Brushes.Black, new Point(25 + (int)((x / 16)), 25 + (int)((h / 9) * 4 + 10)));
            g.DrawString("汉  界", font, Brushes.Black, new Point(25 + (int)((x / 8) * 5 + (x / 16)), 25 + (int)((h / 9) * 4 + 10)));
            g.ResetTransform();
            this.DrawAngle(g, pen, new Point(25, 25 + (int)(h / 9 * 3)), "right");
            this.DrawAngle(g, pen, new Point(25 + (2 * (int)(x / 8)), 25 + (int)(h / 9 * 3)), "all");
            this.DrawAngle(g, pen, new Point(25 + (int)x, 25 + (int)(h / 9 * 3)), "left");
            this.DrawAngle(g, pen, new Point(25 + (4 * (int)(x / 8)), 25 + (int)(h / 9 * 3)), "all");
            this.DrawAngle(g, pen, new Point(25 + (int)x, 25 + (int)(h / 9 * 3)), "left");
            this.DrawAngle(g, pen, new Point(25 + (6 * (int)(x / 8)), 25 + (int)(h / 9 * 3)), "all");
            this.DrawAngle(g, pen, new Point(25 + (int)x, 25 + (int)(h / 9 * 3)), "left");
            this.DrawAngle(g, pen, new Point(25 + (1 * (int)(x / 8)), 25 + (int)(h / 9 * 2)), "all");
            this.DrawAngle(g, pen, new Point(25 + (7 * (int)(x / 8)), 25 + (int)(h / 9 * 2)), "all");
 
            this.DrawAngle(g, pen, new Point(25, 25 + (int)(h / 9 * 6)), "right");
            this.DrawAngle(g, pen, new Point(25 + (2 * (int)(x / 8)), 25 + (int)(h / 9 * 6)), "all");
            this.DrawAngle(g, pen, new Point(25 + (4 * (int)(x / 8)), 25 + (int)(h / 9 * 6)), "all");
            this.DrawAngle(g, pen, new Point(25 + (6 * (int)(x / 8)), 25 + (int)(h / 9 * 6)), "all");
            this.DrawAngle(g, pen, new Point(25 + (int)x, 25 + (int)(h / 9 * 6)), "left");
            this.DrawAngle(g, pen, new Point(25 + (1 * (int)(x / 8)), 25 + (int)(h / 9 * 7)), "all");
            this.DrawAngle(g, pen, new Point(25 + (7 * (int)(x / 8)), 25 + (int)(h / 9 * 7)), "all");
            g.Dispose();
        }
        private void DrawAngle(Graphics g, Pen pen, Point point, string str)
        {
            double x = 400;
            Point p1 = new Point(point.X + (int)x / 80, point.Y + (int)x / 80);
            Point p2 = new Point(point.X - (int)x / 80, point.Y + (int)x / 80);
            Point p3 = new Point(point.X - (int)x / 80, point.Y - (int)x / 80);
            Point p4 = new Point(point.X + (int)x / 80, point.Y - (int)x / 80);
            if (str == "right" || str == "all")
            {
                //p1  p4
                g.DrawLine(pen, p1, new Point(p1.X + (int)x / 40, p1.Y));
                g.DrawLine(pen, p1, new Point(p1.X, p1.Y + (int)x / 40));
                g.DrawLine(pen, p4, new Point(p4.X + (int)x / 40, p4.Y));
                g.DrawLine(pen, p4, new Point(p4.X, p4.Y - (int)x / 40));
            }
            if (str == "left" || str == "all")
            {
                //p2  p3
                g.DrawLine(pen, p2, new Point(p2.X - (int)x / 40, p2.Y));
                g.DrawLine(pen, p2, new Point(p2.X, p2.Y + (int)x / 40));
                g.DrawLine(pen, p3, new Point(p3.X - (int)x / 40, p3.Y));
                g.DrawLine(pen, p3, new Point(p3.X, p3.Y - (int)x / 40));
 
 
            }
        }

利用C#编写象棋棋盘相关推荐

  1. Python利用cv2创建10*10象棋棋盘图片

    Python利用cv2创建10*10象棋棋盘,棋盘大小为500*500 import cv2 import numpy img = numpy.zeros((500, 500), dtype=nump ...

  2. 【Qt象棋游戏】02_绘画象棋棋盘

    文章目录 01 - 相关成员与方法 02 - 棋盘颜色 03 - 绘画棋盘线 04 - 添加"井"字格 05 - 总结 01 - 相关成员与方法   进行代码编写之前,在chess ...

  3. java jmf 视屏监控的核心代码_Java中利用JMF编写摄像头拍照程序_java

    我把程序分为两种,有趣的和无趣的,最近做了几个有趣的项目,其中一个,应当就算是摄像头拍照程序了.用于现场拍照,生成照片,主要用到java Media Framework(JMF). 首先到SUN下载最 ...

  4. python爬虫简单实例-Python 利用Python编写简单网络爬虫实例3

    利用Python编写简单网络爬虫实例3 by:授客 QQ:1033553122 实验环境 python版本:3.3.5(2.7下报错 实验目的 获取目标网站"http://bbs.51tes ...

  5. 用C语言用指针怎么算通用定积分,C语言:利用指针编写程序,用梯形法计算给定的定积分实例...

    题目要求 利用指针编写程序,用梯形法计算下列公式中的定积分: 参考代码 首先说明一下指针的用处:因为所传递的参数均为数字,并不需要使用指针提高效率,故这里使用指针指向函数. 请注意calc()函数中的 ...

  6. java编写布局文件_鸿蒙OS利用JAVA编写的布局实践练习

    鸿蒙OS利用JAVA编写的布局实践练习 鸿蒙OS利用JAVA编写的布局实践练习 目录 JAVA UI框架 利用JAVA代码实现一个简单的布局 利用xml实现上述布局 JAVA UI框架 ??应用的Ab ...

  7. python抓取网页电话号码_利用正则表达式编写python 爬虫,抓取网页电话号码!...

    利用正则表达式编写python 爬虫,抓取网页联系我们电话号码!这里以九奥科技(www.jiuaoo.com)为例,抓取'联系我们'里面的电话号码,并输出. #!/usrweilie/bin/pyth ...

  8. 利用Delphi编写Socket通信程序

    一.Delphi与Socket计算机网络是由一系列网络通信协议组成的,其中的核心协议是传输层的TCP/IP和UDP协议.TCP是面向连接的,通信双方保持一条通路,好比目前的电话线,使用telnet登陆 ...

  9. 用turtle画中国象棋棋盘

    刚刚学习了<Python入门教程(一)--Python语言基础视频课程>(http://edu.51cto.com/course/12194.html) 中间有道作业就是用turtle画中 ...

最新文章

  1. Asp.net网站的ClickOnce自动部署(2)-虚拟目录的配置
  2. 陆基制导系统地面站布设策略
  3. 因为 Java 和 Php 在获取客户端 cookie 方式不同引发的 bug
  4. java压缩----使用sun JDK压缩--中文的文件名会是乱码
  5. Ant简单工程的构建
  6. 解决:Unable to open debugger port (127.0.0.1:55017): java.net.SocketException “Socket closed“
  7. Jsp+SpringMVC+Mysql实现的进销存库存管理系统附带论文
  8. 创业不容易,小本创业就更加难
  9. c#2.0语法新关键字 partial
  10. 关于直播,所有的技术细节都在这里了(二)
  11. java数据库编程--执行数据库更新操作
  12. 中文版通用工程师软件DPS 别克雪佛兰编程改装
  13. LWM2M,MQTT与CoAP区别和联系
  14. signature=04e0c5d9acfe5aef92fda679f27fba71,恶意软件分析 URL链接扫描 免费在线病毒分析平台 | 魔盾安全分析...
  15. 关于跳转页面报404、500错误设置自定义图片和文字
  16. 如何修改网页视频播放倍速?(最高16倍速)
  17. ps4移植android游戏,安卓玩PS4游戏 remote play安装教程
  18. VLOOKUP函数使用及注意事项
  19. 00012.01抽象类与抽象方法(abstract)
  20. Oracle数据库的基础

热门文章

  1. PostgreSQL高可用集群
  2. Java入门篇——安装Java SE14
  3. QQ小程序百度网盘中的文件保存和下载
  4. 考考你的眼力 又一张神奇的图片
  5. Unity 制作图集
  6. python输出1到9_1-9-Python格式化字符串(格式化输出)
  7. 软考高级 真题 2012年上半年 信息系统项目管理师 案例分析
  8. 淘宝/天猫按关键词搜索商品
  9. mc服务器钓鱼系统,钓鱼 - Minecraft Wiki,最详细的官方我的世界百科
  10. koa status 204的问题