1、MFC课程设计拼图游戏课程设计Visual C+ 指导老师:孔令德班级 1020542学号 03姓名 李伯涵 1 设计描述 1.1项目简介 1 1.2设计目的 1 2 设计分析 2.1设计特点 1 2.2主要头文件、源文件 1 3 项目代码 3.1头文件 2 3.2源文件 3 4 游戏截图 11设计描述1.1项目简介设计主要为MFC对位图的处理,包括窗口背景、位图透明处理、双缓冲处理动画等。内容为一张分成若干块的图片,当鼠标点击其中一部分,被点击部分自动移动到空白部分,其中默认有两张图,也可以自己导入图片,游戏可选择难度,即图片被分成的块数。界面右边有实例图,并统计移动次数。1.2设计目的设计
2、是对于mfc处理位图的巩固,及鼠标消息的应用,学习双缓冲处理技术、对话框的设计、在菜单栏工具栏添加功能按钮,获得系统资源,对mfc技术进行小规模综合应用。2设计分析2.1设计特点程序默认窗口大小显示,动画自然,可以导入自己喜欢的图片,选择适当难度。 2.2主要头文件、源文件1 头文件:pintu.h pintuDlg.h picture.h spell.h2 源文件:pintu.cpp pintuDlg.cpp picture.cpp spell.cpp3 项目代码3.1头文件#include resource.h/ CMyApp:class CMyApp : public CWinApppu
3、blic: CMyApp(); DECLARE_MESSAGE_MAP()#include picture.hclass CMyDlg : public CDialogpublic: CMyDlg(CWnd* pParent = NULL);protected: HICON m_hIcon; int step; / 移动的步数 BOOL begin; / 游戏是否完成 CPicture pic; int size; / 方块数 BOOL border; / 边框 void Show(CDC * dc); DECLARE_MESSAGE_MAP();#include class CPicture
4、 public: CPicture(); CPicture(); BOOL Load(UINT nIDRes); BOOL Load(LPCTSTR pszPathName); BOOL Load(CFile& file); BOOL Load(CArchive& ar); BOOL Load(IStream* pstm); BOOL Render(CDC* pDC, CRect rc=CRect(0,0,0,0), LPCRECT prcMFBounds=NULL) const; CSize GetImageSize(CDC* pDC=NULL) const; operator IPictu
5、re*() return m_spIPicture; void GetHIMETRICSize(OLE_XSIZE_HIMETRIC& cx, OLE_YSIZE_HIMETRIC& cy) const cx = cy = 0; const_cast(this)-m_hr = m_spIPicture-get_Width(&cx); ASSERT(SUCCEEDED(m_hr); const_cast(this)-m_hr = m_spIPicture-get_Height(&cy); ASSERT(SUCCEEDED(m_hr); void Free() if (m_spIPicture)
6、m_spIPicture.Release(); protected:CComQIPtrm_spIPicture;HRESULT m_hr;class CSpellprotected: int * map; int width, height; / 长宽 int blank; / 空白块的位置#define LENGTH width*height / 总长度public: CSpell(int w = 3, int h = 3, int bx = 0, int by = 0); / 构造函数,传入长宽和空白块位置 CSpell(); int GetPic(int w, int h); / 获取个
7、某个位置的图片 int Move(int w, int h); / 移动某个位置的图片 void Init(); / 初始化(生成随机位置) void ReCreate(int w, int h, int bx = 0, int by = 0); / 重新构建大小;3.2源文件#include stdafx.h#include pintu.h#include pintuDlg.hBOOL CMyApp:InitInstance() AfxEnableControlContainer();#ifdef _AFXDLL Enable3dControls();#else Enable3dContro
8、lsStatic();#endif CMyDlg dlg; m_pMainWnd = &dlg; int nResponse = dlg.DoModal(); if (nResponse = IDOK) / TODO: Place code here to handle when the dialog is else if (nResponse = IDCANCEL) / TODO: Place code here to handle when the dialog is Return FALSE;#include stdafx.h#include pintu.h#include pintuD
9、lg.h#include spell.hCSpell spell(3, 3, 2, 2);void ShowTranBmp(CDC * dc, CBitmap * bmp, COLORREF bgcolor, int x, int y, int w, int h, int bx, int by, int bw, int bh) CDC mdc; CDC tdc; / 图像 CDC ddc; / 遮罩 CBitmap tbmp; CBitmap dbmp; CBitmap *ob; CBitmap *tob; CBitmap *dob; mdc.CreateCompatibleDC(dc); t
10、dc.CreateCompatibleDC(dc); ddc.CreateCompatibleDC(dc); tbmp.CreateBitmap(bw, bh, 1, 32, NULL); dbmp.CreateBitmap(bw, bh, 1, 1, NULL); ob = mdc.SelectObject(bmp); tob = tdc.SelectObject(&tbmp); dob = ddc.SelectObject(&dbmp); tdc.BitBlt(-bx, -by, bw+bx, bh+by, &mdc, 0, 0, SRCCOPY); tdc.SetBkColor(bgco
11、lor); ddc.BitBlt(0, 0, bw, bh, &tdc, 0, 0, SRCCOPY); dc-BitBlt(x, y, w, h, &tdc, 0, 0, SRCINVERT); dc-BitBlt(x, y, w, h, &ddc, 0, 0, SRCAND); dc-BitBlt(x, y, w, h, &tdc, 0, 0, SRCINVERT); mdc.SelectObject(ob); tdc.SelectObject(tob); ddc.SelectObject(dob);class CAboutDlg : public CDialogpublic: CAbou
12、tDlg(); DECLARE_MESSAGE_MAP();void CAboutDlg:OnPaint() CPaintDC dc(this); / device context for painting CBitmap lygame; lygame.LoadBitmap(IDB_ABOUTIM); ShowTranBmp(&dc, &lygame, RGB(0,0,0), 8, 8, 307, 92);CMyDlg:CMyDlg(CWnd* pParent /*=NULL*/) : CDialog(CMyDlg:IDD, pParent) m_hIcon = AfxGetApp()-Loa
13、dIcon(IDR_MAINFRAME); begin = TRUE; step = 0; pic.Load(IDR_IMAGEB); size = 3; border = TRUE; BOOL CMyDlg:OnInitDialog() CDialog:OnInitDialog();ASSERT(IDM_ABOUTBOX & 0xFFF0) = IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX GetMenu(); pMenu-CheckMenuItem(ID_MENU_3, MF_CHECKED); pMenu-CheckMenuItem(ID_MENU_BORDER,
14、 MF_CHECKED); return TRUE; void CMyDlg:OnPaint() CPaintDC dc(this);if (IsIconic() SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0); int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; GetClientRect(&rect); int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2; dc.DrawIcon(x, y, m_hIcon); else CDialog:OnPaint(); Show(&dc);HCUR
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1