Креирање стратегија од нула - детален водич. Паметен или глупав клиент? Создадете стратегија за вртење

тематски парк:
Ќе ни требаат:
градење спрајт
спрајт мени
СПРАЈТИ ОД РАЗЛИЧНИ КОПЧИЊА КАКО:
шит со натпис (градба, градба, градба и сл.)
се појавува прозорец
градежен цртеж,
1) остатокот ќе го додадеме сами
2) зборот фалсификуван - создаден од мене, бидејќи ќе треба да го лажираме за да одговара на нашиот извор)
Ајде да започнеме:
1) креирајте сè што е напишано во точка I, освен 1)
Ајде да создадеме глобална променлива наречена пари, да поставиме која било почетна сума на пари
Ќе создадеме и објект за глувче и тастатура
Ајде да создадеме текст, да го наречеме инфо, да создадеме настан секогаш и да создадеме дејство во него:
изберете информации во изборот на акција изберете го поставите текстот во текстот напишете го ова:
"пари: " &(глобално("пари".
2) додадете мени, главната задача на менито не е да се меша, туку да му помогне на играчот да се движи (како може да се меша? - лесно е ако го поставите на средина на играта); пред да го направиме менито, ние ќе создадеме нов слој, кој ќе го наречеме мени, во неговите пропорции (поставки, опции) во ставката на екранот што ја пишуваме:


ќе додадеме спрајт во него и ќе ја земеме сликата од менито што беше во материјалите за претпродукција (точка I) и ќе го поставиме нашето мени на едно затскриено место каде што нема да пречи, туку ќе биде видливо на екранот
Ајде да поставиме и копче од материјали за претходна завршна обработка (точка I) со натпис BUILD (или нешто слично)
ајде да го ставиме на менито
Сега одете во Уредувач на листови со настани
креирај настан (#бла бла бла# - ова е мојата порака (објаснување) до тебе само наместо бла бла бла ќе има мој коментар за тебе; >> - акција; ll - поделба на прозорци на пример:

глувчето и тастатурата ќе се кликнат на објектот, ќе се кликне лево за да се прикаже #копче на вашето мени со натпис BUILD (или нешто слично)##остатокот подоцна (види точка 3)#
3)сега најтешкиот дел(Го поделив ова на две точки за да не биде толку комплицирано)
создадете спрајт од материјали за претходна завршна обработка „прозорец што ќе се појави“
тогаш создаваме празен sprite наречен p1, го поместуваме прозорецот од екранот и го ставаме p1 на местото каде што треба да се појави вашиот прозорец кога ќе го притиснете копчето за изградба (или нешто слично на тоа CHVER)
одлично! Сега одете во уредникот на листови со настани
Да го запишеме недовршениот настан до крај:
Текст ќе постави текст ll bla-bla-bla)
глувчето и тастатурата ќе се кликнат на објектот и ќе се кликне со лево за да се објект #копче на вашето мени означено како BUILD (или нешто слично)#>>
4)Вториот дел од најтешкиот дел:
ајде да направиме спрајт каде што ќе се нацрта сликата на зградата (материјали за преддоработка), да ја наречеме h1
ајде да создадеме празен спрајт, да го наречеме p2, сега да го поставиме на местото каде што треба да се отвори прозорецот,
Ајде да создадеме спрајт, исто така и прозорец (материјали за претходна завршна обработка), во прозорецот убаво ќе го напишеме името на зградата, нејзината цена и опис (по избор) и ќе ја наречеме i1
ајде да создадеме уште еден празен спрајт наречен p3, да го поставиме до p2, само така што ќе го допира само p2 со горниот лев агол
Сега да создадеме неколку настани, но прво го правиме претходниот настан една нова акција:
глувчето и тастатурата ќе се кликнат на објектот и ќе се кликне лево за да се прикаже #копчето од вашето мени со натпис BUILD (или нешто слично)#>> системот ќе креира објект во однос на објектот ll #вашиот прозорец# #бројот на слојот под менито за име# # X ;Y-не менувај# во објект p1
>>системот ќе создаде објект во однос на објектот ll #твојот втор прозорец# #бројот на слојот под менито за име# #X;Y-не менувај# во објектот p2
Исто така, треба да му вратиме настан:
копирајте го настанот и превртете го
нов настан
глувчето и тастатурата ll е над објектот ll h1>>систем ќе создаде објект во однос на објектот ll i1 #број на слој под менито за име# #X;Y-не менувај# во објект p3
Ајде да направиме спрајт со зграда (да користиме материјали за претпродукција) и да ја наречеме куќа
Ајде да создадеме прозорец каде што нашите згради ќе се појавуваат кога ќе бидат избрани во менито, наречете го rlo
настани:
глувчето и тастатурата ќе се кликнат на објектот, ќе се кликне со левото кликнување на h1>>систем ќе се создаде за објект во однос на објектот.
>> систем ќе одземе од вредноста ll # износ на пари што треба да се одземе при изградбата#
Сега беше невозможно да се изгради настан
Ќе ви го кажам мојот поранешен метод на забрана (кога ќе завршам со пишувањето, ќе истражам друг метод што ме направи сино кога се сетив на светот на тематскиот парк на играта)
настани:
куќа ll при судир со друг објект ll до куќа
>>Куќата ќе се уништи
>> system ll одземе од вредноста ll - #двојно количество пари што беше одземено за време на изградбата##забелешка мора да ставите - количина#
во основа сè.
III што сакам да кажам:

Бев многу вознемирен од колапсот на мојата игра.Тоа беше стратешка игра и оваа статија е составена според нејзината шема.Ве замолувам да не критикувате премногу, долго пишував, ако најдете грешки во говорот, пишете и поправете ги
а исто така еве го и изворниот код за вашето задоволство при гледањето, погледнете, во принцип се е исто како што пишува овде, само што ова беше демо верзија на играта.Главната работа е да не менувате ништо, инаку ќе биде баг !
користете го, експериментирајте, проверете го, правете што сакате, сè е во ред за мене

КаМиКаЗа:
Сите „системски“ изрази мора да бидат вклучени во ознаката „Code“.
Тогаш мислам дека ќе биде подобро.
Исто така, ми се чини дека сликите од екранот не би повредиле овде. И, исто така, изворниот код, за почетници.

тематски парк:
Не знам како да правам слики од екранот на настаните.

Па, тоа не е потребно.

iamnp:
theme_park , на тастатурата има посебно копче - PrintScreen

тематски парк:
Знам дека некои луѓе го прават тоа поинаку.Покрај тоа, секој има свој спрајт
и ако ги поставам сите овие спрајти, малку луѓе ќе разберат.
Па, можеби некој ќе даде плус? Не е ни чудо што се мачев?

бурлаченко:
За да може таквата лекција да биде интересна за некого, треба да се форматира соодветно, но овде „како и да беше“.
А сепак, ако сакате, по малку, кога имате време, ве молиме „разубавете“ го.

тематски парк:
ок, ќе се вратам од училиште и ќе се спремам.
П.С. додаден извор

Серега Лебедев:

iamnp, каде одат овие слики од екранот подоцна?

КаМиКаЗа:

До таблата со исечоци.
Одете на било кој уредувач на текст, и извршете ја операцијата „Вметни“ или притиснете Ctrl+V.

Во оваа статија, веројатно нема да допрам нешто непознато. Сите пресметки се едноставни и разбирливи за секој кој знае што е Ајакс. Веќе напишав статија за тоа како да комбинирам клиент со сервер во игри во реално време (). Во оваа статија, јас се осврнувам на истите прашања како што се однесуваат на игрите базирани на пресврт.

Па што е игра базирана на вртење? Следната дефиниција може да се најде на Википедија стратегија базирана на пресврт - е жанр на компјутерски игри чија главна карактеристика е тоа што играчите наизменично прават потези, наспроти стратегијата во реално време. Малку би ја поедноставил оваа дефиниција:

  • Стратегија чекор-по-чекор - е стратешка игра базирана на вртења.
  • Стратешка игра - Ова е жанр на игри во кои клучот за постигнување победа е планирањето и стратешкото размислување..
  • Игра базирана на пресврт - е жанр на игри чија главна карактеристика е тоа што играчите наизменично прават потези.
Игрите базирани на ред вклучуваат:
  • Стратегии базирани на пресврт
  • Игри со карти
  • Игри на табла (шах, оди, монопол, итн.)
Забележувам дека игрите базирани на вртење наметнуваат помалку ограничувања на сложеноста на протоколот за интеракција во споредба со игрите во реално време. Имено, времето на реакција на одреден настан не игра клучна улога. На играчот обично му се даваат 10 секунди да донесе одлука. Дури и ако пингот е џиновски, да речеме 3 секунди, тогаш играчот има уште 7 секунди за размислување. Покрај тоа, пингот може да скока и скока, но ние воопшто не ни е грижа за ова (во игрите во реално време, оваа ситуација практично го уништува секој протокол).

Вообичаено (во 95% од игрите на пресврт) точно еден играч ја донесува одлуката во даден момент. Следствено, бројот на барања на кои мораме соодветно да одговориме е намален.

Затоа, при креирањето на протокол, ќе се фокусираме првенствено на леснотијата на неговата имплементација и поддршка. Ова ќе ни овозможи да оствариме поголем профит за помалку време.

Горенаведеното размислување се заснова на 2-месечниот развој на одредена игра со карти.

Паметен или глупав клиент?

Прво, да одлучиме колку може да биде „паметен“ нашиот клиент. Дебатирам дали вреди да се дуплира логиката на апликацијата (правилата на играта) на клиентот. Се разбира, серверот мора да биде паметен за да спречи потенцијално хакирање на апликацијата. Но, дали вреди да се научи деловната логика на клиентот?

Ова директно зависи од тоа колку тежи целата количина на податоци за состојбата на вашата игра. Ако оваа количина на податоци е голема, потребно е долго време да се соберат на серверот и се префрлаат на клиентот, тогаш има смисла да се имплементира дел од логиката на клиентот за да се ослободи серверот. На пример, во Civilization, мерачот што се користи за меморија е секогаш надвор од графиконите. Можете ли да креирате нешто слично, оставајќи го само корисничкиот интерфејс на клиентот?

Од друга страна, колку е попаметен клиентот, толку поскап ќе биде развојот на играта. Дозволете ми да забележам дека времето за развој на серверот на кој било начин не зависи од ерудицијата на клиентот. Дури и ако клиентот е супер-дупер-мега паметен, ако корисникот сака повторно да го вчита прозорецот на прелистувачот, серверот ќе мора да ги собере и состави сите податоци за играта за да ги пренесе на клиентот. А ла „Вчитувам зачувана игра“. Заклучок: паметен клиент може да ја забрза апликацијата, но секогаш ќе бара дополнителни ресурси за да се развие апликацијата.

Го предлагам следново тест:

1. Дали јачината на звукот на каналот дозволува?

Проценете ја просечната тежина на целосниот износ на податоци за состојбата на играта. Следно, помножете се со просечниот број на барања до серверот во секунда. Ако добиениот број го надминува капацитетот на појдовниот канал за податоци, тогаш глупавиот клиент е неприфатлив. Ако оваа бројка надминува 20% од појдовниот канал, тогаш треба да размислите дали ќе работи?

2. Дали е трудоинтензивно?

Проценете ја сложеноста на алгоритмот за собирање податоци од играта (во дел од секундата). Овде, земете ги предвид сите прашања во базата на податоци. Следно, помножете се со просечниот број на барања до серверот во секунда. Ако времето надминува една секунда, тогаш глупав клиент е неприфатлив. Ако оваа бројка надминува 200 ms, тогаш треба да размислите дали ќе трае?

Продолжување:

Здраво на сите! Сега ќе ви кажам како да направите едноставен RTS (RTS - Стратегија во реално време, односно стратегија во реално време) да отворите хамак 8.1 (оперативноста не е загарантирана на 8.0) да создадете објект objControl, односно ова ќе биде нашиот главен објект, креирајте настан за создавање ( Креирај) Додај настан => Создавање (Додај настан => Креирај) настанот за создавање се прави само еднаш - при креирањето, кликнете на контролниот таб десно вертикално мении кликнете со десното копче на Изврши код и напишете го кодот (најдобро е да не го копирате кодот, туку да го напишете сами, многу е полесно да се запамети):

200?"200px":""+(this.scrollHeight+5)+"px");">startx=0; //Огласи променлива за почетната точка на x
почеток=0; //Дајави променлива за почеток на точката со y
draw_rect=неточно; //Не цртај изборен правоаголник


Променлива: парче меморија што содржи информации. Тие имаат свое име со кое можете да ги контактирате. Променливите во GML може да содржат реален број или низа. На пример, масата е променлива, дрвена или стаклена е вредност
Сега создаваме чекор настан (Чекор, Додај настан => Чекор) и ја извршуваме операцијата повторно (десен клик на Изврши код):

200?"200px":""+(this.scrollHeight+5)+"px");">
ако е притиснато копчето за проверка на глувчето (mb_лево) //Ако е притиснато LMB
{
draw_rect=true; //Цртаме правоаголник
startx=глувче_x; //Почеток x позиција = глувче x позиција
starty=глувче_y; //Почетна позиција = положба на глувчето
со сите избрани=неточно; //Ова сè уште не е декларирана променлива, ќе дознаеме што ќе прави подоцна
}

Ако mouse_check_button_released(mb_left) //Ако LMB се ослободи
{
draw_rect=неточно; //Не цртаме правоаголник
за(i=0;i<=instance_number(par);i+=1) //Читайте про цикл for ниже
{
ii=најди_примерка(пар,и); //Бараме објект што сè уште не е направен
if(collision_rectangle(startx,starty,mouse_x,mouse_y,ii,true,false)) //Еве го нашиот правоаголник за судир (контакт)
{
ii.selected=true;
}
}
}

Кодот е голем и сложен додека учиме за условната изјава if:
Кодот со if се извршува вака:

200?"200px":""+(this.scrollHeight+5)+"px");">
ако (услов)
{
акција
}

Може да содржи и друга изјава (инаку), пример:

200?"200px":""+(this.scrollHeight+5)+"px");">if (услов)
{
акција
}
друго
{
акција 2
}

И за е оператор на јамка, тој се извршува вака:

200?"200px":""+(this.scrollHeight+5)+"px");">
за (<переменная> ; <выражение> ;<действие переменной>)
{
<действия>
}


Операторот за е многу моќна работа, многу помага во тешки ситуации

Оператор - дејства вградени во јазик, на пример, најчести се int, if, else, string, switch, for, case, break, exit итн., итн.

Сега создаваме и настан за цртање (цртање) и пишуваме на ист начин:

200?"200px":""+(this.scrollHeight+5)+"px");">ако draw_rect=true
{
алфа=.8;
цртај_правоаголник_боја (почетокx, стартно, глувчето_x, глувчето_y, c_зелено, c_зелено, c_зелено, c_зелено, точно);
}

Сè е лесно овде, еве го истото само на руски:
ако треба да нацртаме правоаголник, тогаш избираме транспарентност и цртаме правоаголник
еве ги аргументите

200?"200px":""+(this.scrollHeight+5)+"px");">цртање_правоаголник_боја(x1,y1,x2,y2,боја 1, боја 2, боја 3, боја 4, преглед)


преглед - дали ќе се нацрта само работ (точно) или пополнетиот правоаголник (неточно)
Најдовме нов збор - константа, ова е нумерички израз или код заменет со збор, хамакот има вградени константи:

200?"200px":""+(this.scrollHeight+5)+"px");">true - 1
лажно - 0
пи - 3,1415...


Па, сфативме, сега треба да создадеме нов објект - родителски објект што ќе се поврзе со своите деца. Ајде да го наречеме пар (за да го промените името, треба да го промените кодот во настанот чекор за контролен објект), напишете во настанот за создавање:

200?"200px":""+(this.scrollHeight+5)+"px");">selected=false; //Овде е нашата променлива, без разлика дали објектот е избран

Ова е се. Сега, се разбира, ни треба објект што може да се движи, го нарекуваме objTest и го пишуваме кодот во настанот за создавање:

200?"200px":""+(this.scrollHeight+5)+"px");">gox=x; //Каде да се оди...
goy=y; //од y
избрано=неточно; //Не сме избрани =)
object_set_parent(self,par) //Овде е изборот на родител

Нова акција:

200?"200px":""+(this.scrollHeight+5)+"px");">object_set_parent(ind,obj)

Го поставува родителскиот објект на објектот со име ind.
И нов оператор: себе, тоа значи дека дејството ќе оди само за себе
Не плашете се, останува уште малку на чекор настанот:

200?"200px":""+(this.scrollHeight+5)+"px");">ако растојание_до_точка (gox,goy) > 20
{
mp_potential_step(gox,goy,6,solid);
}
ако (избрано=точно) && копчето_проверка_глувчето_притиснато (mb_десно)
{
gox=глувче_x;
goy=глувче_y;

Формирање на стратегија
Не можете да им верувате на аматерите:
нивните планови може неочекувано да успеат,
и никој не е подготвен за ова.

(А. Канингем)

Во двата претходни броја научивме направи едноставни 2D игри, контролирајте спрајти, скролувајте го екранот на играта, следете судири на објекти на играта, изградете интерфејс (копчиња, глушец, тастатура, области за текст) и работете во режими на цел екран и прозорци. Сето ова беше направено користејќи аркадна игра како пример.

Овој пат ќе преминеме од аркадни игри кон посериозен жанр - стратегии. Тука ќе треба да совладаме цела низа нови механизми, но и тука нема да има ништо комплицирано. Во оваа статија ние Ајде да ја проучиме структурата на стратегијата базирана на пресврт(и исто така стратегија во реално време- уште полесно е да се направи тоа со LKI-Creator) и ќе направиме игра како пример, дизајнирана, сепак, само за повеќекорисничкирежим (и исто така уредник на картиза неа). Со режимот за еден играч ќе се занимаваме во следниот број на нашата колумна - посветена на основите на вештачката интелигенција.

Бидејќи ова е веќе трета лекција, нема да навлегуваме во детали ситепример код - за среќа, многу е направено исто како и двата претходни пати. За повикување, постои пример програма (има многу коментари во неа) и претходни написи.

Па, материјалите од нашите минати часови можете да ги најдете на нашата ЦД, во делот „Направи сам игра“ специјално создаден за оваа намена.

Формулирање на проблемот

Ајде да напишеме стратешка игра која се состои од битка помеѓу две фантастични војски. Целта на битката е да се фати неколку обелиси, поставен на мапата. Пред битката ги распоредуваме нашите трупи, составени од 6 мечувалци, 4 стрелци, 2 витези, 2 волшебниции 1 дух, во рамките на територијата што ни е доделена. Покрај нив на картата има и неутрални змејови.

Карактеристики на борците
Борец Движење Хитови Опсег Оштетување Заштита Способности
Мечувар4 8 1 7 2 -
Стрелец4 5 7 5 1 -
Витез3 15 1 9 4 Исцелување, витешки удар
Mage3 12 5 6 0 Огнена топка
Дух4 7 2 5 5 Регенерација
Змејот6 30 2 12 5 Лет

Карактеристиките на борците се претставени во табелата. Третман- ова е право да се лекува соседниот воин (освен дух) до целосно здравје еднаш по битка. Најт штрајк- право да се нанесува тројна штета еднаш по натпревар. Огнена топка- нападот на магионичарот ги отстранува ударните точки не само од непосредната цел, туку и од околните плоштади. Регенерација- враќање на 1 удар по кривина. Лет- право на движење преку пречки.

Играта се игра во режим на повеќе играчи, во верзијата Hot Seat (игра од еден компјутер, се врти еден по еден). Откако играчите ќе се свртат, неутралните змејови доаѓаат на ред, напаѓајќи го секој непријател во радиус од 7 ќелии.

Забавата завршува кога едната страна или ќе фати повеќе од половина од обелисците присутни на картата или ќе умре целосно.

Картата првично беше поставена во уредувачот на мапи. Има обелисци, змејови и пречки (предмети низ кои не можете да се движите или нападнете).

Подготовка за работа

Пред да започнеме, ќе треба повторно да го инсталираме пакетот LKI-креатор. Факт е дека во споредба со минатиот пат, на него се направени многу измени и дополнувања.

(Се надевам дека Делфивеќе имате инсталирано; ако не, тогаш прочитајте ги препораките на оваа тема во нашата претходна статија - во јунскиот број на списанието или на ЦД-то од овој број или на веб-страницата.)

Тоа е важно:претходната верзија на LKI-Creator имаше одредени проблеми со компатибилноста со новите верзии на Delphi. Во оваа верзија тие се елиминирани.

Земете ја датотеката со програмски текстови и слики од нашето ЦД (дел „Игра со свои раце“) и отпакувајте ја во директориумот на проектот.

Сега можете да преземете потребни датотеки од тука .

Треба да имаме три поддиректориуми. One - Units - складира DirectX библиотеки и модули од пакетот LKI-Creator. Во друг - Проект - ќе работиме; сликите што ќе ни требаат се поставени таму однапред, и претходната верзијанашата аркада. Во третата - Escort - готова програма во која треба да успееме.

Сега да го инсталираме (реинсталираме) LKI-Creator. Во менито Delphi, отворете ја ставката Компонента и изберете Инсталирај компонента. Ако веќе сте го инсталирале овој пакет, останете на картичката Into постоечки пакет, во спротивно одете во картичката Into new пакет и пополнете ги празните линии како што е прикажано на сликата (на горната линија, најлесниот начин е да го изберете LKI2dEngine. pas датотека користејќи го копчето Browse, а на дното само запишете LKI). Потоа кликнете OK и изберете Инсталирај. Сега треба да го видите табот LKI во горниот панел на Delphi.

Сега останува само да го поставиме нашиот проект. Во менито Датотека, изберете Отвори, отворете ја датотеката Project\Obelisk.dpr…

Каде е мапата, Били? Ни треба карта!

Сепак, пред да влеземе во големите работи, ќе треба да работиме малку повеќе на графичкиот мотор.

Во Star Escort, нашиот претходен проект, „мапата“ немаше никакво значење: ѕвездите беа поставени по случаен избор и не влијаеа на ништо, а положбата на другите објекти беше или директно наведена во кодот или случајно одредена. Ова не е погодно за секој проект. Ова значи дека е време да го додадеме нашиот мотор мапа на област.

Веројатно веќе можете да погодите како ќе изгледа - ставаме објект на мапа на прозорецот на проектот, а потоа го регистрираме во имотот Картанашиот мотор.

Така е... но имаме повеќе од една класа карти. Ајде да погледнеме подетално...

Видови картички

Картата се состои од нешто пејзажИ предметиинсталиран на него. Пејзажот најчесто (но не секогаш) се дели на ќелии наречени плочки- плочки.

Како што знаеме од училишниот курс по геометрија, рамнината може да биде покриена без празнини или преклопувања со правилни полигони од три вида: триаголник (рамностран), квадрат, шестоаголник. Триаголните полиња не се особено погодни, па затоа почесто се користат квадратни ќелии или шестоаголници.

Во извесна смисла, живеењето со квадрати е полесно: ако имаме дводимензионална низа од ќелии, веднаш е јасно како да се најдат ќелиите во непосредна близина на дадена ќелија. Тоа се +1 и -1 за секој од двата индекса. Со шестоаголници, сè е малку покомплицирано... но шестоаголната табла има многу вредно својство: сите насоки во неа се исти. Ова не е случај со квадратна мрежа: дијагоналите се значително различни од хоризонталните и вертикалите. Затоа, за сериозни стратешки пресметки, шестоаголниците може да бидат подобри од квадратите.

Има и картички без плочки. LKI-Creator поддржува два вида: график и крпеница.

Графичка карта е мапа на која само неколку клучни точки имаат значење, плус можеби посебни области (на пример, непроодни), а останатото е само шема што нема ефект на игра. Така често се прават ѕвездени мапи, како, да речеме, мајсторот на Орион: ѕвездите и црните дупки се клучни точки, а останатото е позадина. Во овој режим, тие понекогаш прават глобални мапи, на пример, за игра со улоги.

Мапата на крпеница е поделена на области, а внатре во областа сите точки се исти, не можете да се движите по „крпеницата“. Ова е добро за глобалните стратегии, каде што провинцијата е минималната единица на територија.

Примери на картички од различни игри, кои го означуваат типот, се на сликите.

Значи мнозинството дводимензионалнимапите (тродимензионални - посебна статија) може да се поделат во четири класи:

  • Правоаголни- TLKIRectMap. Ова е мапа со плочки, ќелиите се квадрати. Таква карта, на пример, во Civilization III.
  • Шестоаголна- TLKIHexMap. Поплочена мапа со хексагонални ќелии. Се користи во многу воени игри, и не само: вака, на пример, традиционално се правела борбената мапа Heroes of Might & Magic.

    Овие два вида карти се потомци на општата класа TLKITileMap.

  • Графоваја- TLKIGgraphMap. Оваа картичка има позадина (својство на заднина)а клучните точки нагласени на него се статични објекти. Позицијата на другите објекти на оваа карта се изразува или со обични координати (како вселенски брод во меѓуѕвездениот простор) или со повикување на објект (ист брод во орбитата на планетата). Тоа се картичките Master of Orion, Arcanum (глобално) и така натаму.
  • Крпен- TLKICClusterMap. Има својство на позадина, како графиконот, и второ својство - маска, кој одредува која точка на кој регион припаѓа и имотот Граници, кој ги дефинира врските помеѓу „парчињата“. Така се распоредени мапите, на пример, во Medieval: Total War или Victoria.

Тоа е важно:Класите на карти не се опишани во модулот LKI2dEngine, туку во LKI2dMap.

Агли на навалување

Но, ако мислите дека ова ги исцрпува можностите на LKI-Creator за прикажување мапи, тогаш многу се лажете.

Картата може да се претстави горниот погледили изометриски- погледнете под агол на вертикалата. На пример, картата на Civilization III или Heroes of Might & Magic IV е изометриска, но Civilization I прифаќа поглед одозгора надолу.

Вообичаено, изометријата се користи за мапи со плочки, додека мапите со графикони се користат со поглед одозгора, бидејќи размерот на графиконите мапи е обично помал. Но, постојат исклучоци: на пример, во Medieval: Total War постои изометриска карта на крпеница.

Својството на картата е одговорно за изометричноста Еизометрискии два параметри кои го одредуваат аголот под кој изгледа нашата камера: ФиИ Тета.

Првиот е одговорен за ротацијата на картата во однос на вертикалната оска: на пример, ако ја поставите на 45 степени (се мери во степени), тогаш правоаголната мрежна ќелија ќе биде ориентирана со агол нагоре, како во цивилизацијата. . На Phi=0, една од страните на ќелијата ќе биде хоризонтална.

Вториот го контролира навалувањето на камерата во однос на вертикалата. За погодност, тој е даден како сооднос на хоризонтални и вертикални единици за должина. Да речеме, ако сакаме нашата ќелија да биде исцртана половина висока колку што е широка, треба да ја поставиме Theta на 2.

Со карта со плочки, не ни е дозволено произволно да ги избираме овие агли: на крајот на краиштата, (сеуште) немаме 3D. Тие директно зависат од параметрите на плочките. На пример, ако имаме оска во облик на дијамант со агол нагоре, а вертикалната оска е половина од големината на хоризонталната оска, тогаш мора да ги поставиме параметрите 45 и 2.

Но, мапите со графикони и крпеници ви даваат право да ги доделите овие параметри како што сакате (па дури и, ако сакате, да ги промените во процесот), но не треба да се занесувате со ова - покрај фактот што таквите вртења бараат многу време, тие исто така не изгледаат многу кул. И не заборавајте дека ако вашата карта е уметничка, со слики, натписи и слично, тогаш тие ќе се вртат со неа... Во принцип, понекогаш е полесно да се нацрта карта на крпеница земајќи ја предвид потребната ротација - за среќа, растојанија често не играат никаква улога таму.

Зглобови

Мапа на крпеница, врвен поглед.

Мапите со плочки имаат уште еден проблем - спојувањето на плочките. Се контролира со параметарот TileBorderStyle. Најчесто ова tileStraight, режим во кој плочките едноставно се вклопуваат без никакви ефекти на рабовите, или tileBorder, во кои се нацртани линии кои одвојуваат една плочка од друга - границите на ќелиите (во вториот случај, не заборавајте да дефинирате бојарешетки во параметар TileBorderColor).

Но, постои полукава опција, кога идентичните плочки се блиску една до друга без промени, а различни се користат со помош на специјална „преодна“ плочка. Ова обично се прави ако мапата се состои главно од широки пространства на еден тип територија, да речеме, големи зелени површини, а поединечна ќелија не е важна и не треба да биде забележана од играчот. Ова е картичката Heroes of Might Magic. Но, ако секоја клетка се обработува посебно, како во Цивилизацијата, тогаш овој метод не е погоден и подобро е јасно да се одделат клетките една од друга. „Стопена“ технологија (исто така наречена маска) се одредува со вредноста TileBorderStyle еднаква на плочка Маскирани. За нивната структура ќе зборуваме друг пат - ова е прилично сложена тема.

Плочка

Елемент на карта - класен објект TLKITile- има едноставна структура. Првично содржи: координати, спрајт што го црта, код за типот на плочка (кој одредува што имаме овде - рид, пустина, пат, море?) и способност за крос-кантри (ова е релевантно во повеќето игри). Последниот е бројот на единици за движење што се трошат за движење низ оваа плочка земјиштеодред. За непроодни плочки, ова е негативен број.

Друг параметар - Објекти, список на објекти лоцирани на оваа плочка (тип TLKIGameObject).

За да дознаете на која ќелија е кликнато, мапата има метод MouseTile(x,y) враќање на избраната плочка.

Методите на плочки вклучуваат Е Сосед(Плочка, Растојание). Оваа функција се враќа точно ако плочката не е оддалечена повеќе од ќелии Distance од дадената плочка (стандардно овој параметар е еднаков на еден, односно, ако едноставно напишете IsNeighbour(Tile), функцијата ќе се врати точно за плочката веднаш во непосредна близина на дадената плочка За квадратни решетки, оние плочки што се граничат дијагонално се сметаат и за „соседи“.

Функции Прв СоседИ Следно Соседсе користат за проверка на сите ќелии во непосредна близина на дадена. Првиот од нив покажува на некоја соседска ќелија, а втората може да се повика само откако ќе се повика првата и ги дава следните соседи, еден по еден.

Набројување на соседите

// Предизвика оштетување на клетка

постапка TObeliskTile.Damage(dmg: цел број);

ако(Објекти. Број > 0) и// Можеби имаме

// не повеќе од еден објект по ќелија

(Објекти. ID > 0) // Пасивни објекти

// не е оштетен

Дек(Објекти.Погодоци,

// Автоматски одзема заштита од оштетување

Max(0,dmg-(Објекти како TObeliskGameObject).Одбрана);

акоОбјекти.Hitshen Die; // Ги отстрануваме мртвите

// Напад со огнена топка

постапка TObeliskTile.Fireball;

varСосед: TObeliskTile;

Neighbor:= FirstNeighbour како TObeliskTile;

Сосед.Штета(6);

Сосед:= Следен Сосед како TObeliskTile;

додекаСосед = нула; // Додека соседите не снемаат

Пример е во страничната лента „Набројување соседи“. Оваа постапка пресметува дека огнената топка удира во ќелија и сите нејзини соседи.

Ова е интересно: за нејзината работа тоа воопшто не е важно, имаме хексагонална решетка или квадратна.

Честопати ни требаат некои други параметри, а обично е класата на плочки што ја сочинуваат картата потомок TLKITile. Така во примерот - TObeliskTile е наследен од TLKITile.

Тоа е важно:Ако внесеме мапа со плочки на екранот на нашата игра, координатите, како и методите на TLKIGameObject поврзани со растојанието, стандардно почнуваат да го мерат растојанието во плочки наместо во точки. Координатите на копчињата, иконите итн. продолжи да се мери во пиксели! Но, овој режим може да се исклучи - ова може да биде корисно за стратегии во реално време.

Избор на картичка

Значи, да почнеме со правоаголна решетка (TLKIRectMap), изометриско мапирање (аголни параметри 0, 1,5). Нека се нацрта решетката (стил на tileBorder). Да му кажеме на моторот дека оваа конкретна карта треба да биде прикажана. Досега сите потребни дејства се завршени без да се напише ниту една линија код.

Овие операции мора да се направат прединицијализација на моторот, како и декларација на фонтот.

Фигурите, како и досега, ќе ги прогласиме за sprites.

Уредувач на карти

Крпен карта, изометриска.

Тука има доста тешкотии. Точно истиот мотор, исти декларации за плочки... Интерфејсот, како избор на плочка, вчитување/зачувување итн., може лесно да се направи стандардни средстваДелфи: никој не не тера да го преведеме режим на цел екран. Ние нема да го анализираме ова овде - сè е во датотеката за пример. Пример кодот намерно користен наједноставен начин; Ако сакате, можете, на пример, да ја направите палетата на објекти и палетата на плочки графички.

Уредникот има само две карактеристики кои ни се непознати. Првиот е прилично едноставен: тоа е нова функција на глувчето дизајнирана специјално за мапи на плочки. Функција TLKIRectMap.SelectTileвраќа покажувач на точната плочка што е кликнато, за да можеме лесно да се справиме со кликнувањето.

Но, вториот нов производ заслужува повнимателно разгледување.

Всушност, постојат многу начини за зачувување и читање податоци од нив. Го избравме методот кодиран во датотеката CannonBase. Cannon е алатка за читање и пишување на предмети од потомството TCannonObjectсо проверка на типот и некои други карактеристики.

Ајде да го погледнеме кодот („Напиши картичка“).

Снимање картичка

постапка TObeliskMap.Save;

var i,j: цел број;

InitSave (FName);

WriteStr(MapName);

Write(Map.Width, SizeOf(Map.Width));

Write(Map.Height, SizeOf(Map.Height));

зајас:=0 доКарта.Ширина-1 направи

за j:=0 доКарта.Висина-1 направи

Write(Map.Tiles.Code, SizeOf(цел број);

Еве како функционира. Прво треба да ја отворите датотеката користејќи специјална процедура InitSave, чиј единствен параметар е името на датотеката. Потоа го зачувуваме заглавието за контрола на типот со помош на специјална процедура WriteHeader. Потоа запишуваме сè што ни треба користејќи ја постапката WriteStrза низи и за сите други полиња - Напиши(неговиот втор параметар е големината на запишаните податоци во бајти). По потреба, можете да напишете свои процедури за полиња на објекти Зачувајсо запис за заглавие. На крај ја затвораме датотеката со процедурата FinSave.

Сите објекти кои имаат свое заглавие мора да се декларираат посебно. Во поглавјето Иницијализацијамодул (опционален дел што доаѓа после Имплементација, кој содржи команди кои мора да се извршат на самиот почеток, при стартување на програмата), треба да ја напишете следната линија, на пример:

RegisterUserName (tpMap, „TObeliskMap“);

TpMapе константа што мора да ја декларирате и вие. Изедначете го со, да речеме, 1. И во конструкторот на објектот TObeliskMap, доделете ја вредноста на оваа константа на параметарот TypeID.

Зошто целата оваа гужва? Покрај совпаѓањето на типот, добивате една многу важна придобивка.

Ако форматот на датотеката се промени, да речеме, поради додавање нови полиња, нема да треба да пишувате никакви „конвертори“ што ги претвораат старите датотеки во нови. Вашиот код автоматски ќе ги прочита.

Овој код автоматски ќе го иницијализира новото поле како празно ако не е зачувано во датотеката. И можете да напишете датотека со едноставно додавање на линијата WriteStr(Name) до самиот крај.

Коментар:Ако сè уште не разбирате за што служи овој процес, не грижете се. Можете да користите поконвенционални методи за снимање и зачувување. Но, во навистина големи проекти за игри, оваа патека обезбедува значителни предности.

Ајде да играме

Пред сè, треба да создадеме нова класа изведена од TLKIGameObject. Ќе ни недостасуваат имотите на стариот. Во новата класа, треба да додадете полиња за главните карактеристики: опсег, движење и така натаму.

Тоа е важно:Нашиот стар параметар за брзина останува кај нас, но тој ја означува брзината на парчето што се движи низ екранот, а не растојанието што ќе го помине по вртење. Ако правевме стратегија во реално време, немаше да ни треба нов параметар, но во спротивно ќе треба да го воведеме.

На нашиот екран ќе ги примениме копчињата TLKIButton во форма на стрелци, мечувалци, магионичари, духови, витези.

Прво го имаме аранжманот. Ајде да ја дефинираме зоната на поставување за едната страна како горните три „линии“ на картата, за другата - како долните три „линии“.

Кодот работи вака. Кога ќе притиснете некое од копчињата, се активира инсталацијата на соодветниот борец; Со кликнување на незафатен квадрат во областа за поставување ја става фигурата таму и го оневозможува копчето. Штом сите копчиња се оневозможени, потегот се пренесува на непријателот.

На почетокот на секој нов потег, сите копчиња повторно се вклучуваат: тоа е направено за да му биде полесно на човекот да забележи на кого сè уште не личи. Соодветно на тоа, со кликнување на копчето се избира фигурата и штом ќе се направи потег, копчето исчезнува. Друго копче - „Крајно вртење“ - се појавува само по фазата на поставување.

Последен пат веќе направивме операции за да ги овозможиме и оневозможиме елементите на интерфејсот, така што нема да ја анализираме оваа операција детално - погледнете го примерот на кодот.

Движење на фигурата

// Ако избраната ќелија е окупирана од непријателот, ние напаѓаме,

// ако сме слободни, се движиме наоколу, ако сме зафатени со нашите

// или пречка - игнорирајте го кликнувањето

Плочка:= Map.MouseTile(MouseX, MouseY);

ако(Плочка = нула)// Кликнете надвор од прозорецот на играта

тогашизлез;

// Се движат

ако(Tile.Objects.Count = 0)

и(Дист (себе)

и неПреместен тогаш

// Ајде да провериме дали можеме да стигнеме таму

ако не HasWay (плочка) тогашизлез;

MoveObj(ID, Tile.x, Tile.y);

// Играта е на пресврт - движете се веднаш

Преместено:= точно;

//

акоНападнати тогаш

Icon.IsVisible:= лажни;

// Напад

ако(Tile.Objects.Count > 0)

и(Дист (себе)

и неНападнати тогаш

Објект:= Плочка.Објекти;

// Напаѓаме само непријатели

ако Obj.Side = Страна тогашизлез;

Obj.Damage(dmg);

Нападнати:= точно;

// Ако преместувањето е завршено, отстранете ја иконата

акоПреместен тогаш

Icon.IsVisible:= лажни;

Поместувањето се обработува на следниов начин (видете „Преместување на парче“). Се наоѓа кликната ќелија. Ако има непријател на него, а тие се во домет, тој е повреден; ако е празен и во домет, парчето се движи (ако дозволуваат пречките); ако е окупирано, но не од непријател, кликнувањето се игнорира. .

Кога се приближиле двете страни, змејовите дејствувале. Тие работат многу едноставно: го избираат најблискиот не-змеј кој е на 7 квадрати од нив и напаѓаат. Видете ја шифрата на Dragon Actions.

Акции на змејови

// Проверка на плочки на 7 квадрати од змејот

за i:= Макс (0, x - 7) доМинимум (максимална големина, x + 7) направи

за j:= Макс (0, y - 7) доМинимум (максимална големина, y + 7) направи

ако (Map.Tiles.Objects.Count > 0) и

(Map.Tiles.Objects.Code>1)

// 0 - код за пречка, 1 - змеј

тогаш започне

// Избор на точка за преместување

ако x=i тогашсекира:=i

другоако x>i тогашсекира:=i+2

другосекира:= i-2;

ако y=j тогашај: = ј

другоако y>j тогаш ay:= j+2

друго ay:= j-2;

MoveObj(NO, ax, ay);

// Ајде да нападнеме

Map.Tiles.Damage(12);

// Прекин на циклусот: не повеќе од еден напад

// секој змеј по круг

Конечно, останува само да се провери дали повеќе од половина од обелисците се окупирани од трупи на едната страна - и ако се, тогаш прекинете ја играта и прогласете го победникот!


Значи, имаме стратешка игра. Сепак, за целосна среќа, она што недостасува, пред сè, е вештачката интелигенција, која ќе овозможи на играта да и се даде режим на еден играч (не ја сметаме наједноставната процедура за контролирање на змејовите). Тоа е она што ќе го направиме следниот пат. Се гледаме за еден месец!

Во идните изданија

Во следните прашања ќе зборуваме за:

  • системи за честички за прикажување чад, искри итн.;
  • работа со транспарентност;
  • тридимензионални мотори;
  • Основи за вештачка интелигенција;
  • дебагирање на програмата;
  • креирање на план и скрипта за игра,
  • пишување документ за дизајн;
  • рамнотежа на играта;
  • размислување преку ликовите на играта и нивните линии;
  • работа со Photoshop и 3D пакети;
  • анимации;
  • музика и гласовно глумење;
  • и уште повеќе.

Сосема е можно да научите како да го направите сето ова со свои раце. Наскоро ќе го видите ова.

Пишете ни…

За оние кои мислат дека пакетот може да се дополни со нешто: прво, не заборавајте дека нема Конечна верзијапакет, но само оној што ги спроведува функциите опишани во нашите написи. Можеби некои од вашите идеи се веќе имплементирани и го чекаат својот ред (видете ја страничната лента „Во идните изданија“). И во секој случај: кога ни нудите идеја, обидете се да оправдате зошто вашиот предлог е корисен за многу игри одеднаш, а не само за вашата конкретна.

За самостојна работа

Додека го чекате следното издание, можете да работите на свој проект или да се обидете да го подобрите овој. Еве неколку идеи за ваша сопствена имплементација:

  • поделете ги предметите со препреки на разрушливи (дрва и грмушки) и неуништливи (карпи) и погрижете се огнените топки и здивот да ја изгорат вегетацијата;
  • создадете јами (кафеава ќелија) или пожар што пламнува неколку кривини (црвена ќелија) на местото каде што бил активиран огнениот напад;
  • им овозможи на мечувалците и витезите да ги покриваат своите соседи, давајќи им +1 за одбрана;
  • направи движење на фигурите на екранот непречено.

Што ако во реално време?

Не е потешко да се направи стратешка игра во реално време ако само им давате на играчите различни средства за внесување. Најлесен начин да го направите ова е преку мрежата - ќе разговараме за ова во едно од претстојните изданија. Ќе бидат потребни и следните промени:

  • не е потребно поле Игра Брзинана часот TObeliskObject- користете Speed ​​од основниот мотор (брзината на движење низ екранот е еднаква на брзината на играта);
  • оневозможено е целобројно пресметување на растојанија;
  • кодот за движење на фигурата се препишува, земајќи го предвид фактот дека е неопходно да се нацрта траекторија околу пречките;
  • Копчето „крај на движење“ е отстрането.

Тоа е се. Дали ќе се обидете сами да го направите тоа?

Во денешно време, можете лесно да најдете многу стратегии за тргување, единствениот проблем е што повеќето од нив или не работат или не се доволно ефективни. Во таква ситуација, креирањето стратегија од нула е одлично решение за проблемот.

И иако во секоја специфична ситуација создавањето на возило ќе биде различно, главните фази остануваат исти. Односно, можете да создадете нешто како универзален водич, последователно да ги поминувате сите фази, и на крајот ќе добиеме целосно функционален систем.

Иако ќе ја разгледаме опцијата за креирање стратегија од нула, почнувајќи со идеја и завршувајќи со воведување филтер и конечниот развој на возилото, тоа не значи дека сите готови системи треба веднаш да се отфрлат како очигледно неефикасни. . Голем број TS може да се користат како основа и едноставно да се додадат неколку филтри за да се исчистат лажните сигнали.

Главни фази на креирање стратегија

Ако земете 5-7 индикатори по случаен избор и се обидете да создадете работно возило од нив, тогаш веројатно нема да излезе нешто корисно. Прво треба да размислите низ главната идеја на стратегијата и дури потоа да преминете на изборот на алатки. Може да се предложи следнава низа на дејства:

  • ако системот е создаден од нула, тогаш првиот чекор е да се работи на идејата. Во оваа фаза, само треба да одлучите каков ќе биде вашиот стил на тргување, на пример, дали трансакциите ќе се вршат според трендот или против него, или можеби стратегијата е планирана исклучиво за пробивање. Сè уште не размислуваме за специфики;
  • Откако ќе го изберете соодветниот стил на тргување, можете да започнете да ги разработувате деталите. Пред да изберете инструменти, треба јасно да ги одредите работните валутни парови и временски рамки, времето на тргување итн.;

Важно! При изборот на временска рамка, не е препорачливо да се премали, особено ако трговецот нема искуство во шпекулации во мали временски интервали. За почетници, генерално е подобро да не се оди под H1-H4; можете да прочитате повеќе за изборот на оптимален временски интервал.

  • следната фаза е изборот на соодветни инструменти, а тука изобилството на избор може да игра сурова шега на трговецот, бидејќи тој има на располагање десетици индикатори, способност да користи свеќник, бранова, техничка и фундаментална анализа. Од сета оваа разновидност, треба да изберете неколку инструменти кои најдобро одговараат на вашиот наменет стил на тргување;
  • Едно од главните правила на секоја стратегија е дека примениот сигнал мора да биде потврден со неколку филтри, но препорачливо е да се ограничи нивниот број. На пример, за стратегии за индикатори, непожелно е бројот на индикатори да надмине 3-4, во спротивно ќе има конфузија во сигналите, а ако планирате да работите со помош на техничка анализа, тогаш индикаторите ќе играат помошна улога;
  • се развиваат правила за поддршка на позицијата, резултатот треба да биде алгоритам на дејства за кое било сценарио;
  • последната фаза е да го стартувате возилото прво на сметка за историја, а потоа на демо сметка, или уште подобро, на вистинска сметка во центи. Главната цел е да се тестира одржливоста на стратегијата во реални услови, а вистинската сметка (дури и цент) ќе ви овозможи да го почувствувате целиот опсег на емоции, од еуфорија до горчина на загубите.

Можете исто така да советувате да не се закачувате на сложеноста на возилото. Практиката покажува дека прекумерната сложеност воопшто не е показател за ефикасност. Како поедноставен систем, толку е полесно да се тргува.

Што треба да биде вклучено во возилото

Креирањето стратегија е малку како конструктивен сет; само треба да ги изберете вистинските делови. Кога креирате возило, можете и треба да користите:

  • индикатори. Покрај тоа, не треба да го бркате нивниот број или прекумерна сложеност; дури и во целосно механички возила, доволни се 3-5 парчиња;
  • графички обрасци - добро познати знамиња, знаменца, триаголници, глава и раменици, двојни долни и врвови сè уште работат добро;
  • графички конструкции;
  • Нивоа на фибо;
  • елементи на фундаментална анализа - сега е тешко да се заработат пари само на вести, но неопходно е да се земе предвид економскиот календар во тргувањето. Барем само поместете ги трансакциите на рентабилност пред објавувањето на важни статистички податоци за САД или Европа, или дури и целосно затворете ја добивката.

Исто така, постојат голем број техники, чии придобивки се сомнителни:

  • Martingale е првично непрофитабилна тактика, единствената шанса за успех е дека пред загубата, ќе можете да го вратите износот на депозитот и да заработите малку;

  • Исто така, не е пожелно да се користи заклучување освен ако е апсолутно неопходно; тогаш е доста тешко да се напушти замокот;
  • Исто така, подобро е да не се користат сигнали однадвор. Сигналите однадвор значат, на пример, споредба на бројот на продавачи/купувачи, различни индекси на расположението на мнозинството трговци итн. Но, исто така има и голем број ресурси што можете да ги слушате, на пример, Autochartist дава добри сигнали врз основа на графички обрасци;
  • Исто така, подобро е да не се користат елементи за анализа на бранови (барем за почетници). Иако овде има исклучоци, на пример, тргувањето на Wolfe Waves се заснова токму на анализа на бранови, но тоа не е особено сложено.

Развој на едноставна стратегија за индикатори

Да претпоставиме дека главната идеја на стратегијата е да се тргува исклучиво во насока на трендот. Згора на тоа, ќе влезете на пазарот не во моментот на појава на тренд, кој е доста ризичен, туку по завршување на мала корекција.

Стратегијата треба да работи на речиси секој валутен пар; тоа е неопходно бидејќи, поради големата временска рамка, сигналите нема да се појавуваат многу често. Така, ситуацијата ќе се процени со користење на 5-7 валутни парови во исто време. Што се однесува до временската рамка, D1 е погодна; ние поаѓаме од фактот дека Forex во почетната фаза е само додаток на главната работа, затоа ќе тргуваме со дневни свеќи.

Сега треба да одлучите како точно ќе се одреди моментот за влез. Постојат многу опции за идентификување на тренд:

  • визуелно - но окото нема да ви дозволи да развиете јасни правила за тргување;
  • користење на еден или повеќе подвижни просеци;
  • според вредноста на индикаторот ADX, ако е повеќе од 30, тогаш има силен тренд, помалку од 20, пазарот е мирен;
  • користење графички конструкции;
  • Bollinger Bands ви овозможува да ја процените силата на трендот според растојанието помеѓу горните и долните граници на каналот.

Општо земено, има многу опции, но бидејќи стратегијата треба да биде што е можно поедноставна, ќе се фокусираме на подвижните просеци. Или подобро, еден МА, ќе ја судиме насоката на трендот според позицијата на цената во однос на неа. Можете да започнете со периоди кои ја просекуваат цената во текот на цел временски период (недела, месец, квартал, итн.), на пример, 20 ќе ја просечно цената во текот на изминатиот месец. Најтешко е да се избере соодветниот МА-период, но тука ќе мора да продолжите со обиди и грешки.

Главната идеја на тргувањето ќе биде следнава: чекаме да се појави движењето на трендот, потоа следи корекција во рок од еден ден, по неговото завршување е склучен договор. Ако сето ова е претставено во форма на јасни правила, тогаш алгоритмот на дејства ќе изгледа вака (користејќи го примерот за набавки):

  • прво ја проверуваме ценовната позиција во однос на МА, цената треба да биде над линијата;
  • Следно, треба да најдеме тренд движење, потребна ни е свеќа со големо тело и мали сенки (препорачливо е вредноста на сенката да не надминува 10-15% од големината на телото на свеќата);
  • по неа треба да следи свеќа со мал дневен опсег (растојание од високо до блиску). Цената за затворање не треба да достигне ниво од 50% од претходниот ден - на овој ден се случува корекција на цената.

Во овој случај, корекција може да се случи според 2 сценарија:

  • Кога ќе се формира свеќа со долга сенка долу, можете да отворите трговија веднаш на крајот на денот. Овој облик на свеќата покажува дека корекцијата е веќе завршена;
  • можна опција е кога корективната свеќа се затвора на минимум, т.е. враќањето сè уште не е завршено, во овој случај треба да почекате додека не се затвори следната свеќа; ако е бела, можете да отворите долга положба.

Што се однесува до одржувањето на положбата и заштитните наредби, стоп загубата треба да биде поставена барем подалеку од средината на свеќата со големо тело. За да го добиете целното ниво, доволно е да ја одвоите вредноста на истата свеќа од нивото на купување; можете да користите заостанувачка станица.

Правилата на стратегијата се формирани, останува само да се тестира на дело. Практиката покажува дека дури и таков едноставен алгоритам произведува повеќе од половина од профитабилните занаети (и ако рано ја префрлите трговијата на нула, веројатноста за загуба се намалува).

Влез на почетокот на трендот

Погоре предложениот ТС пропушта дел од движењето на трендот, но не бара многу време за анализа на пазарот. Ако е можно да се следи однесувањето на цената на денот, тогаш можете да се обидете да го возите трендот на самиот почеток на неговото формирање. Значи, главната идеја на стратегијата е да се влезе на пазарот откако цената ќе почне да излегува од хоризонталниот канал.

И тука е многу важно да се добие сигурен сигнал на време, на самиот почеток на трендот. Подвижните просеци повторно можат да помогнат, но тие ќе се користат малку поинаку отколку во претходната стратегија. Можете да земете неколку MA со различни периоди и да го процените формирањето на тренд според нивната локација релативно едни на други.

Ова не е револуционерен пристап; Бил Вилијамс користел нешто слично во неговиот познат Алигатор. Значи, овој индикатор дури може да се земе како основа на ТС.

Ако го додадеме Алигатор со стандардни поставки на H1, можеме да видиме дека дава многу лажни сигнали; нашата задача е да ги отстраниме. За да го направиме ова, ќе влеземе на пазарот со налог во тек, а нивото на неговото пласирање ќе се одреди со помош на фрактали.

Како резултат на тоа, работниот тек ќе изгледа вака (користејќи го примерот за набавки):

  • Бараме рамна површина на табелата (сите линии на Алигатор се хаотично испреплетени една со друга);
  • Следно, потребна ви е фрактална свеќа (и треба да се наоѓа над линиите, дури и без да ги допирате со долната сенка);
  • се става налог за стоп за купување веднаш над неговиот максимум, а заштитниот налог се става надвор од долната граница на зоната на консолидација;
  • TP е или фиксиран (50-70 p), или користете заостанувачко стоп. Во принцип, доста е тешко да се предвиди јачината на движењето на трендот, па затоа е подобро да се користи заостанувачка станица отколку фиксна TP или да се одреди целното ниво користејќи ја истата техничка анализа.

Овој пример не е развивање стратегија од нула, туку мало прилагодување на веќе позната стратегија на современиот пазар.

Пример за едноставен комбиниран систем

Идејата е сè уште иста - влез на крајот од исправката, но овој проблем ќе го решиме на поинаков начин. Целта останува иста - да се одреди моментот на завршување на корекцијата и да се внесе во насока на трендот, но ако порано го користевме подвижниот просек, сега ќе ги користиме нивоата на Fibo и осцилаторот за да го одредиме завршувањето на враќањето.

Ќе нè интересира изразено движење на трендот, исто така може да се одреди визуелно. По ова, само треба да ги истегнете нивоата на Fibo до него, ова е неопходно за да се одредат потенцијалните нивоа за завршување на корекцијата. Најзначајното ниво на корекција е 38,2%, дозволено е тргување со скокови од 50% и 61,8%.

Но, фактот што цената го допира нивото на Fibo не е доволен, потребна е потврда. Стохастик може доста добро да се справи со оваа задача (можете да се обидете да користите RSI за истата цел). На пример, за трансакција за купување, цената мора да биде блиску до нивото на корекција, а Стохастикот во тоа време мора да биде во зоната на препродажба.

Откако цената ќе го допре нивото, чекаме додека Stochastic не ја напушти препродадената зона и не купи. Застанувањето може да се постави над следното ниво на корекција, а TP може да се постави барем на неодамнешното високо пред почетокот на повлекувањето.

Нивоата на фибо и осцилаторот се само минимумот потребен за примање сигнал. Ако сакате, можете да го комплицирате системот со воведување дополнителни филтри.

Стратегии засновани на техничка анализа

Ако техничката анализа се користи во чиста форма, тогаш задачата станува нешто поедноставна; веќе не е неопходно да се развива возило од нула. Постојат голем број техники и алатки, чија ефективност е тестирана низ годините, а трговецот може само да ги избере соодветните и да ги користи во конструкциите.
Во принцип, за успешно тргување доволно е:

  • тренд линии - ги градиме на различни временски рамки, почнувајќи од највисоката и постепено спуштајќи се до работната;
  • Нивоата на фибо, тие треба да се протегаат до значителни движења на цените во историјата. Од клучно значење ќе бидат корективните нивоа од 38,2, 50 и 61,8%, практиката покажува дека корекцијата најчесто завршува на овие оценки;
  • MT4, исто така, имплементира голем број други алатки за техничка анализа, на пример, вили на Andrews, збир на Gann алатки, неколку видови канали итн.

Но, за прилично точна прогноза, нивоата на Fibo и линиите на тренд се доволни; областите на концентрации на нивоа и линии обично дејствуваат како поддршка/отпор. Тргувањето може да се изврши и за пробивање и за враќање од нивоата и линиите.

Што се однесува до дополнителните филтри, можете да додадете обрасци на свеќници и некој вид индикатор за пребарување на дивергенции (истиот Stochastic или MACD). Можете да прочитате повеќе за употребата на техничка анализа.

Филтри за трговски системи

Секое трговско возило, дури и ако идејата функционира и тргувањето е генерално профитабилно, генерира многу сигнали, а некои од нив се непрофитабилни. Откако ќе се формираат системските правила, можете да користите голем број универзални филтри кои ќе помогнат да се подобри односот на профитабилни/непрофитабилни трансакции.

Постојат голем број на филтри кои ќе одговараат на речиси секоја стратегија:

  • ситуација на повисоки временски рамки. Ако, на пример, стратегијата се спроведува на H1 според механичка стратегија, тогаш не би било лошо да се погледне што се случува на H4 и D1;
  • просечен дневен опсег, што значи растојанието што цената го поминува во просек дневно; кога се тргува во текот на денот, ова ќе помогне да се филтрираат голем број сигнали. Ајде да замислиме дека во текот на денот цената се движи во просек 100-120 точки, ако во еден од деновите цената до вечерта веќе поминала 90-100 точки во една насока, а ТС дава сигнал за влез на пазарот во истата насока, тогаш има смисла да се игнорира , статистиката вели дека сообраќајот најверојатно нема да продолжи на овој ден;

Важно! Усогласеноста со ова правило ќе доведе до фактот дека некои профитабилни занаети ќе бидат пропуштени, но односот на профитабилни/загубени занаети ќе се зголеми.

  • Бројот на свеќи по формирањето на сигналот исто така е важен, има дури и филтер од 5 свеќи, на кои ќе се задржиме подетално.

Кога ТС дава сигнал, тогаш идеално ситуацијата треба да почне да се развива во наша корист речиси веднаш по склучувањето на трансакцијата (значи на следните 1-3 свеќи). Ако тоа не се случи, тогаш колку повеќе време ќе помине од склучувањето на трансакцијата, толку помало влијание на пазарот ќе имаат оние фактори кои биле важни кога трговецот влегувал на пазарот. Нивното влијание исчезнува со текот на времето.

Можете да земете 5 свеќи како критериум; ако, по склучувањето на зделката, цената не се поместила во профитабилна насока за 5 свеќи, тогаш подобро е да ја затворите зделката рачно. Ова значи сценарио каде графиконот останува на место, но ако цената отиде на непрофитабилната страна, тогаш овој филтер не се применува.

Овој услов се однесува на скоро сите временски рамки (со исклучок на m1-m5). Се разбира, сè уште постои можност цената, која се движеше околу една ознака, да се движи во вистинската насока, но нашиот избор е стабилноста. Подобро е да жртвувате неколку профитабилни занаети, но избегнувајте 3-5 непрофитабилни.

Сумирајќи

Почнувањето со работа без трговски систем е како смрт, секој трговец треба да го запомни ова. Во овој случај, губењето на депозитот е само прашање на време.

Изборот на соодветно возило не е тешко, освен тоа, можете да најдете добри работни системи во јавниот домен. Може да се погрижите и за креирање на сопствена стратегија, особено што за тоа не е потребно познавање на програмски јазици, доволно е само да имате идеја и барем основно познавање за тоа како функционира пазарот и кои индикатори се користат и за кои цели.

Самиот процес потсетува на склопување на конструктивен сет - прво поставуваме проблем, а потоа едноставно ги избираме потребните алатки за негово решавање. Откако ќе ја проверите историјата, можете да продолжите на тестот ТС на демо или центна сметка.


Врв