logo资料库

WINDOWS程序设计 MFC课程设计报告五子棋.doc

第1页 / 共17页
第2页 / 共17页
第3页 / 共17页
第4页 / 共17页
第5页 / 共17页
第6页 / 共17页
第7页 / 共17页
第8页 / 共17页
资料共17页,剩余部分请下载后查看
1.课程设计目的及要求
1.1设计目的及问题描述
Windows程序设计课程考核;
1.2设计要求
题目任选可以是小游戏、数据库系统、通信软件等。(不可以是教材的例子,程序需有一定规模)
1、必须用到所学的控件、对话框、菜单、工具栏、消息处理、视图框架、数据库、图形等大部分知识
2、创建的项目名“学号姓名XX”,学号仅取后四位,需严格遵守。
3、若该程序涉及多个窗口则每个窗口对应的类名必须包含学号(取后四位),需严格遵守。
1.3软件、硬件环境
Microsoft Visual C++ 6.0;
2.课程设计步骤
1.构思游戏;
2.使用VC++6.0,新建单文档工程,默认完成;
3.设计界面;
4.添加变量函数,实现游戏内容;
5.调试,改进,完善;
6.书写实验报告
3.课程设计内容
3.1概要设计
3.2主要技术
3.3程序设计结果(界面截图、操作流程)
1.添加资源:
添加两张位图:黑棋(IDB_BITMAP1),白棋(IDB_BITMAP2);
添加菜单栏:
游戏:人对机(ID_COMPUTER)
人对人(ID_PLAYER)
保存(ID_SAVE)
读取(ID_OPEN)
帮助:规则(ID_RELES)
2.在View类中添加成员变量和函数:
变量:
void drawqipan(CDC*pDC);//画棋盘界面
CPoint gamedown();//黑子自行选择棋子位置
bool candown();//有没有子能够下
void gameover();//结束
bool ifdown(CPoint point,bool colorx);//可不可以落子
void panduan(CPoint point,bool colorx);//判断翻转
afx_msg void OnStart();
afx_msg void OnLButtonUp(UINT nFlags, CPoint point
3.构造函数
CMy7137View::CMy7137View()
{
// TODO: add construction code here
hcursorblack=AfxGetApp()->LoadCursor(IDC_CURSOR1)
hcursorwhite=AfxGetApp()->LoadCursor(IDC_CURSOR2)
m_bmwhite.LoadBitmap(IDB_WHITE);
m_bmblack.LoadBitmap(IDB_BLACK);
m_bmJM.LoadBitmap(IDB_JIEMIAN);
ifstart=false;
for(int i=0;i<19;i++)
for(int j=0;j<19;j++)
wzq[i][j]=0;
colorwhite=true;
//默认为人对机
vscomputer=1;
}
4.设置窗口大小
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
if( !CFrameWnd::PreCreateWindow(cs) )
return FALSE;
// TODO: Modify the Window class or styles here b
// the CREATESTRUCT cs
cs.style=WS_SYSMENU|WS_OVERLAPPED|WS_MINIMIZEBOX;
//设置窗口大小:400*340
cs.cx=450;
cs.cy=530;
return TRUE;
}
5.OnDraw函数
void CMy7137View::OnDraw(CDC* pDC)
{
CMy7137Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
if(ifstart==true)
{
CBrush mybrush1;
mybrush1.CreateSolidBrush(RGB(222,184,134));
CRect myrect1(0,0,1200,800);
pDC->FillRect(myrect1,&mybrush1);
CBrush mybrush;
mybrush.CreateSolidBrush(RGB(0,0,0));
CRect myrect(217,217,223,223);
pDC->FillRect(myrect,&mybrush);
//画黑框线
CPen mypen1;
mypen1.CreatePen(PS_SOLID,3,RGB(0,0,0));
pDC->SelectObject(&mypen1);
pDC->MoveTo(30,30);
pDC->LineTo(410,30);
pDC->LineTo(410,410);
pDC->LineTo(30,410);
pDC->LineTo(30,30);
CPen mypen;
CPen*myoldPen;
mypen.CreatePen(PS_SOLID,1,RGB(0,0,0));
myoldPen=pDC->SelectObject(&mypen);
for(int i=0;i<19;i++)
{
pDC->MoveTo(40,40+i*20);
pDC->LineTo(400,40+i*20);
pDC->MoveTo(40+i*20,40);
pDC->LineTo(40+i*20,400);
}
CDC Dc;
if(Dc.CreateCompatibleDC(pDC)==FALSE)
AfxMessageBox("Can't create DC");
for(int n=0;n<19;n++)
for(int m=0;m<19;m++)
if(wzq[n][m]==1)
{
Dc.SelectObject(m_bmwhite);
pDC->BitBlt(n*20+32,m*20+32,160,160,&Dc,0,0,SR
}
else if(wzq[n][m]==-1)
{
Dc.SelectObject(m_bmblack);
pDC->BitBlt(n*20+32,m*20+32,160,160,&Dc,0,0,S
}
}
else
{
CDC Dc;
if(Dc.CreateCompatibleDC(pDC)==FALSE)
AfxMessageBox("Can't create DC");
Dc.SelectObject(m_bmJM);
pDC->BitBlt(0,0,800,600,&Dc,0,0,SRCCOPY);
}
}
7.computerdown函数
void CMy7137View::computerdown()
{
//把各种情形赋值为如下
bpointcan4=(-1,-1);
wpointcan4=(-1,-1);
bpointcan3=(-1,-1);
wpointcan3=(-1,-1);
bpointcan2=(-1,-1);
wpointcan2=(-1,-1);
bpointcan1=(-1,-1);
//搜索最好的落棋点
for(int i=0;i<19;i++)
for(int j=0;j<19;j++)
bestputdown(i,j);
//判断放在哪里
//棋多的位置优先
//黑白一样多时黑先
if(bpointcan4.x!=-1)
{
putdown(bpointcan4);
return;
}
else if(wpointcan4.x!=-1)
{
putdown(wpointcan4);
return;
}
else if(bpointcan3.x!=-1)
{
putdown(bpointcan3);
return;
}
else if(wpointcan3.x!=-1)
{
putdown(wpointcan3);
return;
}
else if(bpointcan2.x!=-1)
{
putdown(bpointcan2);
return;
}
else if(wpointcan2.x!=-1)
{
putdown(wpointcan2);
return;
}
else
{
putdown(bpointcan1);
return;
}
}
8.maxnum函数
CPoint CMy7137View::maxnum(int a, int b, int c, in
{
//point.x为方向值
//point.y为最大值
CPoint point;
if(a>=b)
{
point.x=0;
point.y=a;
}
else
{
point.x=1;
point.y=b;
}
if(c>point.y)
{
point.x=2;
point.y=c;
}
if(d>point.y)
{
point.x=3;
point.y=d;
}
return point;
}
9.putdown函数
void CMy7137View::putdown(CPoint point)
{
CDC *pDC=GetDC();
CDC Dc;
if(Dc.CreateCompatibleDC(pDC)==FALSE)
AfxMessageBox("Can't create DC");
Dc.SelectObject(m_bmblack);
pDC->BitBlt(point.x*20+32,point.y*20+32,160,160,
wzq[point.x][point.y]=-1;
//变数组坐标为棋盘坐标
CPoint overpoint;
overpoint.x=point.x*20+30;
overpoint.y=point.y*20+30;
over(overpoint);
colorwhite=true;
}
10.OnSave函数
void CMy7137View::OnSave()
{
// TODO: Add your command handler code here
//设置保存的文件,后缀名wzq
CFileDialog dlg(FALSE,"wzq",NULL,OFN_HIDERE
//如果公共类对话框为确定
if(dlg.DoModal()==IDOK)
//获取文件名
dlg.GetFileName();
//否则,退出
else
return;
//字符串变量
CString str;
int i,j;
CStdioFile file;
//如果有问题,退出
if(file.Open(dlg.GetFileName(),CFile::modeCr
{
AfxMessageBox("save error!");
return;
}
//循环把棋盘数组的值写进文件
for(i=0;i<19;i++)
for(j=0;j<19;j++)
{
if(wzq[i][j]==-1)
file.WriteString("-1\n
if(wzq[i][j]==0)
file.WriteString("0\n"
if(wzq[i][j]==1)
file.WriteString("1\n"
}
//保存当前下棋颜色
if(colorwhite==true)
file.WriteString("1\n");
else
file.WriteString("0\n");
//关闭文件
file.Close();
}
3.4 程序截图
4.课程设计总结
4.1遇到的问题及如何解决
学 院 Windows 程序设计 课程考核报告 班 级: 学 号: 姓 名: 得 分: 2011 年 XX 月 XX 日
Windows 程序设计设计 目录 1. 课程设计目的及要求 ................................ - 2 - 1.1 设计目的及问题描述 ..............................- 2 - 1.2 设计要求 ....................................... - 2 - 1.3 软件、硬件环境 ..................................- 2 - 2. 课程设计步骤 ...................................... - 2 - 3. 课程设计内容 ...................................... - 2 - 3.1 概要设计 ....................................... - 2 - 3.2 主要技术 ....................................... - 3 - 3.3 程序设计结果(操作流程) ........................- 3 - 3.4 程序截图 ...................................... - 15 - 4. 课程设计总结 ..................................... - 16 - 4.1 遇到的问题及如何解决 ...........................- 16 - - 1 -
Windows 程序设计设计 1. 课程设计目的及要求 1.1 设计目的及问题描述 Windows 程序设计课程考核; 1.2 设计要求 题目任选可以是小游戏、数据库系统、通信软件等。(不可以是教材的例 子,程序需有一定规模) 1、必须用到所学的控件、对话框、菜单、工具栏、消息处理、视图框架、 数据库、图形等大部分知识 2、创建的项目名“学号姓名 XX”,学号仅取后四位,需严格遵守。 3、若该程序涉及多个窗口则每个窗口对应的类名必须包含学号(取后四 位),需严格遵守。 1.3 软件、硬件环境 Microsoft Visual C++ 6.0; 2. 课程设计步骤 1. 构思游戏; 2. 使用 VC++6.0,新建单文档工程,默认完成; 3. 设计界面; 4. 添加变量函数,实现游戏内容; 5. 调试,改进,完善; 6. 书写实验报告 3. 课程设计内容 3.1 概要设计 程序总体框架描述 我设计的是小游戏,游戏为五子棋,分为人与人和人与电脑两种模式,人 用鼠标控制落子,电脑自动计算落子。按照游戏规则,直至游戏结束。点 击确定按钮可重新开始。 开始游戏 - 2 -
Windows 程序设计设计 Y 白棋下 是否结束 N 黑棋下 能否结束 Y N Y 结束游戏 图 3-1 游戏运行流程 3.2 主要技术 1. 文本显示 2. 位图显示 3. 画图形界面 4. 添加菜单工具栏 5. 简单的人工智能 3.3 程序设计结果(界面截图、操作流程) 1. 添加资源: - 3 -
Windows 程序设计设计 添加两张位图:黑棋(IDB_BITMAP1),白棋(IDB_BITMAP2); 添加菜单栏: 游戏:人对机(ID_COMPUTER) 人对人(ID_PLAYER) 保存(ID_SAVE) 读取(ID_OPEN) 帮助:规则(ID_RELES) 2. 在 View 类中添加成员变量和函数: 变量: 两个鼠标: HCURSOR hcursorwhite; HCURSOR hcursorblack; 棋盘数组:nt wzq[19][19]; 判断 colorwhite TRUE 时白棋下,否则黑棋下:bool colorwhite; 棋子位图:CBitmap m_bmblack; CBitmap m_bmwhite; 保存文件:void Save(); 检查是否结束:void over(CPoint point); 鼠标操作:afx_msg void OnLButtonUp(UINT nFlags, CPoint point); 鼠 标 图 形 更 换 : afx_msg BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message); 等等………… 函数: void drawqipan(CDC*pDC);//画棋盘界面 CPoint gamedown();//黑子自行选择棋子位置 bool candown();//有没有子能够下 void gameover();//结束 bool ifdown(CPoint point,bool colorx);//可不可以落子 void panduan(CPoint point,bool colorx);//判断翻转 afx_msg void OnStart(); afx_msg void OnLButtonUp(UINT nFlags, CPoint point); 3. 构造函数 CMy7137View::CMy7137View() { // TODO: add construction code here hcursorblack=AfxGetApp()->LoadCursor(IDC_CURSOR1); hcursorwhite=AfxGetApp()->LoadCursor(IDC_CURSOR2); - 4 -
Windows 程序设计设计 m_bmwhite.LoadBitmap(IDB_WHITE); m_bmblack.LoadBitmap(IDB_BLACK); m_bmJM.LoadBitmap(IDB_JIEMIAN); ifstart=false; for(int i=0;i<19;i++) for(int j=0;j<19;j++) wzq[i][j]=0; colorwhite=true; //默认为人对机 vscomputer=1; } 4. 设置窗口大小 BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) { if( !CFrameWnd::PreCreateWindow(cs) ) return FALSE; // TODO: Modify the Window class or styles here by modifying // the CREATESTRUCT cs cs.style=WS_SYSMENU|WS_OVERLAPPED|WS_MINIMIZEBOX;//; //设置窗口大小:400*340 cs.cx=450; cs.cy=530; return TRUE; } 5. OnDraw 函数 void CMy7137View::OnDraw(CDC* pDC) { CMy7137Doc* pDoc = GetDocument(); ASSERT_VALID(pDoc); // TODO: add draw code for native data here if(ifstart==true) { CBrush mybrush1; mybrush1.CreateSolidBrush(RGB(222,184,134)); CRect myrect1(0,0,1200,800); pDC->FillRect(myrect1,&mybrush1); - 5 -
Windows 程序设计设计 CBrush mybrush; mybrush.CreateSolidBrush(RGB(0,0,0)); CRect myrect(217,217,223,223); pDC->FillRect(myrect,&mybrush); //画黑框线 CPen mypen1; mypen1.CreatePen(PS_SOLID,3,RGB(0,0,0)); pDC->SelectObject(&mypen1); pDC->MoveTo(30,30); pDC->LineTo(410,30); pDC->LineTo(410,410); pDC->LineTo(30,410); pDC->LineTo(30,30); CPen mypen; CPen*myoldPen; mypen.CreatePen(PS_SOLID,1,RGB(0,0,0)); myoldPen=pDC->SelectObject(&mypen); for(int i=0;i<19;i++) { } pDC->MoveTo(40,40+i*20); pDC->LineTo(400,40+i*20); pDC->MoveTo(40+i*20,40); pDC->LineTo(40+i*20,400); CDC Dc; if(Dc.CreateCompatibleDC(pDC)==FALSE) AfxMessageBox("Can't create DC"); for(int n=0;n<19;n++) for(int m=0;m<19;m++) if(wzq[n][m]==1) { } Dc.SelectObject(m_bmwhite); pDC->BitBlt(n*20+32,m*20+32,160,160,&Dc,0,0,SRCCOPY); else if(wzq[n][m]==-1) { - 6 -
Windows 程序设计设计 Dc.SelectObject(m_bmblack); pDC->BitBlt(n*20+32,m*20+32,160,160,&Dc,0,0,SRCCOPY); } } else { CDC Dc; if(Dc.CreateCompatibleDC(pDC)==FALSE) AfxMessageBox("Can't create DC"); Dc.SelectObject(m_bmJM); pDC->BitBlt(0,0,800,600,&Dc,0,0,SRCCOPY); } } 6. Over 函数 void CMy7137View::over(CPoint point) { //获取鼠标指向数组位置 int x=(point.x-30)/20; int y=(point.y-30)/20; //开始判断的坐标 int xx,yy; if(x<4) xx=0; else xx=x-4; if(y<4) yy=0; else yy=y-4; int i,j,a; //横向判断 for(i=xx;i<15;i++) { a=0; for(j=i;j
分享到:
收藏