目录
一、设计任务,目的与要求 (1)
1.设计内容: (1)
2.设计目的: (1)
3.设计要求: (1)
二、概要设计 (1)
1.设计流程: (1)
三、运行结果及分析 (4)
1.程序运行测试: (4)
2.应用运行的结果: (5)
四、源代码 (6)
一、设计任务,目的与要求
1.设计内容:
在屏幕上绘制输出国际象棋棋盘,分别利用命令提示行和MFC制作输出。
2.设计目的:
1)复习、巩固C++语言的基础知识,进一步加深对C++语言的理解和掌握;2)课程设计为将课本上的理论知识和实际有机的结合起来,锻炼分析解决实际问题的能力。
提高适应实际,实践编程的能力;
3)加强学生的团队合作能力。
3.设计要求:
1)对系统进行功能模块分析、控制模块分析正确,符合课题要求,实现相应功能;可以加以其他功能或修饰,使程序更加完善、合理;
2)系统设计要实用,编程简练,可用,功能全面;
3)说明书、流程图要清楚;
4)记录设计情况(备查,也为编写设计说明书作好准备);
5)要求采用模块化程序设计方法,要求上机调试通过和按设计报告格式;6)设计上交内容:设计报告一人一份(按格式书写),源程序文件。
二、概要设计
1.设计流程:
1)设计要求:
(1)国际象棋棋盘是个正方形,由横纵各8格、颜色一深一浅交错排列的64
个小方格组成,并且对奕时右下角为白色方格。
(2)能够写出相应的源程序代码,采用结构化、模块化程序设计方法,功能完善,界面要美观;
(3)所设计的系统要求运行没有错误;
(4)当程序运行时弹出一个界面,并显示棋盘;
(5)最后经验收合格后,按要求写出课程设计报告。
2)运行环境:
本设计使用的运行环境是Microsoft Visual C++ 6.0开发环境,所做的是基于MFC的打印国际象棋棋盘的应用程序。
3)总体设计:
1.用命令提示行输出
棋盘是横竖各8个方格排列而成的,将横定为排,纵定为列。
横向有8排编号为0到7,纵向亦有8列编号为0到7。
观察棋盘特点黑白相间可知排号与列号相加为偶数的是白色方块,反之为黑色方块。
例如第0排第5列为(0+5)=5,结果为奇数则为白色。
再如第3排每1列为(3+1)=4,结果为偶数则为黑色。
据此打印相应的方块形成整个棋盘。
本设计中白色方格用两个ASCII码为219的符号(如图)形成,黑色方格用两个空格形成。
图1 ASCII码对照表
ASCII 码使用指定的7 位或8 位二进制数组合来表示128 或256 种可能的字符。
标准ASCII 码也叫基础ASCII码,使用7 位二进制数来表示所有的大写和小写字母,数字0 到9、标点符号,以及在美式英语中使用的特殊控制字符。
其中:0~31及127(共33个)是控制字符或通信专用字符(其余为可显示字
符),ASCII值为8、9、10 和13 分别转换为退格、制表、换行和回车字符。
它们并没有特定的图形显示,但会依不同的应用程序,而对文本显示有不同的影响。
48~57为0到9十个阿拉伯数字;65~90为26个大写英文字母,97~122号为26个小写英文字母,其余为一些标点符号、运算符号等。
后128个称为扩展ASCII码。
扩展ASCII 码允许将每个字符的第8 位用于确定附加的128 个特殊符号字符、外来语字母和图形符号。
2.用MFC绘制输出
MFC(Microsoft Foundation Classes),是微软公司提供的一个类库,以C++类的形式封装了Windows的API,并且包含一个应用程序框架,以减少应用程序开发人员的工作量。
其中包含的类包含大量句柄封装类和很多内建控件和组件的封装类。
与其他所有的Windows 应用程序一样,在使用MFC 的应用程序中也要处理系统消息,但是在MFC中消息处理更容易,封装得更好,更易于维护。
下图为应用程序的执行过程
图2 应用程序的执行过程
Windows 使用图形设备接口(GDI)进行图形和文本输出,MFC 封装了GDI 对象,提供了CGdiObject 类和CDC 类支持图形和文本输出。
应用程序可以使用GDI 创建矢量图形、光栅图形和文本3 种类型的图形输出,本设计主要是输出一定形状的矢量图形。
MFC 封装了DC,提供CDC 类及它的子类以访问GDI。
MFC 提供的设备环境类包括CDC、CPaintDC、CClientDC、CWindowDC 和CMetaFileDC 等,其中CDC 类是MFC 设备环境类的基类,其他MFC 设备环境类都是CDC 类的派生类,CDC 提供了基本的绘图操作函数,如画点、画线、画圆、画矩形、画多边形等。
本设计主要用到Rectangle( )函数。
它根据指定的左上角和右下角坐标绘制一个矩形,其格式如下:
CRect rect(0,0,100,100); //括号里的参数是左上角与右下角的坐标
pDC->Rectangle(&rect);
在绘制图形和图像时,颜色是一个重要的因素。
Windows 用COLORREF 类型的数据存放颜色。
它实际上是一个32 位整数。
任何一种颜色都是由红、绿、蓝3 种基本颜色组成的,COLORREF 类型数据的低位字节存放红色强度值,第2 个字节存放绿色强度值,第3个字节存放蓝色强度值,高位字节为0,每一种颜色分量的取值范围为0~255。
直接设置COLORREF 类型的数据不太方便。
MFC 提供了RGB 宏,用于设置颜色,它将其中的红、绿、蓝分量值转换为COLORREF 类型的颜色数据,其使用形式为:
RGB(byRed,byGreen,byBlue)
其中参数byRed、byGreen 和byBlue 分别表示红、绿、蓝分量值(范围0~255)。
设计中用到了RGB(192,192,192)和RGB(0,0,0),他们分别为灰色和黑色。
程序中是以某一坐标为参考点在OnDraw函数中形成两层循环利用笔刷绘
制黑白间的64格棋盘。
三、运行结果及分析
1.程序运行测试:
1.进入VC++环境,文件新建一个单文档的MFC 应用程序,命名为“绘制国际象棋棋盘”。
2.选择项目工作区的ClassView,展开CMyView 类,找到成员函数OnDraw()并输入绘制代码。
3. 编译、链接并运行程序,等到所要求的棋盘。
2.应用运行的结果:
1)利用命令提示行输出:
2)利用MFC绘图输出:
四、源代码
1.用命令提示行打印棋盘
#include"stdio.h"
#include<windows.h>
int main()
{
int i,j;
SetConsoleOutputCP(437); //显示大于127的asc码
for(i=0;i<8;i++)
{
for(j=0;j<8;j++)
if((i+j)%2==0)
printf("%c%c",219,219);
else
printf(" ");
printf("\n");
}
return 0;
}
2.用MFC应用程序绘制棋盘
为了节省篇幅,只写出了实现本设计中OnDraw()函数中的主要绘制代码,程序如下:
void CMyView::OnDraw(CDC* pDC)
{
CMyDoc* pDoc = GetDocument();
ASSERT_V ALID(pDoc);
CBrush *BrushOld,BrushNew; //建立刷指针
COLORREF BrushClr[]={RGB(192,192,192),RGB(0,0,0)};//选用灰色和黑色COLORREF BrushColor;
int x,y;
pDC->TextOut(200,20,"国际象棋棋盘"); //在坐标处输出标题
for(int i=0;i<8;i++) //列控制
{
for(int j=0;j<8;j++) //行控制
{
x=i+1;
y=j+1;
if((i+j)%2==0)
{
BrushColor=BrushClr[0];
BrushNew.CreateSolidBrush(BrushColor); //创建实心画刷
BrushOld=pDC->SelectObject(&BrushNew); //选用实心画刷}
else
{
BrushColor=BrushClr[1];
BrushNew.CreateSolidBrush(BrushColor); //创建实心画刷
BrushOld=pDC->SelectObject(&BrushNew); //选用实心画刷}
pDC->Rectangle(50*x,50*y,50*(x+1),50*(y+1));
pDC->SelectObject(BrushOld); //还原画刷
BrushNew.DeleteObject(); //释放画刷
}
}
}。