首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 其他相关 >

一个电脑爱好者的不完整回忆(三十五)写一个可玩的俄罗斯方块

2012-08-19 
一个计算机爱好者的不完整回忆(三十五)写一个可玩的俄罗斯方块  你真的能做一个可玩的俄罗斯方块么?先别忙

一个计算机爱好者的不完整回忆(三十五)写一个可玩的俄罗斯方块
  你真的能做一个可玩的俄罗斯方块么?先别忙下结论,看完我的要求再说。
  我曾经在单位做了一个专门发放办公文件的一个软件,还有一些办公辅助的小软件,不过我只会让几个同事试用,从来不好意思去别那里推广,因此用的人很少,为了宣传我这些小软件和增加大家平时的娱乐,我做了一个平台,在这上面开发了好多小游戏(全部都是winform软件),构建了完整的金钱、银行系统,有的游戏可以赚平台币,有的游戏则需要花平台币。最受欢迎的是吃角子老虎机……基本上大家都是玩其他游戏赚钱,然后都扔到了老虎机里面。我前面写的打字测试也是这个平台上的一个软件,为了让大家都来测试一下打字速度,每测试完一篇都会给很高的奖励,如果速度够快的话赚的钱会更多,算是平台中赚钱最快的项目之一了,因此很多人都参与了测试——金钱的指挥棒功能还是很有效的。
  有一次跟同事聊天,说起了网上那些牛人玩游戏的视频,就想到有一个玩俄罗斯方块超级牛的家伙,于是就打算做一个俄罗斯方块。我想,好多人都曾经编过俄罗斯方块吧,在CSDN这些年也看到不少人发自己做俄罗斯方块的代码,既然这么多人都曾经编过俄罗斯方块,那么我就不花费那么多时间去编了,从网上下载一个俄罗斯方块的代码,然后加上与我平台相关的排名和金钱操作的代码应该就可以了。我下载了有将近十个俄罗斯方块的代码,不过,这些代码没有一个真正能玩的,至少是不符合我的要求。
  俄罗斯方块除了基本的规则外,剩下最重要的是什么?我觉得最重要的就是操控。当时我给要做的俄罗斯方块提了几点要求,首先当然是满足基本的规则,这个几乎所有的俄罗斯方块代码都做到了,不然也不能叫俄罗斯方块;第二就是画面不太难看,直接用纯色画出形状的话就略差了,不过这个问题好解决,很容易修改;第三就是当方块落到底层应该有一小段时间允许移动和翻转,这个时间应该是下落一层所需要的时间,有些俄罗斯方块的代码是刚一接触到底下的方块就立刻定住了,这不行;第四,当方块贴在边缘的时候,应该允许翻转,由程序自动调整方块的位置,而不是像有些代码那样直接禁止与墙有干涉的翻转;第五,先判定翻转后的方块是否有干涉,然后决定是否允许翻转,这个在落到某些位置然后翻转进入特定形状区域很重要;第六,支持自定义按键(有人习惯左手方向有人习惯右手方向);第七,也是最重要的,也是我最不抱希望的,就是有良好的操控感觉。说说关于操控吧,我见过的俄罗斯方块代码都没有处理键盘的连发延时和连发速度,都是用windows默认的设置。就好比在记事本中按下A键,那么立刻会出现一个字符A,如果按住不放的话,那么隔了一小段时间后会不断的重复输出A,这个时间称之为按键重复延时,我喜欢称之为连发延时,而不断重复输出A的时间间隔我称之为连发速度。这两个时间对玩好俄罗斯方块至关重要,当方块下落速度较慢的时候这些都不是问题,但是当下落速度快或者底层累积方块过高的时候这两个时间就太重要了。如果连发延时太短,那么极易造成误操作,明明想移动一格,但却可能触发了连发导致移动了两格或以上,如果连发延时太长,那么当需要快速移动指定格子的时候就很难了,毕竟,用手指连续点几下花的时间要远比连发移动所花费的时间要长。由此可知,把连发延时设置得比你正常按下松开按键的时间略长一点就可以,只要不产生连发即可。而连发速度的设置也是很重要,太慢的话,失去了连发的意义,太快的话,不容易控制连发的数量(对应到俄罗斯方块中就是移动的格子数)。如果设置得当,那么在高位或者速度极快的情况下对于准确放置所想的位置就会很有帮助。个人觉得windows默认的连发延时太长,而连发速度又略快。我设置过好多个方案,让几个骨灰级的游戏玩家测试,每个人反馈的结果不一样,最后索性直接将连发延时和连发速度的设置直接交给了用户。
  同时满足上面这些要求的代码我没找到,实际上能满足三条以上的都不多。最后选择了一个Delphi版的看起来画面还不错的代码开始修改,由于原代码并不是按我的要求来写的,所以改起来也还颇费劲,最后算是糊弄出来,现在想想,还不如完全自己从头开始做一个,也许会更好。
  按我提出的这些要求去做一个俄罗斯方块,我想只要想做很多人都应该可以做出来,不过如果没提要求的话,大概不会有几个人能够做出接近这些要求的俄罗斯方块。特别是按键控制这一块,如果你没有玩俄罗斯方块到非常高的速度的时候,你是不会注意这些的。我一直觉得红白机上的俄罗斯方块操控感觉最好,即便在最高的速度,想移动到指定位置也非常容易控制,某些纯俄罗斯方块的手掌机做得也凑合——大部分做得不是很好,街机上的俄罗斯方块玩得不多,主要还是不习惯摇杆来玩,摇杆的移动幅度达,所以会有些感觉连发延时过短——实际上未必如此,只是摇杆到位的区间比较大,不好控制,街机摇杆回弹速度也比一般的按键要慢得多。
  当时我程序默认的是150毫秒和15毫秒,不过我个人后来的最佳设置是90毫秒和30毫秒,移动位置从来都是直接按住方向键一定时间后松开(而不是连续按键),熟练后定位准确率基本上接近100%,而玩这个第二高分的同事设置的是120毫秒和15毫秒(很佩服他的连发控制水准)。我们俩互换电脑来玩的时候都会明显不适应。到我的游戏平台由于保密检查原因完全停止时,我保持着俄罗斯方块得分第一的记录。
  为了尽量精确的控制按键间隔,当时用了Delphi下面一个supertimer的控件,当时处理的不太好,虽然能够比较精确的控制按键间隔,但是对CPU的资源占用率却非常高,现在再写的话,也许这个问题会解决的比较好。
  有时候在CSDN上看到比最短代码的俄罗斯方块,我觉得意义不大,用非专业人士观点1中的观点就是达不到可玩的程度的话,无论代码长点还是短点性价比其实都是0。

热点排行