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

📄 chinesechessdlg.cpp

📁 用c++ 开发的中国象棋
💻 CPP
📖 第 1 页 / 共 3 页
字号:
	for(i=0;i<10;i++)
		for(j=0;j<9;j++)
			fscanf(fp,"%3d",&m_byChessBoard[i][j]);
		
		fclose(fp);
		
		for(i=7;i<10;i++)
			for(j=3;j<6;j++)
			{
				if(m_byChessBoard[i][j]==BlackKing)
				{
					nUserChessColor=BLACKCHESS;
					break;
				}
				if(m_byChessBoard[i][j]==RedKing)
				{
					nUserChessColor=REDCHESS;
					break;
				}
			}
			
			m_bIsBegin=false;
			
	//刷新屏幕
	InvalidateRect(NULL,FALSE);
	UpdateWindow();
			
}

void CChineseChessDlg::OnSave() 
{
	CFileDialog m_SaveDlg(false,NULL,"",0,"残局(*.cm)|*.cm||");
	
	if(m_SaveDlg.DoModal()==IDCANCEL) 
		return;
	
	CString strCMFile;
	char* pCMFile;
	FILE* fp;
	int i,j;
	
	strCMFile=m_SaveDlg.GetPathName();
	pCMFile=(LPSTR)(LPCTSTR)strCMFile;
	
	fp=fopen(pCMFile,"w");
	if(fp==NULL)
	{
		MessageBox("打开文件出错","错误提示",MB_ICONWARNING);
		return;
	}
	
	for(i=0;i<10;i++)
	{
		for(j=0;j<9;j++)
			fprintf(fp,"%-3d",m_byChessBoard[i][j]);
		fprintf(fp,"\n");
	}
	
	fclose(fp);
	InvalidateRect(NULL,TRUE);
	UpdateWindow();
	InvalidateRect(NULL,FALSE);
	UpdateWindow();
	
}

