Показать сообщение отдельно
Старый 12.12.2010, 17:50
cfanya вне форума Посмотреть профиль Отправить личное сообщение для cfanya Найти все сообщения от cfanya
  № 8  
Ответить с цитированием
cfanya

Регистрация: Nov 2010
Сообщений: 21
Переписал код таким образом:

Код AS3:
stop();
 
var randomize:Number = 1;
var Max:int = 1;
 
// Характеристики персонажа
var strange:int = 10;
var agility:int = 12;
var endurance:int = 8;
var hits:int = 100;
var weapon:int = 5;
var armour:int = 3;
var HeroTime:int = (10-agility);
var damage:int = strange;
strange_fld.text = String(strange);
agility_fld.text = String(agility);
endurance_fld.text = String(endurance);
hits_fld.text = String(hits);
 
// Характеристики врага
var eStrange:int = 12;
var eAgility:int = 10;
var eEndurance:int = 15;
var eHits:int = 100;
var eWeapon:int = 3;
var eArmour:int = 1;
var EnemyTime:int = 8;
var eDamage:int = eStrange;
eStrange_fld.text = String(eStrange);
eAgility_fld.text = String(eAgility);
eEndurance_fld.text = String(eEndurance);
eHits_fld.text = String(eHits);
 
// ********************** Массивы ******************************
var TimeLine:Array = new Array();	// Общая шкала времени
var HeroAction:Array = new Array();	// Массив, содержащий сведения о следующем действии героя 
var EnemyAction:Array = new Array(); // Массив, содержащий сведения о следующем действии врага 
 
HeroAction[0] = "Яростная атака";
HeroAction[1] = "Рубящий удар";
HeroAction[2] = "в корпус";
 
// Тип удара	HeroAction[0]
var CombatStyle:Array = new Array("Яростная атака", "Глухая оборона", "Держать дистанцию");
 
// Тип удара  HeroAction[1]
var HitType:Array = new Array("Рубящий удар", "Колющий удар", "Пинок", "Удар щитом", "Толчек", "Обманный удар");
 
// Место удара	HeroAction[2]
var HitPlace:Array = new Array("в голову", "в корпус", "в правую руку", "в левую руку", "по ногам");
 
// ******************* Выводим тип атаки (HitType) ******************************
// Слушатели событий
nextattack_btn.addEventListener(MouseEvent.CLICK, nextattack);
previousattack_btn.addEventListener(MouseEvent.CLICK, previousattack);
 
hittype_fld.text = String(HitType[0]); 
var i:Number = 0;
 
function nextattack(event:MouseEvent):void
{
	if (i < 5) {i=i+1;}
	hittype_fld.text = String(HitType[i]);
	HeroAction[1] = HitType[i];		// Заносим тип удара в HeroAction
	}
 
function previousattack(event:MouseEvent):void
{
	if (i > 0) {i=i-1;}
	hittype_fld.text = String(HitType[i]);
	HeroAction[1] = HitType[i];		// Заносим тип удара в HeroAction
}
 
// ********************* Выводим тип поведения в бою (CombatStyle) ************************
// Слушатели событий
furyattack_btn.addEventListener(MouseEvent.CLICK, furyattack);
silentdefence_btn.addEventListener(MouseEvent.CLICK, silentdefence);
distance_btn.addEventListener(MouseEvent.CLICK, distance);
 
var tempState1:DisplayObject = furyattack_btn.upState;
var tempState2:DisplayObject = silentdefence_btn.upState;
var tempState3:DisplayObject = distance_btn.upState;
 
function furyattack(event:MouseEvent):void
{
	furyattack_btn.upState = furyattack_btn.downState;
	silentdefence_btn.upState = tempState2;
	distance_btn.upState = tempState3;
	attacktype_fld.text = CombatStyle[0];
	HeroAction[0] = CombatStyle[0];
	}
 
function silentdefence(event:MouseEvent):void
{
	silentdefence_btn.upState = silentdefence_btn.downState;
	furyattack_btn.upState = tempState1;
	distance_btn.upState = tempState3;
	attacktype_fld.text = CombatStyle[1];
	HeroAction[0] = CombatStyle[1];
	}
 
