C#宝石闪电战【高仿,推荐】

来源:互联网 发布:中国量子计算机 知乎 编辑:程序博客网 时间:2024/04/29 12:16

  

 


因为要得找工作了,不得不写些文章让HR更多的了解到我,同时能帮到别的同学也是好的。因为接触Unity时间不是特别久,所以这里先帖出早期开发的C#游戏,然后再帖Unity游戏。

另外提醒,我的所有作品都是自己开发的,绝无抄袭(程序代码和编程思想绝没超抄过别人的),最多也就是高仿别人的游戏(贪吃蛇算吗?俄罗斯方块算吗?炸弹超人算吗?五子棋算吗?)。

转载请标明出处!!Power by 辣椒皮儿塞牙了



游戏说明:
1.这是一个极其高能的程序!用过Windows8的用户下载过一个叫做宝石闪电战的游戏,有没有觉得这个很眼熟。是的,这个就是我高仿它的。也不知道违法不,别来找我啊,我只是用来研究学习的。顺便帮做下广告,这个游戏是杭州RuiLue Software 睿略软件公司的作品,他们公司有很多小游戏都很不错的,也是我曾经非常想去的公司之一。曾经我还写了辅助,玩他们的宝石闪电战这个游戏,把全服排名刷到了第二 0.0   。。。

2.我写的这个程序就非常不得了了,总共7000行代码,7000行啊!占我现存有价值代码总量的10%了,是除了给某餐厅开发的MIS系统外最多行代码的项目了。若干个界面,用到了注册表存储游戏记录。也是接近完美的程序没什么BUG了,不过代码没优化过,看着费劲点。整个游戏都是看了他们的玩法后自己想的解决办法实现的,木的代码参考。

3.玩法是,点击挨在一起至少3个有相同颜色的方块后,方块消失,上方方块全部下落,再从顶上下落新的方块,把空缺补齐。

4.下方那个60秒是一局的时间,玩的好的话可以释放道具效果,增加2秒

5.上方带闪电图标的那一条是能量值,每消除一次增加一点能量,一次消除的越多,增加的越多,每一秒也会自动掉落一定的能量,能量满后,会在下面12*8的方块中随机一个位置生成一个特殊的图标方块,点击可以消除这个闪电的整行、整列的方块,并增加大量分数。

6.左下角设置样式的按钮,点击后会滑出一列子按钮,再点滑回。
        A)道具:花费金币或钻石使用道具,效果比如炸弹:炸掉所有炸弹所在块颜色的其他方块(大概是1/5,有5中颜色的方块);沙漏,增加时间2秒;颜料瓶,出现效果后随机把1/4角落的块变为同一种颜色,爽吧;闪电,更容易蓄满能量;2X,两倍经验金币奖励;这5中道具都是按大概10-15秒的间隔随即出现的。B)声音开关。C)每日领取,坚持每天上线可以领取不同的奖励,每天还能抽奖两次,这个版块还可以花费金币买钻石。D)巅峰记录,看截图,存储了一系列数据在注册表。
 
 
 
开发思想:
1.  设置一个BlockCategory的枚举(None=0,Blue,Gold,Green,Purple,Red)。不用想也知道肯定是12*8的BlockCategory型数据矩阵,PictureBox的显示矩阵。 游戏一开始把所有块块随机一下显示出不同颜色就好了。
2.  难点一,点击一个颜色块后,怎么判断与它相邻的颜色块的个数以及是哪些?先别往下看,好好想想。我的办法是,每次点击后,立马实例化一个LinkedList,来张讲解图,比如我点了(0,1),那么先检测(0,2)是不是红色,不是,然后检测中心的(1,1),是红色,则调用这个检测是函数,把传入的参数之一改为(1,1),也就是说这时候开始把(1,1)当做第一个点开始检测。以此类推即可检测出所有相邻的同色块。但其实是不能的,会陷入一个死循环,看出来了么?要加入一个判断,每次更深入一层的调用这个递归,都要判断一下传入的参数在上一层是不是已经扫描过了。如果看不懂,请默默的去百度数据结构图的遍历。记住,每次有颜色相同的块,都要把这个块的下标Add到LinkedList上,这样遍历结束后就得到了一个相同颜色的链表。如果LinkedList.Length >= 3,则把矩阵中对应的块设置成BlockCategory.None

