基于vc的连连看游戏设计内容摘要:

个图标导入进来,注意图标的截取大小最好是 32*32,另外,创建 1 个空图标以备消除时替代 , 如 图 9 所示。 图 9 导入图标 内江师范学院本科毕业设计 14 ( 4) 切换到 Class View 视图,左键连击两次 CEX_lianliankanDlg,在 public 成员函数中添加如下成员变量: Class CEX_lianliankanDlg : public CDialog { // Construction public: void OnButton(UINT nID)。 UINT icon[240]。 CTime endTime。 //定义结束时间 CTime beginTime。 //定义开始时间 int count。 CButton* cb2。 //点击的第一个按钮指针变量 CButton* cb1。 //点击的第二个按钮指针变量 HICON blank。 HICON icon2。 HICON icon1。 int state。 CEX_lianliankanDlg(CWnd* pParent = NULL)。 // standard constructor // Dialog Data //{{AFX_DATA(CEX_lianliankanDlg) ( 5)修改构造函数 展开 CEX_lianliankanDlg,点击 CEX_lianliankanDlg(CWnd *pParent=NULL),然后在里面添加以下程序代码(部分省略): //{{AFX_DATA_INIT(CEX_lianliankanDlg) // 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)。 state=1。 //state 的初始值为 1 blank= AfxGetApp()LoadIcon(IDI_ICON121)。 //空白图标 // count=0。 UINT temp[]={IDI_ICON1,IDI_ICON2,IDI_ICON3,IDI_ICON4,IDI_ICON5,IDI_ICON6,IDI_ICON7,IDI_ICON8,IDI_ICON9,IDI_ICON10,IDI_ICON11,IDI_ICON12, „„ IDI_ICON107,IDI_ICON108,IDI_ICON109,IDI_ICON110,IDI_ICON111,IDI_ICON112,IDI_ICON113,IDI_ICON114,IDI_ICON115,IDI_ICON116,IDI_ICON117,IDI_ICON118,IDI_ICON119,IDI_ICON120, IDI_ICON1,IDI_ICON2,IDI_ICON3......IDI_ICON118,IDI_ICON119,IDI_ICON120}。 //共 240 个按钮, 120 个图标,有两个按钮的图标是相同的 // for(int i=0。 i240。 i++) 内江师范学院本科毕业设计 15 { icon[i]=temp[i]。 //把图标导给图标数组 // } 程序说明: CEX_lianliankanDlg::CEX_lianliankanDlg()中的代码是对成员函数进行初始化:state 表示两次 点击这次点击或上次点击; count 表示目前已经找出来的相同图标的数目,初始值为 0(即没有找到); icon 数组存放 256 个图标的编号。 ( 6) 添加消息映射 在 BEGIN_MESSAGE_MAP(CEX_lianliankanDlg, CDialog)中添加 ON_ COMMAND_RANGE(IDC_BUTTON1,IDC_BUTTON240,OnButton)的消息映射,如下: BEGIN_MESSAGE_MAP(CEX_lianliankanDlg, CDialog) //{{AFX_MSG_MAP(CEX_lianliankanDlg) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_COMMAND_RANGE(IDC_BUTTON1,IDC_BUTTON240,OnButton) //添加程序代码 //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CEX_lianliankanDlg message handlers 添加以上程序代码主要是在每次点击按钮时,系统都能跳到同一个函数里面去运行。 ( 7) 在 CGameTestDlg::OnInitDialog()函数中添加初始化代码,中间部分省略,如下所示: BOOL CEX_lianliankanDlg::OnInitDialog() { CDialog::OnInitDialog()。 srand((unsigned)time(NULL))。 for(int i=0。 i100。 i++) { int m=rand()%240。 int n=rand()%240。 UINT temp=icon[m]。 icon[m]=icon[n]。 icon[n]=temp。 } HICON Icon1=AfxGetApp()LoadIcon(icon[1])。 (Icon1)。 内江师范学院本科毕业设计 16 HICON Icon2=AfxGetApp()LoadIcon(icon[2])。 (Icon2)。 HICON Icon3=AfxGetApp()LoadIcon(icon[3])。 (Icon3)。 HICON Icon4=AfxGetApp()LoadIcon(icon[4])。 (Icon4)。 HICON Icon5=AfxGetApp()LoadIcon(icon[5])。 (Icon5)。 HICON Icon6=AfxGetApp()LoadIcon(icon[6])。 (Icon6)。 HICON Icon7=AfxGetApp()LoadIcon(icon[7])。 (Icon7)。 HICON Icon8=AfxGetApp()LoadIcon(icon[8])。 (Icon8)。 HICON Icon9=AfxGetApp()LoadIcon(icon[9])。 (Icon9)。 HICON Icon10=AfxGetApp()LoadIcon(icon[10])。 (Icon10)。 . HICON Icon235=AfxGetApp()LoadIcon(icon[235])。 (Icon235)。 HICON Icon236=AfxGetApp()LoadIcon(icon[236])。 (Icon236)。 HICON Icon237=AfxGetApp()LoadIcon(icon[237])。 (Icon237)。 HICON Icon238=AfxGetApp()LoadIcon(icon[238])。 (Icon238)。 HICON Icon239=AfxGetApp()LoadIcon(icon[239])。 (Icon239)。 HICON Icon240=AfxGetApp()LoadIcon(icon[0])。 (Icon240)。 beginTime=CTime::GetCurrentTime()。 // Add “ About...“ menu item to system menu. 程序说明: CEX_lianliankanDlg::OnInitDialog()中的代码主要对游戏状体初始化,通过调用 200 次随机函数,将图标顺序打乱,并赋给每个按钮,以实现游 戏开始图标随机分布的效果。 同时,将当前时间记录在 beginTime 变量中。 ( 9) 添加一个名为 OnButton 的成员函数,并为该函数编写如下所示的代码。 右击CEX_lianliankanDlg,选择 Add Member Function,在对话框内输入 的内容 如图 7 所示。 内江师范学院本科毕业设计 17 图 10 添加 OnButton 成员函数图 添加 OnButton 成员函数,代码如下: void CEX_lianliankanDlg::OnButton(UINT nID) { state=state。 //最初 state=1,第一次进去 state=1 CButton* cb=(CButton*)GetDlgItem(nID)。 if(state0) { cb1=cb。 //记下按钮的 ID 号 icon1=cbGetIcon()。 //记下图标的 ID 号 } //点击第一个按钮的时候,相应出现的图标 // else if(state0) //第二次进去 state=1,如此,每次取反 // { cb2=cb。 icon2=cbGetIcon()。 if((icon1==icon2)amp。 amp。 (cb1!=cb2)amp。 amp。 (cb1GetIcon()!=blank)) //保证图标相同,按钮不同且不能为空白图标 // { cb1SetIcon(blank)。 cb2SetIcon(blank)。 //图标相 同,则给两个按钮赋予空白图标 // count+=2。 //消除后,按钮数自动加 2// if(count==240) //当按钮数 =240 时,代表所有图标已经消除,游戏完成 { endTime=CTime::GetCurrentTime()。 CTimeSpan duration=endTimebeginTime。 //记录游戏时间 MessageBox( “ 恭 喜。 你 已 经 完 成 了 游 戏。 用 时 :“ +(“ %M“ )+“ 分 “ +(“ %S“ )+“ 秒 “ )。 } } 内江师范学院本科毕业设计 18 else { } UpdateData(FALSE)。 } } 程序说明: 游戏过程中点击图标会调用 CEX_lianliankanDlg::OnButton(UINT nID)函数,该成员函数为游戏运行的主要函数,程序中也有注释,首先改变 state 的值,根据其等于 1还是 1 来判断用户是否已点了两次,如果是点了两次,则比较这两点的图标是否相同,如果相同,则将 count 的值 +2, 同时消去这两次点击的图标。 我们不断重复上面描述的功能,直到当 count 的值 =256 时,说明用户已经成功完成了游戏,并记录和显示游戏完成时间 , 其流程框图如 图 11 所示。 内江师范学院本科毕业设计 19 相同 否 图 11 游戏规则流程图 功能选项模块设计 界面设计基本完成,在上面步骤完成后,系统自动。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。