15,979
社区成员
发帖
与我相关
我的任务
分享
void CShinRenjuDlg::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
//CPaintDC dc(this);
//CRect rect;
//GetClientRect(&rect);
//CDC *pDC=GetDC();
//CDC Dc;
//Dc.CreateCompatibleDC(pDC);
CClientDC dc(this);
//判断是否在棋盘内
if(point.x>40&&point.x<520&&point.y>60&&point.y<540)
{
//转换成数组坐标:(40,60)为棋盘第一个点的像素坐标
int px=(point.x-40)/40;
int py=(point.y-60)/40;
//判断是否已经有棋子
if(ColorWhite==TRUE&&Renju[px][py]==0)
{
//创建白棋位图刷子并绘制
CDC dcWhite;
dcWhite.CreateCompatibleDC(&dc);
dcWhite.SelectObject(m_bmWhite);
dc.BitBlt(px*40+40,py*40+60,160,160,&dcWhite,0,0,SRCCOPY);
//Dc.SelectObject(m_bmWhite);
//pDC->BitBlt(px*40+40,py*40+60,36,36,&Dc,0,0,SRCCOPY);
//表示存在白棋
Renju[px][py]=1;
Invalidate();
//检查是否结束
GameOver(point);
//换黑棋下
ColorWhite=FALSE;
}
else if(ColorWhite==FALSE&&Renju[px][py]==0)
{
CDC dcBlack;
dcBlack.CreateCompatibleDC(&dc);
dcBlack.SelectObject(m_bmBlack);
dc.BitBlt(px*40+40,py*40+60,160,160,&dcBlack,0,0,SRCCOPY);
//Dc.SelectObject(m_bmBlack);
//pDC->BitBlt(px*40+40,py*40+60,36,36,&Dc,0,0,SRCCOPY);
//表示存在黑棋
Renju[px][py]=-1;
//变数组坐标为棋盘坐标
CPoint OverPoint;
OverPoint.x=px*40+40;
OverPoint.y=py*40+60;
Invalidate();
//检查是否结束
GameOver(OverPoint);
//换白棋下
ColorWhite=TRUE;
}
}
CDialog::OnLButtonUp(nFlags, point);
}
void CShinRenjuDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting
SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
//CDialog::OnPaint();
CPaintDC dc(this);
CRect rect;
GetClientRect(&rect);
if(GameStart==FALSE){//加载ShinRenju Dailog的封面
CDC dcCover;
dcCover.CreateCompatibleDC(&dc);
dcCover.SelectObject(m_bmCover);
dc.BitBlt(0,0,rect.Width(),rect.Height(),&dcCover,0,0,SRCCOPY);
}
//如果开始画棋盘
else
{
CBitmap bmpdot;
bmpdot.LoadBitmap(IDB_BKGROUND_DOT);//加载棋盘
CBrush brushdot;
brushdot.CreatePatternBrush(&bmpdot);
dc.FillRect(&rect,&brushdot);
//测试代码
// CDC dcWhite;
// dcWhite.CreateCompatibleDC(&dc);
// dcWhite.SelectObject(m_bmWhite);
// dc.BitBlt(40,60,36,36,&dcWhite,0,0,SRCCOPY);
// CDC dcBlack;
// dcBlack.CreateCompatibleDC(&dc);
// dcBlack.SelectObject(m_bmBlack);
// dc.BitBlt(80,60,36,36,&dcBlack,0,0,SRCCOPY);
//重画时显示存在的棋子
for(int n=0;n<13;n++)
for(int m=0;m<13;m++)
{
if(Renju[n][m]==1)
{
//显示白棋
CDC dcWhite;
dcWhite.CreateCompatibleDC(&dc);
dcWhite.SelectObject(m_bmWhite);
dc.BitBlt(n*40+40,m*40+60,36,36,&dcWhite,0,0,SRCCOPY);
}
else if(Renju[n][m]==-1)
{
//显示黑棋
CDC dcBlack;
dcBlack.CreateCompatibleDC(&dc);
dcBlack.SelectObject(m_bmBlack);
dc.BitBlt(n*40+40,m*40+60,36,36,&dcBlack,0,0,SRCCOPY);
}
}
}
}
//Invalidate();
}