function distance(event:MouseEvent):void
{
	distance_btn.upState = distance_btn.downState;
	furyattack_btn.upState = tempState1;
	silentdefence_btn.upState = tempState2;
	attacktype_fld.text = CombatStyle[2];
	HeroAction[0] = CombatStyle[2];
	}
 
// **************** Выводим место удара (HitPlace) *********************************
// Фильтр свечения
import flash.display.Bitmap; 
import flash.display.BitmapData; 
import flash.filters.GlowFilter;
 
var dropShadow:GlowFilter = new GlowFilter(0xFF0000,1,100,100,1,15,true,true);
var filtersArray:Array = new Array(dropShadow);
 
// Слушатели событий
head_btn.addEventListener(MouseEvent.CLICK, head);
body_btn.addEventListener(MouseEvent.CLICK, body);
RightArm_btn.addEventListener(MouseEvent.CLICK, rightArm);
LeftArm_btn.addEventListener(MouseEvent.CLICK, leftArm);
legs_btn.addEventListener(MouseEvent.CLICK, legs);
 
// Функции указания удара
var checkOn:Boolean = false; //Выбрано куда бить или нет
 
function head(event:MouseEvent):void
{
	if (checkOn == false)
	{
	head_btn.filters = filtersArray; checkOn = true; 
	HeroAction[2] = HitPlace[0];
	}
	else {	deleteFilters(); delete HeroAction[2]; }
}
 
function body(event:MouseEvent):void
{
	if (checkOn == false)
	{
	body_btn.filters = filtersArray; checkOn = true; 
	HeroAction[2] = HitPlace[1];
	}
	else {	deleteFilters(); delete HeroAction[2]; }
}
 
function rightArm(event:MouseEvent):void
{
	if (checkOn == false)
	{
	RightArm_btn.filters = filtersArray; checkOn = true; 
	HeroAction[2] = HitPlace[2];
	}
	else {	deleteFilters(); delete HeroAction[2]; }
}
 
function leftArm(event:MouseEvent):void
{
	if (checkOn == false)
	{
	LeftArm_btn.filters = filtersArray; checkOn = true; 
	HeroAction[2] = HitPlace[3];
	}
	else {	deleteFilters(); delete HeroAction[2]; }
}
 
function legs(event:MouseEvent):void
{
	if (checkOn == false)
	{
	legs_btn.filters = filtersArray; checkOn = true; 
	HeroAction[2] = HitPlace[4];
	}
	else {	deleteFilters(); delete HeroAction[2]; }
}
 
// Функция удаления фильтров
function deleteFilters():void
{
	head_btn.filters = null;
	body_btn.filters = null;
	RightArm_btn.filters = null;
	LeftArm_btn.filters = null;
	legs_btn.filters = null;
	checkOn = false;
	}
 
// ************************* TimeLine ***************************
// Подсчет времени на удар врага
function EnemyTime_fnc():void
{
	EnemyTime = (10-eAgility);
 
	EnemyAction[0] = rnd(2);
	EnemyAction[1] = rnd(5);
	EnemyAction[2] = rnd(4);
	switch (EnemyAction[0])
	{
	case 0: EnemyTime = EnemyTime + 0; EnemyAction[0] = "Яростная атака"; eDamage = eDamage+(eDamage/4); break;
	case 1: EnemyTime = EnemyTime + 3; EnemyAction[0] = "Глухая оборона"; eDamage = eDamage-(eDamage/4); break;
	case 2: EnemyTime = EnemyTime + 2; EnemyAction[0] = "Держать дистанцию"; break;
	}
 
	switch (EnemyAction[1])
	{
	case 0: EnemyTime = EnemyTime + 5; EnemyAction[1] = "Рубящий удар"; break;
	case 1: EnemyTime = EnemyTime + 3; EnemyAction[1] = "Колющий удар"; break;
	case 2: EnemyTime = EnemyTime + 2; EnemyAction[1] = "Пинок"; break;
	case 3: EnemyTime = EnemyTime + 3; EnemyAction[1] = "Удар щитом"; break;
	case 4: EnemyTime = EnemyTime + 5; EnemyAction[1] = "Толчек"; break;
	case 5: EnemyTime = EnemyTime + 10; EnemyAction[1] = "Обманный удар"; break;
	}
 
	switch (EnemyAction[2])
	{
	case 0: EnemyAction[2] = "в голову"; break;
	case 1: EnemyAction[2] = "в корпус"; break;
	case 2: EnemyAction[2] = "в левую руку"; break;
	case 3: EnemyAction[2] = "в правую руку"; break;
	case 4: EnemyAction[2] = "по ногам"; break;
	}
if (EnemyTime <= 0) {EnemyTime = 1;}
if (HeroTime == EnemyTime){EnemyTime_fnc();}
EnemyAction[3] = eDamage;
}
 
