مشتری باهوش یا احمق؟ ایجاد یک استراتژی از ابتدا - راهنمای دقیق ایجاد نقشه برای یک استراتژی نوبتی.

شکل گیری استراتژی
شما نمی توانید به آماتورها اعتماد کنید:
برنامه های آنها ممکن است به طور غیر منتظره به نتیجه برسد،
و هیچ کس برای این آماده نیست.

(A. Cuningham)

در دو شماره قبلی یاد گرفتیم ساخت بازی های دو بعدی ساده، Sprites را کنترل کنید، صفحه بازی را اسکرول کنید، برخورد اشیاء بازی را ردیابی کنید، یک رابط (دکمه ها، ماوس، صفحه کلید، مناطق متنی) بسازید و در حالت های تمام صفحه و پنجره کار کنید. همه اینها با استفاده از یک بازی آرکید به عنوان مثال انجام شد.

این بار ما از بازی های آرکید به یک سبک "جدی" تر - استراتژی ها خواهیم رفت. در اینجا ما باید به یک سری مکانیسم های جدید تسلط داشته باشیم، اما در اینجا نیز هیچ چیز پیچیده ای وجود نخواهد داشت. در این مقاله ما بیایید ساختار یک استراتژی نوبتی را مطالعه کنیم(و همچنین استراتژی زمان واقعی- انجام آن با LKI-Creator حتی ساده تر است) و ما یک بازی را به عنوان نمونه می سازیم، با این حال، فقط برای چند کاربرهحالت (و همچنین ویرایشگر نقشهبرای او). در شماره بعدی ستون خود - اختصاص داده شده به - به حالت تک نفره خواهیم پرداخت مبانی هوش مصنوعی.

از آنجایی که این در حال حاضر سومین درس است، به جزئیات نمی پردازیم همهکد مثال - خوشبختانه، کارهای زیادی دقیقاً مانند دو بار قبلی انجام شده است. برای مرجع، یک برنامه نمونه (کامنت های زیادی در آن وجود دارد) و مقالات قبلی وجود دارد.

خوب، شما می توانید مواد کلاس های گذشته ما را در ما پیدا کنید سی دی، در بخش «بازی خودتان را انجام دهید» که مخصوص این منظور ایجاد شده است.

فرمول بندی مسئله

بیایید یک بازی استراتژی بنویسیم که شامل نبرد بین دو ارتش فانتزی است. هدف از نبرد گرفتن چندین نفر است ابلیسک ها، روی نقشه قرار داده شده است. قبل از نبرد ما نیروهای خود را متشکل از 6 نفر اعزام می کنیم شمشیربازان, 4 کمانداران, 2 شوالیه ها, 2 جادوگرانو 1 روح، در قلمروی که به ما اختصاص داده شده است. علاوه بر آنها، موارد خنثی نیز روی نقشه وجود دارد اژدها.

ویژگی های مبارزان
جنگنده جنبش بازدید دامنه خسارت حفاظت توانایی ها
شمشیرزن4 8 1 7 2 -
کماندار4 5 7 5 1 -
شوالیه3 15 1 9 4 شفا، ضربه شوالیه
جادوگر3 12 5 6 0 توپ آتشین
روح4 7 2 5 5 بازسازی
اژدها6 30 2 12 5 پرواز

مشخصات جنگنده ها در جدول ارائه شده است. رفتار- این حق شفای یک جنگجوی همسایه (به جز یک روح) برای سلامتی کامل یک بار در هر نبرد است. نایت استرایک- حق ایجاد آسیب سه گانه یک بار در هر بازی. توپ آتشین- حمله جادوگر نقاط ضربه را نه تنها از هدف فوری، بلکه از میدان های اطراف نیز حذف می کند. بازسازی- بازیابی 1 ضربه در هر نوبت. پرواز- حق حرکت از روی موانع.

بازی در حالت چند نفره، در نسخه Hot Seat (بازی از یک کامپیوتر، یکی یکی می شود) انجام می شود. پس از چرخش بازیکنان، اژدهایان خنثی به نوبت خود می رسند و به هر دشمنی در شعاع 7 سلول حمله می کنند.

مهمانی زمانی به پایان می رسد که یک طرف یا بیش از نیمی از ابلیسک های موجود در نقشه را بگیرد یا به طور کامل بمیرد.

نقشه در ابتدا در ویرایشگر نقشه تنظیم شد. ابلیسک ها، اژدها و موانع (اشیایی که نمی توانید از طریق آنها حرکت کنید یا حمله کنید) وجود دارد.

آماده شدن برای کار

قبل از شروع، باید بسته را دوباره نصب کنیم LKI-Creator. واقعیت این است که نسبت به دفعه قبل تغییرات و اضافات زیادی به آن داده شده است.

(امیدوارم که دلفیشما قبلا نصب کرده اید؛ اگر نه، توصیه های مربوط به این موضوع را در مقاله قبلی ما بخوانید - در شماره ژوئن مجله یا روی سی دی این شماره یا در وب سایت.)

مهم است:نسخه قبلی LKI-Creator مشکلات سازگاری با نسخه های جدید دلفی داشت. در این نسخه حذف می شوند.

فایل را با متون برنامه و تصاویر از سی دی ما (بخش "بازی با دستان خود") بردارید و آن را در فهرست پروژه باز کنید.

اکنون می توانید فایل های لازم را دانلود کنید از اینجا .

ما باید سه زیر شاخه داشته باشیم. One - Units - کتابخانه های DirectX و ماژول های بسته LKI-Creator را ذخیره می کند. در دیگری - پروژه - ما کار خواهیم کرد. تصاویری که به آن نیاز خواهیم داشت و نسخه قبلی بازی آرکید ما از قبل در آنجا قرار داده شده است. در سوم - اسکورت - برنامه آماده ای که باید در آن موفق باشیم.

اکنون اجازه دهید LKI-Creator را نصب (نصب مجدد) کنیم. در منوی دلفی، آیتم Component را باز کرده و Install Component را انتخاب کنید. اگر قبلاً این بسته را نصب کرده اید، در تب Into موجود بسته بمانید، در غیر این صورت به تب Into new package بروید و خطوط خالی را مانند شکل پر کنید (در خط بالا، ساده ترین راه این است که LKI2dEngine را انتخاب کنید. فایل pas با استفاده از دکمه Browse، و در پایین فقط LKI را یادداشت کنید). سپس روی OK کلیک کنید و Install را انتخاب کنید. اکنون باید تب LKI را در پنل بالای دلفی ببینید.

اکنون تنها چیزی که باقی می ماند این است که پروژه خود را آپلود کنیم. در منوی File، Open را انتخاب کنید، فایل Project\Obelisk.dpr را باز کنید…

نقشه کجاست، بیلی؟ ما به یک نقشه نیاز داریم!

با این حال، قبل از اینکه وارد مسائل بزرگ شویم، باید کمی بیشتر روی موتور گرافیکی کار کنیم.

در Star Escort، پروژه قبلی ما، "نقشه" معنایی نداشت: ستاره ها به طور تصادفی قرار می گرفتند و هیچ تاثیری نداشتند، و موقعیت اشیاء دیگر یا مستقیماً در کد مشخص می شد یا به طور تصادفی تعیین می شد. این برای هر پروژه ای مناسب نیست. این بدان معناست که زمان آن فرا رسیده است که به موتور خود اضافه کنیم نقشه منطقه.

احتمالاً می توانید حدس بزنید که چگونه به نظر می رسد - ما یک شی نقشه را در پنجره پروژه قرار می دهیم و سپس آن را در ویژگی ثبت می کنیم. نقشهموتور ما

همینطور است... اما ما بیش از یک کلاس کارت داریم. بیایید دقیق تر نگاه کنیم ...

انواع کارت