void CChineseChessDlg::OnBkg() 
{
	CFileDialog m_OpenDlg(TRUE,NULL,"",0,"背景图片(*.bmp)|*.bmp||");	
	if(m_OpenDlg.DoModal()==IDCANCEL) 
		return;
	CString strFileName=m_OpenDlg.GetPathName();
	if(!strFileName.IsEmpty())
			m_hBitmap=(HBITMAP)LoadImage(AfxGetInstanceHandle(),strFileName,IMAGE_BITMAP,
	0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION);	
	CDC* pDC=GetDC();
	OnEraseBkgnd(pDC);
	InvalidateRect(NULL,TRUE);
	UpdateWindow();
}
void CChineseChessDlg::DrawChessBoard(CDC* dc)
{
#define BH 2*BoarderHeight
#define BW 2*BoarderWidth
	
	CPen pen;
	pen.CreatePen(0,1,m_ChessBoardColor);
	CPen* pOldPen=dc->SelectObject(&pen);
	int i;
	for (i=BH;i<BH+10*GridHeight;i+=GridHeight)//横行
	{
		dc->MoveTo(BW,i);
		dc->LineTo(BW+8*GridWidth,i);
	}
	
	
	//边框
	//-------------------------------------------------------------------------
	dc->MoveTo(BW,BH);
	dc->LineTo(BW,BH+9*GridHeight);//左里
	dc->MoveTo(BW+8*GridWidth,BH);
	dc->LineTo(BW+8*GridWidth,BH+9*GridHeight);//右里
	
	dc->MoveTo(BW-2,BH-2);//左外
	dc->LineTo(BW-2,BH+9*GridHeight+2);
	dc->MoveTo(BW+8*GridWidth+2,BH-2);//右外
	dc->LineTo(BW+8*GridWidth+2,BH+9*GridHeight+2);
	
	dc->MoveTo(BW-2,BH-2);
	dc->LineTo(BW+8*GridWidth+2,BH-2);
	dc->MoveTo(BW-2,BH+9*GridHeight+2);
	dc->LineTo(BW+8*GridWidth+2,BH+9*GridHeight+2);
	//---------------------------------------------------------------------------
	//士宫
	//----------------------------------------------------------------------------
	dc->MoveTo(BW+3*GridWidth,BH);
	dc->LineTo(BW+5*GridWidth,BH+2*GridHeight);
	dc->MoveTo(BW+5*GridWidth,BH);
	dc->LineTo(BW+3*GridWidth,BH+2*GridHeight);
	
	dc->MoveTo(BW+3*GridWidth,BH+7*GridHeight);
	dc->LineTo(BW+5*GridWidth,BH+9*GridHeight);
	dc->MoveTo(BW+5*GridWidth,BH+7*GridHeight);
	dc->LineTo(BW+3*GridWidth,BH+9*GridHeight);
	
	//-----------------------------------------------------------------------------
	
	for (i=BW+GridWidth;i<BW+8*GridWidth;i+=GridWidth)//列
	{
		dc->MoveTo(i,BH);
		dc->LineTo(i,BH+4*GridHeight);
		dc->MoveTo(i,BH+5*GridHeight);
		dc->LineTo(i,BH+9*GridHeight);
	}
	CPen pen1;
	pen1.CreatePen(0,1,RGB(252,0,0));
	dc->SelectObject(&pen1);
	
	//炮位位置的星号
	DrawStar(dc,BW+GridWidth,BH+2*GridHeight);
	DrawStar(dc,BW+7*GridWidth,BH+2*GridHeight);
	DrawStar(dc,BW+GridWidth,BH+7*GridHeight);
	DrawStar(dc,BW+7*GridWidth,BH+7*GridHeight);
	
	//中间卒位置的星号
	for(i=2;i<7;i+=2)
	{
		DrawStar(dc,BW+i*GridWidth,BH+3*GridHeight);
		DrawStar(dc,BW+i*GridWidth,BH+6*GridHeight);
	}
	
	//边上的星号
	//左上
	dc->MoveTo(BW+15,BH+3*GridHeight+2);
	dc->LineTo(BW+2,BH+3*GridHeight+2);
	dc->LineTo(BW+2,BH+3*GridHeight+15);
	
	dc->MoveTo(BW+15,BH+3*GridHeight-2);
	dc->LineTo(BW+2,BH+3*GridHeight-2);
	dc->LineTo(BW+2,BH+3*GridHeight-15);
	//左下
	dc->MoveTo(BW+15,BH+6*GridHeight+2);
	dc->LineTo(BW+2,BH+6*GridHeight+2);
	dc->LineTo(BW+2,BH+6*GridHeight+15);
	
	dc->MoveTo(BW+15,BH+6*GridHeight-2);
	dc->LineTo(BW+2,BH+6*GridHeight-2);
	dc->LineTo(BW+2,BH+6*GridHeight-15);
	
	//右上
	dc->MoveTo(BW+8*GridWidth-15,BH+3*GridHeight+2);
	dc->LineTo(BW+8*GridWidth-2,BH+3*GridHeight+2);
	dc->LineTo(BW+8*GridWidth-2,BH+3*GridHeight+15);
	
	dc->MoveTo(BW+8*GridWidth-15,BH+3*GridHeight-2);
	dc->LineTo(BW+8*GridWidth-2,BH+3*GridHeight-2);
	dc->LineTo(BW+8*GridWidth-2,BH+3*GridHeight-15);
	//右下
	dc->MoveTo(BW+8*GridWidth-15,BH+6*GridHeight+2);
	dc->LineTo(BW+8*GridWidth-2,BH+6*GridHeight+2);
	dc->LineTo(BW+8*GridWidth-2,BH+6*GridHeight+15);
	
	dc->MoveTo(BW+8*GridWidth-15,BH+6*GridHeight-2);
	dc->LineTo(BW+8*GridWidth-2,BH+6*GridHeight-2);
	dc->LineTo(BW+8*GridWidth-2,BH+6*GridHeight-15);
	
	dc->SelectObject(pOldPen);
	pen.DeleteObject();
	
	//楚河,汉界
	CFont font;
	LOGFONT lf;
	CString str1(_T("楚河")),str2(_T("汉界"));
	dc->SetBkMode(TRANSPARENT);
	dc->SetTextColor(RGB(255,10,10));
	memset(&lf,0,sizeof(LOGFONT));
	lf.lfHeight =-20;
	lf.lfWidth =25;
	//	lf.lfEscapement =3.1514926;
	lf.lfWeight=900;
	lf.lfClipPrecision =CLIP_LH_ANGLES;
	strcpy(lf.lfFaceName,"华文行楷");
	//lf.lfEscapement =
	font.CreateFontIndirect(&lf);
	CFont* pOldFont =dc->SelectObject(&font);
	dc->TextOut(BW+GridWidth,BH+4*GridHeight+15,str1);
	lf.lfEscapement =1800;
	dc->TextOut(BW+4*GridWidth,BH+4*GridHeight+15,str2);
	dc->SelectObject(pOldFont);
	font.DeleteObject();
	
	
}
void CChineseChessDlg::DrawStar(CDC* dc,int x,int y)
{
	dc->MoveTo(x-15,y-2);//左上
	dc->LineTo(x-2,y-2);
	dc->LineTo(x-2,y-15);
	
	dc->MoveTo(x-15,y+2);//左下
	dc->LineTo(x-2,y+2);
	dc->LineTo(x-2,y+15);
	
	dc->MoveTo(x+2,y-15);//右上
	dc->LineTo(x+2,y-2);
	dc->LineTo(x+15,y-2);
	
	
	dc->MoveTo(x+2,y+15);//右下
	dc->LineTo(x+2,y+2);
	dc->LineTo(x+15,y+2);
	
	
}

