Таким образом можно засвитчить несколько букв(не обязательно 2), но одного регистра:
- такого способа, буквы могут быть в любом порядке, а кейс сработает.
Как известно современная латиница содержит 26 букв.
Открываем notepad++ >> Правка >> Таблица символов.
Т.к. в кс 32 бит, всё что смещается дальше 32 - заходит на второй круг
Т.е. 1<<1 == 1<<33, 1<<3 == 1<<35 == 1<<67...И т.д.
Видим, что маленькая(в нижнем регистре) буква 'a' == 97. 'z' == 122, и идут они подряд, т.е. не вылезает за 32.
Свитчим сумму битов, отнимая 97 от каждой буквы, получается смещаем все буквы к 0.
Можно и не отнимать(В данном случае),, 1<<97 == 1<<1 1 + 26 = 27, т.е. не будет одинаковых битов.
- Код: Выделить всё
new text[][] = {"white", "red", "blue", "green", "orange"}
public plugin_init()
{
register_clcmd("ppfire", "functions")
}
public functions(id)
{
static r; r = random_num(0, charsmax(text))
switch(1<<text[r][0]-97|1<<text[r][1]-97)
{
case 1<<'w'-97|1<<'h'-97: client_print(id, print_chat, "case: %s", text[0])
case 1<<'r'-97|1<<'e'-97: client_print(id, print_chat, "case: %s", text[1])
case 1<<'b'-97|1<<'l'-97: client_print(id, print_chat, "case: %s", text[2])
case 1<<'g'-97|1<<'r'-97: client_print(id, print_chat, "case: %s", text[3])
case 1<<'o'-97|1<<'r'-97: client_print(id, print_chat, "case: %s", text[4])
}
client_print(id, print_chat, "Original: %s", text[r])
}
Ну можно и через ифы
Если вы хотите чему-то научиться, пробуйте, задавайте вопросы.
Иначе компенсируйте потраченное время на ваши "проблемы".