Бесконечный цикл While в Swift
возникла проблема, мне нужно поставить условие выполнения цикла, до определенного числа, подскажите пожалуйста, почему не соблюдается условие и он останавливается на одном определенном числе и не продолжается до условия которое я ему задал? (функция next())
Вот код:
import UIKit
class Round { // информация которая будет содержать предыдущий шаг и текущий
var warrior1: Unit // 1 воин
var warrior2: Unit // 2 воин
var previousSteps: [RoundStep] // информация предыдущего шага
init(warrior1: Unit, warrior2: Unit) {
self.warrior1 = warrior1
self.warrior2 = warrior2
self.previousSteps = []
}
var winner: [String : Int] = [:] // словарь для записи имен и побед
func start() {
winner = [:]
self.warrior1.characteristics = warrior1.characteristics
}
let attackOne = RoundStep.init(attackerId: 1, defenderId: 2, damage: 50, countRounds: 0)
let attactTwo = RoundStep.init(attackerId: 2, defenderId: 1, damage: 50, countRounds: 0)
func next() {
var step = [warrior1.id : warrior1.characteristics.health, warrior2.id : warrior2.characteristics.health]
if (step[warrior1.id] != nil) && attackOne.attackerId == 1 {
repeat {
step.updateValue(warrior1.characteristics.health - Int.random(in: warrior2.characteristics.damage), forKey: warrior1.id)
step.updateValue(warrior2.characteristics.health - Int.random(in: warrior1.characteristics.damage), forKey: warrior2.id)
print(step)
} while (warrior2.characteristics.health <= 0)
}
}
func pastSteps() -> [String : Int] {
print(winner)
return winner
}
func nextGame() {
winner.updateValue(0, forKey: warrior1.characteristics.name)
winner.updateValue(0, forKey: warrior2.characteristics.name)
}
}
struct Characteristics { // присвоение константам характеристик
var name: String
var health: Int
var damage: Range<Int> // от какого то до какого то значения будет записываться урон
}
struct Unit { // информация о персонаже
var characteristics: Characteristics // характеристики
var id: Int // идеентификатор
}
struct UnitUI { // ---
}
struct RoundStep { // что шаг представляет из себя
let attackerId: Int // атакующий
let defenderId: Int // защиющий
let damage: Int // дамаг
let countRounds: Int
}
let round1 = Round.init(warrior1: Unit.init(characteristics: Characteristics.init(name: "Ivan", health: 1000, damage: 50..<100), id: 1), warrior2: Unit.init(characteristics: Characteristics.init(name: "Medved", health: 1000, damage: 50..<100), id: 2))
round1.start()
round1.pastSteps()
round1.next()
Ответы (1 шт):
Автор решения: Oleg Soloviev
→ Ссылка
У вас задано условие, которое не выполняется:
while (warrior2.characteristics.health <= 0)
При этом функция repeat while выполняется хотя бы раз, поэтому выводится 1 результат.
Должно быть:
while (warrior2.characteristics.health >= 0)
Тогда цикл будет выполняться.