基于visualc的“连连看”游戏的设计与实现内容摘要:
++) for(int j=0。 j4。 j++) (i)。 //每次从上面的临时地图中取走 (获取后并在临时地图删除 ) //一个动物放到地图的空方块上 for(int i=0。 im_nRow*m_nCol。 i++) { //随机挑选一个位置 int nIndex=(int(rand()*+rand()*+rand()))%()。 //获取该选定物件放到地图的空方块 m_map[i]=(nIndex)。 5 //在临时地图除去该动物 (nIndex)。 } //更新显示 Invalidate(TRUE)。 } 图案方块的连接判断模块设计 设计思路 对于选中的两个方块的销毁,必须符合以下 三 个条件。 (1) 选中的两个方块图案相同。 (2) 选中的两个方块之间在没有障碍的情况下,可以用若干垂直的直线线段连接起来。 (3) 这些将 两个相同方块 连接起来的直线线段的折点不超过两个。 同种物件的连接方式大致可以分成以下 三 种 [7]: (1) 直连方式 该方式要求所选定的两个方块 在同一水平直线上,并且两个方块之间没有任何其他图案方块。 直连方式 如图 32 所示 : 图 32 直连方式 (2) 有一个折点的垂直线段连接 方式 有一个折点的垂直线段连接 方式如图 33 所示。 所选定的两个方块如果通过折点的方式连接,那么对于折点来说,每个折点必定 有且 只 有 一个坐标是和其中一个目标6 的点是相同的,即折点必定在两个目标点所在的 x 方向或 y 方向的直线上。 对于一个折点连接的情况,折点应该为第一个选中方块的横向线或纵向线与第二个选中方块的纵向线或横向线相交而得。 在这些所有 可能连接的交线经过的每一个 图案方块区域,都不允许被障碍物所阻挡。 折点 图 33 一个折点的连接方式 (3) 有两个折点的垂直线段连接 方式 有两个折点的垂直线段连接 方式如图 34 所示。 这种方式的两个折点所连成的直线与两物件的直接连接可以构成平行线,因此可以根据这个规律,将这条水平线在游戏区域允许的条件上下移动,然后通过判断整条带垂直折点的曲线之间有无的障碍物方式来确定是否可以连通。 图 34 两个折点的连接方式 流程设计 根据上面分析 , 针对选定方块是否可以作抵消操作,设计出连接判断流程图如图35 所示。 7 图 35 连接判断流程图 代码设计 (1) 判断选中的两个方块是否可以消除的代码设计 根据上面的流程设计 , 判断两个方块消除的代码如下所示 : BOOL C_LLK_Dlg:: IsLink(int x1, int y1, int x2, int y2) { //X 直连方式 if(x1==x2) { if(X1_Link_X2(x1, y1, y2)) return TRUE。 } 开始 直连方式成功判断 成功 两个折点连接方式成功判断 一个折点连接方式成功判断 结束 成功 是 否 是 否 8 //Y 直连方式 else if(y1==y2) { if(Y1_Link_Y2(x1, x2, y1)) return TRUE。 } //一个转弯直角的联通方式 if(OneCornerLink(x1, y1, x2, y2)) { return TRUE。 } //两个转弯直角的联通方式 else if(TwoCornerLink(x1, y1, x2, y2)) { return TRUE。 } return FALSE。 } 上面的实现中,先是对直连方式中的 X 方向直连 Y1_Link_Y2()以及 Y 方向直连X1_Link_X2()这两种情况作判断,如果尚未取得结果,再通过调用 OneCornerLink()函数对一个折点的情况进行判断,如果还是没取得结果的时候,调用 TwoConerLink()函数对两个折点的情况进行判断,然后得出结果。 (2) 直连方式的代码设计 下面主要介绍其中一个子功能模块直连 X1_Link_X2()的实现。 直连方式可分成直通、左通和右通三种情况: a) 直通:在选定的两个方块的直连线中没 有被任何方块所阻碍。 如图 36 所示。 图 36 直通 9 b) 左通(右通):选定的两个方块的直连线之间有其他地方阻碍,但是通过其左(右)侧可以无障碍的连通,如果两侧都无障碍,便将其默认为左通。 如图 37 所示。 左通 右通 左通 图 37 左通(右通) 直连 X1_Link_X2()函数具体实现,代码如下 : //X 直接连通 BOOL C_LLK_Dlg:: X1_Link_X2(int x, int y1, int y2) { //保证 y1 的值小于 y2 if(y1y2) { //数据交换 int n=y1。 y1=y2。 y2=n。 } 10 //直通 for(int i=y1+1。 i=y2。 i++) { if(i==y2) return TRUE。 if(m_map[i*m_nCol+x]!=BLANK_STATE) break。 } //左通 if(XThrough(x1, y1, FALSE)amp。 amp。 XThrough(x1, y2, FALSE)) return TRUE。 //右通 if(XThrough(x+1, y1, TRUE)amp。 amp。 XThrough(x+1, y2, TRUE)) return TRUE。 return FALSE。 } 鼠标事件处理 功能模块的设计 设计思路 该游戏选择 鼠标事件处理 方式实现用户交互功能。 鼠标选取两个图案方块后,程序将自动判断所选定的两个方块是否能进行抵消操作,能则 进行抵。基于visualc的“连连看”游戏的设计与实现
相关推荐
有信息保持不变。 可由特殊方式擦出,主要存储需要永久保持的系统或用户程序。 ( 3) 电可擦出只读存储器( EEROM) :使用编程器能容易的进行修改的存储 单元。 同样,作为只读存储器,其内存储的数据断电情况下保持不变。 通常也可 根据项目设计的需要, 使用专用内存卡片方式扩充 (但扩充能力得依各厂牌与型号有所不同 )。 输入 /输出单元 PLC 的对外功能,主要是通过各种 I/O 接口 模块
流电通过整流器转换成直流电,然后再把直流电转换成频率、电压均可控制的交流电,以供给电动机。 变频器的电路一般由整流器、中间直 流环节、逆变器和控制电路 4个部分组成。 交流电动机的同步转速表达式为 n = 60 f (1− s) / p 式中: n— 异步电动机的转速; f— 异步电动机的频率;s— 电动机转差率; p— 电动机极对数。 由上式可知,异步电动机的转速 n 与频率 f 成正比
不会发生变化,而其他输出点和软设备在 I/O 映象区或系统 RAM存储区内的状态和数据都有可能发生变化,而且排在上面的梯形图,其程序执行结果会对排在下面的凡是用到这些线圈或数据的梯形图起作用;相反,排在下面的梯形图,其被刷新的逻辑线圈的状态或数据只能到下一个扫描周期才能对排在其上面的程序起作用。 (三 ) 输出刷新阶段 当扫描用户程序结束后, PLC 就进入输出刷新阶段。 在此期间, CPU
E,strSQL)) { MessageBox(打开数据库失败 !,数据库错误 ,MB_OK)。 return。 } //显示用户资料 m_strPass =。 m_strRePass = m_strPass。 m_bIsAdmin =。 ()。 UpdateData(FALSE)。 *pResult = 0。 } void CUserDlg::OnButtonNew() {//清空用户资料
科技学院《 Windows 程序设计 》课程设计报告 5 2 设计环境或器材、原理与说明 设计 环境与器材 因为选择使用 MFC 编程, 该程序又是网络编程, 所以设计环境与器材为: PC 机两到三台 (程序试运行时需要多台电脑充当客户端 ); 能正常连接的网卡; Windows环境与 Microsoft Visual C++ 编译环境; 原理与说明 在计算机网络中,信息的传输是建立在
址锁存有效信号输出端。 当访问片外程序存储器或数据存储器时, ALE(地址锁存允许)输出脉冲用于锁存地址的低 8 位字节,一般情况下, ALE 仍以时钟振荡频率的 1/6 输出固定的脉冲信号,因此它可对外输出时钟或用于定时目的,要注意的是:每当访问外部数据存储器时将跳过一个 ALE 脉冲。 XTAL1(18):振荡器反相放大器 的输出端。 通过 XTAL XTAL2 外接晶振后