网站首页新闻中心学校介绍教学特色师资力量课程体系│在线报名
就业服务校园学员作品展示技术交流工具下载入学问答│设区论坛
校区公告:

!紧急征集300名待业者     如有任何疑问请点击上面咨询师照片进行在线咨询,或拨打咨询热线:010-85114009  85114010  85114053  800-810-9019











华育国际天安门分校 华育国际天安门分校 如果遇到在线咨询故障或咨询老师长时间不在线时,请选择QQ在线咨询系统! 华育国际天安门分校
1学员作品
1 您现在的位置: 中华IT教育网 >> 华育培训 >> 校园学员 >> 学员作品 >> 北京东城区华育培训学校正文 1
 
1
【移动方块的游戏程序】
发布时间:
 2006-12-30 14:28:27
点击次数:
 

作品名称:移动方块的游戏程序
开发团队:曹志军、张广
作品说明:

    这是一个用鼠标点击移动方块的游戏程序,如下图

    从组合框中选择一个3~10的数字,单击“开始”按钮,将出现一些数字按钮,例如选择5,则会出现图1中24个数字按钮,并留出一个空格的位置,单击任意一个按钮,如果该按钮位于空格的上边、下边、左边或右边,则被单击的按钮将会移至空格的位置。以此方式来移动按钮,直至所有按钮以数字顺序按行排列,游戏结束。如图2:
 
    每次单击“开始”,各按钮上的数字排列都是不同的,随机的,其算法如下:
 
    1、代码中有三个全局变量:
       Choose:用来保存从组合框中选择的数字
 
       Random:程序中有一个时间控件 Timer2,设置为每1毫秒触发一次,Random就增加,即Random用来保存时间的毫秒数,用Random和 (Choose*2-1)作模运算,其结果可看作是一个在1~(Choose*2-1)之间的随机数
 
       Reference:用来保存空格的索引值
 
    2、随机数的产生:
 
       以图1为例,组合框选择的数字是5,应该出现5*5-1=24个按钮(实际是25个按钮,其中一个被隐藏了,以形成1个空格的视觉效果)。首先用Rand( )函数产生110个随机数(之所以要生成110个随机数,是因为组合框中最大可选择10,将会出现10*10-1=99个按钮(100个按钮中被隐藏一个),这99个按钮上的数字将从这110个随机数中抽取),通过模(5*5-1)运算,使这110个数都在0~24之间,将这110个随机数保存在一个数组中。
 
       用 Random 和 Choose 作模运算,其结果用来确定从数组中第几个元素开始取值。假设结果为3,如下表,则从索引值为3的数组元素开始取值

    根据表1中数组元素的值依次找到具有相应索引值的按钮,将按钮从0~25赋值,当某按钮上已有值时(例如表1中数组元素9和0),则从索引为0的按钮开始向后找到一个空按钮,并赋值。将所有按钮赋值后,将数字为0的按钮隐藏,即可得到图1的效果。
 
    3、按钮移动
 
       Reference变量用来保存空格的索引值,设被单击的按钮的索引值由变量 index保存:
       当index = reference - choose 时,代表空格上面的按钮被单击了;
       当index = reference + choose 时,代表空格上面的按钮被单击了;
       当index = reference - 1 And Int(index / choose) = Int(reference / choose) 时,代表空格左边的按钮被单击了,
Int(index / choose) = Int(reference / choose)
此段代码用来判断index 和 reference 是否在同一行,下面的右边按钮被单击也有类似代码
 
       当index = reference + 1 And Int(index / choose) = Int(reference / choose) 时,代表空格右边的按钮被单击了。
 
    以自定义过程 swap( index ),将索引值为index 和 reference的按钮上的数字进行交换,并隐藏数字为0的按钮,以实现按钮移动的效果。
 
    张军的随机数生成算法如下:
 
    源代码:
 
Dim intMax As Integer, intRnd As Integer
intMax = choose ^ 2
ReDim tmpVal(intMax) As Integer
For i = 0 To intMax - 1
    tmpVal(i) = i
Next i
Randomize
For i = intMax - 1 To 0 Step -1
    intRnd = Int(i * Rnd())
    Command1(i).Caption = tmpVal(intRnd)
    tmpVal(intRnd) = tmpVal(i)
Next
 
 
    代码解释:
 
    先用 Int(i * Rnd()) 产生一个随机数,以此随机数为索引,从tmpVal()数组中抽取一个数字,将此数字赋给 Command(i),随后以 tmpVal() 数组中索引值为 i 的数字替换被抽取的数字。每循环一次后,已抽取的数将被替换,i 值减 1,可选择的数字范围将缩小,可保证所有数字不会重复。下面以图示说明:
 
    假设要生成9个0~8之间的不重复的随机数
 
    先生成一顺序数组,如表3:

    循环变量i 从8~0依次递减
 
    第一次循环:
 
    用intRnd = Int(i * Rnd( )) 生成一个0~8的随机数,假设是3,则将索引为3的数组元素放入按钮索引为 i(此时为8) 的按钮中,并将索引值为 i 数组元素放入索引为 intRnd(此处为3) 的数组元素中,将原数字覆盖,如表4、表5

    第二次循环:
 
    由于在上次循环中 i 值减1,所以再次使用 intRnd = Int(i * Rnd( )) 会生成一个0~7的随数,假设是5,重复以上步骤如表7、表8所示

    本次循环后数组元素将成为表9所示:

    按以上方法,循环结束后,9个按钮数组元素上将出现数字0~8,且随机排列。


  • 上一个北京东城区华育培训学校:

  • 下一个北京东城区华育培训学校:
  • 1 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口 1
     
     
    ·相关新闻
      【坦克大战游戏】
    【雷电游戏】
    【国际象棋游戏】
    【Gundam Seed游戏】
    什么是1G/2G/2.5G/3G?G…
    支持欢悦技术 戴尔双核游…
     
    ·图片新闻

    【华育IT交友系统…

    【臭皮匠购物系统…

    【圣诞送祝福】

    【在线考试系统】
     
    ·热点新闻
    · 【华育IT交友系统】...
    · 【在线考试系统】...
    华育国际 - 北京东城区华育培训学校 - 中关村 - 天津 - 济南 - 青岛 - 辽宁 - 江西 - 哈尔滨
    关于公司 | 公司动态 | 网站律师 | 招贤纳士 | 联系我们 | 友情链接

    北京东城区华育培训学校 咨询电话:010-85114009 85114010
    地址:北京市东城区南池子大街102号(劳动人民文化宫东门内南侧)

    版权所有 © 华育国际   经营许可证编号: 京ICP备05007567号