Проблема. Несколько рекурсий в одной функции
Доброго времени суток, уважаемые форумчане.
Я начинающий, вот решил чисто для себя посчитать математически количество попыток для заточки в одной игре. (Дико извиняюсь за невнятное изложение след. условий:)
Кратко: При удачной заточке +1, При неудачной всегда обнуление. Шанс 75%
Код для заточки одного предмета написал, работает. Задумал посчитать, будет ли меньше попыток для заточки нужного предмета, если после каждой успешной его заточки ждать неудачи на других трех предметах, и только после неудачи снова переходить к заточке первого.
Собственно код:
Код AS3:
var enchant = 0; //Изначальная заточка необходимого предмета
var chance1: Number; //
var chance2: Number; //Переменные для хранения шансов заточки для каждого из четырех предметов
var chance3: Number; //
var chance4: Number; //
var tries = 0; // Изначальное количество попыток
button.addEventListener(MouseEvent.CLICK, enchantingOne); //Кнопка заточки на одном предмете
button2.addEventListener(MouseEvent.CLICK, enchantingFour); //Кнопка заточки на четырех предметах
//Заточка единственного предмета
function enchantingOne(event: MouseEvent): void { //Нажимаем на кнопку
while (enchant < 10) { //До тех пор, пока не заточилось на + 10
chance1 = Math.random() //Точим
if (chance1 * 100 < 76) { //Шанс 75%
enchant++ //Прибавляем уровень заточки
tries++ //Увеличиваем счетчик попыток
} else { //Если не заточилось
enchant = 0 //Обнуление заточки
tries++ //Увеличиваем счетчик попыток
}
}
//Вывод количества попыток в динамическое текстовое поле, обнуление переменных для повтора.
memo.text = tries + " Попыток";
enchant = 0;
tries = 0;
}
//Заточка на четырех предметах
function enchantingFour(event: MouseEvent): void { //Нажимаем на кнопку
while (enchant < 10) { //До тех пор, пока не заточится на + 10
function enFirst(): void { //Точим первое
chance1 = Math.random() //Шанс заточки 75%
if (chance1 * 100 < 76) { //Если успешно заточилось первое
enchant++ //Прибавляем уровень заточки
tries++ //Увеличиваем счетчик попыток заточки первого
function enRest(): void { //Точим другие
chance2 = Math.random() //Шанс 75%
if (chance2 * 100 < 76) { //Если успешно заточилось второе, точим третье
chance3 = Math.random() //Шанс 75%
if (chance3 * 100 < 76) { //Если успешно заточилось третье, точим четвертое
chance4 = Math.random() //Шанс 75%
if (chance4 * 100 < 76) { //Если успешно заточилось и четвертое...
enRest() //...Возвращаемся к заточке со второго
} else { //Если не заточилось четвертое...
enFirst() //...Снова точим первое
}
} else { //Если не заточилось третье...
enFirst() //...Снова точим первое
}
} else { //Если не заточилось второе...
enFirst() //...Снова точим первое
}
}
} else { //Если не заточилось первое
enchant = 0 //Сбрасываем заточку
tries++ //Увеличиваем счетчик попыток заточки первого
}
}
}
//При успешной заточке на +10 вывод в динамическое текстовое поле количества попыток заточки первого ...
//...и обнуление переменных для повторения заточки с нуля.
memo.text = tries + " Попыток";
enchant = 0;
tries = 0;
}
Компилируется, но при запуске счетчика заточки на четырех предметах приложение перестает отвечать и оживает через 15 секунд. Прошу помощи =)
|