PDA

Просмотр полной версии : [Вопрос] по рандомное нажатие кнопок



Pawn.Dima
12.05.2020, 18:52
Здравствуйте был уже вопрос по поводу нажатие кнопок от "xL1ke" и там "DeimoS" показал как сделать рандомное нажатие кнопок но у меня выскочила ошибка то что переменная не где не используется



new random_keys[] = { 1, 2, 4, 8, 16, 32, 128, 512, 1024, 8192, 16384, 65536, 131072, 262144, -128, 128 };
new keys_name[sizeof(random_keys)][] = { "TAB", "C", "ЛКМ", "Прыжок", "Enter", "Lshift", "ПКМ", "NUM 1/СКМ", "NUM4", "NUM6", "Y", "N", "H", "G", "W", "S" };
new key_pressed[MAX_PLAYERS] = -1;

там где нужно нажатие


key_pressed[playerid] = random(sizeof(random_keys));
new string[sizeof(keys_name[])+14];
format(string, sizeof(string), "Нажмите на \"%s\"", keys_name[key_pressed[playerid]]);
SendClientMessage(playerid, -1, string);


public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
if(newkeys == key_pressed[playerid])
{
SendClientMessage(playerid, -1, "Кнопка угадана!");
key_pressed[playerid] = random(sizeof(random_keys));
new string[sizeof(keys_name[])+14];
format(string, sizeof(string), "Нажмите на \"%s\"", keys_name[key_pressed[playerid]]);
SendClientMessage(playerid, -1, string);
return 1;
}
return 1;
}

ошибка


C:\Users\Admin\Desktop\Новая папка\gamemodes\neww.pwn(10002) : warning 203: symbol is never used: "random_keys"
Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase


1 Warning.

как сделать правильно? подскажите

tnc
12.05.2020, 19:07
Лучше структурировать это все в один массив:


#if !defined MAX_KEY_NAME
const MAX_KEY_NAME = 64;
#endif

enum e_keyboard_key_info
{
// kki = keyboard_key_info
kkiKey,
kkiName[MAX_KEY_NAME]
}

new const g_keyboard_key_info[][e_keyboard_key_info] =
{
{ KEY_ACTION, "TAB" },
{ KEY_CROUCH, "C" },
{ KEY_FIRE, "LCTRL / LMB (Left Mouse Button)" },
{ KEY_SPRINT, "SPACE" },
{ KEY_SECONDARY_ATTACK, "ENTER" },
{ KEY_JUMP, "LSHIFT" },
{ KEY_HANDBRAKE, "RMB (Right Mouse Button)" }
// ...
}


P.S: используйте константы для keys.

Pawn.Dima
12.05.2020, 19:13
А пример использования можно?

Pawn.Dima
13.05.2020, 10:19
Помогите пожалуйста то что выше написали я не пойму как это все реализовать с переменными проще было как у Deimos”a”

tnc
13.05.2020, 10:37
new rand_index = random(sizeof(g_keyboard_key_info));

printf("key: %d", g_keyboard_key_info[rand_index][kkiKey]);
printf("key name: ", g_keyboard_key_info[rand_index][kkiName]);

Pawn.Dima
13.05.2020, 12:48
Хорошо вечером попробую спасибо)

SteveStage
13.05.2020, 19:16
new rand_index = random(sizeof(g_keyboard_key_info));

printf("key: %d", g_keyboard_key_info[rand_index][kkiKey]);
printf("key name: ", g_keyboard_key_info[rand_index][kkiName]);



new rand_index = random(sizeof(g_keyboard_key_info));

printf("key: %d", g_keyboard_key_info[rand_index][kkiKey]);
printf("key name: %s", g_keyboard_key_info[rand_index][kkiName]);

Shaolinka
13.05.2020, 21:08
//delll

execution
14.05.2020, 08:23
new rand_index = random(sizeof g_keyboard_key_info) + 1;

printf("key: %d", g_keyboard_key_info[rand_index][kkiKey]);
printf("key name: %s", g_keyboard_key_info[rand_index][kkiName]);

чтобы вывело и максимальное

В твоём случае, оно выйдет за пределы массива.
Допустим, размер g_keyboard_key_info = 10. Функция random(sizeof g_keyboard_key_info ) - будет генерировать рандомное число от 0 до 9 (где - 9 и есть максимальное), и когда оно даст 9 и добавить твою единицу - будет выход за пределы массива.