因为要得找工作了,不得不写些文章让HR更多的了解到我,同时能帮到别的同学也是好的。因为接触Unity时间不是特别久,所以这里先帖出早期开发的C#游戏,然后再帖Unity游戏。
另外提醒,我的所有作品都是自己开发的,绝无抄袭(程序代码和编程思想绝没超抄过别人的),最多也就是高仿别人的游戏(贪吃蛇算吗?俄罗斯方块算吗?炸弹超人算吗?五子棋算吗?)。
转载请标明出处!!Power by 辣椒皮儿塞牙了╮
游戏说明:
1.这是我2014-1-16寒假在家里时写的,前后总共3天。3天每一天都是十多个小时在编程,第一天把核心功能实现了;第二天重新建了一个项目全部从头来,优化代码优化界面;第三天,哈哈,加入了很好玩的功能,绝对算创新。这是我所写的所有C#游戏中我最喜欢的其中之一,接近完美,1500行代码。
2.和我们小时候玩的俄罗斯方块的游戏机很像,连右侧下个下落方块也做了出来,每种形状有一种颜色
3.可记录消掉的总行数,一次消掉的行数越多,获得的金币也越多,金币可以用来手动兑换下一次出现的方块形状,比如我想要竖条的那种来一次消掉四行,只要金币够就可以了。随着消掉行数的增加,方块下落速度也越来越快,难度增加。
4.方块下落可选择“瞬间下落”和“快速下落”,瞬间下落就是一次性下落到所能够下落的最底部
5.金币可以用来手动兑换下一次出现的方块形状,还可以直接消除底层的3-5行,哪怕这3-5行没有摞满一样可以消除,而且消除时有显示动画,动画有三种,这就是我第三天加入的很好玩的功能。如果你觉得金币不好赞,请看下第二张图,没错这游戏可以开挂!!暂停游戏,连按三下F12,出来一个外挂指令输入框,只要输入对指令,你就可以拥有999999的金币!!指令密码是:MysteriousPower。神秘力量,哈哈,程序员才是最幽默的!
开发思想:
1.好的办法是建立一个Shape类为基类,7中不同的形状来派生,这样,在第一个方块下落到底部后,只要shape=new Shape()一下,就可以继续控制第二个方块了。不过程序里我用的是一个普通的Shape类,Shapes枚举(Block = 0, Two, InTwo, Strip, Mount, Seven, InSeven)表示7种形状,大同小异。
2.“底盘”是一个10*20的数组,public static int[,] Arrays = new int[cntGridH, cntGridW];,其实用bool类型都可以,用int以备扩充,比如以后想保存颜色信息或者其他什么。对应的还要实例化一个10*20的picturebox,lable,Button,什么都可以,用来显示游戏画面,我用的lable,感觉可能会稍微节省点内存,不知道感觉对了没。
3.Point[] point = new Point[4]; 来表示7种形状的方块每个(4个)格子的坐标,比如我按了左,那么point[0-3].x都减1就好了。
4.画面刷新,即,比如我的方块下落了一行,那么刚才的位置应该显示成背景色,这里有三个小办法。a),再来一个Point[4]保存上一步的位置,每走一步把上一步的位置渲染成背景色,再渲染现在格子位置的颜色。b),看操作,我按左,则把右的位置染成背景色,我按下,把上的位置设置成背景色。c)大刀阔斧的方法,效率不高,这里就用到了上边int型的“底盘”来保存颜色,每走一步,把整个画面全清成默认背景色,根据这个int来对应的刷颜色,再显示shape的位置的颜色。 程序中我选的方法b
5.碰撞检测,每走一步,走之前把shape的4个坐标每一个都检测下int中对应位置是否储存值为0,也就是说这个点的位置是否已经有方块了。所以又要分情况了,左和右如果有冲突的,那就是不能左右移动,不做任何处理。如果是向下移动(分自动向下,和手动按向下),有冲突了,那这个形状就要固定在这里,再实例化一个新的shape了。
6.变换形状,按上方向键,shape顺时针90度旋转,这个很简单也很麻烦,简单是只要更改Point[4]中的坐标就好了,更改前也要先检测是否有冲突;麻烦是7种形状,有6个有旋转变化,好在有的只变化2种样子。所以我的Shape类,800行,其中400行都是在处理变换形状的。。。
7.消除底行,每次一个shape到底了后,都要检测下是不是某一行满了(检测“底盘”int中的值是不是全为1),然后用一个int[4]来标记即将要消除的行号。链表也行,不过不好。int[4]是因为一次最多消除4行,碰见消除了4行,上面下落后可以继续消除的情况,实际是另一次消除的计算了,所以4个足以。这里可以再加一个变量,来统计本次消除的行数,比如本次消除了1行,增加100金币,消除了2行,增加300金币,消除了3行,增加600金币,等等,以此提高可玩性。
8.在右侧,下一个方块的提前显示,很简单,做成全局变量就可以了,每次一个shape落底后,把这个变量付给新shape,再把这个变量random一下。所以花金币手动选择下一个下落的方块问题也解决了。
9.快速下落和瞬间下落,专门写一个函数处理shape往下移动一格,再来一个Timer控制自动下落,时间到了就调用一次这个函数。快速下落就是用KeyDown,按着不动时,调用一次刷新一次。瞬间下落就是,拼命的调用这个函数,直到shape的坐标有跟“底盘”int中的值有冲突时,然后再刷新画面。
完整项目包下载地址:http://download.youkuaiyun.com/detail/q594076608/8045701