2015-11-19 2 views
1

Я хочу, чтобы зомби двигались 30 раз в одном случайном направлении и после этого изменяли направление каждого зомби индивидуально. У меня много зомби. Все они НЕ должны двигаться в одном направлении. Я уверен, что мне не хватает чего-то глупого. Мой код:Swift: алгоритм для изменения случайного числа после нескольких циклов

for zombie in Zombies{ 
    if(zombieCounter >= 30){ 
     for zombie in Zombies{ 
      direction = Int(arc4random_uniform(4)) 
      switch direction{ 
      case 0: 
       zombie.position.y += step 
       zombie.direction = 1 
      case 1: 
       zombie.position.y -= step 
       zombie.direction = 2 
      case 2: 
       zombie.position.x -= step 
       zombie.direction = 3 
      case 3: 
       zombie.position.x += step 
       zombie.direction = 4 
      default:() 
      } 
     } 
     zombieCounter = 0 
    } 
} 

zombieCounter += 1 

Прежде чем я имел этот код:

if(zombieCounter >= 25){ 
    zombieCounter = 0 
    for zombie in Zombies{ 
     let direction = arc4random_uniform(4) 
     switch direction{ 
     case 0: zombie.position.y += stepZombie 
     zombie.direction = 0 
     case 1: zombie.position.y -= stepZombie 
     zombie.direction = 1 
     case 2: zombie.position.x -= stepZombie 
     zombie.direction = 2 
     case 3: zombie.position.x += stepZombie 
     zombie.direction = 3 
     default:() 
     } 
    } 
} 

Он получает случайное направление для каждого из зомби и перемещает зомби только один раз. То, что я хочу сделать, - это перемещать зомби несколько раз в одном направлении без цикла в случаях. Функция должна быть вызвана один раз. В следующий раз направление должно быть таким же, как в первый раз. После 30 пробегов направление должно быть случайным образом рассчитано для каждого из зомби.

override func update(currentTime: CFTimeInterval) { 
     /* Called before each frame is rendered */ 
     if !gameOver{ 
      let step: CGFloat = 5 
      let stepZombie: CGFloat = 20 
      var zombieMovement = 20 

      if(zombieCounter >= 25){ 
       zombieCounter = 0 
       for zombie in Zombies{ 
        let direction = arc4random_uniform(4) 
        switch direction{ 
        case 0: zombie.position.y += stepZombie 
        zombie.direction = 0 
        case 1: zombie.position.y -= stepZombie 
        zombie.direction = 1 
        case 2: zombie.position.x -= stepZombie 
        zombie.direction = 2 
        case 3: zombie.position.x += stepZombie 
        zombie.direction = 3 
        default:() 
        } 
       } 
      } 
      zombieCounter += 1 
     } 
    } 
} 
+0

Почему вы перекручивание через 'Zombies' дважды? – Arc676

+0

@ Arc676 Если бы не у каждого зомби было то же самое направление, которое я не хочу. –

+0

Нет, если вы создаете случайное «направление» на каждой итерации. – Arc676

ответ

1

Lukas Кёль, мы уже создали класс противника для вас в нашем чате с вашего последнего вопроса вы в курсе, так что мы хотим сделать, это воспользоваться этим.

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

override var moveCounter : Int = 30 
{ 
    didSet{ 
     if(moveCounter == 0) 
     { 
     direction = Int(arc4random_uniform(4)) + 1 
     moveCounter = 30 
     } 
    } 
} 

Затем, после того, как каждый шаг зомби берет, мы делаем zombie.moveCounter-- (В конце концов, я хотел бы, чтобы помочь вам получить все это в классе)

+0

Ну. Не ожидал этого. –

+0

Lukas, Похоже, что кто-то изменил обстоятельства вашей проблемы. Тем не менее, на ваш вопрос ответили? – Verticon

0

Как насчет этого?

class Zombie { 
    var position = CGPoint() 
    var direction: UInt32 = 0 
} 

let maxSteps = 25 
var Zombies = [Zombie]() 
var gameOver = false 
var stepsInCurrentDirection = MaxSteps 

func update(currentTime: CFTimeInterval) { 
    /* Called before each frame is rendered */ 
    if !gameOver { 
     //let step: CGFloat = 5 
     //var zombieMovement = 20 

     let stepZombie: CGFloat = 20 
     let changeDirection = stepsInCurrentDirection >= maxSteps 

     for zombie in Zombies { 
      if changeDirection { zombie.direction = arc4random_uniform(4) } 
      switch zombie.direction { 
       case 0: zombie.position.y += stepZombie 
       case 1: zombie.position.y -= stepZombie 
       case 2: zombie.position.x -= stepZombie 
       case 3: zombie.position.x += stepZombie 
       default:() 
      } 
     } 

     if changeDirection { stepsInCurrentDirection = 1 } 
     else { stepsInCurrentDirection += 1 } 
    } 
}