📄 chessdlg.cpp
字号:
// The system calls this to obtain the cursor to display while the user drags
// the minimized window.
HCURSOR CChessDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}
void CChessDlg::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
//CDC *pDC=GetDC();
CPoint s;
if(Flag)
{
if((ChessID=ChessMove.FindChess(point,pDC))!=-1)
{
if(ChessID>15)
{
memcpy(vv,ChessMove.board.ChessBoard,90*4);
Flag=false;
//sndPlaySound("wc010.wav",SND_ASYNC);
PlaySound(MAKEINTRESOURCE(IDR_WAVE_WC010),AfxGetResourceHandle(),
SND_ASYNC|SND_RESOURCE|SND_NODEFAULT);
s=ChessMove.move(point);
my.From.X=(s.x-10)/35;my.From.Y=(s.y-10)/35;
my.ChessID=ChessID;
}
else
//sndPlaySound("wf003.wav",SND_ASYNC|SND_NODEFAULT);
PlaySound(MAKEINTRESOURCE(IDR_WAVE_WF003),AfxGetResourceHandle(),
SND_ASYNC|SND_RESOURCE|SND_NODEFAULT);
}
else
//sndPlaySound("wf003.wav",SND_ASYNC|SND_NODEFAULT);
PlaySound(MAKEINTRESOURCE(IDR_WAVE_WF003),AfxGetResourceHandle(),
SND_ASYNC|SND_RESOURCE|SND_NODEFAULT);
}
else
{
if(ChessMove.CanMove(point,ChessID,false))
{
/*CString s;
s.Format("%d",ChessID);
pDC->TextOut(330,5,s);
//UpdateWindow();*/
//OnPaint();
s=ChessMove.move(point);
my.To.X=(s.x-10)/35;my.To.Y=(s.y-10)/35;
ID1=ChessMove.OutID;
begin();
ff=true;
}
else
{
//sndPlaySound("wf003.wav",SND_ASYNC|SND_NODEFAULT);
PlaySound(MAKEINTRESOURCE(IDR_WAVE_WF003),AfxGetResourceHandle(),
SND_ASYNC|SND_RESOURCE|SND_NODEFAULT);
ff=false;
}
Flag=true;
draw(true);
//sndPlaySound("wd017.wav",SND_ASYNC);
//ChessMove.DrawChess(pDC);
}
if(int i=IsGameOver(ChessMove.board.ChessBoard)!=0)
{
//sndPlaySound("wa014.wav",SND_ASYNC|SND_NODEFAULT);
PlaySound(MAKEINTRESOURCE(IDR_WAVE_WA014),AfxGetResourceHandle(),
SND_ASYNC|SND_RESOURCE|SND_NODEFAULT);
if(i==1)
pDC->TextOut(340,110,"你输了!再来一盘!");
if(i==-1)
pDC->TextOut(340,110,"恭喜你,你赢了! ");
}
CDialog::OnLButtonDown(nFlags, point);
}
void CChessDlg::OnBegin()
{
// TODO: Add your control notification handler code here
//ChessMove.CreatePossibleMove(ChessMove.board.ChessBoard,0,false);
//value.Eveluate(value.board.ChessBoard,true);
//memcpy(search.board1,ChessMove.board.ChessBoard,90*sizeof(int));
/*for(int i=0;i<10;i++)
for(int j=0;j<9;j++)
{
search.board1[i][j]=ChessMove.board.ChessBoard[i][j];
}
CHESSMOVE move;
move=search.SearchGoodMove(search.board1);
MakeMove(&move);
draw();*/
ChessMove.init();
draw(false);
}
void CChessDlg::MakeMove(CHESSMOVE *move)
{
enemy.From.X=move->From.X;
enemy.From.Y=move->From.Y;
enemy.To.X=move->To.X;
enemy.To.Y=move->To.Y;
ChessMove.board.ChessBoard[move->To.Y][move->To.X]=ChessMove.board.ChessBoard[move->From.Y][move->From.X];
ChessMove.board.ChessBoard[move->From.Y][move->From.X]=0;
int x,y;
x=move->From.X*35+20;y=move->From.Y*35+20;
CPoint s;
s.x=x;s.y=y;
int ChessID,nTargeID;
ChessID=ChessMove.FindChess(s,NULL);
enemy.ChessID=ChessID;
//CString ss;
//ss.Format("%d ",enemy->ChessID);
//pDC->TextOut(330,150,ss);
x=move->To.X*35+20;y=move->To.Y*35+20;
s.x=x;s.y=y;
nTargeID=ChessMove.FindChess(s,NULL);
ChessMove.site[ChessID].x=s.x-10;ChessMove.site[ChessID].y=s.y-10;
if(nTargeID!=-1&&ChessID!=nTargeID)
{
ChessMove.site[nTargeID].flag=false;
//sndPlaySound("wd202.wav",SND_ASYNC|SND_NODEFAULT);
PlaySound(MAKEINTRESOURCE(IDR_WAVE_WD202),AfxGetResourceHandle(),
SND_ASYNC|SND_RESOURCE|SND_NODEFAULT);
}
else
{
//sndPlaySound("wd017.wav",SND_ASYNC|SND_NODEFAULT);
PlaySound(MAKEINTRESOURCE(IDR_WAVE_WD017),AfxGetResourceHandle(),
SND_ASYNC|SND_RESOURCE|SND_NODEFAULT);
}
I.x=x-10;I.y=y-10;
ID2=nTargeID;
}
void CChessDlg::OnTestvalue()
{
// TODO: Add your control notification handler code here
/*int m=value.Eveluate(ChessMove.board.ChessBoard,true);
CString str;
str.Format("%d ",m);
pDC->TextOut(330,300,str);*/
//ChessMove.CreatePossibleMove(ChessMove.board.ChessBoard,0,false);
if(ff)
{
memcpy(ChessMove.board.ChessBoard,vv,90*4);
ChessMove.site[my.ChessID].x=my.From.X*35+10;ChessMove.site[my.ChessID].y=my.From.Y*35+10;
ChessMove.site[my.ChessID].flag=true;
ChessMove.site[enemy.ChessID].x=enemy.From.X*35+10;
ChessMove.site[enemy.ChessID].y=enemy.From.Y*35+10;
ChessMove.site[enemy.ChessID].flag=true;
if(ID2>-1&&ID2!=my.ChessID)
{
//CString ss;
//ss.Format("%d ",ID2);
//pDC->TextOut(330,150,ss);
ChessMove.site[ID2].x=enemy.To.X*35+10;
ChessMove.site[ID2].y=enemy.To.Y*35+10;
ChessMove.site[ID2].flag=true;
}
if(ID1>-1&&ID1!=enemy.ChessID)
{
ChessMove.site[ID1].x=my.To.X*35+10;
ChessMove.site[ID1].y=my.To.Y*35+10;
ChessMove.site[ID1].flag=true;
}
ff=false;
//CString s;
//s.Format(" %d %d %d ",enemy.ChessID,enemy.From.X,enemy.From.Y);
//pDC->TextOut(330,100,s);
draw(false);
}
}
void CChessDlg::draw(bool flag)
{
CDC dcMem;
CRect r;
GetClientRect(&r);
long x1,y1;
CBitmap bitmap;
BITMAP BMap;
bitmap.LoadBitmap(IDB_BITMAP1);
bitmap.GetBitmap(&BMap);
x1=BMap.bmWidth;
y1=BMap.bmHeight;
dcMem.CreateCompatibleDC(pDC); //创建与pDC兼容的设备上下文
dcMem.SelectObject(&bitmap); //将位图对象选入设备上下文
//从源设备上下文复制位图到目标设备上下文
pDC->SetStretchBltMode(HALFTONE); //设置图缩放模式
pDC->BitBlt(10,10,x1,y1,&dcMem,0,0,SRCCOPY);
ChessMove.DrawChess(pDC);
if(flag)
pDC->DrawIcon(I,icon);
//ChessMove.DrawBoard(ChessMove.board.ChessBoard,pDC);
}
void CChessDlg::begin()
{
for(int i=0;i<10;i++)
for(int j=0;j<9;j++)
{
search.board1[i][j]=ChessMove.board.ChessBoard[i][j];
}
CHESSMOVE move;
move=search.SearchGoodMove(search.board1);
MakeMove(&move);
//draw(true);
}
int CChessDlg::IsGameOver(int board[][9])
{
int i,j;
bool RedLive=false,BlackLive=false;
//检查红方九宫是否有帅
for(i=7;i<10;i++)
for(j=3;j<6;j++)
{
if(board[i][j]==B_KING)
BlackLive=true;
if(board[i][j]==R_KING)
RedLive=true;
}
for(i=0;i<3;i++)
for(j=3;j<6;j++)
{
if(board[i][j]==B_KING)
BlackLive=true;
if(board[i][j]==R_KING)
RedLive=true;
}
if(!RedLive)
return 1;
if(!BlackLive)
return -1;
return 0;
}
CAboutDlg dlg;
void CChessDlg::OnButton2()
{
// TODO: Add your control notification handler code here
dlg.DoModal();
}
HBRUSH CChessDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
//HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
// TODO: Change any attributes of the DC here
// TODO: Return a different brush if the default is not desired
if (nCtlColor == CTLCOLOR_DLG )
return (HBRUSH)m_BKBrush.GetSafeHandle();
return CDialog::OnCtlColor(pDC,pWnd,nCtlColor);
//return hbr;
}
BOOL CChessDlg::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
// Let the ToolTip process this message.
m_tooltip.RelayEvent(pMsg);
return CDialog::PreTranslateMessage(pMsg);
}
BOOL CChessDlg::SetTransparent(HWND hWnd, COLORREF crKey, BYTE bAlpha, DWORD dwFlags)
{
BOOL bRet = TRUE;
typedef BOOL (WINAPI* lpfnSetTransparent)(HWND hWnd, COLORREF crKey, BYTE bAlpha, DWORD dwFlags);
// 检查User32动态连接库是否已经装入
if ( m_hUserDll )
{
lpfnSetTransparent pFnSetTransparent = NULL;
pFnSetTransparent = (lpfnSetTransparent)GetProcAddress(m_hUserDll, "SetLayeredWindowAttributes");
if (pFnSetTransparent )
bRet = pFnSetTransparent(hWnd, crKey, bAlpha, dwFlags);
else
bRet = FALSE;
}
return bRet;
}
void CChessDlg::OnClose()
{
// TODO: Add your message handler code here and/or call default
// 循环增加窗口的透明度
for(int nPercent=100; nPercent >= 0 ;nPercent--)
SetTransparent(m_hWnd, 0, 255 * nPercent/100, LWA_ALPHA);
// 释放User32动态连接库
if ( m_hUserDll )
::FreeLibrary( m_hUserDll );
CDialog::OnClose();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -