五子棋游戏
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
五子棋游戏
一、需求分析
本程序是五子棋对战系统,当用鼠标点击棋盘时依次在点击的位置放置黑白棋子。具有以下功能:系统自动判断胜负。可供用户选择棋子的颜色。棋谱保存功能。一局棋未下完时可以保存当前状态以待下次续下,或一局棋结束后保留棋谱以复盘。
二、总体设计
类名一:CGameView
用途:在这个类中实现自动判断胜负功能,棋谱保存功能。实现选择棋子颜色菜单的处理函数。
主要成员变量:int m_icury;
int m_icurx;
CBitmap m_bmwhite;
CBitmap m_bmblack;
CBitmap m_bmblank;
bool colorwhite;
int wzq[19][19];
HCURSOR hcursorblack;
HCURSOR hcursorwhite;
主要成员函数:
(1) void CGameView::OnDraw(CDC* pDC)
{
CGameDoc* pDoc = GetDocument();
ASSERT_V ALID(pDoc);
// TODO: add draw code for native data here
CBrush mybrush1;
mybrush1.CreateSolidBrush(RGB(250,250,250));
CRect myrect1(0,0,1200,800);
pDC->FillRect(myrect1,&mybrush1); //填充白色背景
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)
{
Dc.SelectObject(m_bmblack);
pDC->BitBlt(n*20+32,m*20+32,160,160,&Dc,0,0,SRCCOPY);
}
}
函数功能:设置棋盘背景颜色,画棋盘
(2) void CGameView::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CDC *pDC=GetDC();
CDC Dc;
if(Dc.CreateCompatibleDC(pDC)==FALSE)
AfxMessageBox("Can't create DC");
if(point.x>30 && point.x<410 && point.y>30 && point.y<410)
{
int px=(point.x-30)/20;
int py=(point.y-30)/20;
m_icurx=px;
m_icury=py;
if(colorwhite&&wzq[px][py]==0)
{
Dc.SelectObject(m_bmwhite);
pDC->BitBlt(px*20+32,py*20+32,160,160,&Dc,0,0,SRCCOPY);
wzq[px][py]=1;
over(point);
colorwhite=false;
}
else if(wzq[px][py]==0)
{
Dc.SelectObject(m_bmblack);
pDC->BitBlt(px*20+32,py*20+32,160,160,&Dc,0,0,SRCCOPY);
wzq[px][py]=-1;
over(point);
colorwhite=true;
}
}
CView::OnLButtonUp(nFlags, point);
}
函数功能:实现下棋功能,即依次在点击的位置放置黑白棋子的功能(3)void CGameView::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;