نقشه از چیزی تشکیل شده است چشم اندازو اشیاءروی آن نصب شده است. منظره اغلب (اما نه همیشه) به سلول هایی به نام تقسیم می شود کاشی- کاشی.

همانطور که از یک دوره هندسه مدرسه می دانیم، یک صفحه را می توان بدون شکاف یا همپوشانی با چند ضلعی های منظم از سه نوع پوشاند: مثلث (متساوی الاضلاع)، مربع، شش ضلعی. میدان های مثلثی چندان راحت نیستند، بنابراین سلول های مربع یا شش ضلعی بیشتر مورد استفاده قرار می گیرند.

به یک معنا، زندگی با مربع آسان‌تر است: اگر یک آرایه دو بعدی از سلول‌ها داشته باشیم، بلافاصله مشخص می‌شود که چگونه سلول‌های مجاور یک سلول را پیدا کنیم. اینها 1+ و -1 برای هر یک از دو شاخص هستند. با شش ضلعی، همه چیز کمی پیچیده تر است ... اما تخته شش ضلعی دارای یک ویژگی بسیار ارزشمند است: همه جهات در آن یکسان است. این مورد در مورد یک شبکه مربع نیست: مورب ها به طور قابل توجهی با افقی و عمودی متفاوت هستند. بنابراین، برای محاسبات استراتژیک جدی، شش ضلعی ممکن است بهتر از مربع باشد.

کارت های بدون کاشی نیز وجود دارد. LKI-Creator از دو نوع گراف و پچ ورک پشتیبانی می کند.

نقشه گراف نقشه ای است که تنها چند نکته کلیدی در آن معنی دارد، به اضافه شاید مناطق خاص (مثلاً مناطق صعب العبور)، و بقیه فقط یک الگو است که هیچ اثر بازی ندارد. نقشه های ستاره اغلب به این صورت ساخته می شوند، مثلاً در Master of Orion: ستاره ها و سیاهچاله ها نقاط کلیدی هستند، بقیه پس زمینه هستند. در این حالت گاهی اوقات نقشه های جهانی مثلا برای یک بازی نقش آفرینی می سازند.

نقشه تکه تکه به مناطق تقسیم شده است و در داخل منطقه همه نقاط یکسان هستند. این برای استراتژی های جهانی خوب است، جایی که یک استان حداقل واحد قلمرو است.

نمونه هایی از کارت های بازی های مختلف با نشان دادن نوع آن در تصاویر موجود است.

پس اکثریت دو بعدینقشه ها (سه بعدی - مقاله ویژه) را می توان به چهار کلاس تقسیم کرد:

  • مستطیل شکل- TLKIRectMap. این یک نقشه کاشی کاری شده است، سلول ها مربع هستند. چنین نقشه ای، برای مثال، در Civilization III.
  • شش ضلعی- نقشه TLKIHex. نقشه کاشی کاری شده با سلول های شش ضلعی. در بسیاری از بازی‌های جنگی و نه تنها استفاده می‌شود: به عنوان مثال، نقشه نبرد Heroes of Might & Magic به طور سنتی چگونه ساخته می‌شد.

    این دو نوع کارت از نوادگان طبقه عمومی هستند نقشه TLKITile.

  • گرافووایا- نقشه TLKIGraph. این کارت دارد پس زمینه (ویژگی پس زمینه)و نکات کلیدی برجسته شده روی آن اشیاء ثابت هستند. موقعیت سایر اجرام در این نقشه یا با مختصات معمولی (مانند یک سفینه فضایی در فضای بین ستاره ای) یا با اشاره به یک جسم (همان کشتی در مدار یک سیاره) بیان می شود. اینها کارتهای Master of Orion، Arcanum (جهانی) و غیره هستند.
  • تکه کاری- نقشه TLKICluster. دارای یک ویژگی پس زمینه، مانند نمودار یک، و یک ویژگی دوم - ماسک، که مشخص می کند کدام نقطه متعلق به کدام منطقه و ویژگی است مرز ها، که ارتباط بین "شردها" را تعریف می کند. به عنوان مثال در Medieval: Total War یا Victoria، نقشه ها به این ترتیب چیده می شوند.

مهم است:کلاس های نقشه نه در ماژول LKI2dEngine، بلکه در LKI2dMap توضیح داده شده اند.

زوایای شیب

اما اگر فکر می کنید که این قابلیت های LKI-Creator برای نمایش نقشه ها را تمام می کند، سخت در اشتباه هستید.

نقشه قابل ارائه است نمای بالایا ایزومتریک- به یک زاویه به سمت عمود نگاه کنید. به عنوان مثال، نقشه Civilization III یا Heroes of Might & Magic IV ایزومتریک است، در حالی که Civilization I از نمای بالا به پایین استفاده می کند.

به طور معمول، ایزومتری برای نقشه‌های کاشی‌شده استفاده می‌شود، در حالی که نقشه‌های گراف با نمای بالا استفاده می‌شوند، زیرا مقیاس نقشه‌های نمودار معمولاً کوچک‌تر است. اما استثنائاتی وجود دارد: به عنوان مثال، در Medieval: Total War یک نقشه ایزومتریک وصله ای وجود دارد.

ویژگی نقشه مسئول ایزومتریکی است ایزومتریکو دو پارامتر که زاویه نگاه دوربین ما را تعیین می کند: فیو تتا.

اولی مسئول چرخش نقشه نسبت به محور عمودی است: به عنوان مثال، اگر آن را روی 45 درجه تنظیم کنید (در درجه اندازه گیری می شود)، سلول شبکه مستطیلی مانند تمدن با یک زاویه رو به بالا جهت گیری می کند. . در Phi=0، یکی از اضلاع سلول افقی خواهد بود.

دومی شیب دوربین را نسبت به عمودی کنترل می کند. برای راحتی، به عنوان نسبت واحدهای افقی و عمودی طول داده می شود. فرض کنید، اگر می‌خواهیم ارتفاع سلول ما نصف عرض آن کشیده شود، باید تتا را روی ۲ قرار دهیم.

با یک نقشه کاشی، ما مجاز به انتخاب خودسرانه این زوایا نیستیم: بالاخره ما (هنوز) سه بعدی نداریم. آنها به طور مستقیم به پارامترهای کاشی بستگی دارند. به عنوان مثال، اگر یک محور الماسی شکل با زاویه رو به بالا داشته باشیم و اندازه محور عمودی نصف محور افقی باشد، باید پارامترهای 45 و 2 را تنظیم کنیم.

اما نقشه‌های نمودار و تکه‌کاری به شما این حق را می‌دهند که این پارامترها را به دلخواه خود اختصاص دهید (و حتی در صورت تمایل، آنها را در این فرآیند تغییر دهید)، اما نباید از این موضوع غافل شوید - علاوه بر این که چنین چرخش‌هایی طول می‌کشد. بسیاری از زمان، آنها نیز به نظر نمی رسد بسیار سرد است. و فراموش نکنید که اگر نقشه شما هنری و دارای عکس و کتیبه و ... باشد با آن می چرخند... در کل گاهی با در نظر گرفتن چرخش مورد نیاز - خوشبختانه فواصل - ترسیم نقشه تکه تکه ساده تر است. اغلب هیچ نقشی در آنجا بازی نمی کنند.

مفاصل

نقشه تکه تکه، نمای بالا.

نقشه های کاشی مشکل دیگری دارند - اتصال کاشی. توسط پارامتر کنترل می شود TileBorderStyle. اغلب این tileStraight، حالتی که در آن کاشی ها به سادگی و بدون هیچ گونه افکت لبه ای با هم قرار می گیرند یا tileBorder، که در آن خطوطی ترسیم می شود که یک کاشی را از دیگری جدا می کند - مرزهای سلول ها (در مورد دوم فراموش نکنید که تعریف کنید رنگشبکه ها در پارامتر TileBorderColor).