// Подсчет времени на удар героя
function HeroTime_fnc():void
{
	HeroTime = (10-agility);
 
	switch (HeroAction[0])
	{
	case "Яростная атака": HeroTime = HeroTime + 0; damage = damage+(damage/4); break;
	case "Глухая оборона": HeroTime = HeroTime + 3; damage = damage-(damage/4); break;
	case "Держать дистанцию": HeroTime = HeroTime + 2; break;
	}
 
	switch(HeroAction[1])
	{
	case "Рубящий удар": HeroTime = HeroTime + 5; break;
	case "Колющий удар": HeroTime = HeroTime + 3; break;
	case "Пинок": HeroTime = HeroTime + 2; break;
	case "Удар щитом": HeroTime = HeroTime + 3; break;
	case "Толчек": HeroTime = HeroTime + 5; break;
	case "Обманный удар": HeroTime = HeroTime + 10; break;
	}
HeroAction[3] = damage;
if (HeroTime <= 0) {HeroTime = 1;}
}
 
// ******************************** Присваевает TimeLine значение действия ******************
var ti:Number = 0;
var triggerTi:Boolean = true;
 
function Action():void
{
	if (triggerTi == true) 
		{
		HeroTime_fnc(); EnemyTime_fnc();
		TimeLine[HeroTime] = HeroAction;
		TimeLine[EnemyTime] = EnemyAction;
 
	do { ti=ti+1; }
	while (TimeLine[ti] == undefined); // Проверяем цикл по массиву TimeLine, до первого действия
		}
 
if (triggerTi == false){
	if (TimeLine[ti] == HeroAction) {delete TimeLine[ti]; HeroTime_fnc(); TimeLine[HeroTime+ti] = HeroAction; }
	else { delete TimeLine[ti]; EnemyTime_fnc(); TimeLine[EnemyTime+ti] = EnemyAction; }
	do { ti=ti+1; }
	while (TimeLine[ti] == undefined); // Проверяем цикл по массиву TimeLine, до первого действия
}
 
triggerTi = false;
 
	trace("EnemyAction="+EnemyAction);
	trace("EnemyTime="+EnemyTime);
	trace("HeroTime="+HeroTime);
	trace("ti="+ti);
	trace("HeroTime+ti="+(HeroTime+ti));
	trace("EnemyTime+ti="+(EnemyTime+ti));
	trace("TimeLine="+TimeLine);
}
 
// ************************************ Обработка действия (WorkAction)***************************
function WorkAction():void
{
	if (TimeLine[ti] == EnemyAction) {hits = hits-EnemyAction[3]; hits_fld.text = String(hits);
	eDamage = eStrange; }
	else {eHits = eHits-HeroAction[3]; eHits_fld.text = String(eHits); damage = strange; }
}
 
// ******************* Следующий ход *******************************
var turn:Number = 0;
turn_fld.text = String(turn);
 
nextturn_btn.addEventListener(MouseEvent.CLICK, nextturn);
 
function nextturn(e:MouseEvent):void
{
Action();			// Записываем удары в TimeLine и находим ближайший удар
turn_fld.text = String(ti);		// Счетчик ходов
NextMovement_fld.text = String(TimeLine[ti]);
WorkAction();		// Обрабатываем действие
}
 
// ********************************* Функция случайного числа ********************************
function rnd(Max):int
{
var randomize:Number = (Math.floor(Math.random() * (Max+1))-Math.floor(Math.random() * (Max+1)));
if (randomize < 0)
	{
		randomize = 0;
		}
	return randomize;
	}