void CChineseChessDlg::OnDiff0() 
{
	m_pSE->SetSearchDepth(2);      //设定搜索层数为2
	
}

void CChineseChessDlg::OnDiff1() 
{
	m_pSE->SetSearchDepth(3);      //设定搜索层数为3
}

void CChineseChessDlg::OnDiff2() 
{
	m_pSE->SetSearchDepth(4);      //设定搜索层数为4
	
}

void CChineseChessDlg::OnDiff3() 
{
	m_pSE->SetSearchDepth(5);      //设定搜索层数为5
	
}

void CChineseChessDlg::OnDiff4() 
{
	m_pSE->SetSearchDepth(6);      //设定搜索层数为6

}

void CChineseChessDlg::OnHelpAuthor() 
{
	CString URL="mailto:chxzhou012@126.com";
	HINSTANCE hRun = ShellExecute(GetParent()->GetSafeHwnd(), _T("open"), URL, NULL, NULL, SW_SHOW);
	if ((int) hRun <= 32)
	{
		AfxMessageBox(_T("无法打开"));
	}


}
void CChineseChessDlg::OnHelpChesechess() 
{
	// TODO: Add your command handler code here
			CAboutDlg dlg;
		if(dlg.DoModal()==IDOK)
		{
		
		}
}

void CChineseChessDlg::OnHelpCchessnet() 
{
	// TODO: Add your command handler code here
	CString URL="http://www.zgxqds.com";
	HINSTANCE hRun = ShellExecute(GetParent()->GetSafeHwnd(), _T("open"), URL, NULL, NULL, SW_SHOW);
	if ((int) hRun <= 32)
	{
		AfxMessageBox(_T("无法打开"));
	}

}

void CChineseChessDlg::OnHelpCumt() 
{
	// TODO: Add your command handler code here
	CString URL="http://www.cumt.edu.cn";
	HINSTANCE hRun = ShellExecute(GetParent()->GetSafeHwnd(), _T("open"), URL, NULL, NULL, SW_SHOW);
	if ((int) hRun <= 32)
	{
		AfxMessageBox(_T("无法打开"));
	}

	
}

void CChineseChessDlg::OnHelpLearn() 
{
	// TODO: Add your command handler code here
	CString URL="/用户帮助手册.CHM";
	HINSTANCE hRun = ShellExecute(GetParent()->GetSafeHwnd(), _T("open"), URL, NULL, NULL, SW_SHOW);
	if ((int) hRun <= 32)
	{
		AfxMessageBox(_T("无法打开"));
	}

}
UINT BkSoundProc(LPVOID parm)
{
	PlaySound((LPCTSTR)IDR_BKSOUND,NULL,SND_LOOP|SND_RESOURCE|SND_SYNC);
	return 0;
}
void CChineseChessDlg::OnSetBksound() 
{
	// TODO: Add your command handler code here
	m_BkSound++;
	if(m_BkSound%2)
	{
		HWND hWnd=GetSafeHwnd();
		AfxBeginThread(BkSoundProc,hWnd,THREAD_PRIORITY_NORMAL);
		
	}
	else
	{		
		//	AfxEndThread(0);
	}
	
}

