📄 mfc_wzqview.cpp
字号:
// MFC_WZQView.cpp : implementation of the CMFC_WZQView class
//
#include "stdafx.h"
#include "MFC_WZQ.h"
#include "MFC_WZQDoc.h"
#include "MFC_WZQView.h"
#include "Stat.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#define LineX 16
#define LineY 16
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
int StartDlgNum=1;
int WZQ[LineX][LineY];
int down=LineX;
int MAXLINE=LineX*30;
int info=1;
/////////////////////////////////////////////////////////////////////////////
// CMFC_WZQView
IMPLEMENT_DYNCREATE(CMFC_WZQView, CView)
BEGIN_MESSAGE_MAP(CMFC_WZQView, CView)
//{{AFX_MSG_MAP(CMFC_WZQView)
ON_WM_LBUTTONDOWN()
ON_COMMAND(ID_BUTTON_STAT, OnButtonStat)
ON_COMMAND(IDM_BAI, OnBai)
ON_COMMAND(IDM_HEI, OnHei)
ON_COMMAND(ID_TOOLBAI, OnToolbai)
ON_COMMAND(IDM_EXIT, OnExit)
ON_COMMAND(ID_TOOLEXT, OnToolext)
//}}AFX_MSG_MAP
// Standard printing commands
ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CMFC_WZQView construction/destruction
CMFC_WZQView::CMFC_WZQView()
{
// TODO: add construction code here
}
CMFC_WZQView::~CMFC_WZQView()
{
}
BOOL CMFC_WZQView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CMFC_WZQView drawing
void CMFC_WZQView::OnDraw(CDC* pDC)
{
CMFC_WZQDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
CStat StartDlg;
if(StartDlgNum==1)
{
StartDlg.DoModal();
StartDlgNum=0;
}
INFOTO();
}
/////////////////////////////////////////////////////////////////////////////
// CMFC_WZQView printing
BOOL CMFC_WZQView::OnPreparePrinting(CPrintInfo* pInfo)
{
// default preparation
return DoPreparePrinting(pInfo);
}
void CMFC_WZQView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add extra initialization before printing
}
void CMFC_WZQView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add cleanup after printing
}
/////////////////////////////////////////////////////////////////////////////
// CMFC_WZQView diagnostics
#ifdef _DEBUG
void CMFC_WZQView::AssertValid() const
{
CView::AssertValid();
}
void CMFC_WZQView::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}
CMFC_WZQDoc* CMFC_WZQView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CMFC_WZQDoc)));
return (CMFC_WZQDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CMFC_WZQView message handlers
void CMFC_WZQView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
int linex,liney,LX,LY;
CDC *pDC=GetDC();
COLORREF HRGB;
switch(down)
{
case 1://判断黑
{
if(point.x>=30&&point.y>=30&&point.x<=MAXLINE&&point.y<=MAXLINE)
{
linex=point.x;
liney=point.y;
LX=drawLineX(linex);
LY=drawLineY(liney);
HRGB=RGB(0,0,0);
DrawB(LX,LY,HRGB);
WZQ[LY/30][LX/30]=1;
down=0;
gameover();
AIAuto();
}
}break;
case 0://判断白
{
if(point.x>=30&&point.y>=30&&point.x<=MAXLINE&&point.y<=MAXLINE)
{
linex=point.x;
liney=point.y;
LX=drawLineX(linex);
LY=drawLineY(liney);
HRGB=RGB(255,255,255);
DrawB(LX,LY,HRGB);
WZQ[LY/30][LX/30]=2;
down=1;
gameover();
AIAuto();
}
}break;
default:break;
}
CView::OnLButtonDown(nFlags, point);
}
int CMFC_WZQView::SU(int downs)
{
if(downs==1)
for(int i=0;i<LineX;i++)
for(int j=0;j<LineY;j++)
WZQ[i][j]=30;
return 1;
}
void CMFC_WZQView::gameover()
{
for(int i=0;i<LineX;i++)//横判断
for(int j=0;j<LineY-4;j++)
{
//if(j-2>=0&&j+2<LineY)
//{
if(WZQ[i][j]+WZQ[i][j+1]+WZQ[i][j+2]+WZQ[i][j+3]+WZQ[i][j+4]==5){AfxMessageBox("黑方胜利!");info=1;INFOTO();}
if(WZQ[i][j]+WZQ[i][j+1]+WZQ[i][j+2]+WZQ[i][j+3]+WZQ[i][j+4]==10){AfxMessageBox("白方胜利!");info=1;INFOTO();}
//}
}
for(i=0;i<LineX-4;i++)//竖判断
for(int j=0;j<LineY;j++)
{
//if(j-2>=0&&j+2<LineY)
//{
if(WZQ[i][j]+WZQ[i+1][j]+WZQ[i+2][j]+WZQ[i+3][j]+WZQ[i+4][j]==5){AfxMessageBox("黑方胜利!");info=1;INFOTO();}
if(WZQ[i][j]+WZQ[i+1][j]+WZQ[i+2][j]+WZQ[i+3][j]+WZQ[i+4][j]==10){AfxMessageBox("白方胜利!");info=1;INFOTO();}
//}
}
for(i=0;i<LineX;i++)// \型判断
for(int j=0;j<LineY;j++)
{
//if(j-2>=0&&j+2<LineY)
//{
if(WZQ[i][j]+WZQ[i+1][j+1]+WZQ[i+2][j+2]+WZQ[i+3][j+3]+WZQ[i+4][j+4]==5){AfxMessageBox("黑方胜利!");info=1;INFOTO();}
if(WZQ[i][j]+WZQ[i+1][j+1]+WZQ[i+2][j+2]+WZQ[i+3][j+3]+WZQ[i+4][j+4]==10){AfxMessageBox("白方胜利!");info=1;INFOTO();}
//}
}
for(i=0;i<LineX;i++)// /型判断
for(int j=0;j<LineY;j++)
{
//if(j-2>=0&&j+2<LineY)
//{
if(WZQ[i][j]+WZQ[i-1][j+1]+WZQ[i-2][j+2]+WZQ[i-3][j+3]+WZQ[i-4][j+4]==5){AfxMessageBox("黑方胜利!");info=1;INFOTO();}
if(WZQ[i][j]+WZQ[i-1][j+1]+WZQ[i-2][j+2]+WZQ[i-3][j+3]+WZQ[i-4][j+4]==10){AfxMessageBox("白方胜利!");info=1;INFOTO();}
//}
}
}
int CMFC_WZQView::drawLineX(int x)//返回X坐标
{
int x0[LineX]={30,60,90,120,150,180,210,240,270,300,330,360,390,420,450,480};
int x1[LineX];
int x2[LineX];
int t;
for(int a=0;a<LineX;a++)
{
x1[a]=abs(x0[a]-x);
x2[a]=x1[a];
}
for(int i=0;i<LineX;i++)
for(int j=0;j<i;j++)
if(x1[i]<x1[j])
{
t=x1[j];
x1[j]=x1[i];
x1[i]=t;
}
for(int c2=0;c2<LineX;c2++)
if(x2[c2]==x1[0])
return x0[c2];
}
int CMFC_WZQView::drawLineY(int y)//返回Y坐标
{
int x0[LineY]={30,60,90,120,150,180,210,240,270,300,330,360,390,420,450,480};
int x1[LineY];
int x2[LineY];
int t;
for(int a=0;a<LineY;a++)
{
x1[a]=abs(x0[a]-y);
x2[a]=x1[a];
}
for(int i=0;i<LineY;i++)
for(int j=0;j<i;j++)
if(x1[i]<x1[j])
{
t=x1[j];
x1[j]=x1[i];
x1[i]=t;
}
for(int c2=0;c2<LineY;c2++)
if(x2[c2]==x1[0])
return x0[c2];
}
void CMFC_WZQView::OnButtonStat()//初始化
{
// TODO: Add your command handler code here
down=1;
AfxMessageBox("执黑先手......");
}
void CMFC_WZQView::INFOTO()
{
down=LineX*LineY;
CDC *pDC=GetDC();
CBrush backBrush(RGB(100,100,0));
CBrush* pOldBrush = pDC->SelectObject(&backBrush);
CRect rect;
pDC->GetClipBox(&rect);// 获取需要用背景刷子涂抹的区域
pDC->PatBlt(rect.left, rect.top, rect.Width(), rect.Height(),PATCOPY);
pDC->SelectObject(pOldBrush);
//MoveWindow(30,30,500,500,FALSE);
//画棋盘
for(int i=1;i<=LineX;i++)
{
pDC->MoveTo(i*30,30);
pDC->LineTo(i*30,LineX*30);
pDC->MoveTo(30,i*30);
pDC->LineTo(LineY*30,i*30);
}
if(info==1)
{
SU(1);
info=0;
}
}
void CMFC_WZQView::OnBai()
{
// TODO: Add your command handler code here
down=1;
AfxMessageBox("执黑先手......");
}
void CMFC_WZQView::OnHei()
{
// TODO: Add your command handler code here
down=0;
AfxMessageBox("执白先手......");
}
void CMFC_WZQView::OnToolbai()
{
// TODO: Add your command handler code here
down=0;
AfxMessageBox("执白先手......");
}
void CMFC_WZQView::AIAuto()
{
//自动
}
void CMFC_WZQView::DrawB(int LXTO,int LYTO,COLORREF COLRGB)
{
CDC *pDC=GetDC();
if(WZQ[LYTO/30][LXTO/30]!=1&&WZQ[LYTO/30][LXTO/30]!=2)
{
CBrush DrawBrush=(COLRGB);
CBrush *Drawbrush=pDC->SelectObject(&DrawBrush);
pDC->Ellipse(LXTO-13,LYTO-13,LXTO+13,LYTO+13);
pDC->SelectObject(DrawBrush);
}
}
void CMFC_WZQView::OnExit()
{
// TODO: Add your command handler code here
this->PostMessage(WM_QUIT);
}
void CMFC_WZQView::OnToolext()
{
// TODO: Add your command handler code here
this->PostMessage(WM_QUIT);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -