游戏里的几个简单算法

    游戏这词在计算机领域里面其实就是一个软件,就是一堆能让计算机进行一系列功能的数据。游戏开发说白了就是软件开发的一类。游戏的内容、游戏的规则和游戏的流程都取决于开发者。而做游戏开发也好,其他软件开发也好,都具有很多相同的类容,例如框架、引擎、流程和算法等。其中算法如果深入去讲,其实是一门相当复杂的偏向于数学的计算机学科,里面有很多计算或者对数据操作的一些方法。下面我会介绍些比较常用的算法。

随机数的方法:

//-------------------产生 min~max的随机数--------------------------//
public static function randRange(min:Number,max:Number):Number
{
      var randomNum:Number = int(Math.random() * (max - min + 1)) + min;
      return randomNum;
}
   randRange(min:Number,max:Number)这个函数会返回一个min到max之间的整数。这里的区间是[min,max],而Math.random()会返回一个[0,1)的小数,在flash中Number表示一个IEEE-754双精度浮点数。就理解成一个Double就行了。
    还有根据一些特殊的需求取出对于的随机数:

//--------------在min~max区间内取出一定数量的随机数--------------------//
public static function ranRangeGround(min:Number,max:Number,Num:int):Array
{
    var temp:Array = new Array;
    var len:int = max - min + 1;
    var reArr:Array = new Array;
    var _random:int;
    for (var i:int = 0; i < len; i++)
    {
        temp.push(min + i);
    }
    while (Num)
    {
        _random = randRange0(len - 1);
        reArr.push(temp[_random]);
        temp.splice(_random, 1);
        len -= 1;
        Num -= 1;
    }
    return reArr;
}
private static function randRange0(max:Number):Number
{
    return randRange(0,max);
}

    由于很多时候都会涉及到0到max的区间所以先写一个这样的方法。上面的方法的算法其实就是先产生一个区间的数组,然后在里面的数中一个个的随机取出来,取一个删一个。算法的效率不是很高,但如果数量不是很多的话在实际开发当中没必要去想更优的算法去提升效率。如果是需要在时段内大量调用的话另当别论。函数所返回的数组里面的内容是不重复的。如果不是取一个删一个的话是会出现重复的。
    在游戏的UI处理很多时候是需要把一个正整数按位数拆开然后根据每个位的数字来相应的对一个MovieClip进行操作的:

//------------------把数字转换为数组---------------//
//例如NumtoArray(524),函数返回一个array(5,2,4)
public static function numtoArray(num:int,flushLeft:Boolean = true):Array
{
    var str:String = String(num);
    var len:int = str.length;
    var i:int = 0;
    var array:Array = new Array;
    for (i; i < len; i++)
    {
        array.push(int(str.charAt(i)));
    }
    if (!flushLeft)
    {
        array.reverse();
    }
    return array;
}

    上面的函数的做法是先整数转换成字符串,这里没有考虑负数的问题,如果要正整数的话可以改成unit类型,还有flushLeft这个有一个默认值为true,在flash中是可以在函数参数那里定义默认值的,而在java中是没有这个做法的,因为flash中没有方法重载,所以会有这个东西。而且这个函数其实是有不少的问题的,例如如果是负数怎么处理或者需求变成要带小数要怎么处理,在java中可能会抛个异常什么的,flash也有异常,但一般的做法是直接在内部处理,不使用异常,除非是一些涉及数据通信或者文件处理可能会用到try/catch,其他时候比较少用异常这方面的。而且老实说也没几个人用,一般用到的地方都是些网络通信文件处理的,所以如果是游戏逻辑或者是UI的话是不会涉及的,网络通信那块可以专门分一个模块来处理。这跟java中的接口类似,接口真有人天天写吗?用肯定会用到,但自己写个接口会经常吗?我估计除了开发一些框架什么的会用,在实际开发中,自己写个接口什么的,几乎没有,也有可能会写,但几率太小了。这也好比反射,工作了好几年的java程序员,真没怎么用过反射,因为都在开发些专用的软件,不涉及通用的东西,一般用反射技术的是在写框架的时候,便于扩展功能把内容写活,方便以后的使用。好像有点扯远了~~。

    总结一下,上面的3个方法一般都写成静态的,然后放在一个类里面,方便平时开发的过程中使用,作为一个工具吧,软件开发过程中,会需要不少这些类型的工具方法,为什么很多公司需要些有经验的软件开发人员呢?除了这些人具备实际处理问题的经验外,其实还有他们会有很多以前积累的工具,来帮助他们在工作中更快的完成需求。所以说程序员的价值其实是会慢慢的增长的。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值