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

📄 黑白棋对弈.cpp

📁 vc2005编写黑白棋
💻 CPP
字号:
// 黑白棋对弈.cpp : 定义应用程序的入口点。
//

#include "stdafx.h"
#include "黑白棋对弈.h"
#include "commdlg.h"
#include <string>
#include <queue>
#include <fstream>
#include <Shellapi.h>
#include "film.h"
#include "Core.h"
#include "UI.h"
#define MAX_LOADSTRING 100

// 全局变量:
HINSTANCE hInst;								// 当前实例
TCHAR szTitle[MAX_LOADSTRING];					// 标题栏文本
TCHAR szWindowClass[MAX_LOADSTRING];			// 主窗口类名
/*****************************************************************/
//界面提供给接口的函数
CBad *pCore;
UI *pBox;
CBad Core;
UI Box;
HWND m_hDlg;
/******************************************************************/
using namespace std;
int Mode;//0 1
int Running;//0 1 2
void Clear(HWND hDlg,int ** p);
bool UpdatePic(HWND hDlg,int **P);
bool LoadPlayer1(HWND hDlg);
bool LoadPlayer2(HWND hDlg);
bool LoadMovie(HWND hDlg);
bool GameBegin(HWND hDlg);
int ModeFlag=0;//0 比赛模式,1 录像模式

HICON icon1;
HICON icon2;
HICON icon3;
/*******************************************************************/
// 此代码模块中包含的函数的前向声明:
ATOM				MyRegisterClass(HINSTANCE hInstance);
BOOL				InitInstance(HINSTANCE, int);
LRESULT CALLBACK	WndProc(HWND, UINT, WPARAM, LPARAM);
INT_PTR CALLBACK	About(HWND, UINT, WPARAM, LPARAM);
INT_PTR CALLBACK	dlg(HWND, UINT, WPARAM, LPARAM);
INT_PTR CALLBACK	dlg2(HWND, UINT, WPARAM, LPARAM);
int APIENTRY _tWinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPTSTR    lpCmdLine,
                     int       nCmdShow)
{
	hInst=hInstance;
	icon1=LoadIcon (hInst, MAKEINTRESOURCE (IDI_ICON1)) ;
	icon2=LoadIcon (hInst, MAKEINTRESOURCE (IDI_ICON2)) ;
	icon3=LoadIcon (hInst, MAKEINTRESOURCE (IDI_ICON3)) ;
	pBox=&Box;
	pCore=&Core;
	DialogBox(hInst, MAKEINTRESOURCE(IDD_DIALOG1), NULL, dlg);
			return 0;
}



INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
	UNREFERENCED_PARAMETER(lParam);
	switch (message)
	{
	case WM_INITDIALOG:
		return (INT_PTR)TRUE;

	case WM_COMMAND:
		if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
		{
			EndDialog(hDlg, LOWORD(wParam));
			return (INT_PTR)TRUE;
		}
		break;
	}
	return (INT_PTR)FALSE;
}
INT_PTR CALLBACK dlg2(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
	UNREFERENCED_PARAMETER(lParam);
	switch (message)
	{
	case WM_INITDIALOG:
		return (INT_PTR)TRUE;

	case WM_COMMAND:
		if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
		{
			EndDialog(hDlg, LOWORD(wParam));
			return (INT_PTR)TRUE;
		}
		break;
	}
	return (INT_PTR)FALSE;
}
INT_PTR CALLBACK dlg(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
	UNREFERENCED_PARAMETER(lParam);
	switch (message)
	{
	case WM_INITDIALOG:
		m_hDlg=hDlg;
		CheckRadioButton(hDlg,IDC_RADIO1,IDC_RADIO2,IDC_RADIO1);
		SendDlgItemMessage(hDlg,IDC_COMBO1,CB_ADDSTRING,0,(LPARAM)"0.5s");
		SendDlgItemMessage(hDlg,IDC_COMBO1,CB_ADDSTRING,0,(LPARAM)"1s");
		SendDlgItemMessage(hDlg,IDC_COMBO1,CB_ADDSTRING,0,(LPARAM)"2s");
		SendDlgItemMessage(hDlg,IDC_COMBO1,CB_ADDSTRING,0,(LPARAM)"0s");
		SetDlgItemText(hDlg,IDC_EDIT1,"1000");
		SetDlgItemText(hDlg,IDC_COMBO1,"0.5s");
		return (INT_PTR)TRUE;
	case WM_PAINT:
						{
							int **p=Box.GetChess();		
							UpdatePic(hDlg,p);
						}break;
	case WM_COMMAND:
		switch(LOWORD(wParam))
		{
			case IDOK :
				if(Box.PushStart()==false)//界面按下了开始
				{
					
					MessageBox(hDlg,"双方并没有准备好~","",MB_OK);
					break;
				}
				char t[20];
				GetDlgItemText(hDlg,IDC_EDIT1,t,20);
				Box.SetTimeLimit(atoi(t));	
				Box.Begin();
					break;
			case IDCANCEL:
			case IDM_EXIT:
				{
					Box.PushExit();//界面按下了关闭
					EndDialog(hDlg, LOWORD(wParam));
					return (INT_PTR)TRUE;
				}
			case IDC_BUTTON1:LoadPlayer1(hDlg);break;
			case IDC_BUTTON2:LoadPlayer2(hDlg);break;
			case ID_MOVIE:LoadMovie(hDlg);break;
			case IDC_RADIO1:Box.SeletFirst(1);break;
			case IDC_RADIO2:Box.SeletFirst(2);break;
			case IDM_ABOUT :DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), NULL, About);break;
			case ID_RULER  :DialogBox(hInst, MAKEINTRESOURCE(IDD_DIALOG2), NULL, dlg2);break;
		}
		break;
	}
	return (INT_PTR)FALSE;
}

