📄 黑白棋对弈.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 + -