Показать сообщение отдельно
Старый 22.02.2017, 07:44
Eyeder вне форума Посмотреть профиль Отправить личное сообщение для Eyeder Найти все сообщения от Eyeder
  № 1  
Ответить с цитированием
Eyeder

Регистрация: Feb 2017
Сообщений: 2
По умолчанию Проблема. Несколько рекурсий в одной функции

Доброго времени суток, уважаемые форумчане.
Я начинающий, вот решил чисто для себя посчитать математически количество попыток для заточки в одной игре. (Дико извиняюсь за невнятное изложение след. условий
Кратко: При удачной заточке +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 секунд. Прошу помощи =)


Последний раз редактировалось Eyeder; 22.02.2017 в 15:03. Причина: исправил теги