利用C#编写象棋棋盘
刚开始用新的编程环境设计一个项目,需要学习和不断积累,通过这些过程不断的汲取经验教训。下面是我们小组做的一个关于中国象棋棋盘的项目。
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#编写象棋棋盘相关推荐
- Python利用cv2创建10*10象棋棋盘图片
Python利用cv2创建10*10象棋棋盘,棋盘大小为500*500 import cv2 import numpy img = numpy.zeros((500, 500), dtype=nump ...
- 【Qt象棋游戏】02_绘画象棋棋盘
文章目录 01 - 相关成员与方法 02 - 棋盘颜色 03 - 绘画棋盘线 04 - 添加"井"字格 05 - 总结 01 - 相关成员与方法 进行代码编写之前,在chess ...
- java jmf 视屏监控的核心代码_Java中利用JMF编写摄像头拍照程序_java
我把程序分为两种,有趣的和无趣的,最近做了几个有趣的项目,其中一个,应当就算是摄像头拍照程序了.用于现场拍照,生成照片,主要用到java Media Framework(JMF). 首先到SUN下载最 ...
- python爬虫简单实例-Python 利用Python编写简单网络爬虫实例3
利用Python编写简单网络爬虫实例3 by:授客 QQ:1033553122 实验环境 python版本:3.3.5(2.7下报错 实验目的 获取目标网站"http://bbs.51tes ...
- 用C语言用指针怎么算通用定积分,C语言:利用指针编写程序,用梯形法计算给定的定积分实例...
题目要求 利用指针编写程序,用梯形法计算下列公式中的定积分: 参考代码 首先说明一下指针的用处:因为所传递的参数均为数字,并不需要使用指针提高效率,故这里使用指针指向函数. 请注意calc()函数中的 ...
- java编写布局文件_鸿蒙OS利用JAVA编写的布局实践练习
鸿蒙OS利用JAVA编写的布局实践练习 鸿蒙OS利用JAVA编写的布局实践练习 目录 JAVA UI框架 利用JAVA代码实现一个简单的布局 利用xml实现上述布局 JAVA UI框架 ??应用的Ab ...
- python抓取网页电话号码_利用正则表达式编写python 爬虫,抓取网页电话号码!...
利用正则表达式编写python 爬虫,抓取网页联系我们电话号码!这里以九奥科技(www.jiuaoo.com)为例,抓取'联系我们'里面的电话号码,并输出. #!/usrweilie/bin/pyth ...
- 利用Delphi编写Socket通信程序
一.Delphi与Socket计算机网络是由一系列网络通信协议组成的,其中的核心协议是传输层的TCP/IP和UDP协议.TCP是面向连接的,通信双方保持一条通路,好比目前的电话线,使用telnet登陆 ...
- 用turtle画中国象棋棋盘
刚刚学习了<Python入门教程(一)--Python语言基础视频课程>(http://edu.51cto.com/course/12194.html) 中间有道作业就是用turtle画中 ...
最新文章
- Asp.net网站的ClickOnce自动部署(2)-虚拟目录的配置
- 陆基制导系统地面站布设策略
- 因为 Java 和 Php 在获取客户端 cookie 方式不同引发的 bug
- java压缩----使用sun JDK压缩--中文的文件名会是乱码
- Ant简单工程的构建
- 解决:Unable to open debugger port (127.0.0.1:55017): java.net.SocketException “Socket closed“
- Jsp+SpringMVC+Mysql实现的进销存库存管理系统附带论文
- 创业不容易,小本创业就更加难
- c#2.0语法新关键字 partial
- 关于直播,所有的技术细节都在这里了(二)
- java数据库编程--执行数据库更新操作
- 中文版通用工程师软件DPS 别克雪佛兰编程改装
- LWM2M,MQTT与CoAP区别和联系
- signature=04e0c5d9acfe5aef92fda679f27fba71,恶意软件分析 URL链接扫描 免费在线病毒分析平台 | 魔盾安全分析...
- 关于跳转页面报404、500错误设置自定义图片和文字
- 如何修改网页视频播放倍速?(最高16倍速)
- ps4移植android游戏,安卓玩PS4游戏 remote play安装教程
- VLOOKUP函数使用及注意事项
- 00012.01抽象类与抽象方法(abstract)
- Oracle数据库的基础