这是我要和大家分享的基于C++和MFC开发的一个象棋程序,目的是练习编程实践和大家分享同时希望大家能给出指教。

进入主题

一、棋盘分析

  这是我绘制的棋盘,棋盘的组成由9条竖线和10条横线构成。这儿我们设置每条线间的间隔是50。

二‘、绘制过程

1、在vs中新建MFC程序,去除环境自动生成的按钮和文字。

2、打开***Dlg.cpp文件,在void CChessDlg::OnPaint()中定义一个棋盘间隔值和绘图设备CDC *cd = CWnd::GetDC();

int nWid = 50;
CDC *cd = CWnd::GetDC();

3、绘制棋盘横线

//画横线
for (int i = 1; i < 11; ++i)
{
cd->MoveTo(nWid, i * nWid);
cd->LineTo(9 * nWid, i * nWid);
}

4、绘制棋盘竖线

//画竖线
for (int i = 1; i < 10; ++i)
{
  //绘制棋盘两侧线段
if(1 == i || 9 == i)
{
cd->MoveTo(i * nWid ,nWid);
cd->LineTo(i * nWid,10 * nWid);
}
else//绘制棋盘中间的几条竖线
{
cd->MoveTo(i * nWid ,nWid);
cd->LineTo(i * nWid,5 * nWid); cd->MoveTo(i * nWid,6 * nWid);
cd->LineTo(i * nWid,10 * nWid);
}
}

5、绘制九宫格

//画九宫格
cd->MoveTo(4 * nWid ,nWid);
cd->LineTo(6 * nWid,3 * nWid); cd->MoveTo(6 * nWid, nWid);
cd->LineTo(4 * nWid,3 * nWid); cd->MoveTo(4 * nWid ,8 * nWid);
cd->LineTo(6 * nWid,10 * nWid); cd->MoveTo(6 * nWid, 8 * nWid);
cd->LineTo(4 * nWid,10 * nWid);

到这里我们的棋盘就绘制好了下面是完整代码

        CDialogEx::OnPaint();
int nWid = 50;
CDC *cd = CWnd::GetDC(); //画横线
for (int i = 1; i < 11; ++i)
{
cd->MoveTo(nWid, i * nWid);
cd->LineTo(9 * nWid, i * nWid);
} //画竖线
for (int i = 1; i < 10; ++i)
{
if(1 == i || 9 == i)
{
cd->MoveTo(i * nWid ,nWid);
cd->LineTo(i * nWid,10 * nWid);
}
else
{
cd->MoveTo(i * nWid ,nWid);
cd->LineTo(i * nWid,5 * nWid); cd->MoveTo(i * nWid,6 * nWid);
cd->LineTo(i * nWid,10 * nWid);
}
} //画九宫格
cd->MoveTo(4 * nWid ,nWid);
cd->LineTo(6 * nWid,3 * nWid); cd->MoveTo(6 * nWid, nWid);
cd->LineTo(4 * nWid,3 * nWid); cd->MoveTo(4 * nWid ,8 * nWid);
cd->LineTo(6 * nWid,10 * nWid); cd->MoveTo(6 * nWid, 8 * nWid);
cd->LineTo(4 * nWid,10 * nWid);

编程的路上有光芒,不回头的往前走。

