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

📄 chessdlg.cpp

📁 一个简单的象棋游戏
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// 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 + -