上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语句块,可以保证<表达式>的结果在任何数据时都会有相应的处理。