اما یک گزینه حیله گرتر وجود دارد، زمانی که کاشی های یکسان بدون تغییر در مجاورت یکدیگر قرار می گیرند و از کاشی های مختلف با استفاده از کاشی "انتقالی" ویژه استفاده می شود. این معمولاً در صورتی انجام می‌شود که نقشه عمدتاً از گستره‌های وسیعی از یک نوع قلمرو، مثلاً مناطق سبز بزرگ تشکیل شده باشد، و یک سلول فردی مهم نیست و نباید مورد توجه بازیکن قرار گیرد. این کارت Heroes of Might Magic است. اما اگر هر سلول به طور جداگانه پردازش شود، مانند Civilization، این روش مناسب نیست و بهتر است سلول ها به وضوح از یکدیگر جدا شوند. فن آوری "فوزد" (همچنین نامیده می شود ماسک) توسط مقدار TileBorderStyle برابر با مشخص می شود tileMasked. ما بار دیگر در مورد ساختار آنها صحبت خواهیم کرد - این یک موضوع نسبتاً پیچیده است.

کاشی

عنصر نقشه - شی کلاس TLKITile- ساختار ساده ای دارد. در ابتدا شامل: مختصات، جن که آن را ترسیم می کند، کد نوع کاشی (که تعیین می کند چه چیزی در اینجا داریم - تپه، صحرا، جاده، دریا؟) و توانایی متقابل کشور (این در بیشتر بازی ها مربوط است). آخرین مورد، تعداد واحدهای حرکتی است که برای حرکت در این کاشی صرف می شود زمینتیم برای کاشی های صعب العبور، این یک عدد منفی است.

پارامتر دیگر - اشیاء، لیستی از اشیاء واقع در این کاشی (نوع TLKIGameObject).

برای اینکه بفهمید روی کدام سلول کلیک شده است، نقشه یک روش دارد موش تایل(x,y) کاشی انتخاب شده را برمی گرداند.

روش های کاشی شامل همسایه است(کاشی، فاصله). اگر فاصله کاشی بیشتر از سلول‌های Distance با کاشی داده شده نباشد، این تابع true را برمی‌گرداند (به طور پیش‌فرض این پارامتر برابر با یک است، یعنی اگر شما به سادگی IsNeighbour(Tile) را بنویسید، تابع برای کاشی بلافاصله در مجاورت آن true خواهد شد. به کاشی داده شده برای شبکه های مربعی، آن کاشی هایی که به صورت مورب حاشیه دارند نیز "همسایه" در نظر گرفته می شوند.

کارکرد همسایه اولو همسایه بعدیبرای بررسی تمام سلول های مجاور یک مورد استفاده می شود. اولین آنها به سلول همسایه اشاره می کند و دومی فقط پس از فراخوانی اولی قابل فراخوانی است و همسایه های بعدی را یکی یکی نشان می دهد.

شمارش همسایگان

// ایجاد آسیب به سلول

روش TObeliskTile.Damage(dmg: integer);

اگر(اشیاء. تعداد > 0) و// ممکن است داشته باشیم

// در هر سلول بیش از یک شیء نباشد

(Objects.ID > 0) // اشیاء غیرفعال

// آسیبی ندیده

Dec(Objects.Hits,

// به طور خودکار حفاظت از آسیب را کم کنید

حداکثر(0,dmg-(اشیاء مانند TObeliskGameObject).Defense);

اگر Objects.Hitshen Die; // مرده ها را بر می داریم

// حمله گلوله آتشین

روش TObeliskTile.Fireball;

varهمسایه: TObeliskTile;

Neighbor:= FirstNeighbour به عنوان TObeliskTile;

Neighbor.Damage(6);

Neighbor:= NextNeighbour به عنوان TObeliskTile;

تا زمانهمسایه = صفر; // تا همسایه ها تمام شوند

یک مثال در نوار کناری "Enumerating Neighbors" وجود دارد. این روش برخورد توپ آتشین به سلول و تمام همسایگان آن را محاسبه می کند.

جالب است: برای کارش اصلا مهم نیست، ما یک شبکه شش ضلعی یا یک مربع داریم.

اغلب ما به پارامترهای دیگری نیاز داریم و معمولاً کلاس کاشی هایی که نقشه را تشکیل می دهند - نسل 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));

برای i:=0 به Map.Width-1 انجام دادن

برای j:=0 بهنقشه.ارتفاع-1 انجام دادن