bool LoadPlayer1(HWND hDlg)
{
	static char file[2000];
	tagOFNA Ipofn;
	ZeroMemory(&Ipofn,sizeof(Ipofn)); 
	Ipofn.lStructSize=sizeof(tagOFNA);
	Ipofn.hwndOwner=hDlg;
	Ipofn.hInstance=hInst;
	Ipofn.lpstrFilter="参赛文件(*.dll)\0*.dll\0";
	Ipofn.lpstrCustomFilter=NULL;
	Ipofn.nMaxCustFilter=200;
	Ipofn.nFilterIndex=0;
	Ipofn.lpstrFile=file;
	Ipofn.nMaxFile=sizeof(file);
	Ipofn.lpstrFileTitle=NULL;
	Ipofn.nMaxFileTitle=0;
	Ipofn.lpstrInitialDir;
	Ipofn.lpstrTitle=NULL;
	Ipofn.Flags=OFN_PATHMUSTEXIST | OFN_HIDEREADONLY | OFN_NOCHANGEDIR | OFN_EXTENSIONDIFFERENT|OFN_CREATEPROMPT | OFN_ALLOWMULTISELECT | OFN_EXPLORER;
	Ipofn.nFileOffset;
	Ipofn.nFileExtension;
	Ipofn.lpstrDefExt;
	Ipofn.lCustData;
	Ipofn.lpfnHook;
	Ipofn.lpTemplateName;
	if(GetOpenFileName(&Ipofn))
	{
		if(Box.SelectDllName(file,1))
			return true;
	}
	return false;

}
bool LoadPlayer2(HWND hDlg)
{
	static char file[2000];
	tagOFNA Ipofn;
	ZeroMemory(&Ipofn,sizeof(Ipofn)); 
	Ipofn.lStructSize=sizeof(tagOFNA);
	Ipofn.hwndOwner=hDlg;
	Ipofn.hInstance=hInst;
	Ipofn.lpstrFilter="参赛文件(*.dll)\0*.dll\0";
	Ipofn.lpstrCustomFilter=NULL;
	Ipofn.nMaxCustFilter=200;
	Ipofn.nFilterIndex=0;
	Ipofn.lpstrFile=file;
	Ipofn.nMaxFile=sizeof(file);
	Ipofn.lpstrFileTitle=NULL;
	Ipofn.nMaxFileTitle=0;
	Ipofn.lpstrInitialDir;
	Ipofn.lpstrTitle=NULL;
	Ipofn.Flags=OFN_PATHMUSTEXIST | OFN_HIDEREADONLY | OFN_NOCHANGEDIR | OFN_EXTENSIONDIFFERENT|OFN_CREATEPROMPT | OFN_ALLOWMULTISELECT | OFN_EXPLORER;
	Ipofn.nFileOffset;
	Ipofn.nFileExtension;
	Ipofn.lpstrDefExt;
	Ipofn.lCustData;
	Ipofn.lpfnHook;
	Ipofn.lpTemplateName;
	if(GetOpenFileName(&Ipofn))
	{
		if(Box.SelectDllName(file,2))
			return true;
	}
		return false;
}
bool LoadMovie(HWND hDlg)
{

	static char file[2000];
	tagOFNA Ipofn;
	ZeroMemory(&Ipofn,sizeof(Ipofn)); 
	Ipofn.lStructSize=sizeof(tagOFNA);
	Ipofn.hwndOwner=hDlg;
	Ipofn.hInstance=hInst;
	Ipofn.lpstrFilter="录像文件(*.xx)\0*.xx\0";
	Ipofn.lpstrCustomFilter=NULL;
	Ipofn.nMaxCustFilter=200;
	Ipofn.nFilterIndex=0;
	Ipofn.lpstrFile=file;
	Ipofn.nMaxFile=sizeof(file);
	Ipofn.lpstrFileTitle=NULL;
	Ipofn.nMaxFileTitle=0;
	Ipofn.lpstrInitialDir;
	Ipofn.lpstrTitle=NULL;
	Ipofn.Flags=OFN_PATHMUSTEXIST | OFN_HIDEREADONLY | OFN_NOCHANGEDIR | OFN_EXTENSIONDIFFERENT|OFN_CREATEPROMPT | OFN_ALLOWMULTISELECT | OFN_EXPLORER;
	Ipofn.nFileOffset;
	Ipofn.nFileExtension;
	Ipofn.lpstrDefExt;
	Ipofn.lCustData;
	Ipofn.lpfnHook;
	Ipofn.lpTemplateName;
	if(GetOpenFileName(&Ipofn)) 
		return true;
	return false;
}


bool UpdatePic(HWND hDlg,int **p)
{
	int data[8][8];
	memcpy(data,p,8*8*4);
	RECT rect;
	GetWindowRect(GetDlgItem(hDlg,IDC_PIC),&rect);
	int cy=(rect.bottom-rect.top)/9;
	int cx=(rect.right-rect.left)/9;
	HDC mdc=GetDC(GetDlgItem(hDlg,IDC_PIC));
	for(int i=0;i<8;i++)
		for(int j=0;j<8;j++)
		{
			if(data[i][j]==1)
			{
				DrawIcon(mdc,j*cx-2,i*cy-1,icon1); 
			}
			if(data[i][j]==2)
			{
				DrawIcon(mdc,j*cx-2,i*cy-1,icon2);
			}
			if(data[i][j]==0)
			{
				DrawIcon(mdc,j*cx-2,i*cy,icon3);
			}
		}
	ReleaseDC(GetDlgItem(hDlg,IDC_PIC),mdc);
	return true;

}

⌨️ 快捷键说明

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