C++开发象棋一 绘制棋盘的更多相关文章

  1. 用python代码编写象棋界面,棋盘覆盖问题

    编写象棋界面 import turtle t=turtle.Pen() t.speed(100) def angle(x,y): t.penup() t.goto(x+3,y+3) t.pendown ...

  2. 基于OpenCV做“三维重建”(1)--找到并绘制棋盘

    <OpenCV计算机视觉编程攻略(第3版)>这套书已经出到第3版了,如果你非要我说这本书有多好,我说不出来:只是很多我第一手的例子都是来源于这本书的-相比较OpenCV官方提供的代码,这本 ...

  3. HTML5 2D平台游戏开发#6地图绘制

    此前已经完成了一部分角色的动作,现在还缺少可以交互的地图让游戏看起来能玩.不过在开始之前应当考虑清楚使用什么类型的地图,就2D平台游戏来说,一般有两种类型的地图,Tile-based和Art-base ...

  4. android 开发 View _13 绘制图片与BitmapShader位图的图像渲染器

    BitmapShader位图的图像渲染器 TileMode 模式 Shader.TileMode.CLAMP 边缘拉伸. Shader.TileMode.MIRROR 在水平方向和垂直方向交替景象, ...

  5. Python 绘制棋盘

    import turtle pen = turtle.Pen() pen.speed(10) width = 30 # 格子宽度 count = 18 # 横向纵向格子数 o = width * co ...

  6. 用微信小程序开发的Canvas绘制可配置的转盘抽奖

    使用https://github.com/givebest/GB-canvas-turntable代码移植过而来. 其它 微信小程序感觉是个半成品,代码移植过程比较繁琐麻烦.canvas API 部分 ...

  7. 中国象棋游戏Chess(1) - 棋盘绘制以及棋子的绘制

    本项目都使用QT来实现绘图,没有任何第三方的资源. 工程详情:Github 首先将棋盘设计为一个类Board // Board.h // Board类实现了棋盘的绘制以及显示 // #ifndef B ...

  8. 【JavaScript游戏开发】使用HTML5 canvas开发的网页版中国象棋项目

    //V1.0 : 实现棋子的布局,画布及游戏场景的初始化 //V2.0 : 实现棋子的颜色改变 //V3.0 :实现所有象棋的走棋规则 //V4.0 : 实现所有棋子的吃子功能 完整的项目源码已经开源 ...

  9. HTML5学习总结——canvas绘制象棋(canvas绘图)

    一.HTML5学习总结——canvas绘制象棋 1.第一次:canvas绘制象棋(笨方法)示例代码: <!DOCTYPE html> <html> <head> & ...

随机推荐

  1. 初试 Vue.js

    1.为什么我会想要来弄弄vue这个前端框架呢? 答:前段时间被小程序刷屏了,然后就去弄了一下小程序,嗯挺简单的:头脑一发热后就想到vue2也发布一段时间了,何不也来尝尝vue2.0的味道,最后发现它们 ...

  2. JSP第六篇【自定义标签之传统标签】

    为什么要使用自定义标签? JSTL标签库只提供了简单的输出等功能,没有实现任何的HTML代码封装,并且某些复杂类型转换,或者逻辑处理的时候,JSTL标签库完成不了,需要自定义标签! 编写自定义标签的步 ...

  3. HIbernate实体类注解配置

    一.类级别注解 1.@Entity(name="EntityName") 必须 name为可选,对应数据库中一的个表 2.@Table(name="",cata ...

  4. 比较JqGrid与XtraGrid

    此只能比较两者的功能优劣,实现某种功能.效果的方便性和效率.首先分别粗略介绍XtraGrid和jqGrid DevExpress是目前.net下最为强大和完整的UI控件库, XtraGrid是这个控件 ...

  5. Hex to Int 【十六进制转十进制】

    long HexToInt(char *msgline){    long strlength,chvalue,tvalue;    WORD i;    chvalue=0;    strlengt ...

  6. activemq的安装与使用

    一.activemq的安装 环境:CentOS 6.JDK8 1. 确保系统已安装了可用的jdk版本2. 从网上下载 Linux 版的 ActiveMQ( apache-activemq-5.11.1 ...

  7. httpd日志和日志轮替工具

    html { font-family: sans-serif } body { margin: 0 } article,aside,details,figcaption,figure,footer,h ...

  8. javascript(js)创建对象的模式与继承的几种方式

    1.js创建对象的几种方式 工厂模式 为什么会产生工厂模式,原因是使用同一个接口创建很多对象,会产生大量的重复代码,为了解决这个问题,产生了工厂模式. function createPerson(na ...

  9. Python实战之SocketServer模块

    文章出处:http://www.cnblogs.com/wupeiqi/articles/5040823.html SocketServer内部使用 IO多路复用 以及 "多线程" ...

  10. 让asp.net网站支持多语言,使用资源文件

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="test.aspx.cs&quo ...