// PenteDlg.cpp : implementation file
//
#include "stdafx.h"
#include <math.h>
#include <mmsystem.h>
#include "Pente.h"
#include "dib.h"
#include "setupdlg.h"
#include "AboutDlg.h"
#include "RecordDlg.h"
#include "BestDlg.h"
#include "Globalvar0.h"
#include "HelperAPI.h"
#include "PenteDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CPenteDlg dialog
CPenteDlg::CPenteDlg(CWnd* pParent /*=NULL*/)
: CDialog(CPenteDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CPenteDlg)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
m_pMenu = new CMenu();
m_pDibBoard = new CDib;
m_pDibMask = new CDib;
m_pDibBlack = new CDib;
m_pDibWhite = new CDib;
InitParams();
//////////////////////////////////////////
char szVer[512];
///int nVer = GetWindowsVersion((LPSTR)szVer);
///if (stricmp(szVer, "Simplified Chinese")&&stricmp(szVer, "Chinese (PRC)")&&
/// stricmp(szVer, "中文")&&stricmp(szVer, "简体中文"))
/// g_bChinese = FALSE;
//////////////////////////////////////////
g_nSkill = AfxGetApp()->GetProfileInt("Settings", "Skill", 1);
g_bSoundOn = AfxGetApp()->GetProfileInt("Settings", "SoundOn", 1);
g_bUserBlack = AfxGetApp()->GetProfileInt("Settings", "UserUseBlackStone", 1);
g_nRunMode = AfxGetApp()->GetProfileInt("Settings", "Player", MODE_WITH_COMPUTER);
g_nTime1 = AfxGetApp()->GetProfileInt("Settings", "Time1", 225);
g_nTime2 = AfxGetApp()->GetProfileInt("Settings", "Time2", 225);
g_nTime3 = AfxGetApp()->GetProfileInt("Settings", "Time3", 225);
g_strName1 = AfxGetApp()->GetProfileString("Settings", "Name1", "Anonymous");
g_strName2 = AfxGetApp()->GetProfileString("Settings", "Name2", "Anonymous");
g_strName3 = AfxGetApp()->GetProfileString("Settings", "Name3", "Anonymous");
}
CPenteDlg::~CPenteDlg()
{
delete m_pMenu;
delete m_pDibBoard;
delete m_pDibMask;
delete m_pDibBlack;
delete m_pDibWhite;
AfxGetApp()->WriteProfileInt("Settings", "Skill", g_nSkill);
AfxGetApp()->WriteProfileInt("Settings", "SoundOn", g_bSoundOn);
AfxGetApp()->WriteProfileInt("Settings", "UserUseBlackStone", g_bUserBlack);
AfxGetApp()->WriteProfileInt("Settings", "Player", g_nRunMode);
AfxGetApp()->WriteProfileInt("Settings", "Time1", g_nTime1);
AfxGetApp()->WriteProfileInt("Settings", "Time2", g_nTime2);
AfxGetApp()->WriteProfileInt("Settings", "Time3", g_nTime3);
AfxGetApp()->WriteProfileString("Settings", "Name1", g_strName1);
AfxGetApp()->WriteProfileString("Settings", "Name2", g_strName2);
AfxGetApp()->WriteProfileString("Settings", "Name3", g_strName3);
}
void CPenteDlg::InitParams()
{
for (int i=0; i<BOARD_LINE_NUMBER;++i)
for (int j=0; j<BOARD_LINE_NUMBER; j++)
m_Board[i][j] = 0;
m_bGameOver = FALSE;
m_byColor = 0;
m_bCanUndo = FALSE;
m_bCanHint = TRUE;
m_wWhiteUndo = 0;
m_wBlackUndo = 0;
g_nStoneNum = 0;
m_rcCur1.SetRectEmpty();
m_rcCur2.SetRectEmpty();
m_rcHint.SetRectEmpty();
}
void CPenteDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CPenteDlg)
// NOTE: the ClassWizard will add DDX and DDV calls here
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CPenteDlg, CDialog)
//{{AFX_MSG_MAP(CPenteDlg)
ON_WM_PAINT()
ON_WM_LBUTTONDOWN()
ON_COMMAND(IDM_NEW, OnNew)
ON_COMMAND(IDM_SOUND, OnSound)
ON_COMMAND(IDM_BEST, OnBest)
ON_COMMAND(IDM_GRADE1, OnSkill1)
ON_COMMAND(IDM_GRADE2, OnSkill2)
ON_COMMAND(IDM_GRADE3, OnSkill3)
ON_COMMAND(IDM_EXIT, OnExit)
ON_COMMAND(IDM_ABOUT, OnAbout)
ON_COMMAND(IDM_HINT, OnHint)
ON_COMMAND(IDM_UNDO, OnUndo)
ON_COMMAND(IDM_LANGUAGE, OnLanguage)
ON_WM_SETCURSOR()
ON_WM_QUERYDRAGICON()
ON_WM_PALETTECHANGED()
ON_WM_QUERYNEWPALETTE()
ON_WM_SYSCOMMAND()
ON_WM_CONTEXTMENU()
ON_COMMAND(IDM_HELP_CONTEXT, OnHelp)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CPenteDlg message handlers
BOOL CPenteDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
// Check system display ability
CDC *pDC = GetDC();
int nSystemColors = pDC->GetDeviceCaps(BITSPIXEL);
if (nSystemColors<8) // 2**8 == 256
{
CString str1, str2;
str1.LoadString(g_bChinese ? IDS_COLOR_LESS_CHINESE:IDS_COLOR_LESS_ENGLISH);
str2.LoadString(g_bChinese ? IDS_TITLE_CHINESE:IDS_TITLE_ENGLISH);
if (MessageBox(str1, str2, MB_ICONQUESTION|MB_YESNO) != IDYES)
{
CDialog::EndDialog(0);
return TRUE; // return from InitDialog
}
}
// Load Dibs
m_pDibBoard->LoadDib(IDDIB_BOARD);
m_pDibMask->LoadDib(IDDIB_MASK);
m_pDibBlack->LoadDib(IDDIB_BLACK);
m_pDibWhite->LoadDib(IDDIB_WHITE);
m_pDibBoard->MakeBitmap(pDC);
m_pDibMask->MakeBitmap(pDC);
m_pDibBlack->MakeBitmap(pDC);
m_pDibWhite->MakeBitmap(pDC);
m_pDibBoard->GetPalette();
m_pDibMask->GetPalette();
m_pDibBlack->GetPalette();
m_pDibWhite->GetPalette();
ReleaseDC(pDC);
////////////////////////////////////////
CSetupDlg setupDlg(this);
if (setupDlg.DoModal()==IDCANCEL)
{
CDialog::EndDialog(0);
return TRUE; // return from InitDialog
}
CString str;
if (g_nRunMode==MODE_WITH_COMPUTER && g_bUserBlack)
str.LoadString(g_bChinese ? IDS_SINGLE_USER_CHINESE:IDS_SINGLE_USER_ENGLISH);
else if (g_nRunMode==MODE_WITH_COMPUTER && !g_bUserBlack)
str.LoadString(g_bChinese ? IDS_SINGLE_COMPUTER_CHINESE:IDS_SINGLE_COMPUTER_ENGLISH);
else if (g_nRunMode==MODE_2PLAYER)
str.LoadString(g_bChinese ? IDS_DOUBLE_CHINESE:IDS_DOUBLE_ENGLISH);
SetWindowText(str);
m_pMenu->DestroyMenu();
m_pMenu->LoadMenu(g_bChinese ? IDR_MENU_CHINESE : IDR_MENU_ENGLISH);
SetMenu(m_pMenu);
m_pMenu->CheckMenuItem(IDM_SOUND, g_bSoundOn ? MF_CHECKED : MF_UNCHECKED);
m_pMenu->EnableMenuItem(IDM_UNDO, m_bCanUndo ? MF_ENABLED : MF_GRAYED);
m_pMenu->EnableMenuItem(IDM_HINT, m_bCanHint&&(g_nRunMode==MODE_WITH_COMPUTER) ? MF_ENABLED : MF_GRAYED);
m_pMenu->EnableMenuItem(IDM_GRADE1, (g_nRunMode==MODE_WITH_COMPUTER) ? MF_ENABLED : MF_GRAYED);
m_pMenu->EnableMenuItem(IDM_GRADE2, (g_nRunMode==MODE_WITH_COMPUTER) ? MF_ENABLED : MF_GRAYED);
m_pMenu->EnableMenuItem(IDM_GRADE3, (g_nRunMode==MODE_WITH_COMPUTER) ? MF_ENABLED : MF_GRAYED);
if (g_nSkill == 1)
{
m_pMenu->CheckMenuItem(IDM_GRADE1, MF_BYCOMMAND | MF_CHECKED);
m_pMenu->CheckMenuItem(IDM_GRADE2, MF_BYCOMMAND | MF_UNCHECKED);
m_pMenu->CheckMenuItem(IDM_GRADE3, MF_BYCOMMAND | MF_UNCHECKED);
}
else if (g_nSkill == 2)
{
m_pMenu->CheckMenuItem(IDM_GRADE2, MF_BYCOMMAND | MF_CHECKED);
m_pMenu->CheckMenuItem(IDM_GRADE1, MF_BYCOMMAND | MF_UNCHECKED);
m_pMenu->CheckMenuItem(IDM_GRADE3, MF_BYCOMMAND | MF_UNCHECKED);
}
else if (g_nSkill == 3)
{
m_pMenu->CheckMenuItem(IDM_GRADE3, MF_BYCOMMAND | MF_CHECKED);
m_pMenu->CheckMenuItem(IDM_GRADE1, MF_BYCOMMAND | MF_UNCHECKED);
m_pMenu->CheckMenuItem(IDM_GRADE2, MF_BYCOMMAND | MF_UNCHECKED);
}
// Adjust the 4 values to suit board
m_wXNull = 13;
m_wYNull = 13;
m_cxGrid = 23;
m_cyGrid = 23;
// Stone size
m_wStoneWidth = m_pDibMask->GetWidth();
m_wStoneHeight = m_pDibMask->GetHeight();
int cxScreen = ::GetSystemMetrics(SM_CXSCREEN);
int cyScreen = ::GetSystemMetrics(SM_CYSCREEN);
int cx
没有合适的资源?快使用搜索试试~ 我知道了~
课程设计--用MFC编的超牛的《五子棋》
共65个文件
wav:13个
h:12个
cpp:9个
4星 · 超过85%的资源 需积分: 9 80 下载量 166 浏览量
2010-01-08
22:46:35
上传
评论 2
收藏 2.3MB RAR 举报
温馨提示
本系统采用Visual C++ 6.0作为开发工具,运用了面向对象的编程方法。这是老师给的一个程序实例,里面的棋盘、黑白棋子的制作值得我们去学习。在此分享,供大家参考、学习......祝大家学的愉快!
资源推荐
资源详情
资源评论
收起资源包目录
.rar (65个子文件)
五子棋
使用说明.CHM 49KB
五子棋
AboutDlg.h 1KB
PenteDlg.cpp 51KB
HelperAPI.h 201B
Pente.opt 58KB
Pente.ncb 233KB
Release
StdAfx.obj 786B
Dib.obj 32KB
AboutDlg.obj 11KB
HelperAPI.obj 2KB
Pente.obj 9KB
vc60.idb 57KB
Pente.exe 468KB
SetupDlg.obj 14KB
Pente.pch 5.35MB
RecordDlg.obj 10KB
BestDlg.obj 10KB
Pente.res 418KB
PenteDlg.obj 68KB
AboutDlg.cpp 3KB
RecordDlg.cpp 2KB
RecordDlg.h 1KB
res
Pente.rc2 397B
blackwin.wav 46KB
putstone.wav 2KB
blackd3.wav 9KB
Pente.ico 1KB
white4.wav 33KB
goodbye.wav 42KB
error.wav 11KB
welcome.wav 33KB
newgame.wav 41KB
HandWhite.cur 326B
whited3.wav 7KB
Black.bmp 2KB
Board.BMP 121KB
time.wav 6KB
white.BMP 2KB
black4.wav 6KB
White1.bmp 2KB
MASK.BMP 2KB
HandBlack.cur 326B
whitewin.wav 44KB
undo.wav 4KB
BestDlg.cpp 2KB
GlobalVar0.h 556B
BestDlg.h 2KB
Pente.dsw 535B
Pente.plg 246B
Pente.001 7KB
HelperAPI.cpp 1KB
GlobalVar.h 543B
Pente.cpp 2KB
Pente.rc 23KB
PenteDlg.h 3KB
StdAfx.cpp 203B
resource.h 7KB
Pente.aps 445KB
Dib.cpp 23KB
Pente.dsp 7KB
StdAfx.h 987B
Pente.h 1KB
Dib.h 3KB
SetupDlg.h 1KB
SetupDlg.cpp 3KB
共 65 条
- 1
资源评论
- ZEROZABUU2013-06-15看了看,还可以
- huwei17122016-11-29不错不错,可以下载好好学习!
- baidu_176910832014-07-16很好的软件
千杯不醉-sen
- 粉丝: 225
- 资源: 14
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功