⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mfc_wzqview.cpp

📁 非常好用的五子棋游戏源码
💻 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 + -