void CChineseChessDlg::OnChessChessBoardColor() 
{
	CColorDialog dlg;
	if(dlg.DoModal()==IDOK)
	{
		m_ChessBoardColor=dlg.GetColor();
		CDC* pDC;
		pDC=GetDC();
		OnEraseBkgnd(pDC);
		InvalidateRect(NULL,FALSE);
	}
	
}
void CChineseChessDlg::OnTuoPan(WPARAM wParam,LPARAM lParam)
{
	UINT uMouseMsg;//鼠标动作
	uMouseMsg=(UINT) lParam;
	if(uMouseMsg==WM_LBUTTONDOWN)//如果是单击左键
	{
		if(m_bShow)
		{
			OnHide();
		}
		else
		{
			OnShow();
		}
	}
	if(uMouseMsg==WM_RBUTTONDOWN)//如果是单击右键
	{
		AfxGetMainWnd()->SetForegroundWindow(); //弹出Popup菜单
		CMenu menu;
		menu.LoadMenu(IDR_SYSTRAYMENU);
		CMenu* pPopup=menu.GetSubMenu(0);
		CPoint Point;
		GetCursorPos(&Point);
		pPopup->TrackPopupMenu(TPM_LEFTALIGN,
			Point.x,Point.y,AfxGetMainWnd(),NULL );
		AfxGetMainWnd()->PostMessage(WM_NULL, 0, 0); 
	}
}

void CChineseChessDlg::OnSetReset() 
{
	OnNewGame();
	
}

void CChineseChessDlg::OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct) 
{
	// TODO: Add your message handler code here and/or call default
	m_Menu.DrawItem(lpDrawItemStruct);
	m_RMenu.DrawItem(lpDrawItemStruct);
	CDialog::OnDrawItem(nIDCtl, lpDrawItemStruct);
}

void CChineseChessDlg::OnMeasureItem(int nIDCtl, LPMEASUREITEMSTRUCT lpMeasureItemStruct) 
{
	// TODO: Add your message handler code here and/or call default
	m_Menu.MeasureItem(lpMeasureItemStruct);
	m_RMenu.MeasureItem(lpMeasureItemStruct);
	CDialog::OnMeasureItem(nIDCtl, lpMeasureItemStruct);
}

void CChineseChessDlg::OnInitMenu(CMenu* pMenu) 
{
	CDialog::OnInitMenu(pMenu);
	
	// TODO: Add your message handler code here
	
}

void CChineseChessDlg::OnInitMenuPopup(CMenu* pPopupMenu, UINT nIndex, BOOL bSysMenu) 
{
	CDialog::OnInitMenuPopup(pPopupMenu, nIndex, bSysMenu);
	
	// TODO: Add your message handler code here
	
}

int CChineseChessDlg::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
	if (CDialog::OnCreate(lpCreateStruct) == -1)
		return -1;
	CRect rect(435,90,600,320);
	if(!m_MyCpuCtrl.Create(WS_CHILD | WS_VISIBLE,rect, this, IDC_CPUCTL))
		{
			TRACE0("Create m_MyCtrl Failed!");
			return 0;
		}

	
	return 0;
}



void CChineseChessDlg::OnCpuandmem() 
{
	CCpuAndMemory* dlg=new CCpuAndMemory;
	dlg->Create(IDD_DIALOG_CPUMEMORY,NULL);
	dlg->ShowWindow(SW_SHOW);
	dlg->UpdateWindow();

	
}


void CChineseChessDlg::OnClose()
{
	// TODO: Add your message handler code here and/or call default
	NOTIFYICONDATA tnid;
	tnid.cbSize=sizeof(NOTIFYICONDATA);
	tnid.hWnd=AfxGetMainWnd()->m_hWnd;
	tnid.uID=IDR_MAINFRAME;//保证删除的是我们的图标
	Shell_NotifyIcon(NIM_DELETE,&tnid);
	CDialog::OnClose();
}

void CChineseChessDlg::OnShow() 
{
	PostMessage(WM_SYSCOMMAND,SC_RESTORE,NULL);
	
}

void CChineseChessDlg::OnHide() 
{
	PostMessage(WM_SYSCOMMAND,SC_MINIMIZE,NULL);
	
}

void CChineseChessDlg::OnExit() 
{
	AfxGetMainWnd()->PostMessage(WM_CLOSE); //退出程序
	
}

void CChineseChessDlg::OnLinkServer1() 
{
	// TODO: Add your command handler code here
	IsNetBattle=TRUE;		
//	OnNetCreate();
	m_ConnectSocket.Create();
	if(m_ConnectSocket.Connect(m_GameSerIP,m_GameSerPort))
	{
		m_bIsInitToServer=TRUE;
		m_bIsInit=TRUE;
		m_ConnectSocket.Init();
		CPlayerList player;
		if(player.DoModal() == IDOK)
		{
			
		}
		CMyMessage temp;
		temp.iFlag=1;
		temp.m_iServerFlag=2;
		m_ConnectSocket.SendMessage(&temp);
		AfxMessageBox("已进入服务器1 ");
	}
	else
	{
		m_ConnectSocket.Close();
		AfxMessageBox("连接服务器失败!");
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -