#include "MainFrame.h"
#include "resource.h"
/*
多媒体的导入库是winmm.lib
*/
#pragma comment(lib, "winmm.lib")
using namespace BossJue;
BSMainFrame::BSMainFrame(HWND hwnd): BSWin(hwnd), m_pMainGame(NULL)
{
m_iSimleFace= 4;
m_tElapse= 0;
}
BSMainFrame::BSMainFrame(const BSMainFrame& win):BSWin((BSWin&)win), m_pMainGame(NULL)
{
m_iSimleFace= 4;
m_tElapse= 0;
}
BSMainFrame::BSMainFrame(): BSWin(),m_pMainGame(NULL)
{
m_iSimleFace= 4;
m_tElapse= 0;
}
BSMainFrame::~BSMainFrame() { }
BSMine* BSMainFrame::SetMainGame(const BSMine*& pMainGame)
{
BSMine* temp= m_pMainGame;
m_pMainGame= (BSMine*)pMainGame;
return(temp);
}
BSMine* BSMainFrame::GetMainGame()
{
return(m_pMainGame);
}
int BSMainFrame::GetTimeElapse()
{
return(m_tElapse);
}
int BSMainFrame::SetTimeElapse(const int& tElpase)
{
int temp = m_tElapse;
m_tElapse = tElpase;
return(temp);
}
int BSMainFrame::SetSimleFaceIndex(const int& nIndex)
{
int temp = m_iSimleFace;
m_iSimleFace= nIndex;
return(temp);
}
int BSMainFrame::GetSimleFaceIndex()
{
return(m_iSimleFace);
}
LRESULT BSMainFrame::OnMenuClicked(UINT idMenu)
{
DWORD dwChecked;
switch(idMenu)
{
/*
退出
*/
case ID_EXIT_MINE_GAME:
::PostQuitMessage(0);
break;
/*
帮助
*/
case ID_USE_HELP:
::WinExec("HH winmine.chm", SW_SHOW);
break;
/*
关于
*/
case ID_ABOUT:
::ShellAbout(GetWndHand(), _T("扫雷"), _T("软件0801张若寒"), NULL);
break;
/*
颜色
*/
case ID_COLOR:
::CheckMenuItem(::GetSubMenu(::GetMenu(GetWndHand()), 0),
ID_COLOR,
::CheckMenuItem(::GetSubMenu(::GetMenu(GetWndHand()), 0), ID_COLOR, MF_CHECKED)== MF_UNCHECKED? MF_CHECKED: MF_UNCHECKED
);
::SendMessage(GetWndHand(), WM_PAINT, (WPARAM)0, (LPARAM)0);
break;
/*
英雄榜
*/
case ID_HERO:
::MessageBox(NULL, _T("还没有实现哦!"), NULL, MB_OK);
break;
/*
如果点击声音,就播放《一天一万年》这首mp3
*/
case ID_SOUND:
::CheckMenuItem(::GetSubMenu(::GetMenu(GetWndHand()), 0),
ID_SOUND,
(dwChecked= ::CheckMenuItem(::GetSubMenu(::GetMenu(GetWndHand()), 0), ID_SOUND, MF_CHECKED))== MF_UNCHECKED? MF_CHECKED: MF_UNCHECKED
);
if(dwChecked== MF_UNCHECKED)
{
mciSendString(_T("Play res\\wind.mp3 repeat"), NULL, 0, GetWndHand());
}
else
{
mciSendString(_T("stop res\\wind.mp3"), NULL, 0, GetWndHand());
}
break;
/*
标记
*/
case ID_MARKED:
::CheckMenuItem(::GetSubMenu(::GetMenu(GetWndHand()), 0),
ID_MARKED,
::CheckMenuItem(::GetSubMenu(::GetMenu(GetWndHand()), 0), ID_MARKED, MF_CHECKED)== MF_UNCHECKED? MF_CHECKED: MF_UNCHECKED
);
break;
/*
新游戏(清除以前的游戏,重新开始
*/
case ID_NEW_GAME:
GetMainGame()->InitGame();
SetSimleFaceIndex(4);
m_tElapse= 0;
::SendMessage(GetWndHand(), WM_PAINT, (WPARAM)0, (LPARAM)0);
break;
/*
初级游戏
*/
case ID_PRIMARY_GAME:
SetSimleFaceIndex(4);
GetMainGame()->SetScaleX(PRIMARY_MINE_XNUM);
GetMainGame()->SetScaleY(PRIMARY_MINE_YNUM);
GetMainGame()->SetMineNumb(PRIMARY_MINE_MINE);
GetMainGame()->InitGame();
::SetWindowPos(
GetWndHand(),HWND_TOP, 0, 0,DEFAULT_FRAME_X+ GetMainGame()->GetScaleX()* MINE_WIDTH+
LINE_WIDTH_0* 3+ SIDE_WIDTH_0+ SIDE_WIDTH_1,
DEFAULT_FRAME_Y+ GetMainGame()->GetScaleY()* MINE_HEIGHT+ LINE_WIDTH_0* 3+
SIDE_WIDTH_0* 2+ SIDE_WIDTH_1+ SHELL_S_H,
SWP_NOZORDER| SWP_NOMOVE| SWP_NOCOPYBITS);
m_tElapse= 0;
::SendMessage(GetWndHand(), WM_PAINT, (WPARAM)0,(LPARAM)0);
break;
/*
中级游戏
*/
case ID_SECOND_GAME:
SetSimleFaceIndex(4);
GetMainGame()->SetScaleX(SECOND_MINE_XNUM);
GetMainGame()->SetScaleY(SECOND_MINE_YNUM);
GetMainGame()->SetMineNumb(SECOND_MINE_MINE);
GetMainGame()->InitGame();
::SetWindowPos(
GetWndHand(),HWND_TOP, 0, 0,DEFAULT_FRAME_X+ GetMainGame()->GetScaleX()* MINE_WIDTH+
LINE_WIDTH_0* 3+ SIDE_WIDTH_0+ SIDE_WIDTH_1,
DEFAULT_FRAME_Y+ GetMainGame()->GetScaleY()* MINE_HEIGHT+ LINE_WIDTH_0* 3+
SIDE_WIDTH_0* 2+ SIDE_WIDTH_1+ SHELL_S_H,
SWP_NOZORDER| SWP_NOMOVE| SWP_NOCOPYBITS);
m_tElapse= 0;
::SendMessage(GetWndHand(), WM_PAINT, (WPARAM)0,(LPARAM)0);
break;
/*
高级游戏
*/
case ID_ADVANCED_GAME:
GetMainGame()->InitGame();
SetSimleFaceIndex(4);
GetMainGame()->SetScaleX(ADVANCED_MINE_XNUM);
GetMainGame()->SetScaleY(ADVANCED_MINE_YNUM);
GetMainGame()->SetMineNumb(ADVANCED_MINE_MINE);
GetMainGame()->InitGame();
::SetWindowPos(
GetWndHand(),HWND_TOP, 0, 0,DEFAULT_FRAME_X+ GetMainGame()->GetScaleX()* MINE_WIDTH+
LINE_WIDTH_0* 3+ SIDE_WIDTH_0+ SIDE_WIDTH_1,
DEFAULT_FRAME_Y+ GetMainGame()->GetScaleY()* MINE_HEIGHT+ LINE_WIDTH_0* 3+
SIDE_WIDTH_0* 2+ SIDE_WIDTH_1+ SHELL_S_H,
SWP_NOZORDER| SWP_NOMOVE| SWP_NOCOPYBITS);
m_tElapse= 0;
::SendMessage(GetWndHand(), WM_PAINT, (WPARAM)0,(LPARAM)0);
break;
/*
用户自定义游戏
*/
case ID_USER_DEFINED_GAME:
::MessageBox(NULL, _T("还没有实现用户自定义游戏呢,呵呵!"),NULL, MB_OK);
break;
}
return(true);
}
LRESULT BSMainFrame::OnPaint(HWND hWnd, UINT uMsg, WPARAM, LPARAM)
{
RECT rect;
if(::GetClientRect(hWnd, &rect)== 0)
{
::MessageBox(NULL, _T("获取窗口大小失败"), NULL, MB_ICONERROR);
}
HDC hDc= ::GetDC(hWnd);
HDC hDcMemory= ::CreateCompatibleDC(hDc);
HBITMAP hBitmap= ::CreateCompatibleBitmap(hDc, rect.right- rect.left, rect.bottom- rect.top);
::SelectObject(hDcMemory, hBitmap);
/*
画外面的3D框
*/
Draw3DRect(hDcMemory);
DrawSimleFace(hDcMemory, GetSimleFaceIndex());
DrawMineAera(hDcMemory);
DrawTimer(hDcMemory);
/*
最后一次输出到DC上面,这样可以避免闪屏
*/
::BitBlt(hDc, 0, 0, rect.right- rect.left, rect.bottom- rect.top, hDcMemory, 0, 0, SRCCOPY);
::DeleteObject(hBitmap);
::DeleteDC(hDcMemory);
::ReleaseDC(GetWndHand(), hDc);
return(0);
}
/*
我晕,我画这个居然画了一天的时间,开始的时候对坐标的把握不准,后来
猜出了坐标,但是,颜色又不知道,最后,用 QQ截图得到了哈哈
*/
LRESULT BSMainFrame::Draw3DRect(HDC& hDc)
{
RECT rect;
/*
先涂一层白色RGB(255, 255, 255)
*/
HBRUSH hBrush= ::CreateSolidBrush(RGB(255, 255, 255));
::GetClientRect(GetWndHand(), &rect);
::FillRect(hDc, &rect, hBrush);
rect.left+= 3;
rect.top+= 3;
::DeleteObject((HGDIOBJ)hBrush);
/*
再涂一层灰色RGB(192, 192, 192)
*/
hBrush= ::CreateSolidBrush(RGB(192, 192, 192));
::FillRect(hDc, &rect, hBrush);
::DeleteObject(hBrush);
/*
画线RGB(128, 128,128)
*/
HPEN hPen= ::CreatePen(PS_SOLID, 3, RGB(128, 128, 128));
::SelectObject(hDc, (HGDIOBJ)hPen);
::MoveToEx(hDc, 9, 9, NULL);
::LineTo(hDc, 9+ GetMainGame()->GetScaleX()* MINE_WIDTH+ 3, 9);
::MoveToEx(hDc, 9, 9, NULL);
::LineTo(hDc, 9, 6+ 37);
/*
RGB(255, 255, 255)白色
*/
::DeleteObject((HGDIOBJ)hPen);
hPen= ::CreatePen(PS_SOLID, 2, RGB(255, 255, 255));
::SelectObject(hDc, (HGDIOBJ)hPen);
::MoveToEx(hDc, 9, 6+ 37, NULL);
::LineTo(hDc, 9+ GetMainGame()->GetScaleX()* MINE_WIDTH+ 3, 6+ 37);
::MoveToEx(hDc, 9+ GetMainGame()->GetScaleX()* MINE_WIDTH+ 3, 9, NULL);
::LineTo(hDc, 9+ GetMainGame()->GetScaleX()* MINE_WIDTH+ 3, 6+ 37);
::DeleteObject((HGDIOBJ)hPen);
/*
RGB(128, 128, 128)
*/
hPen= ::CreatePen(PS_SOLID, 3, RGB(128, 128, 128));
::SelectObject(hDc, (HGDIOBJ)hPen);
::MoveToEx(hDc, 9, 52, NULL);
::LineTo(hDc, 9, 52+ GetMainGame()->GetScaleY()* MINE_HEIGHT+ 3);
::MoveToEx(hDc, 9,52, NULL);
::LineTo(hDc, 9+ GetMainGame()->GetScaleX()* MINE_WIDTH+ 3, 52);
::DeleteObject((HGDIOBJ)hPen);
/*
RGB(255, 255, 255)
*/
hPen= ::CreatePen(PS_SOLID, 3, RGB(255, 255, 255));
::SelectObject(hDc, (HGDIOBJ)hPen);
::MoveToEx(hDc, 12+ GetMainGame()->GetScaleX()* MINE_WIDTH, 55+ GetMainGame()->GetScaleY()* MINE_HEIGHT+ 3, NULL);
::LineTo(hDc, 9, 55+ GetMainGame()->GetScaleY()* MINE_HEIGHT+ 3);
::Mo
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
我自己的扫雷游戏.rar (37个子文件)
扫雷.sln 911B
窗口版扫雷
MineWindows.cpp 2KB
BSWin.h 3KB
res
wind.mp3 4.46MB
bitmap2.bmp 2KB
BITMAP31.BMP 542B
Mine.ico 23KB
BITMAP30.BMP 2KB
WAV3.WAV 25KB
BITMAP10.BMP 2KB
BITMAP20.BMP 2KB
BITMAP11.BMP 1KB
WAV1.WAV 1KB
BITMAP21.BMP 1KB
WAV2.WAV 37KB
WndClass.h 2KB
BSWin.cpp 5KB
winmine.chm 15KB
globalfun.h 318B
core.h 908B
mine.h 2KB
game.h 440B
MainFrame.h 2KB
resource.h 2KB
MineDef.h 2KB
game.cpp 3KB
窗口版扫雷.vcproj 5KB
窗口版扫雷.aps 69KB
MineWindows.h 1KB
head.h 254B
窗口版扫雷.vcproj.WWW-2B03ED2CB1A.Administrator.user 1KB
globalfun.cpp 371B
窗口版扫雷.rc 3KB
MainFrame.cpp 17KB
main.cpp 183B
WndClass.cpp 6KB
mine.cpp 6KB
共 37 条
- 1
资源评论
- phihohn2013-04-28也不是一个工程,编译都困难,就不用说运行了,浪费分啊!
计算机科学家的世界
- 粉丝: 262
- 资源: 23
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功