Write(Map.Tiles.Code, SizeOf(integer);

در اینجا نحوه کار آن آمده است. ابتدا باید فایل را با استفاده از یک روش خاص باز کنید InitSave، که تنها پارامتر آن نام فایل است. سپس هدر را برای کنترل نوع با استفاده از یک رویه خاص ذخیره می کنیم WriteHeader. سپس با استفاده از رویه هر آنچه را که نیاز داریم یادداشت می کنیم WriteStrبرای رشته ها، و برای تمام فیلدهای دیگر - نوشتن(پارامتر دوم آن اندازه داده های نوشته شده بر حسب بایت است). در صورت نیاز می توانید رویه های خود را برای فیلدهای شی بنویسید صرفه جوییبا رکورد هدر در نهایت فایل را با رویه می بندیم FinSave.

تمام اشیایی که هدر خاص خود را دارند باید به طور جداگانه اعلام شوند. در فصل مقداردهی اولیهماژول (بخش اختیاری که بعد از آن می آید پیاده سازی، که حاوی دستوراتی است که باید در همان ابتدا، هنگام شروع برنامه اجرا شوند، برای مثال باید خط زیر را بنویسید:

RegisterUserName (tpMap، "TObeliskMap");

TpMapثابت است که شما نیز باید آن را اعلام کنید. آن را مثلاً با 1 برابر کنید. و در سازنده شی TObeliskMap، مقدار این ثابت را به پارامتر اختصاص دهید. TypeID.

چرا این همه هیاهو؟ علاوه بر تطبیق نوع، یک مزیت بسیار مهم نیز دریافت می کنید.

اگر فرمت فایل تغییر کند، مثلاً به دلیل افزودن فیلدهای جدید، نیازی به نوشتن هیچ «تبدیل کننده» ای نخواهید داشت که فایل های قدیمی را به فایل های جدید تبدیل می کند. کد شما به طور خودکار آنها را می خواند.

اگر فیلد جدید در فایل ذخیره نشود، این کد به صورت خودکار مقداردهی اولیه می کند. و شما می توانید به سادگی با افزودن خط WriteStr(Name) به انتها، یک فایل بنویسید.

اظهار نظر:اگر هنوز متوجه نشدید که این فرآیند برای چیست، نگران نباشید. می توانید از روش های مرسوم ضبط و ذخیره استفاده کنید. اما در پروژه های بازی واقعاً بزرگ، این مسیر مزایای قابل توجهی را ارائه می دهد.

بیا بازی کنیم

اول از همه، باید یک کلاس جدید مشتق شده از TLKIGameObject ایجاد کنیم. دلمان برای خواص قدیمی تنگ خواهد شد. در کلاس جدید، باید فیلدهایی را برای ویژگی های اصلی اضافه کنید: محدوده، حرکت و غیره.

مهم است:پارامتر سرعت قدیمی ما با ما باقی می ماند، اما نشان دهنده سرعت حرکت قطعه در سراسر صفحه است و نه مسافتی که در هر پیچ طی می کند. اگر در حال ساخت یک استراتژی بلادرنگ بودیم، به پارامتر جدیدی نیاز نداشتیم، اما در غیر این صورت باید آن را معرفی کنیم.

در صفحه ما دکمه های TLKIButton را به شکل کمانداران، شمشیرزنان، جادوگران، ارواح، شوالیه ها اعمال می کنیم.

ابتدا ترتیب را داریم. بیایید منطقه قرارگیری یک طرف را به عنوان سه "خط" بالای نقشه، برای سمت دیگر - به عنوان سه "خط" پایین تعریف کنیم.

کد به این صورت عمل می کند. با فشار دادن هر یک از دکمه ها، نصب جنگنده مربوطه فعال می شود. با کلیک بر روی یک مربع خالی در ناحیه قرارگیری، شکل را در آنجا قرار می دهید و دکمه را غیرفعال می کند. به محض غیرفعال شدن همه دکمه ها، حرکت به دشمن منتقل می شود.

در ابتدای هر حرکت جدید، همه دکمه‌ها دوباره روشن می‌شوند: این کار به گونه‌ای انجام می‌شود که فرد راحت‌تر متوجه شود که هنوز شبیه کسی نیست. بر این اساس، با کلیک بر روی دکمه، شکل انتخاب می شود و به محض انجام حرکت، دکمه ناپدید می شود. دکمه دیگری - "پایان چرخش" - فقط پس از مرحله قرار دادن ظاهر می شود.

آخرین باری که ما قبلاً عملیاتی را برای فعال کردن و غیرفعال کردن عناصر رابط انجام دادیم، بنابراین این عملیات را با جزئیات تجزیه و تحلیل نمی کنیم - به کد مثال نگاه کنید.

حرکت قطعه

// اگر سلول انتخاب شده توسط دشمن اشغال شود، حمله می کنیم،

// اگر آزاد باشیم، اگر با خودمان مشغول باشیم، در اطراف حرکت می کنیم

// یا یک مانع - کلیک را نادیده بگیرید

Tile:= Map.MouseTile(MouseX, MouseY);

اگر(کاشی = صفر)// خارج از پنجره بازی کلیک کنید

سپسخروج؛

// در حال حرکت

اگر(Tile.Objects.Count = 0)

و(دیست (خود)

و نهمنتقل شد سپس

// بیایید بررسی کنیم که آیا می توانیم به آنجا برسیم

اگر نه HasWay (کاشی) سپسخروج؛

MoveObj(ID، Tile.x، Tile.y)؛

// بازی نوبتی است - بلافاصله حرکت کنید

منتقل شد:= true;

//

اگرحمله کرد سپس

Icon.IsVisible:= نادرست;

// حمله کنید

اگر(Tile.Objects.Count > 0)

و(دیست (خود)

و نهحمله کرد سپس

Obj:= Tile.Objects;

// ما فقط به دشمنان حمله می کنیم

اگر Obj.Side = کنار سپسخروج؛

Obj.Damage(dmg);

حمله شده:= درست است;

// اگر حرکت کامل شد، نماد را بردارید

اگرمنتقل شد سپس

Icon.IsVisible:= نادرست;

این حرکت به صورت زیر پردازش می شود (به "حرکت قطعه" مراجعه کنید). سلول کلیک شده قرار دارد. اگر دشمنی روی آن باشد، و آنها در محدوده باشند، اگر خالی باشد و در محدوده باشد، قطعه حرکت می کند (اگر موانع اجازه می دهد، اما نه توسط دشمن، کلیک نادیده گرفته می شود). .

وقتی هر دو طرف نزدیک شدند، اژدهاها وارد عمل شدند. آنها بسیار ساده عمل می کنند: آنها نزدیکترین غیراژدها را که در 7 مربع از آنها قرار دارد انتخاب می کنند و حمله می کنند. کد Dragon Actions را ببینید.

اکشن های اژدها

// بررسی کاشی ها در 7 مربع از اژدها

برای i:= حداکثر (0، x - 7) بهحداقل (حداکثر اندازه، x + 7) انجام دادن

برای j:= حداکثر (0، y - 7) بهحداقل (حداکثر اندازه، y + 7) انجام دادن

if (Map.Tiles.Objects.Count > 0) و

(Map.Tiles.Objects.Code>1)

// 0 - کد مانع، 1 - اژدها

سپس شروع

// انتخاب یک نقطه برای حرکت

اگر x=i سپستبر: = من

دیگراگر x>i سپس ax:=i+2

دیگرتبر:= i-2;

اگر y=j سپس ay:=j

دیگراگر y>j سپس ay:= j+2

دیگر ay:= j-2;

MoveObj (NO، تبر، ay)؛

// حمله کنیم

Map.Tiles.Damage(12);

// شکستن چرخه: بیش از یک حمله نیست

// هر اژدها در هر دور

در نهایت، تنها چیزی که باقی می‌ماند این است که بررسی کنیم که آیا بیش از نیمی از ابلیسک‌ها توسط نیروهای یک طرف اشغال شده‌اند - و اگر هستند، بازی را متوقف کنید و برنده را اعلام کنید!


بنابراین، ما یک بازی استراتژیک داریم. با این حال، برای شادی کامل، چیزی که وجود ندارد، اول از همه، هوش مصنوعی است که به بازی اجازه می دهد حالت تک نفره داشته باشد (ما ساده ترین روش را برای کنترل اژدها در نظر نمی گیریم). این کاری است که دفعه بعد انجام خواهیم داد. یک ماه دیگر می بینمت!

در شماره های آینده

در شماره های زیر در مورد آن صحبت خواهیم کرد:

  • سیستم های ذرات برای نمایش دود، جرقه و غیره؛
  • کار با شفافیت؛
  • موتورهای سه بعدی؛
  • اصول هوش مصنوعی؛
  • اشکال زدایی برنامه؛
  • ایجاد یک برنامه و اسکریپت بازی،
  • نوشتن یک سند طراحی؛
  • تعادل بازی؛
  • فکر کردن از طریق شخصیت های بازی و خطوط آنها.
  • کار با فتوشاپ و بسته های سه بعدی؛
  • تصاوير متحرك؛
  • موسیقی و صداپیشگی؛
  • و خیلی بیشتر.

این کاملاً ممکن است که یاد بگیرید چگونه همه اینها را با دستان خود انجام دهید. به زودی این را خواهید دید.

برای ما بنویسید…

برای کسانی که فکر می کنند می توان این بسته را با چیزی تکمیل کرد: اولاً، فراموش نکنید که امروز روی دیسک ما هنوز نسخه نهایی بسته وجود ندارد، بلکه فقط نسخه ای است که عملکردهای شرح داده شده در مقالات ما را اجرا می کند. شاید برخی از ایده های شما قبلاً اجرا شده باشند و منتظر نوبت خود هستند (به نوار کناری "در شماره های آینده" مراجعه کنید). و در هر صورت: هنگام ارائه ایده به ما، سعی کنید توجیه کنید که چرا پیشنهاد شما برای بسیاری از بازی ها به طور همزمان مفید است و نه فقط برای بازی خاص شما.

برای کار مستقل

در حالی که منتظر شماره بعدی هستید، می توانید روی پروژه خود کار کنید یا می توانید سعی کنید این یکی را بهبود بخشید. در اینجا چند ایده برای اجرای خود شما وجود دارد:

  • اشیاء مانع را به تخریب پذیر (درخت و بوته) و غیرقابل تخریب (سنگ) تقسیم کنید و مطمئن شوید که گلوله های آتشین و نفس اژدها پوشش گیاهی را می سوزانند.
  • ایجاد گودال (سلول قهوه ای) یا آتشی که برای چندین نوبت شعله ور می شود (سلول قرمز) در محلی که حمله آتش ایجاد شده است.
  • به شمشیربازان و شوالیه ها اجازه دهید همسایگان خود را بپوشانند و به آنها 1+ برای دفاع بدهید.
  • حرکت ارقام روی صفحه را صاف کنید.

چه می شود اگر در زمان واقعی؟

اگر به بازیکنان ورودی متفاوتی بدهید، ساختن یک بازی استراتژیک بلادرنگ دشوارتر نیست. ساده ترین راه برای انجام این کار از طریق شبکه است - در یکی از شماره های آینده در مورد آن صحبت خواهیم کرد. تغییرات زیر نیز مورد نیاز خواهد بود:

  • هیچ زمینه ای لازم نیست سرعت بازیدر کلاس TObeliskObject- استفاده از Speed ​​از موتور پایه (سرعت حرکت در سراسر صفحه برابر با سرعت بازی است).
  • محاسبه عدد صحیح فواصل غیرفعال است.
  • کد حرکت شکل با در نظر گرفتن این واقعیت که لازم است یک مسیر در اطراف موانع ترسیم شود، بازنویسی می شود.
  • دکمه "پایان حرکت" حذف می شود.

همین. آیا خودتان سعی می کنید این کار را انجام دهید؟

من شرکت شما را یکی از قوی ترین شرکت ها در بازار خدمات مشاوره کشورمان می دانم. من دوست دارم که طیف وسیعی از مشکلات مدیریتی را لمس کنید و آنها را با کیفیت و عمق کافی پوشش دهید.من اطلاعات مفید زیادی در نشریات شرکت شما پیدا می کنم، زیرا همیشه جالب است که با تجربه افراد حرفه ای آشنا شوید و از آنها یاد بگیرید.

بوریسوک یوری الکساندرویچ، مشاور مدیریت، دکترای علوم فنی

من از سری مستر کلاس هایی که تدریس می کنید خیلی خوشم می آید.شخصاً که قبلاً رئیس یک کارخانه بودم ، شروع به تغییر رویکردهای خود در مدیریت کردم ، از جمله. با تشکر از اطلاعات دریافتی از شما او به نوعی به کاری که من انجام دادم و در کارخانه مشاهده کردم پاسخ داد. از آن زمان به بعد، شروع کردم به این فکر کردن که توانایی‌های صنعتی روسیه چقدر ناکارآمد است و پتانسیل آن چقدر زیاد است و چگونه می‌توان از آن استفاده کرد. من که شخصاً با مشکلات شرکت های مختلف آشنا شدم (گاهی اوقات دوستان از من به عنوان یک متخصص دعوت می کنند) می بینم که چقدر می توان انجام داد، چگونه می توان هم اثربخشی و هم کارایی را افزایش داد.

دریاگین اولگ بوریسوویچ

بله، من کلاس های استاد شما را دوست دارم،رویکرد بسیار سیستماتیک، آگاهی از مطالب در سطح بالا و البته تجربه عملی فراوان در موضوعات مورد بررسی. چیزی که من را جذب می کند این استحرفه ای بودن و سطح بالای دانش حرفه ای اسکندر در مورد این موضوع به من این امکان را می دهد که به چیزهای قبلاً آشنا متفاوت نگاه کنم. از دیدگاه من این استبسیار مهم و ضروری است که به چیزهایی که می دانید نگاه جدیدی داشته باشید، زیرا... در حین کار جراحی، اغلب چشم "تاری" می شود و در واقع چیزهای واضح را نمی بینید.

النا فداش، مدیر منابع انسانی، شرکت ATB، دنپروپتروفسک.

در این مقاله، بعید است به چیز ناشناخته ای دست بزنم. تمام محاسبات برای هر کسی که می داند آژاکس چیست، ساده و قابل درک است. من قبلاً مقاله ای در مورد نحوه ترکیب یک مشتری با یک سرور در بازی های زمان واقعی (). در این مقاله، من به همان مسائلی که در مورد بازی‌های نوبتی اعمال می‌شود، می‌پردازم.

پس چی هست بازی نوبتی? در ویکی پدیا می توانید تعریف زیر را بیابید استراتژی نوبتی - یک ژانر از بازی های رایانه ای است که ویژگی اصلی آن این است که بازیکنان به نوبت حرکت می کنند، برخلاف استراتژی زمان واقعی.. من این تعریف را کمی ساده می کنم:

  • استراتژی گام به گام - یک بازی استراتژی نوبتی است.
  • بازی استراتژیک - این یک ژانر از بازی ها است که کلید رسیدن به پیروزی در آن برنامه ریزی و تفکر استراتژیک است..
  • بازی نوبتی - ژانری از بازی ها است که ویژگی اصلی آن این است که بازیکنان به نوبت حرکت می کنند.
بازی های نوبتی عبارتند از:
  • استراتژی های نوبتی
  • بازی های کارتی
  • بازی های رومیزی (شطرنج، رفتن، انحصار و غیره)
توجه داشته باشم که بازی‌های نوبتی محدودیت‌های کمتری بر پیچیدگی پروتکل تعامل در مقایسه با بازی‌های بلادرنگ اعمال می‌کنند. برای مثال، زمان واکنش به یک رویداد خاص نقش کلیدی ایفا نمی کند. معمولاً به بازیکن 10 ثانیه فرصت داده می شود تا تصمیم بگیرد. حتی اگر پینگ غول پیکر باشد، مثلاً 3 ثانیه، بازیکن هنوز 7 ثانیه فرصت دارد تا فکر کند. علاوه بر این، پینگ می تواند بپرد و بپرد، اما ما اصلاً به این موضوع اهمیت نمی دهیم (در بازی های زمان واقعی، این وضعیت عملاً هر پروتکلی را از بین می برد).

به طور معمول (در 95٪ بازی های نوبتی) دقیقاً یک بازیکن در هر لحظه تصمیم می گیرد. در نتیجه، تعداد درخواست هایی که باید به اندازه کافی به آنها پاسخ دهیم، کاهش می یابد.

بنابراین، هنگام ایجاد یک پروتکل، در درجه اول بر سهولت اجرا و پشتیبانی آن تمرکز خواهیم کرد. این به ما امکان می دهد در مدت زمان کمتری سود بیشتری کسب کنیم.

استدلال فوق مبتنی بر توسعه 2 ماهه یک بازی کارتی خاص است.

مشتری باهوش یا احمق؟

ابتدا، بیایید تصمیم بگیریم که مشتری ما چقدر می تواند "هوشمند" باشد. من در حال بحث هستم که آیا ارزش تکرار منطق برنامه (قوانین بازی) روی کلاینت را دارد یا خیر. البته سرور باید هوشمند باشد تا از هک شدن برنامه جلوگیری کند. اما آیا ارزش آموزش منطق تجارت به مشتری را دارد؟

این به طور مستقیم به وزن کل حجم داده در مورد وضعیت بازی شما بستگی دارد. اگر این مقدار داده زیاد باشد، زمان زیادی طول می کشد تا در سرور جمع آوری شود و به مشتری منتقل شود، منطقی است که بخشی از منطق را روی کلاینت پیاده سازی کنیم تا سرور راحت شود. به عنوان مثال، در Civilization، سنج حافظه مورد استفاده همیشه خارج از نمودار است. آیا می توانید چیزی مشابه ایجاد کنید و فقط UI را روی مشتری باقی بگذارید؟

از طرف دیگر، هر چه مشتری هوشمندتر باشد، هزینه ساخت بازی بیشتر خواهد بود. اجازه دهید توجه داشته باشم که زمان توسعه سرور به هیچ وجه به دانش مشتری بستگی ندارد. حتی اگر کلاینت فوق‌العاده مگا هوشمند باشد، اگر کاربر بخواهد پنجره مرورگر را دوباره بارگیری کند، سرور باید تمام داده‌های بازی را جمع‌آوری و جمع‌آوری کند تا آن را به مشتری منتقل کند. A la "بارگیری یک بازی ذخیره شده". نتیجه گیری: یک کلاینت هوشمند می تواند سرعت یک برنامه را افزایش دهد، اما همیشه برای توسعه برنامه به منابع اضافی نیاز دارد.

من موارد زیر را پیشنهاد می کنم تست:

1. آیا حجم کانال اجازه می دهد؟

میانگین وزن کل اطلاعات وضعیت بازی را تخمین بزنید. سپس در میانگین تعداد درخواست‌ها به سرور در هر ثانیه ضرب کنید. اگر عدد دریافتی بیش از ظرفیت کانال داده خروجی باشد، مشتری احمق غیرقابل قبول است. اگر این عدد از 20 درصد کانال خروجی بیشتر شود، باید فکر کنید که آیا کار می کند؟

2. آیا کار فشرده است؟

پیچیدگی الگوریتم جمع آوری داده های بازی را (در کسری از ثانیه) تخمین بزنید. در اینجا، تمام پرس و جوهای پایگاه داده را در نظر بگیرید. سپس در تعداد متوسط ​​درخواست‌ها به سرور در هر ثانیه ضرب کنید. اگر زمان بیش از یک ثانیه باشد، مشتری احمق غیرقابل قبول است. اگر این عدد از 200 میلی‌ثانیه بیشتر شود، باید به این فکر کنید که آیا دوام خواهد داشت؟

ادامه:

امروزه به راحتی می توانید استراتژی های معاملاتی زیادی پیدا کنید، تنها مشکل این است که اکثر آنها یا کار نمی کنند یا به اندازه کافی موثر نیستند. در چنین شرایطی، ایجاد یک استراتژی از ابتدا یک راه حل عالی برای مشکل است.

و اگرچه در هر موقعیت خاص ایجاد یک وسیله نقلیه متفاوت خواهد بود، مراحل اصلی یکسان باقی می مانند. یعنی شما می توانید چیزی شبیه به یک راهنمای جهانی ایجاد کنید، به طور متوالی تمام مراحل را طی کنید، و در پایان ما یک سیستم کاملا قابل اجرا خواهیم داشت.

اگرچه ما گزینه ایجاد یک استراتژی را از ابتدا در نظر خواهیم گرفت، که با یک ایده شروع می شود و با معرفی یک فیلتر و توسعه نهایی خودرو خاتمه می یابد، اما این بدان معنا نیست که همه سیستم های آماده باید فوراً به عنوان آشکارا ناکارآمد کنار گذاشته شوند. . تعدادی از TS را می توان به عنوان پایه استفاده کرد و به سادگی چند فیلتر به منظور حذف سیگنال های نادرست اضافه کرد.

مراحل اصلی ایجاد استراتژی

اگر 5-7 نشانگر را به طور تصادفی انتخاب کنید و سعی کنید از آنها وسیله نقلیه کاری ایجاد کنید، بعید است که چیزی مفید ظاهر شود. ابتدا باید به ایده اصلی استراتژی فکر کنید و تنها پس از آن به انتخاب ابزارها بروید. توالی اقدامات زیر را می توان پیشنهاد کرد:

  • اگر سیستم از ابتدا ایجاد شده باشد، اولین قدم کار روی ایده است. در این مرحله، شما فقط باید تصمیم بگیرید که سبک معاملاتی شما چگونه خواهد بود، به عنوان مثال، آیا معاملات در امتداد روند انجام می شود یا بر خلاف آن، یا شاید استراتژی منحصراً برای شکست برنامه ریزی شده باشد. ما هنوز به جزئیات فکر نمی کنیم.
  • پس از انتخاب سبک معاملاتی مناسب، می توانید شروع به بررسی جزئیات کنید. قبل از انتخاب ابزار، باید جفت ارزهای فعال و بازه‌های زمانی، زمان معاملات و غیره را به وضوح تعیین کنید.

مهم! هنگام انتخاب یک بازه زمانی، توصیه نمی شود خیلی کوچک پیش بروید، به خصوص اگر معامله گر تجربه ای در حدس و گمان در فواصل زمانی کوچک نداشته باشد. برای مبتدیان، به طور کلی بهتر است از H1-H4 پایین تر نروید، می توانید در مورد انتخاب فاصله زمانی بهینه مطالعه کنید.

  • مرحله بعدی انتخاب ابزار مناسب است و در اینجا فراوانی انتخاب می تواند شوخی بی رحمانه ای با معامله گر داشته باشد، زیرا او ده ها شاخص در اختیار دارد، توانایی استفاده از کندل، موج، تحلیل تکنیکال و بنیادی. از بین این همه تنوع، شما باید چندین ابزار را انتخاب کنید که به بهترین وجه با سبک معاملاتی مورد نظر شما مطابقت دارند.
  • یکی از قوانین اصلی هر استراتژی این است که سیگنال دریافتی باید توسط چندین فیلتر تأیید شود، اما توصیه می شود تعداد آنها را محدود کنید. به عنوان مثال، برای استراتژی های شاخص، نامطلوب است که تعداد شاخص ها از 3-4 تجاوز کند، در غیر این صورت در سیگنال ها سردرگمی ایجاد می شود، و اگر قصد دارید با استفاده از تحلیل تکنیکال کار کنید، شاخص ها نقش حمایتی را ایفا می کنند.
  • قوانین حمایت از موقعیت ایجاد شده است، نتیجه باید الگوریتم اقدامات برای هر سناریو باشد.
  • مرحله آخر این است که وسیله نقلیه را ابتدا در یک حساب سابقه و سپس در یک حساب آزمایشی یا بهتر است بگوییم در یک حساب سنتی واقعی اجرا کنید. هدف اصلی آزمایش دوام استراتژی در شرایط واقعی است و یک حساب واقعی (حتی یک سنت) به شما این امکان را می دهد که طیف وسیعی از احساسات را احساس کنید، از سرخوشی گرفته تا تلخی از دست دادن.

همچنین می توانید توصیه کنید که از پیچیدگی وسیله نقلیه آویزان نشوید. تمرین نشان می دهد که پیچیدگی بیش از حد به هیچ وجه نشانگر اثربخشی نیست. هر چه سیستم ساده تر باشد، تجارت آسان تر است.

آنچه باید در خودرو گنجانده شود

ایجاد یک استراتژی کمی شبیه به یک مجموعه ساخت و ساز است. هنگام ایجاد یک وسیله نقلیه می توانید و باید از موارد زیر استفاده کنید:

  • شاخص ها. علاوه بر این، شما نباید تعداد یا پیچیدگی بیش از حد آنها را تعقیب کنید، حتی در وسایل نقلیه کاملاً مکانیکی، 3-5 قطعه کافی است.
  • الگوهای گرافیکی - پرچم های شناخته شده، پرچم ها، مثلث ها، سر و شانه ها، قسمت های پایین و بالا هنوز به خوبی کار می کنند.
  • سازه های گرافیکی;
  • سطوح فیبو؛
  • عناصر تحلیل بنیادی - در حال حاضر کسب درآمد صرفاً از طریق اخبار دشوار است، اما لازم است که تقویم اقتصادی را در تجارت در نظر بگیرید. حداقل فقط قبل از انتشار آمارهای مهم برای ایالات متحده یا اروپا، تراکنش ها را به نقطه سربه سر منتقل کنید یا حتی سود را کاملاً ببندید.

همچنین تعدادی تکنیک وجود دارد که مزایای آنها مشکوک است:

  • Martingale در ابتدا یک تاکتیک بی‌سود است، تنها شانس موفقیت این است که قبل از ضرر، بتوانید مبلغ سپرده را برگردانید و کمی کسب درآمد کنید.

  • استفاده از قفل نیز نامطلوب است مگر اینکه کاملاً ضروری باشد، در این صورت ترک قلعه بسیار دشوار است.
  • همچنین بهتر است از سیگنال های خارج استفاده نکنید. سیگنال‌های بیرونی به معنای مقایسه تعداد فروشندگان/خریداران، شاخص‌های مختلف خلق و خوی اکثر معامله‌گران و غیره است. اما تعدادی منابع نیز وجود دارد که می‌توانید به آنها گوش دهید، به عنوان مثال Autochartist. سیگنال های خوبی بر اساس الگوهای گرافیکی می دهد.
  • همچنین بهتر است از عناصر آنالیز امواج (حداقل برای مبتدیان) استفاده نشود. اگرچه در اینجا استثنائاتی وجود دارد، به عنوان مثال، تجارت در Wolfe Waves دقیقاً بر اساس تجزیه و تحلیل موج است، اما پیچیده نیست.

توسعه یک استراتژی شاخص ساده

بیایید فرض کنیم که ایده اصلی استراتژی تجارت منحصراً در جهت روند است. علاوه بر این، شما نه در لحظه ظهور یک روند که کاملاً مخاطره آمیز است، بلکه پس از تکمیل یک اصلاح کوچک وارد بازار خواهید شد.

این استراتژی باید تقریباً روی هر جفت ارزی کار کند، زیرا به دلیل بازه زمانی زیاد، سیگنال‌ها اغلب رخ نمی‌دهند. بنابراین وضعیت به طور همزمان با استفاده از 5-7 جفت ارز ارزیابی می شود. در مورد بازه زمانی، D1 مناسب است.

اکنون باید تصمیم بگیرید که دقیقاً لحظه ورود چگونه تعیین می شود. گزینه های زیادی برای شناسایی یک روند وجود دارد:

  • از نظر بصری - اما ارزیابی چشمی به شما اجازه نمی دهد قوانین تجارت شفاف را ایجاد کنید.
  • استفاده از یک یا چند میانگین متحرک؛
  • با توجه به مقدار شاخص ADX، اگر بیش از 30 باشد، روند قوی وجود دارد، کمتر از 20، بازار آرام است.
  • استفاده از ساختارهای گرافیکی؛
  • باندهای بولینگر به شما امکان می دهد قدرت یک روند را با فاصله بین مرزهای بالایی و پایینی کانال قضاوت کنید.

به طور کلی، گزینه های زیادی وجود دارد، اما از آنجایی که استراتژی باید تا حد امکان ساده باشد، ما روی میانگین های متحرک تمرکز خواهیم کرد. یا بهتر است بگوییم، یک MA، جهت روند را بر اساس موقعیت قیمت نسبت به آن قضاوت خواهیم کرد. می توانید با دوره هایی شروع کنید که میانگین قیمت را در یک دوره زمانی کامل (هفته، ماه، سه ماهه و غیره) دارند، برای مثال، 20 میانگین قیمت را در ماه گذشته نشان می دهد. دشوارترین کار انتخاب دوره کارشناسی ارشد مناسب است، اما در اینجا باید با آزمون و خطا پیش بروید.

ایده اصلی معامله به شرح زیر خواهد بود: ما منتظر می شویم تا حرکت روند ظاهر شود، سپس یک اصلاحیه در عرض یک روز انجام می شود، پس از پایان آن معامله منعقد می شود. اگر همه اینها در قالب قوانین واضح ارائه شود، الگوریتم اقدامات به این شکل خواهد بود (با استفاده از مثال خرید):

  • ابتدا موقعیت قیمت را نسبت به MA بررسی می کنیم، قیمت باید بالای خط باشد.
  • در مرحله بعد باید یک حرکت روند پیدا کنیم، به یک شمع با بدنه بزرگ و سایه های کوچک نیاز داریم (توصیه می شود که مقدار سایه از 10-15٪ اندازه بدنه شمع تجاوز نکند).
  • باید یک شمع با محدوده روزانه کوچک (فاصله از بالا تا نزدیک) دنبال شود. قیمت بسته نباید به سطح 50 درصد روز قبل برسد - در این روز اصلاح قیمت رخ می دهد.

در این مورد، اصلاح می تواند بر اساس 2 سناریو انجام شود:

  • هنگامی که یک شمع با سایه بلند زیر تشکیل شد، می توانید بلافاصله در پایان روز معامله را باز کنید. این شکل شمع نشان می دهد که اصلاح قبلاً تکمیل شده است.
  • یک گزینه ممکن زمانی است که شمع اصلاح حداقل بسته شود، یعنی. بازگشت به عقب هنوز کامل نشده است، در این مورد باید صبر کنید تا شمع بعدی بسته شود، اگر سفید است، می توانید یک موقعیت طولانی را باز کنید.

در مورد حفظ موقعیت و دستورات حفاظتی، استاپ لاس باید حداقل فراتر از وسط شمع با بدنه بزرگ قرار گیرد. برای به دست آوردن سطح هدف، کافی است مقدار همان شمع را از سطح خرید کنار بگذارید.

قوانین استراتژی شکل گرفته است، تنها چیزی که باقی مانده این است که آن را در عمل آزمایش کنیم. تمرین نشان می دهد که حتی چنین الگوریتم ساده ای بیش از نیمی از معاملات سودآور را تولید می کند (و اگر معامله را زودتر به صفر منتقل کنید، احتمال ضرر کاهش می یابد).

ورود در ابتدای روند

TS پیشنهادی در بالا بخشی از حرکت روند را از دست می دهد، اما به زمان زیادی برای تجزیه و تحلیل بازار نیاز ندارد. اگر امکان ردیابی رفتار قیمت روز وجود دارد، می توانید سعی کنید روند را در همان ابتدای شکل گیری آن سوار کنید. بنابراین ایده اصلی استراتژی ورود به بازار پس از شروع قیمت به خروج از کانال افقی است.

و در اینجا بسیار مهم است که سیگنال قابل اعتماد را به موقع، در همان ابتدای روند دریافت کنید. میانگین های متحرک دوباره می توانند به کمک بیایند، اما آنها تا حدودی متفاوت از استراتژی قبلی استفاده خواهند شد. شما می توانید چندین MA با دوره های مختلف بگیرید و شکل گیری یک روند را بر اساس موقعیت آنها نسبت به یکدیگر قضاوت کنید.

این یک رویکرد انقلابی نیست. بنابراین این شاخص حتی می تواند به عنوان پایه TS در نظر گرفته شود.

اگر تمساح را با تنظیمات استاندارد به H1 اضافه کنیم، می‌توانیم ببینیم که سیگنال‌های نادرست زیادی می‌دهد. برای این کار با دستور در حال انتظار وارد بازار می شویم و سطح قرارگیری آن با استفاده از فراکتال ها مشخص می شود.

در نتیجه، جریان کار به این صورت خواهد بود (با استفاده از مثال خرید):

  • ما به دنبال یک منطقه مسطح در نمودار هستیم (همه خطوط تمساح به طور آشفته با یکدیگر در هم تنیده شده اند).
  • در مرحله بعد، به یک شمع فراکتال نیاز دارید (و باید در بالای خطوط قرار گیرد، حتی بدون اینکه آنها را با سایه پایین لمس کنید).
  • یک دستور توقف خرید درست بالاتر از حداکثر آن، و یک دستور حفاظتی فراتر از مرز پایین منطقه تجمیع قرار می گیرد.
  • TP یا ثابت است (50-70 p)، یا از یک توقف انتهایی استفاده کنید. به طور کلی، پیش بینی قدرت یک حرکت روند بسیار دشوار است، بنابراین بهتر است از یک توقف انتهایی استفاده کنید تا یک TP ثابت یا سطح هدف را با استفاده از همان تحلیل تکنیکال تعیین کنید.

این مثال توسعه یک استراتژی از ابتدا نیست، بلکه یک انطباق جزئی از یک استراتژی از قبل شناخته شده با بازار مدرن است.

نمونه ای از یک سیستم ترکیبی ساده

ایده هنوز یکسان است - ورود در پایان تصحیح، اما ما این مشکل را به روش دیگری حل خواهیم کرد. هدف یکسان است - تعیین لحظه تکمیل اصلاح و وارد کردن در جهت روند، اما اگر قبلاً از میانگین متحرک استفاده می کردیم، اکنون از سطوح Fibo و نوسانگر برای تعیین تکمیل بازگشت استفاده خواهیم کرد.

ما به یک حرکت روند برجسته علاقه مند خواهیم شد که می توان آن را به صورت بصری نیز تعیین کرد. پس از این، شما فقط باید سطوح Fibo را به آن بکشید، این برای تعیین سطوح بالقوه برای تکمیل اصلاح ضروری است. قابل توجه ترین سطح اصلاحی 38.2% است.

اما این واقعیت که قیمت سطح فیبو را لمس می کند، تأیید کافی نیست. Stochastic می تواند به خوبی با این کار کنار بیاید (می توانید برای همین منظور از RSI استفاده کنید). به عنوان مثال، برای معامله خرید، قیمت باید نزدیک به سطح تصحیح باشد و Stochastic در آن زمان باید در منطقه فروش بیش از حد باشد.

پس از اینکه قیمت به سطح رسید، منتظر می‌مانیم تا Stochastic منطقه اشباع فروش را ترک کند و خرید کند. توقف را می توان فراتر از سطح تصحیح بعدی قرار داد و TP را می توان حداقل در بالاترین حد اخیر قبل از شروع عقب نشینی قرار داد.

سطوح فیبو و یک نوسانگر تنها حداقل مورد نیاز برای دریافت سیگنال هستند. در صورت تمایل، می توانید با معرفی فیلترهای اضافی، سیستم را پیچیده کنید.

استراتژی های مبتنی بر تحلیل تکنیکال

اگر تجزیه و تحلیل فنی به شکل خالص خود استفاده شود، کار تا حدودی ساده تر می شود، دیگر نیازی به توسعه یک وسیله نقلیه از ابتدا نیست. تعدادی تکنیک و ابزار وجود دارد که اثربخشی آنها در طول سالیان آزمایش شده است و تاجر فقط می تواند مناسب را انتخاب کرده و در ساخت و سازها از آنها استفاده کند.
در اصل، برای تجارت موفق کافی است:

  • خطوط روند - ما آنها را در بازه های زمانی مختلف می سازیم، از بالاترین شروع می کنیم و به تدریج به سمت کار نزول می کنیم.
  • سطوح فیبو، آنها باید به سمت تغییرات قیمت قابل توجه در تاریخ کشیده شوند. سطوح تصحیح 38.2، 50 و 61.8 درصد از اهمیت کلیدی برخوردار خواهند بود.
  • MT4 همچنین تعدادی ابزار تحلیل تکنیکال دیگر را پیاده سازی می کند، به عنوان مثال، Andrews pitchforks، مجموعه ای از ابزارهای Gann، چندین نوع کانال و غیره.

اما برای یک پیش‌بینی نسبتاً دقیق، سطوح فیبو و خطوط روند معمولاً به‌عنوان پشتیبانی/مقاومت عمل می‌کنند. معامله می تواند هم برای شکست و هم برای بازگشت از سطوح و خطوط انجام شود.

در مورد فیلترهای اضافی، می توانید الگوهای شمعدانی و نوعی نشانگر را برای جستجوی واگرایی ها اضافه کنید (همان Stochastic یا MACD). می توانید در مورد استفاده از تحلیل تکنیکال بیشتر بخوانید.

فیلترهای سیستم های معاملاتی

هر وسیله نقلیه معاملاتی، حتی اگر ایده کارساز باشد و تجارت به طور کلی سودآور باشد، سیگنال های زیادی تولید می کند و برخی از آنها بی سود هستند. پس از تشکیل قوانین سیستم، می توانید از تعدادی فیلتر جهانی استفاده کنید که به بهبود نسبت تراکنش های سودآور و زیان آور کمک می کند.

تعدادی فیلتر وجود دارد که تقریباً برای هر استراتژی مناسب است:

  • وضعیت در بازه های زمانی بالاتر به عنوان مثال، اگر استراتژی بر روی H1 مطابق با یک استراتژی مکانیکی انجام شود، در آن صورت بد نیست به آنچه در H4 و D1 رخ می دهد نگاه کنیم.
  • میانگین محدوده روزانه، یعنی مسافتی که قیمت به طور متوسط ​​در روز طی می کند، این به فیلتر کردن تعدادی از سیگنال ها کمک می کند. بیایید تصور کنیم که در طول روز قیمت به طور متوسط ​​100-120 پیپ حرکت می کند، اگر در یکی از روزها قیمت تا عصر از 90-100 پیپ در یک جهت عبور کرده باشد و TS سیگنالی برای ورود به بازار در بازار می دهد. همان جهت، پس منطقی است که آن را نادیده بگیریم، آمار می گوید بعید است که ترافیک در این روز ادامه یابد.

مهم! رعایت این قانون منجر به این واقعیت می شود که برخی از معاملات سودآور از دست خواهند رفت، اما نسبت معاملات سودآور / زیانده افزایش می یابد.

  • تعداد شمع ها پس از تشکیل سیگنال نیز مهم است.

هنگامی که TS سیگنالی می دهد، در حالت ایده آل، وضعیت باید تقریباً بلافاصله پس از پایان معامله (به معنی 1-3 شمع بعدی) به نفع ما شروع شود. اگر این اتفاق نیفتد، پس هر چه زمان بیشتری از انجام معامله بگذرد، عواملی که هنگام ورود معامله گر به بازار اهمیت داشتند، تأثیر کمتری بر بازار خواهند داشت. تأثیر آنها با گذشت زمان از بین می رود.

شما می توانید 5 شمع را ملاک قرار دهید، اگر پس از انعقاد معامله، قیمت برای 5 شمع در جهت سودآوری حرکت نکرده است، بهتر است معامله را به صورت دستی ببندید. این به معنای سناریویی است که نمودار در جای خود باقی می ماند، اما اگر قیمت به سمت سوددهی رفته باشد، این فیلتر اعمال نمی شود.

این شرط تقریباً برای تمام تایم فریم ها (به استثنای m1-m5) اعمال می شود. البته هنوز احتمال حرکت قیمت با حول یک علامت وجود دارد، اما انتخاب ما ثبات است. بهتر است چند معامله سودآور را قربانی کنید، اما از 3 تا 5 تجارت بی سود خودداری کنید.

خلاصه کردن

شروع به کار بدون سیستم معاملاتی مانند مرگ است، هر معامله گر باید این را به خاطر داشته باشد. در این مورد، از دست دادن سپرده فقط یک موضوع زمان است.

انتخاب یک وسیله نقلیه مناسب کار دشواری نیست، علاوه بر این، می توانید سیستم های کار خوب را در حوزه عمومی پیدا کنید. شما همچنین می توانید در مورد ایجاد استراتژی خود نگران باشید، به خصوص که این نیازی به دانش زبان های برنامه نویسی ندارد، فقط باید یک ایده و حداقل دانش اولیه در مورد نحوه عملکرد بازار و چه شاخص هایی برای اهداف مورد استفاده داشته باشید.

این فرآیند به خودی خود یادآور مونتاژ یک کیت ساخت و ساز است - ابتدا یک مشکل را تعیین می کنیم و سپس به سادگی ابزارهای لازم را برای حل آن انتخاب می کنیم. پس از بررسی تاریخچه، می توانید به تست TS در یک حساب دمو یا سنت بروید.



 

شاید خواندن آن مفید باشد: