
Код 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;
}