3.  难点二,消除了同色的块,那上面的块怎么落下来。好的办法是设定3个变量分别保存刚刚那次消除的所有块中,最左边的一块的x下标,最右边的x,最下边的y,这样就可以将范围缩小,只用扫描这个豁口矩形中哪些颜色存储的是BlockCategory.None。但这种办法提升了一定难度,程序中我用扫描整个12*8矩阵的所有情况,效率还可以。比如先扫描第一列,从下往上扫描,一旦某个块颜色是None,则将它上面的一块与之交换,类似冒泡排序的思想,把所有None的块一次次的挤到上面去,这样第一列就排好了,要拍整个12列。这样就实现了,消除同色块后,对应空缺的位置上面所有块自动下落。

4.  难点三,第3步结束口,最上面几排会有若干None的块,那肯定要重新生成让玩家继续点,方法很简单,一个Random扫描下,是None就换成其他颜色。但这样做效果就很不好了,我想实现的效果是新的块从屏幕顶端掉下来落在对应None的位置。想想,怎么弄?当然,可以实例化新的PictureBox,然后移动PictureBox的位置实现下落,等到了正确位置就把这个颜色赋给那个None,自己再Dispose掉,这样做没问题,但是如果下落的块多了就会发生很严重的闪屏,开启双缓存都不行。我的解决办法是在这个12*8的矩阵上面再来一个矩阵,大概是12*3,然后在该显示的列显示新的块下落。。。所以这就是一开始考虑不周全啊,全部改代码已经改不动了,只能这样修补,好在效果很不错。所以你们在写时直接建立一个更大的数组矩阵。

5.  上面4步做完你已经实现了核心功能。好,道具系统。如果花钱使用了道具,那么在玩的时候会随机某个块出现道具图标,点击有具体道具动画效果。比如炸弹,我点了一个红色的炸弹,那么要把整个12*8里的所有红色块都清除掉,清除时块中心有火花样式,逐渐变大,然后块消失,其他块下落。问题来了,块已经显示了不同的颜色,怎么在显示火花?BackgroundImage和Image。理论上说实例化新的PictureBox也可以单内存消耗是个问题。同样的,消除整行整列时的闪电效果也是这种思想。

6.  消除块后,分数要增加,怎么加,直接加上去感觉会很生硬,原版游戏中是数字在动态累加,看着就是分数在拼命的跳,这种设计很好,那该怎么实现呢?每次只加1,直到加够一次应该加的100分为止?这样做你会发现游戏结束2分钟了那个分数还在长。。。所以要根据实际应该的分数和现在显示的分数之间的差距来动态调整每次所加的分值大小。比如现在是0分,消除了几块,要长到100分,那可以每次长5分,如果要长到1000分,那每次长40分。

7.  每日登陆,在注册表中要记录一定量的时间值,比如上次登陆时间,然后每次登陆时先检查一下值差距,条件满足了就可以抽奖,抽奖后今天的“是否抽奖”标记为true保存到注册表,就可以实现一天抽奖一次。具体抽奖是个什么流程就随意发挥咯,而且代码也不难。我的效果是,一个矩阵,矩阵上存储着不同的奖励,点击开始后逐个的被高亮选中,移动到下个格子的速度越来越慢,直至停止,停在了哪个就给哪个奖励。善用随机数。

8.程序写的好不好除了有好的设计还有很多其他细节要做到。比如加入玩到一半切了出去,那这时候游戏是要自动暂停的吧!如果想要清除左右记录是不是也要加个功能。开始游戏后,3,2,1的倒计时是不是要做出花样?如果玩家一段时间没点是不是玩家找不到该点哪个了,是不是要帮助玩家高亮显示某一个颜色的块好继续?程序是不是存在这完全没的点的情况,那要怎么解决?倒计时提醒怎么提醒?很多很多,当然这些我都实现了,所以才会一个游戏写了这么多行代码。


(接连几天写的这几篇文章也不知道大家能不能看懂,伦家系第一器写哒啦嘛。。)


完整项目包下载地址:http://download.csdn.net/detail/q594076608/8053673

0 0