switch

在许多情况下,您希望让实例根据特定值执行不同的操作。你可以使用一系列连续的if / else语句来做到这一点,但是当可能的选择超过两个或三个时,通常更容易使用switch语句。

switch语句的语法如下:

switch (<expression>)
{
    case <constant1>:
        <code>
    break;

    case <constant2>:
        <code>
    break;
    
    // more cases (with breaks)

    default:
        <code>;
}

它的工作原理如下:

注意switch语句将继续执行case内的代码,直到遇到break。如果在用例的末尾不使用break,它将导致switch“泄漏”到下一个case,甚至是一个default部分,如果没有break在中间。这可能会导致意外的行为,因为执行一个case可能会导致多个case被执行,所以确保在适当的地方使用break

使用switch语句的一个简单示例如下:

switch (player_lives)
{
    case 3:
        draw_sprite(20, 20, spr_face_healthy);
    break;

    case 2:
        draw_sprite(20, 20, spr_face_hurt);
    break;

    case 1:
        draw_sprite(20, 20, spr_face_fatal);
    break;

    default:
        draw_sprite(20, 20, spr_face_fainted);
    break;
}

注意,可以使用多个case语句来执行同一条语句,因为并不总是每个case都需要 break。如果对于特定的case没有break语句,则简单地继续执行下一个case的代码,例如:

switch (keyboard_key)
{
    case vk_left:
    case ord("A"):
        x -= 4;
    break;

    case vk_right:
    case ord("D"):
        x += 4;
    break;

    case vk_up:
    case ord("W"):
        y -= 4;
    break;

    case vk_down:
    case ord("S"):
        y += 4;
    break;
}

上面的代码使用switch检查键盘事件,然后将其与列出的每个case 进行比较。如果它满足任何所需的值,则执行相应的代码。注意 switch可以检查多个cases并执行代码,直到下一个 break,以允许使用各种键来获得相同的结果。

每个case都可以有自己的代码,所以您可以设置一种“继承”系统,其中一个case执行自己的代码,然后执行下一个case的代码。