2015-12-15 4 views
1

, поэтому я в настоящее время работаю над врагом, который свободно перемещается и перемещается к случайным пятнам сам по себе. Для этого я планирую выбрать его из набора возможных направлений, которые он может идти, как здесь: enter image description hereКак выбрать случайный выбор из набора действий

Как выбрать Случайным из набора возможных действий (увеличение Y, IncreasingX и т.д.)

Feed Back всегда приветствуется ;)

+0

вам нужно, чтобы сделать вид, что противник имеет цель делать ? Это более вероятно, чтобы двигаться вперед, чем просто случайно прыгать на месте? – Enigmativity

ответ

2

Я хотел бы сделать так:

int actions = Random.Range(0,2); 

(последний номер не отображается, обратите внимание, что возможность здесь, чтобы дать два возможных случайных результатов: «0 или 1» - если вы хотите ". 0, 1 или 2 "положить Random.Range(0,3); и т. Д.)

Подробнее о Random Range

И проверить его с switch statement - это вызовет точное действие отсортированных в int actions :)

switch(actions){ 
case 0: 
//do thing1 
break; 

case 1: 
//do thing 2 
break; 

default: 
//do nothing 
break; 

} 
0

Что вы хотите сделать, это сделать случайное число generato r, который генерирует случайное число от 1 до 8, и каждое число представляет собой направление. Это что-то вроде этого:

Random rand = new Random(); 
int direction; 

void OnUpdate() { 
    direction = rand.Next(1, 9); 
    if (direction == 1) { 
     moveLeft(); 
    } 
    else if (direction == 2) { 
     moveRight(); 
    } 
    ... 
} 

Мне очень жаль, если я путаю язык с C#, так как я не сделал единства на некоторое время :)

+0

Просто небольшой комментарий - неправильный вызов 'rand.nextInt (1, 8)'. Это должно быть так: 'rand.Next (1, 9)'. Имя метода было неправильным, и вы должны указать ** эксклюзивную ** верхнюю границу. – Enigmativity

+0

@ Энигматичность Благодарим вас за комментарий. Я смешал java, я верю :) –

1

Общий путь будет хранить массив функции и использовать случайное значение для индексации массива, чтобы выбрать, какую функцию выполнять.

Что-то вроде этого:

Random rand = new Random(); 
Action[] actions = { 
    () => { x += 1; y += 1; }, 
    () => { x += 1; } 
    //... 
}; 
actions[rand.Next(actions.Length)](); 

Это, однако, может быть довольно утомительным, но имеет некоторые преимущества. Например, набор возможных действий может изменяться динамически.

В этом случае, если вас беспокоит выбор случайного вектора из статического набора, вам действительно нужно выбрать случайные дельта и дельта X, где dX и dY являются {-1, 0, 1}

Random rand = new Random(); 

int dY = rand.Next(-1, 2); 
int dX = rand.Next(-1, 2); 

x += dx; 
y += dy; 
+1

Просто небольшой комментарий - неправильный вызов 'rand.Next (-1, 1)'. Это должно быть так: 'rand.Next (-1, 2)'. Вы должны указать ** эксклюзивную ** верхнюю границу. – Enigmativity

+0

@ Энигматичность спасибо за то, что поймала это, я отредактировал код соответственно – James

1
Random rand = new Random(); 

int direction; 

Vector3[] Directions = { // front, back, left, right and diagonal positions 

    new Vector3(1 , 0 , 0), 

    new Vector3(-1 , 0 , 0), 

    new Vector3(0 , 1 , 0), 

    new Vector3(0 , -1 , 0), 

    new Vector3(1 , 1 , 0), 

    new Vector3(-1 , -1 , 0), 

    new Vector3(1 , -1 , 0), 

    new Vector3(-1 , 1 , 0) 

} 

public Vector3 ChooseRandome(){ 

    direction = rand.Next(Directions.length); // Random number with directions.length as max possible number 

    return Directions[randomIndex]; // plug random number in and return index. 

} 
+1

почему бы не просто новый Vector3 (Random.Range (-1, 2), Random.Range (-1, 2), 0), –

Смежные вопросы