Objective-C和Sprite Kit游戏开发从入门到精通
上QQ阅读APP看书,第一时间看更新

3.3 选择语句

在游戏中,对于基本的方向控制,一般需要处理四个方向的操作,在类似这种情况下,即一个条件、多种可能时,可以使用switch语句结构,其应用格式如下。

    switch(<表达式>)
    {
    case <值1>:
        {
            <语句块1>
        }break;
    case <值2>:
        {
            <语句块2>
        }break;
    case <值n>:
        {
            <语句块n>
        }break;
    default:
        {
            <语句块n+1>
        }break;
    }

在switch语句结构中,我们可以看到,只有一个确定执行条件的<表达式>,而每一个case语句对应一个<表达式>的值。在这里,应注意每一个case所对应的语句块结束时,都应该有一个break语句,其原因是,case语句具有向下贯穿的特性,如果没有break语句中断当前case语句块,则会一直向下执行,直到遇到中断语句(如break、return等语句)或者是switch语句结构全部执行完成。

此外,每个case语句或default语句后的代码也可以不使用花括号,这主要取决于编程习惯,而break语句也可以放在每个case后{}的内部或在}后面,这也只是一个编程习惯问题。

下面的代码,我们就来模拟驾驶指令。

    typedef enum EDirection {
    Unknow, Up, Right, Down, Left
    } Direction;
    //
    Direction d = Up;
    //
    switch (d) {
    case Up:
        NSLog(@"前进");
        break;
    case Right:
        NSLog(@"右转");
        break;
    case Down:
        NSLog(@"倒车");
        break;
    case Left:
        NSLog(@"左转");
        break;
    default:
        NSLog(@"停止");
        break;
    }

我们首先定义了一个方向枚举类型,然后通过switch语句结构判断操作方向,分别显示操作指令。大家可以修改变量d的值,并观察代码执行的结果。

下面的代码继续演示一个日期相关的处理,我们利用case的贯穿特性来返回某年某月中的天数。

    int year = 2006;
    int month = 2;
    int days = 0;
    switch(month)
    {
        case 1:
        case 3:
        case 5:
        case 7:
        case 8:
        case 10:
        case 12:
            days = 31;
            break;
        case 4:
        case 6:
        case 9:
        case 11:
            days = 30;
            break;
        case 2:
            days = ((year%100! =0 && year%4==0) || year%400==0) ? 29 : 28;
            break;
        default:
            days = 0;
            break;
    }
    NSLog(@"%i年%i月有%i天", year, month, days);

请注意,在switch语句结构中总是使用default语句块,可以保证<表达式>的结果在任何数据时都会有相应的处理。