Eine Strategie von Grund auf erstellen – eine ausführliche Anleitung. Kluger oder dummer Kunde? Erstellen Sie eine rundenbasierte Strategie

Freizeitpark:
Wir benötigen:
Gebäude-Sprite
Sprite-Menü
SPRITES VERSCHIEDENER TASTEN WIE:
Srite mit der Inschrift (Konstruktion, Konstruktion, bauen usw.)
ein Fenster, das erscheint
Bauzeichnung,
1) Den Rest fügen wir selbst hinzu
2) das Wort Fälschung – von mir selbst erstellt, weil wir müssen es fälschen, damit es mit unserer Quelle übereinstimmt)
Fangen wir an:
1) Erstellen Sie alles, was in Punkt I geschrieben steht, außer 1)
Lassen Sie uns eine globale Variable namens „Geld“ erstellen und einen beliebigen anfänglichen Geldbetrag festlegen
Wir werden auch ein Maus- und Tastaturobjekt erstellen
Lassen Sie uns einen Text erstellen, ihn Info nennen, ein Always-Ereignis erstellen und darin eine Aktion erstellen:
Wählen Sie Informationen in der Aktionsauswahl aus. Wählen Sie Text im Text festlegen aus. Schreiben Sie Folgendes:
"Geld: " &(global("Geld".
2) Fügen Sie ein Menü hinzu. Die Hauptaufgabe des Menüs besteht nicht darin, einzugreifen, sondern dem Spieler bei der Navigation zu helfen (wie kann es eingreifen? - es ist einfach, wenn Sie es mitten im Spiel platzieren); bevor wir das Menü erstellen, wir Wir erstellen eine neue Ebene, die wir Menü nennen, und schreiben in ihren Proportionen (Einstellungen, Optionen) in das Anzeigeelement:


Wir werden ein Sprite hinzufügen und das Bild des Menüs, das in den Vorproduktionsmaterialien enthalten war (Punkt I), aufnehmen und unser Menü an einem abgelegenen Ort platzieren, wo es nicht stört, aber auf dem Bildschirm sichtbar ist
Platzieren wir auch einen Knopf aus Vorveredelungsmaterialien (Punkt I) mit der Aufschrift BUILD (oder so ähnlich)
Lass es uns auf die Speisekarte setzen
Gehen Sie nun zum Ereignisblatt-Editor
Erstellen Sie ein Ereignis (#blah bla bla# - das ist meine Nachricht (Erklärung) nur an Sie, statt bla bla bla wird es meinen Kommentar für Sie geben; >> - Aktion; ll - Aufteilung der Fenster zum Beispiel:

Maus&Tastatur ll auf Objekt angeklickt ll linksgeklickt auf Objekt #Ihre Menüschaltfläche mit der Aufschrift BUILD (oder so ähnlich)##der Rest später (siehe Punkt 3)#
3)jetzt der schwierigste Teil(Ich habe dies in zwei Punkte unterteilt, damit es nicht so kompliziert wird.)
Erstellen Sie aus vorgefertigten Materialien ein Sprite „ein Fenster, das erscheint“
Dann erstellen wir ein leeres Sprite namens p1, verschieben das Fenster vom Bildschirm und platzieren p1 an der Stelle, an der Ihr Fenster erscheinen soll, wenn Sie auf die Schaltfläche „Erstellen“ klicken (oder so etwas wie CHVER).
Großartig! Gehen Sie jetzt zum Ereignisblatt-Editor
Schreiben wir das unvollendete Ereignis bis zum Ende auf:
Text werde Text setzen bla-bla-bla)
Maus&Tastatur ll auf Objekt angeklickt ll linksgeklickt auf Objekt #Ihre Menüschaltfläche mit der Bezeichnung BUILD (oder so ähnlich)#>>
4)Der zweite Teil des schwierigsten Teils:
Lassen Sie uns ein Sprite erstellen, in dem das Bild des Gebäudes (Vorbereitungsmaterialien) gezeichnet wird. Nennen wir es h1
Erstellen wir ein leeres Sprite, nennen es p2 und platzieren es nun an der Stelle, an der sich das Fenster öffnen soll.
Lassen Sie uns ein Sprite erstellen, auch ein Fenster (Vorbereitungsmaterialien). In das Fenster schreiben wir schön den Namen des Gebäudes, seine Kosten und eine Beschreibung (optional) und nennen es i1
Erstellen wir ein weiteres leeres Sprite namens p3 und platzieren es neben p2, nur so, dass es p2 nur mit der oberen linken Ecke berührt
Lassen Sie uns nun mehrere Ereignisse erstellen, aber zuerst machen wir das vorherige Ereignis zu einer neuen Aktion:
Maus&Tastatur ll auf Objekt angeklickt ll linksgeklickt auf Objekt #die Schaltfläche Ihres Menüs mit der Aufschrift BUILD (oder so ähnlich)#>> System erstellt Objekt relativ zu Objekt ll #Ihr Fenster# #Ebenennummer unter dem Namen Menü# # X ;Y-nicht ändern# in Objekt p1
>>System erstellt Objekt relativ zu Objekt II #Ihr zweites Fenster# #Ebenennummer unter dem Namensmenü# #X;Y-nicht ändern# zu Objekt p2
Wir müssen ihm auch ein Ereignis zurückgeben:
Kopieren Sie das Ereignis und invertieren Sie es
neues Event
Maus&Tastatur ll ist über Objekt ll h1>>System ll erstellt Objekt relativ zu Objekt ll i1 #Ebenennummer unter dem Namen Menü# #X;Y-nicht ändern# in Objekt p3
Lassen Sie uns ein Sprite mit einem Gebäude erstellen (verwenden Sie Vorproduktionsmaterialien) und nennen Sie es Haus
Erstellen wir ein Fenster, in dem unsere Gebäude erscheinen, wenn sie im Menü ausgewählt werden. Nennen wir es rlo
Veranstaltungen:
Maus&Tastatur ll auf Objekt geklickt ll links geklickt, um h1>>System ll zum Objekt relativ zum Objekt ll erstellen #Ebenennummer unter dem Namen Menü# #X;Y-nicht ändern# in Objekt rlo
>> System wird vom Wert ll abgezogen #Geldbetrag, der beim Bau abgezogen werden sollte#
Jetzt war es unmöglich, eine Veranstaltung aufzubauen
Ich erzähle Ihnen meine frühere Methode des Verbots (wenn ich mit dem Schreiben fertig bin, werde ich eine andere Methode erkunden, die mich blau gemacht hat, als ich mich an die Welt des Spiele-Themenparks erinnerte)
Veranstaltungen:
Haus ll bei Kollision mit einem anderen Objekt ll zu Haus
>>Haus werde zerstören
>> System ll vom Wert ll abziehen – #doppelt den Geldbetrag, der während des Baus abgezogen wurde##Hinweis, den Sie eingeben müssen – Menge#
im Grunde alles.
III was ich sagen möchte:

Ich war sehr verärgert über den Zusammenbruch meines Spiels. Es war ein Strategiespiel, und dieser Artikel wurde nach seinem Schema zusammengestellt. Ich bitte Sie, nicht zu viel zu kritisieren, ich habe lange geschrieben, wenn Sie Sprachfehler finden, schreibe und ich werde sie korrigieren
Und hier ist auch der Quellcode für Ihr Sehvergnügen, schauen Sie, im Prinzip ist alles so, wie es hier geschrieben steht, nur dass dies eine Demoversion des Spiels war. Hauptsache, Sie ändern nichts, sonst wird es fehlerhaft !
Nutze es, experimentiere, prüfe es, mache, was du willst, für mich ist alles in Ordnung

KaMiKaZa:
Alle „System“-Ausdrücke müssen im „Code“-Tag enthalten sein.
Dann denke ich, dass es besser sein wird.
Außerdem scheint es mir, dass Screenshots hier nicht schaden würden. Und auch der Quellcode, für Anfänger.

Freizeitpark:
Ich weiß nicht, wie man Screenshots von Ereignissen macht.

Nun, das ist nicht nötig.

iamnp:
theme_park gibt es eine spezielle Schaltfläche auf der Tastatur – PrintScreen

Freizeitpark:
Ich weiß, dass manche Leute es einfach anders machen. Außerdem hat jeder sein eigenes Sprite
Und wenn ich all diese Sprites aufstelle, werden es nur wenige Leute verstehen.
Nun, vielleicht gibt jemand ein Plus? Kein Wunder, dass ich Probleme hatte?

Burlachenko:
Damit eine solche Lektion für jeden interessant ist, muss sie entsprechend formatiert werden, aber hier „so war es jedenfalls.“
Und doch, wenn Sie möchten, „verschönern“ Sie es bitte nach und nach, wenn Sie Zeit haben.

Freizeitpark:
Ok, ich komme von der Schule nach Hause und mache mich fertig.
PS. hinzugefügte Quelle

Serega Lebedew:

iamnp, wohin gehen diese Screenshots später?

KaMiKaZa:

Zur Zwischenablage.
Gehen Sie zu irgendeinem Texteditor, und führen Sie den Vorgang „Einfügen“ aus oder drücken Sie Strg+V.

In diesem Artikel werde ich wahrscheinlich nichts Unbekanntes ansprechen. Alle Berechnungen sind einfach und für jeden verständlich, der weiß, was Ajax ist. Ich habe bereits einen Artikel darüber geschrieben, wie man einen Client mit einem Server in Echtzeitspielen kombiniert (). In diesem Artikel gehe ich auf die gleichen Probleme ein, die auch für rundenbasierte Spiele gelten.

Also was ist rundenbasiertes Spiel? Die folgende Definition finden Sie auf Wikipedia rundenbasierte Strategie - ist ein Genre von Computerspielen, dessen Hauptmerkmal darin besteht, dass die Spieler abwechselnd Züge ausführen, im Gegensatz zur Echtzeitstrategie. Ich würde diese Definition etwas vereinfachen:

  • Schritt-für-Schritt-Strategie - ist ein rundenbasiertes Strategiespiel.
  • Strategiespiel - Hierbei handelt es sich um ein Spielgenre, bei dem Planung und strategisches Denken der Schlüssel zum Sieg sind..
  • Rundenbasiertes Spiel - ist ein Spielgenre, dessen Hauptmerkmal darin besteht, dass die Spieler abwechselnd Züge ausführen.
Zu den rundenbasierten Spielen gehören:
  • Rundenbasierte Strategien
  • Kartenspiele
  • Brettspiele (Schach, Go, Monopoly usw.)
Ich stelle fest, dass rundenbasierte Spiele im Vergleich zu Echtzeitspielen weniger Einschränkungen hinsichtlich der Komplexität des Interaktionsprotokolls mit sich bringen. Nämlich, Die Reaktionszeit auf ein bestimmtes Ereignis spielt keine entscheidende Rolle. Der Spieler hat normalerweise 10 Sekunden Zeit, um eine Entscheidung zu treffen. Selbst wenn der Ping gigantisch ist, sagen wir 3 Sekunden, hat der Spieler immer noch 7 Sekunden Zeit zum Nachdenken. Darüber hinaus kann der Ping immer weiter springen, aber das interessiert uns überhaupt nicht (in Echtzeitspielen tötet diese Situation praktisch jedes Protokoll).

Typischerweise (in 95 % der rundenbasierten Spiele) trifft zu jedem Zeitpunkt genau ein Spieler die Entscheidung. Dadurch verringert sich die Zahl der Anfragen, auf die wir angemessen reagieren müssen.

Daher konzentrieren wir uns bei der Erstellung eines Protokolls in erster Linie auf die einfache Implementierung und Unterstützung. Dadurch können wir in kürzerer Zeit mehr Gewinn erzielen.

Die obige Argumentation basiert auf der zweimonatigen Entwicklung eines bestimmten Kartenspiels.

Kluger oder dummer Kunde?

Lassen Sie uns zunächst entscheiden, wie „intelligent“ unser Kunde sein kann. Ich überlege, ob es sich lohnt, die Anwendungslogik (Spielregeln) auf dem Client zu duplizieren. Natürlich muss der Server intelligent sein, um potenzielle Hackerangriffe auf die Anwendung zu verhindern. Aber lohnt es sich, dem Kunden Geschäftslogik beizubringen?

Dies hängt direkt davon ab, wie viel die gesamte Datenmenge über den Status Ihres Spiels wiegt. Wenn diese Datenmenge groß ist, lange dauert, bis sie auf dem Server gesammelt und an den Client übertragen wird, dann ist es sinnvoll, einen Teil der Logik auf dem Client zu implementieren, um den Server zu entlasten. Beispielsweise liegt in Civilization die Speichernutzungsanzeige immer außerhalb der Charts. Können Sie etwas Ähnliches erstellen und nur die Benutzeroberfläche auf dem Client belassen?

Andererseits gilt: Je intelligenter der Client, desto teurer wird die Spieleentwicklung. Ich möchte darauf hinweisen, dass die Serverentwicklungszeit in keiner Weise von der Gelehrsamkeit des Kunden abhängt. Auch wenn der Client super-super-mega-intelligent ist: Wenn der Benutzer das Browserfenster neu laden möchte, muss der Server alle Daten über das Spiel sammeln und zusammenstellen, um sie an den Client zu übertragen. A la „Laden eines gespeicherten Spiels“. Fazit: Ein intelligenter Client kann eine Anwendung beschleunigen, erfordert jedoch immer zusätzliche Ressourcen für die Entwicklung der Anwendung.

Ich schlage Folgendes vor prüfen:

1. Erlaubt die Kanallautstärke?

Schätzen Sie das durchschnittliche Gewicht der gesamten Menge an Spielstatusdaten. Als nächstes multiplizieren Sie mit der durchschnittlichen Anzahl der Anfragen an den Server pro Sekunde. Wenn die resultierende Zahl die Kapazität des ausgehenden Datenkanals überschreitet, ist der dumme Client inakzeptabel. Wenn diese Zahl 20 % des ausgehenden Kanals überschreitet, sollten Sie darüber nachdenken, ob das funktioniert?

2. Ist es arbeitsintensiv?

Schätzen Sie die Komplexität des Spieldatenerfassungsalgorithmus (in Sekundenbruchteilen). Berücksichtigen Sie dabei alle Anfragen an die Datenbank. Als nächstes multiplizieren Sie mit der durchschnittlichen Anzahl der Anfragen an den Server pro Sekunde. Wenn die Zeit eine Sekunde überschreitet, ist ein dummer Client inakzeptabel. Wenn diese Zahl 200 ms übersteigt, sollten Sie darüber nachdenken, ob sie anhält?

Fortsetzung:

Hallo an alle! Jetzt erkläre ich Ihnen, wie Sie ein einfaches RTS (RTS - Real Time Strategy, also eine Echtzeitstrategie) erstellen, eine Hängematte 8.1 öffnen (die Funktionsfähigkeit ist bei 8.0 nicht garantiert) und ein objControl-Objekt erstellen, das heißt, dies wird sein Unser Hauptobjekt: Erstellen Sie ein Erstellungsereignis (Erstellen). Ereignis hinzufügen => Erstellung (Ereignis hinzufügen => Erstellen). Das Erstellungsereignis wird nur einmal durchgeführt. Klicken Sie beim Erstellen auf die Registerkarte „Steuerung“ rechts vertikales Menü und klicken Sie mit der rechten Maustaste auf Code ausführen und schreiben Sie den Code (am besten kopieren Sie den Code nicht, sondern schreiben ihn selbst, das ist viel einfacher zu merken):

200?"200px=""+(this.scrollHeight+5)+"px");">startx=0; //Deklarieren Sie eine Variable für den Startpunkt von x
starty=0; //Deklariere eine Variable für den Anfang des Punktes bei y
draw_rect=false; //Kein Auswahlrechteck zeichnen


Variable: Ein Speicherbereich, der Informationen enthält. Sie haben einen eigenen Namen, unter dem Sie sie kontaktieren können. Variablen in GML können eine reelle Zahl oder eine Zeichenfolge enthalten. Beispielsweise ist ein Tisch eine Variable, Holz oder Glas ein Wert
Nun erstellen wir ein Schrittereignis (Schritt, Ereignis hinzufügen => Schritt) und führen die Operation erneut aus (Rechtsklick auf Code ausführen):

200?"200px="+(this.scrollHeight+5)+"px");">
if mouse_check_button_pressed(mb_left) //Wenn die linke Maustaste gedrückt wird
{
draw_rect=true; //Wir zeichnen ein Rechteck
startx=mouse_x; //Start-x-Position = Maus-x-Position
starty=mouse_y; //Startposition = Mausposition
with all selected=false; //Dies ist noch keine deklarierte Variable, wir werden später herausfinden, was sie tun wird
}

If mouse_check_button_released(mb_left) //Wenn LMB freigegeben ist
{
draw_rect=false; //Wir zeichnen kein Rechteck
for(i=0;i<=instance_number(par);i+=1) //Читайте про цикл for ниже
{
ii=instance_find(par,i); //Wir suchen ein Objekt, das noch nicht hergestellt wurde
if(collision_rectangle(startx,starty,mouse_x,mouse_y,ii,true,false)) //Hier ist unser Kollisionsrechteck (Kontakt)
{
ii.selected=true;
}
}
}

Der Code ist groß und komplex, während wir etwas über die if-Bedingungsanweisung lernen:
Der Code mit if wird wie folgt ausgeführt:

200?"200px="+(this.scrollHeight+5)+"px");">
if (Bedingung)
{
Aktion
}

Es kann auch eine else-Anweisung (sonst) enthalten, Beispiel:

200?"200px=""+(this.scrollHeight+5)+"px");">if (Bedingung)
{
Aktion
}
anders
{
Aktion 2
}

Und for ist ein Schleifenoperator, er wird wie folgt ausgeführt:

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


Der for-Operator ist eine sehr mächtige Sache, er hilft in schwierigen Situationen sehr

Operator – in eine Sprache integrierte Aktionen, am häufigsten sind zum Beispiel int, if, else, string, switch, for, case, break, exit usw. usw.

Jetzt erstellen wir auch ein Zeichenereignis (draw) und schreiben auf die gleiche Weise:

200?"200px=""+(this.scrollHeight+5)+"px");">if draw_rect=true
{
Alpha=.8;
draw_rectangle_color(startx,starty,mouse_x,mouse_y,c_green,c_green,c_green,c_green,true);
}

Hier ist alles einfach, hier ist das Gleiche nur auf Russisch:
Wenn wir ein Rechteck zeichnen müssen, wählen wir Transparenz und zeichnen ein Rechteck
Hier sind die Argumente

200?"200px=""+(this.scrollHeight+5)+"px");">draw_rectangle_color(x1,y1,x2,y2,color 1, color 2, color 3, color 4, Outline)


Umriss – ob nur die Kante (true) oder das gefüllte Rechteck (false) gezeichnet wird
Wir haben ein neues Wort gefunden - eine Konstante. Dies ist ein numerischer Ausdruck oder Code, der durch ein Wort ersetzt wird. Die Hängematte verfügt über integrierte Konstanten:

200?"200px=""+(this.scrollHeight+5)+"px");">true - 1
falsch – 0
pi - 3,1415...


Nun, wir haben es herausgefunden, jetzt müssen wir ein neues Objekt erstellen – ein übergeordnetes Objekt, das eine Verbindung zu seinen untergeordneten Objekten herstellt. Nennen wir es par (um den Namen zu ändern, müssen Sie den Code im Schrittereignis des Steuerobjekts ändern), schreiben Sie in das Erstellungsereignis:

200?"200px=""+(this.scrollHeight+5)+"px");">selected=false; //Hier ist unsere Variable, ob das Objekt ausgewählt ist

Das ist alles. Jetzt brauchen wir natürlich ein Objekt, das sich bewegen kann, wir nennen es objTest und schreiben den Code in das Erstellungsereignis:

200?"200px=""+(this.scrollHeight+5)+"px");">gox=x; //Wohin gehen...
goy=y; //von y
ausgewählt=false; //Wir sind nicht ausgewählt =)
object_set_parent(self,par) //Hier ist die Auswahl des übergeordneten Elements

Neue Aktion:

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

Setzt das übergeordnete Objekt auf das Objekt mit dem Namen ind.
Und ein neuer Operator: self bedeutet, dass die Aktion an sich selbst geht
Keine Angst, im Step-Event ist noch etwas übrig:

200?"200px=""+(this.scrollHeight+5)+"px");">if distance_to_point(gox,goy) > 20
{
mp_potential_step(gox,goy,6,solid);
}
if(selected=true) && mouse_check_button_pressed(mb_right)
{
gox=mouse_x;
goy=mouse_y;

Strategiebildung
Amateuren kann man nicht trauen:
ihre Pläne könnten unerwartet aufgehen,
und niemand ist dazu bereit.

(A. Cuningham)

In den beiden vorherigen Ausgaben haben wir gelernt Erstellen Sie einfache 2D-Spiele, Sprites steuern, den Spielbildschirm scrollen, Kollisionen von Spielobjekten verfolgen, eine Schnittstelle erstellen (Tasten, Maus, Tastatur, Textbereiche) und im Vollbild- und Fenstermodus arbeiten. All dies wurde am Beispiel eines Arcade-Spiels durchgeführt.

Dieses Mal werden wir von Arcade-Spielen zu einem „ernsthafteren“ Genre übergehen – Strategien. Hier müssen wir eine ganze Reihe neuer Mechanismen beherrschen, aber auch hier wird es nichts Kompliziertes geben. In diesem Artikel wir Lassen Sie uns die Struktur einer rundenbasierten Strategie untersuchen(und auch echtzeit-Strategie(mit LKI-Creator geht das noch einfacher) und wir erstellen ein Spiel als Beispiel, das allerdings nur dafür gedacht ist Mehrbenutzer Modus (und auch Karteneditor für Sie). Mit dem Einzelspielermodus befassen wir uns in der nächsten Ausgabe unserer Kolumne – gewidmet Grundlagen der künstlichen Intelligenz.

Da dies bereits die dritte Lektion ist, gehen wir nicht näher darauf ein alle Beispielcode - zum Glück wurde vieles genauso gemacht wie in den beiden vorherigen Malen. Als Referenz gibt es ein Beispielprogramm (es enthält viele Kommentare) und frühere Artikel.

Nun, Sie können die Materialien aus unseren vergangenen Kursen auf unserer finden CD, in der eigens dafür eingerichteten Rubrik „Do it yourself-Spiel“.

Formulierung des Problems

Schreiben wir ein Strategiespiel, das aus einem Kampf zwischen zwei Fantasy-Armeen besteht. Das Ziel des Kampfes ist es, mehrere zu erobern Obelisken, auf der Karte platziert. Vor der Schlacht stellen wir unsere Truppen, bestehend aus 6, auf Schwertkämpfer, 4 Bogenschützen, 2 Ritter, 2 Zauberer und 1 Geist, innerhalb des uns zugewiesenen Gebiets. Darüber hinaus gibt es neutrale auf der Karte Drachen.

Eigenschaften von Kämpfern
Kämpfer Bewegung Treffer Reichweite Schaden Schutz Fähigkeiten
Schwertkämpfer4 8 1 7 2 -
Bogenschütze4 5 7 5 1 -
Ritter3 15 1 9 4 Heilung, Ritterschlag
Magier3 12 5 6 0 Feuerball
Geist4 7 2 5 5 Regeneration
Der Drache6 30 2 12 5 Flug

Die Eigenschaften der Kämpfer sind in der Tabelle dargestellt. Behandlung– Dies ist das Recht, einen benachbarten Krieger (außer einem Geist) einmal pro Kampf bis zur vollen Gesundheit zu heilen. Ritterschlag- das Recht, einmal pro Spiel dreifachen Schaden zu verursachen. Feuerball- Der Angriff des Magiers entfernt Trefferpunkte nicht nur vom unmittelbaren Ziel, sondern auch von den umliegenden Feldern. Regeneration- Wiederherstellung von 1 Treffer pro Runde. Flug- das Recht, Hindernisse zu überwinden.

Das Spiel wird im Mehrspielermodus in der Hot-Seat-Version gespielt (von einem Computer aus gespielt, jeder dreht einen nach dem anderen). Nachdem die Spieler an der Reihe sind, kommen neutrale Drachen an die Reihe und greifen jeden Feind im Umkreis von 7 Feldern an.

Die Gruppe endet, wenn eine Seite entweder mehr als die Hälfte der auf der Karte vorhandenen Obelisken erobert oder vollständig stirbt.

Die Karte wurde zunächst im Karteneditor eingestellt. Es gibt Obelisken, Drachen und Hindernisse (Gegenstände, durch die man sich nicht bewegen oder angreifen kann).

Vorbereitung auf die Arbeit

Bevor wir beginnen, müssen wir das Paket neu installieren LKI-Ersteller. Tatsache ist, dass im Vergleich zum letzten Mal viele Änderungen und Ergänzungen vorgenommen wurden.

(Ich hoffe, dass Delphi Sie haben bereits installiert; Wenn nicht, dann lesen Sie Empfehlungen zu diesem Thema in unserem vorherigen Artikel – in der Juni-Ausgabe des Magazins oder auf der CD dieser Ausgabe oder auf der Website.)

Es ist wichtig: Die vorherige Version von LKI-Creator hatte einige Kompatibilitätsprobleme mit neuen Versionen von Delphi. In dieser Version entfallen sie.

Nehmen Sie die Datei mit Programmtexten und Bildern von unserer CD (Abschnitt „Spiel mit Ihren eigenen Händen“) und entpacken Sie sie in das Projektverzeichnis.

Jetzt können Sie herunterladen notwendigen Dateien von hier .

Wir sollten drei Unterverzeichnisse haben. One – Units – speichert DirectX-Bibliotheken und Module des LKI-Creator-Pakets. In einem anderen - Projekt - werden wir arbeiten; Die Bilder, die wir benötigen, werden dort im Voraus platziert und vorherige Version unsere Spielhalle. Im dritten – Escort – ein fertiges Programm, das uns gelingen soll.

Jetzt installieren wir LKI-Creator (neu installieren). Öffnen Sie im Delphi-Menü das Element „Komponente“ und wählen Sie „Komponente installieren“. Wenn Sie dieses Paket bereits installiert haben, bleiben Sie auf der Registerkarte „In bestehendes Paket“, andernfalls gehen Sie zur Registerkarte „In neues Paket“ und füllen Sie die leeren Zeilen wie in der Abbildung gezeigt aus (in der obersten Zeile ist es am einfachsten, die LKI2dEngine auszuwählen. pas-Datei mit der Schaltfläche „Durchsuchen“ aus und geben Sie unten einfach „LKI“ ein. Klicken Sie dann auf OK und wählen Sie Installieren. Sie sollten nun die Registerkarte „LKI“ im oberen Bereich von Delphi sehen.

Jetzt müssen wir nur noch unser Projekt hochladen. Wählen Sie im Menü Datei die Option Öffnen und öffnen Sie die Datei Project\Obelisk.dpr...

Wo ist die Karte, Billy? Wir brauchen eine Karte!

Bevor wir jedoch zu den großen Dingen kommen, müssen wir noch etwas an der Grafik-Engine arbeiten.

In Star Escort, unserem vorherigen Projekt, hatte die „Karte“ keine Bedeutung: Die Sterne wurden zufällig platziert und hatten keinen Einfluss, und die Position anderer Objekte wurde entweder direkt im Code angegeben oder durch Zufall bestimmt. Dies ist nicht für jedes Projekt geeignet. Das bedeutet, dass es für uns an der Zeit ist, unsere Engine zu erweitern Gebietskarte.

Sie können sich wahrscheinlich schon vorstellen, wie es aussehen wird – wir platzieren ein Kartenobjekt im Projektfenster und registrieren es dann in der Eigenschaft Karte Unser Motor.

So ist es... aber wir haben mehr als eine Kartenklasse. Lass uns genauer hinschauen...

Arten von Karten

Die Karte besteht aus etwas Landschaft Und Objekte darauf installiert. Die Landschaft wird am häufigsten (aber nicht immer) in sogenannte Zellen unterteilt Fliesen- Fliesen.

Wie wir aus einem Geometriekurs in der Schule wissen, kann eine Ebene lückenlos und überlappungsfrei mit regelmäßigen Vielecken dreier Arten bedeckt werden: Dreieck (gleichseitig), Quadrat, Sechseck. Dreieckige Felder sind nicht besonders praktisch, daher werden häufiger quadratische Zellen oder Sechsecke verwendet.

In gewisser Weise ist das Leben mit Quadraten einfacher: Wenn wir eine zweidimensionale Anordnung von Zellen haben, ist sofort klar, wie wir die Zellen finden, die an eine bestimmte Zelle angrenzend sind. Diese betragen für jeden der beiden Indizes +1 und -1. Bei Sechsecken ist alles etwas komplizierter... aber das sechseckige Brett hat eine sehr wertvolle Eigenschaft: Alle Richtungen darin sind gleich. Bei einem quadratischen Raster ist das nicht der Fall: Die Diagonalen unterscheiden sich deutlich von den Horizontalen und Vertikalen. Daher sind Sechsecke für ernsthafte strategische Berechnungen möglicherweise besser als Quadrate.

Es gibt auch nicht gekachelte Karten. LKI-Creator unterstützt zwei Typen: Diagramm und Patchwork.

Eine Diagrammkarte ist eine Karte, auf der nur wenige Schlüsselpunkte eine Bedeutung haben, plus vielleicht spezielle Bereiche (z. B. unpassierbare), und der Rest ist nur ein Muster, das keinen Einfluss auf das Spiel hat. Auf diese Weise werden häufig Sternkarten erstellt, wie beispielsweise in Master of Orion: Sterne und Schwarze Löcher sind Schlüsselpunkte, der Rest ist Hintergrund. In diesem Modus erstellen sie manchmal globale Karten, beispielsweise für ein Rollenspiel.

Die Patchwork-Karte ist in Bereiche unterteilt, und innerhalb des Bereichs sind alle Punkte gleich; Sie können sich nicht entlang des „Patchworks“ bewegen. Dies ist gut für globale Strategien, bei denen eine Provinz die minimale Gebietseinheit darstellt.

Beispiele für Karten aus verschiedenen Spielen mit Angabe der Art finden Sie auf den Bildern.

Also die Mehrheit zweidimensional Karten (dreidimensional – ein Sonderartikel) können in vier Klassen eingeteilt werden:

  • Rechteckig- TLKIRectMap. Dies ist eine gekachelte Karte, die Zellen sind Quadrate. Eine solche Karte gibt es beispielsweise in Civilization III.
  • Sechseckig- TLKIHexMap. Gekachelte Karte mit sechseckigen Zellen. Wird nicht nur in vielen Kriegsspielen verwendet: Auf diese Weise wurde beispielsweise traditionell die Kampfkarte von Heroes of Might & Magic erstellt.

    Diese beiden Kartentypen sind Nachkommen der allgemeinen Klasse TLKITileMap.

  • Graphovaya- TLKIGraphMap. Diese Karte hat Hintergrund (Hintergrundeigenschaft) und die darauf hervorgehobenen Schlüsselpunkte sind statische Objekte. Die Position anderer Objekte auf dieser Karte wird entweder durch gewöhnliche Koordinaten (wie ein Raumschiff im interstellaren Raum) oder durch Bezugnahme auf ein Objekt (dasselbe Schiff in der Umlaufbahn eines Planeten) ausgedrückt. Dies sind die Karten Master of Orion, Arcanum (global) und so weiter.
  • Patchwork- TLKIClusterMap. Es verfügt über eine Hintergrundeigenschaft, wie die des Diagramms, und eine zweite Eigenschaft – Maske, die bestimmt, welcher Punkt zu welcher Region gehört, und die Eigenschaft Grenzen, das die Verbindungen zwischen den „Fetzen“ definiert. So sind Karten beispielsweise in Medieval: Total War oder Victoria angeordnet.

Es ist wichtig: Kartenklassen werden nicht im LKI2dEngine-Modul, sondern in LKI2dMap beschrieben.

Neigungswinkel

Wenn Sie jedoch denken, dass damit die Möglichkeiten des LKI-Creators zur Kartendarstellung erschöpft sind, dann irren Sie sich gewaltig.

Die Karte kann präsentiert werden Draufsicht oder isometrisch- Schauen Sie schräg zur Vertikalen. Beispielsweise ist die Karte von Civilization III oder Heroes of Might & Magic IV isometrisch, während Civilization I eine Ansicht von oben verwendet.

Normalerweise wird Isometrie für gekachelte Karten verwendet, während Diagrammkarten mit einer Draufsicht verwendet werden, da der Maßstab von Diagrammkarten normalerweise kleiner ist. Es gibt jedoch Ausnahmen: Beispielsweise gibt es in Medieval: Total War eine isometrische Patchwork-Karte.

Die Karteneigenschaft ist für die Isometrie verantwortlich IsIsometrisch und zwei Parameter, die den Blickwinkel unserer Kamera festlegen: Phi Und Theta.

Der erste ist für die Drehung der Karte relativ zur vertikalen Achse verantwortlich: Wenn Sie ihn beispielsweise auf 45 Grad einstellen (es wird in Grad gemessen), wird die rechteckige Gitterzelle wie in Civilization mit einem Aufwärtswinkel ausgerichtet . Bei Phi=0 ist eine Seite der Zelle horizontal.

Der zweite steuert die Neigung der Kamera relativ zur Vertikalen. Der Einfachheit halber wird es als Verhältnis horizontaler und vertikaler Längeneinheiten angegeben. Nehmen wir an, wenn wir möchten, dass unsere Zelle in der Höhe halb so breit wie in der Breite gezeichnet wird, müssen wir Theta auf 2 setzen.

Bei einer gekachelten Karte dürfen wir diese Winkel nicht beliebig wählen, schließlich haben wir (noch) kein 3D. Sie hängen direkt von den Parametern der Fliesen ab. Wenn wir beispielsweise eine rautenförmige Achse mit einem Aufwärtswinkel haben und die vertikale Achse halb so groß ist wie die horizontale Achse, müssen wir die Parameter 45 und 2 festlegen.

Diagramm- und Patchwork-Karten geben Ihnen jedoch das Recht, diese Parameter nach Belieben zuzuweisen (und bei Bedarf sogar zu ändern), aber Sie sollten sich davon nicht mitreißen lassen – abgesehen davon, dass solche Wendungen eine Zeit dauern viel Zeit, sie sehen auch nicht sehr cool aus. Und vergessen Sie nicht: Wenn Ihre Karte künstlerisch gestaltet ist, mit Bildern, Inschriften usw., dann drehen sie sich mit ihr... Im Allgemeinen ist es manchmal einfacher, eine Patchwork-Karte zu zeichnen und dabei die erforderliche Drehung – zum Glück auch die Entfernungen – zu berücksichtigen spielen da oft keine Rolle.

Gelenke

Patchwork-Karte, Draufsicht.

Kachelkarten haben ein weiteres Problem – das Zusammenfügen von Kacheln. Die Steuerung erfolgt über den Parameter TileBorderStyle. Am häufigsten ist dies der Fall KachelGerade, ein Modus, bei dem die Kacheln ohne Kanteneffekte einfach zusammenpassen, oder TileBorder, in dem Linien gezeichnet werden, die eine Kachel von einer anderen trennen – die Grenzen der Zellen (im letzteren Fall vergessen Sie nicht, sie zu definieren Farbe Gitter im Parameter TileBorderColor).

Es gibt jedoch eine raffiniertere Möglichkeit, wenn identische Kacheln ohne Änderungen aneinander grenzen und unterschiedliche Kacheln mithilfe einer speziellen „Übergangskachel“ verwendet werden. Dies geschieht in der Regel dann, wenn die Karte hauptsächlich aus großen Flächen eines Gebietstyps besteht, beispielsweise aus großen Grünflächen, und eine einzelne Zelle nicht wichtig ist und vom Spieler nicht bemerkt werden sollte. Dies ist die Heroes of Might Magic-Karte. Wenn jedoch wie in Civilization jede Zelle separat verarbeitet wird, ist diese Methode nicht geeignet und es ist besser, die Zellen klar voneinander zu trennen. „Fused“-Technologie (auch „Fused“ genannt). Maske) wird durch den TileBorderStyle-Wert gleich angegeben KachelMaskiert. Wir werden ein anderes Mal über ihre Struktur sprechen – das ist ein ziemlich komplexes Thema.

Fliese

Kartenelement – ​​Klassenobjekt TLKITile- hat eine einfache Struktur. Es enthält zunächst: Koordinaten, das Sprite, das es zeichnet, den Kacheltypcode (der bestimmt, was wir hier haben – einen Hügel, eine Wüste, eine Straße, ein Meer?) und die Geländefähigkeit (dies ist in den meisten Spielen relevant). Der letzte Wert gibt die Anzahl der Bewegungseinheiten an, die für die Bewegung durch dieses Plättchen aufgewendet werden Land Kader. Bei unpassierbaren Kacheln ist dies eine negative Zahl.

Ein weiterer Parameter - Objekte, eine Liste der Objekte, die sich auf dieser Kachel befinden (Typ TLKIGameObject).

Um herauszufinden, auf welche Zelle geklickt wurde, verfügt die Karte über eine Methode MouseTile(x,y) gibt die ausgewählte Kachel zurück.

Zu den Kachelmethoden gehören IstNachbar(Kachel, Abstand). Diese Funktion gibt „true“ zurück, wenn die Kachel nicht weiter als Distance-Zellen von der angegebenen Kachel entfernt ist (standardmäßig ist dieser Parameter gleich eins, d. h. wenn Sie einfach IsNeighbour(Tile) schreiben, gibt die Funktion „true“ für die unmittelbar angrenzende Kachel zurück zu der gegebenen Kachel. Bei einem quadratischen Gitter werden die Kacheln, die diagonal angrenzen, auch als „Nachbarn“ betrachtet.

Funktionen Erster Nachbar Und Nächster Nachbar werden verwendet, um alle an eine bestimmte Zelle angrenzenden Zellen zu überprüfen. Der erste von ihnen zeigt auf eine Nachbarzelle, und der zweite kann erst aufgerufen werden, nachdem der erste aufgerufen wurde, und gibt nacheinander die nächsten Nachbarn aus.

Aufzählung der Nachbarn

// Eine Zelle schädigen

Verfahren TObeliskTile.Damage(dmg: integer);

Wenn(Objects.Count > 0) Und// Wir haben vielleicht

// nicht mehr als ein Objekt pro Zelle

(Objects.ID > 0) // Passive Objekte

// nicht beschädigt

Dec(Objects.Hits,

// Schutz automatisch vom Schaden abziehen

Max(0,dmg-(Objekte als TObeliskGameObject).Defense);

Wenn Objekte.Hitsthen Die; // Wir entfernen die Toten

// Feuerballangriff

Verfahren TObeliskTile.Fireball;

var Nachbar: TObeliskTile;

Neighbor:= FirstNeighbour as TObeliskTile;

Neighbor.Damage(6);

Neighbor:= NextNeighbour as TObeliskTile;

bis Nachbar = Null; // Bis die Nachbarn ausgehen

Ein Beispiel finden Sie in der Seitenleiste „Nachbarn aufzählen“. Dieses Verfahren berechnet den Feuerball, der eine Zelle und alle ihre Nachbarn trifft.

Das ist interessant: für ihre Arbeit Es spielt überhaupt keine Rolle, wir haben ein sechseckiges Gitter oder ein quadratisches.

Oft benötigen wir einige andere Parameter und normalerweise die Klasse der Kacheln, aus denen die Karte besteht – Nachfahre TLKITile. Im Beispiel wird TObeliskTile von TLKITile geerbt.

Es ist wichtig: Wenn wir eine gekachelte Karte in unseren Spielbildschirm bringen, beginnen die Koordinaten sowie die entfernungsbezogenen TLKIGameObject-Methoden standardmäßig damit, die Entfernung in Kacheln statt in Punkten zu messen. Die Koordinaten von Schaltflächen, Symbolen usw. weiterhin in Pixel gemessen! Dieser Modus kann jedoch ausgeschaltet werden – dies kann für Echtzeitstrategien nützlich sein.

Eine Karte auswählen

Beginnen wir also mit einem rechteckigen Gitter (TLKIRectMap), einer isometrischen Abbildung (Winkelparameter 0, 1,5). Lassen Sie das Raster zeichnen (tileBorder-Stil). Teilen wir der Engine mit, dass diese bestimmte Karte angezeigt werden soll. Bisher wurden alle notwendigen Aktionen durchgeführt, ohne eine einzige Codezeile zu schreiben.

Diese Vorgänge müssen durchgeführt werden Vor Engine-Initialisierung sowie Schriftartdeklaration.

Wir werden die Figuren wie zuvor als Sprites deklarieren.

Karteneditor

Patchwork-Karte, isometrisch.

Hier gibt es einige Schwierigkeiten. Genau die gleiche Engine, die gleichen Kacheldeklarationen ... Die Schnittstelle, wie z. B. das Auswählen einer Kachel, das Laden/Speichern usw., kann einfach durchgeführt werden Standardmittel Delphi: Niemand zwingt uns, es zu übersetzen Vollbildmodus. Wir werden dies hier nicht analysieren, alles steht in der Beispieldatei. Der Beispielcode wurde bewusst verwendet der einfachste Weg; Auf Wunsch können Sie beispielsweise die Objektpalette und die Kachelpalette grafisch gestalten.

Der Editor verfügt lediglich über zwei Funktionen, die uns unbekannt sind. Das erste ist ganz einfach: Es handelt sich um eine neue Mausfunktion, die speziell für Kachelkarten entwickelt wurde. Funktion TLKIRectMap.SelectTile gibt einen Zeiger auf genau die Kachel zurück, auf die geklickt wurde, sodass wir den Klick problemlos verarbeiten können.

Aber das zweite neue Produkt verdient eine genauere Betrachtung.

Tatsächlich gibt es viele Möglichkeiten, Daten darin zu speichern und daraus zu lesen. Wir haben die in der Datei kodierte Methode gewählt CannonBase. Cannon ist ein Werkzeug zum Lesen und Schreiben von Nachkommenobjekten TCannonObject mit Typprüfung und einigen anderen Funktionen.

Schauen wir uns den Code an („Karte schreiben“).

Aufzeichnen einer Karte

Verfahren TObeliskMap.Save;

var i,j: ganze Zahl;

InitSave(FName);

WriteStr(MapName);

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

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

für ich:=0 Zu Map.Width-1 Tun

für j:=0 Zu Map.Height-1 Tun

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

So funktioniert das. Zuerst müssen Sie die Datei mit einem speziellen Verfahren öffnen InitSave, dessen einziger Parameter der Dateiname ist. Anschließend speichern wir den Header zur Typkontrolle mit einem speziellen Verfahren WriteHeader. Dann schreiben wir alles auf, was wir brauchen, indem wir das Verfahren anwenden WriteStr für Strings und für alle anderen Felder - Schreiben(Sein zweiter Parameter ist die Größe der geschriebenen Daten in Bytes). Sie können bei Bedarf eigene Prozeduren für Objektfelder schreiben Speichern mit einem Header-Datensatz. Abschließend schließen wir die Datei mit der Prozedur FinSave.

Alle Objekte, die einen eigenen Header haben, müssen separat deklariert werden. Im Kapitel Initialisierung Modul (optionaler Abschnitt, der danach kommt Implementierung, das Befehle enthält, die ganz am Anfang, beim Starten des Programms, ausgeführt werden müssen), sollten Sie beispielsweise folgende Zeile schreiben:

RegisterUserName(tpMap, "TObeliskMap");

TpMap ist eine Konstante, die Sie ebenfalls deklarieren müssen. Setzen Sie es beispielsweise mit 1 gleich. Und weisen Sie im Konstruktor des TObeliskMap-Objekts dem Parameter den Wert dieser Konstante zu Typ-ID.

Warum so viel Aufhebens? Neben der Typanpassung erhalten Sie einen sehr wichtigen Vorteil.

Wenn sich das Dateiformat beispielsweise durch das Hinzufügen neuer Felder ändert, müssen Sie keine „Konverter“ schreiben, die die alten Dateien in neue konvertieren. Ihr Code liest sie automatisch.

Dieser Code initialisiert das neue Feld automatisch als leer, wenn es nicht in der Datei gespeichert wird. Und Sie können eine Datei schreiben, indem Sie einfach die Zeile WriteStr(Name) ganz am Ende hinzufügen.

Kommentar: Wenn Sie immer noch nicht verstehen, wozu dieser Prozess dient, machen Sie sich keine Sorgen. Sie können herkömmlichere Aufzeichnungs- und Speichermethoden verwenden. Aber bei wirklich großen Spieleprojekten bietet dieser Weg erhebliche Vorteile.

Lass uns spielen

Zunächst müssen wir eine neue Klasse erstellen, die von TLKIGameObject abgeleitet ist. Wir werden die Eigenschaften des alten vermissen. In der neuen Klasse müssen Sie Felder für die Hauptmerkmale hinzufügen: Reichweite, Bewegung usw.

Es ist wichtig: Unser alter Geschwindigkeitsparameter bleibt bestehen, er gibt jedoch die Geschwindigkeit an, mit der sich die Figur über den Bildschirm bewegt, und nicht die Entfernung, die sie pro Runde zurücklegt. Wenn wir eine Echtzeitstrategie entwickeln würden, bräuchten wir keinen neuen Parameter, andernfalls müssten wir ihn einführen.

Auf unserem Bildschirm werden wir TLKIButton-Buttons in Form von Bogenschützen, Schwertkämpfern, Zauberern, Geistern und Rittern anwenden.

Zuerst haben wir die Vereinbarung. Definieren wir die Platzierungszone für eine Seite als die oberen drei „Linien“ der Karte, für die andere Seite als die unteren drei „Linien“.

Der Code funktioniert so. Wenn Sie eine der Tasten drücken, wird die Installation des entsprechenden Kämpfers aktiviert; Durch Klicken auf ein unbesetztes Feld im Platzierungsbereich wird die Figur dort platziert und die Schaltfläche deaktiviert. Sobald alle Tasten deaktiviert sind, wird der Zug auf den Feind übertragen.

Zu Beginn jedes neuen Zuges werden alle Knöpfe wieder eingeschaltet: Dies geschieht, damit eine Person leichter erkennen kann, wem sie noch nicht ähnelt. Dementsprechend wird durch Klicken auf die Schaltfläche die Figur ausgewählt und sobald eine Bewegung ausgeführt wird, verschwindet die Schaltfläche. Eine weitere Schaltfläche – „Zug beenden“ – erscheint erst nach der Platzierungsphase.

Beim letzten Mal haben wir bereits Operationen zum Aktivieren und Deaktivieren von Schnittstellenelementen durchgeführt, daher werden wir diese Operation nicht im Detail analysieren – schauen Sie sich den Beispielcode an.

Bewegung der Figur

// Wenn die ausgewählte Zelle vom Feind besetzt ist, greifen wir an,

// wenn wir frei sind, bewegen wir uns, wenn wir mit uns selbst beschäftigt sind

// oder ein Hindernis – ignoriere den Klick

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

Wenn(Kachel = Null)// Klicken Sie außerhalb des Spielfensters

Dann Ausfahrt;

// Ziehen um

Wenn(Tile.Objects.Count = 0)

Und(Dist(Selbst)

und nicht Gerührt Dann

// Lasst uns prüfen, ob wir dorthin gelangen können

Wenn nicht HasWay(Kachel) Dann Ausfahrt;

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

// Das Spiel ist rundenbasiert – bewegen Sie sich sofort

Verschoben:= true;

//

Wenn Angegriffen Dann

Icon.IsVisible:= FALSCH;

// Attacke

Wenn(Tile.Objects.Count > 0)

Und(Dist(Selbst)

und nicht Angegriffen Dann

Obj:= Tile.Objects;

// Wir greifen nur Feinde an

Wenn Obj.Side = Seite Dann Ausfahrt;

Obj.Damage(dmg);

Angegriffen:= true;

// Wenn die Verschiebung abgeschlossen ist, entfernen Sie das Symbol

Wenn Gerührt Dann

Icon.IsVisible:= FALSCH;

Der Zug wird wie folgt abgewickelt (siehe „Figurenzug“). Die angeklickte Zelle wird lokalisiert. Befindet sich ein Feind darauf und dieser befindet sich in Reichweite, wird ihm Schaden zugefügt; ist die Figur leer und in Reichweite, bewegt sich die Figur (sofern Hindernisse dies zulassen); ist sie besetzt, aber nicht von einem Feind, wird der Klick ignoriert .

Als sich beide Seiten näherten, handelten die Drachen. Sie funktionieren sehr einfach: Sie wählen den nächsten Nicht-Drachen aus, der sich innerhalb von 7 Feldern um sie befindet, und greifen an. Siehe den Dragon Actions-Code.

Drachenaktionen

// Überprüfe Kacheln innerhalb von 7 Feldern um den Drachen

für i:= Max(0, x - 7) Zu Min(MaxSize, x + 7) Tun

für j:= Max(0, y - 7) Zu Min(MaxSize, y + 7) Tun

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

(Map.Tiles.Objects.Code>1)

// 0 - Hinderniscode, 1 – Drache

Dann beginnen

// Auswählen eines zu verschiebenden Punkts

Wenn x=i Dann Axt:=i

anders wenn x>i Dann Axt:=i+2

anders Axt:= i-2;

Wenn y=j Dann ay:= j

anders wenn y>j Dann ay:= j+2

anders ay:= j-2;

MoveObj(NO, ax, ay);

// Lasst uns angreifen

Map.Tiles.Damage(12);

// Den Teufelskreis durchbrechen: nicht mehr als einen Angriff

// jeder Drache pro Runde

Abschließend muss nur noch überprüft werden, ob mehr als die Hälfte der Obelisken von Truppen einer Seite besetzt sind – und wenn ja, dann brechen Sie das Spiel ab und erklären den Gewinner!


Wir haben also ein Strategiespiel. Zum vollkommenen Glück fehlt jedoch zunächst einmal künstliche Intelligenz, die es ermöglichen wird, dem Spiel einen Einzelspielermodus zu geben (das einfachste Verfahren zur Steuerung von Drachen betrachten wir nicht). Das werden wir das nächste Mal tun. Wir sehen uns in einem Monat!

In zukünftigen Ausgaben

In den folgenden Themen werden wir darüber sprechen:

  • Partikelsysteme zur Anzeige von Rauch, Funken usw.;
  • mit Transparenz arbeiten;
  • dreidimensionale Motoren;
  • KI-Grundlagen;
  • Debuggen des Programms;
  • Erstellen eines Spielplans und eines Skripts,
  • Schreiben eines Designdokuments;
  • Spielbalance;
  • Durchdenken von Spielfiguren und ihren Texten;
  • Arbeiten mit Photoshop- und 3D-Paketen;
  • Animationen;
  • Musik und Sprachausgabe;
  • und vieles mehr.

Es ist durchaus möglich zu lernen, wie man das alles mit eigenen Händen macht. Das werden Sie bald sehen.

Schreib uns…

Für diejenigen, die glauben, dass das Paket um etwas ergänzt werden kann: Vergessen Sie zunächst nicht, dass es keine gibt Endgültige Version Paket, aber nur das, das die in unseren Artikeln beschriebenen Funktionen implementiert. Vielleicht wurden einige Ihrer Ideen bereits umgesetzt und warten darauf, an die Reihe zu kommen (siehe Seitenleiste „In zukünftigen Ausgaben“). Und auf jeden Fall: Wenn Sie uns eine Idee unterbreiten, versuchen Sie zu begründen, warum Ihr Vorschlag für viele Spiele gleichzeitig nützlich ist und nicht nur für Ihr spezielles.

Für selbständiges Arbeiten

Während Sie auf die nächste Ausgabe warten, können Sie an Ihrem eigenen Projekt arbeiten oder versuchen, dieses zu verbessern. Hier einige Ideen für Ihre eigene Umsetzung:

  • Teilen Sie Hindernisobjekte in zerstörbare (Bäume und Büsche) und unzerstörbare (Felsen) ein und stellen Sie sicher, dass Feuerbälle und der Atem des Drachen die Vegetation verbrennen.
  • Erstellen Sie Gruben (braunes Feld) oder ein Feuer, das mehrere Runden lang lodert (rotes Feld) an der Stelle, an der der Feuerangriff ausgelöst wurde.
  • erlauben Sie Schwertkämpfern und Rittern, ihre Nachbarn zu decken, was ihnen +1 auf Verteidigung gibt;
  • Machen Sie die Bewegung der Figuren auf dem Bildschirm reibungslos.

Was wäre, wenn in Echtzeit?

Es ist nicht schwieriger, ein Echtzeit-Strategiespiel zu erstellen, wenn man den Spielern einfach unterschiedliche Eingabemöglichkeiten bietet. Am einfachsten geht das über das Netzwerk – darüber werden wir in einer der kommenden Ausgaben sprechen. Darüber hinaus sind folgende Änderungen erforderlich:

  • kein Feld erforderlich Spielgeschwindigkeit in der Klasse ZUbeliskObject- Verwenden Sie die Geschwindigkeit der Basis-Engine (die Bewegungsgeschwindigkeit über den Bildschirm entspricht der Spielgeschwindigkeit);
  • Ganzzahlberechnung von Entfernungen ist deaktiviert;
  • Der Bewegungscode der Figur wird neu geschrieben, wobei berücksichtigt wird, dass eine Flugbahn um Hindernisse herum gezeichnet werden muss.
  • Die Schaltfläche „Ende des Zuges“ wurde entfernt.

Das ist alles. Versuchen Sie es selbst?

Heutzutage kann man leicht viele Handelsstrategien finden, das einzige Problem ist, dass die meisten davon entweder nicht funktionieren oder nicht effektiv genug sind. In einer solchen Situation ist die Erstellung einer Strategie von Grund auf eine hervorragende Lösung des Problems.

Und obwohl die Erstellung eines Fahrzeugs in jeder spezifischen Situation unterschiedlich sein wird, bleiben die Hauptschritte dieselben. Das heißt, Sie können so etwas wie einen universellen Leitfaden erstellen, indem Sie nacheinander alle Phasen durchlaufen, und am Ende erhalten wir ein vollständig funktionsfähiges System.

Obwohl wir die Möglichkeit in Betracht ziehen, eine Strategie von Grund auf zu erstellen, beginnend mit einer Idee, endend mit der Einführung eines Filters und der endgültigen Entwicklung des Fahrzeugs, bedeutet dies nicht, dass alle vorgefertigten Systeme sofort als offensichtlich wirkungslos verworfen werden sollten . Als Basis kann man mehrere TS nutzen und einfach ein paar Filter hinzufügen, um Fehlsignale auszusortieren.

Hauptphasen bei der Erstellung einer Strategie

Wenn Sie zufällig 5-7 Indikatoren nehmen und versuchen, daraus ein funktionierendes Fahrzeug zu bauen, ist es unwahrscheinlich, dass etwas Nützliches dabei herauskommt. Zuerst müssen Sie die Grundidee der Strategie durchdenken und erst dann mit der Auswahl der Tools fortfahren. Folgende Handlungsabfolge kann vorgeschlagen werden:

  • Wenn das System von Grund auf neu erstellt wird, besteht der erste Schritt darin, an der Idee zu arbeiten. In dieser Phase müssen Sie nur noch entscheiden, wie Ihr Handelsstil aussehen soll, z. B. ob Transaktionen entlang oder gegen den Trend ausgeführt werden sollen, oder ob die Strategie ausschließlich auf den Ausbruch ausgerichtet ist. Wir denken noch nicht über Einzelheiten nach;
  • Nachdem Sie den geeigneten Handelsstil ausgewählt haben, können Sie mit der Ausarbeitung der Details beginnen. Bevor Sie Instrumente auswählen, müssen Sie die funktionierenden Währungspaare und Zeitrahmen, Handelszeiten usw. klar bestimmen;

Wichtig! Bei der Wahl eines Zeitrahmens ist es nicht ratsam, zu klein zu gehen, insbesondere wenn der Händler keine Erfahrung mit der Spekulation auf kleine Zeitintervalle hat. Für Anfänger ist es im Allgemeinen besser, H1-H4 nicht zu unterschreiten; Sie können mehr über die Wahl des optimalen Zeitintervalls lesen.

  • Der nächste Schritt ist die Auswahl geeigneter Instrumente, und hier kann die Fülle der Auswahl für den Händler ein grausamer Scherz sein, da ihm Dutzende von Indikatoren zur Verfügung stehen und er die Möglichkeit hat, Candlestick-, Wellen-, technische und fundamentale Analysen zu verwenden. Aus all dieser Vielfalt müssen Sie mehrere Instrumente auswählen, die am besten zu Ihrem beabsichtigten Handelsstil passen;
  • Eine der Hauptregeln jeder Strategie besteht darin, dass das empfangene Signal durch mehrere Filter bestätigt werden muss, es ist jedoch ratsam, deren Anzahl zu begrenzen. Bei Indikatorstrategien ist es beispielsweise unerwünscht, dass die Anzahl der Indikatoren 3-4 überschreitet, da es sonst zu Verwirrung in den Signalen kommt und wenn Sie planen, mit technischer Analyse zu arbeiten, spielen die Indikatoren eine unterstützende Rolle;
  • Regeln zur Positionsunterstützung werden entwickelt, das Ergebnis sollte ein Aktionsalgorithmus für jedes Szenario sein;
  • Der letzte Schritt besteht darin, das Fahrzeug zunächst auf einem historischen Konto und dann auf einem Demokonto oder noch besser auf einem Echtgeldkonto laufen zu lassen. Das Hauptziel besteht darin, die Durchführbarkeit der Strategie unter realen Bedingungen zu testen, und ein echtes Konto (sogar ein Cent) ermöglicht es Ihnen, die gesamte Bandbreite an Emotionen zu spüren, von Euphorie bis zur Bitterkeit von Verlusten.

Sie können auch dazu raten, sich nicht auf die Komplexität des Fahrzeugs einzulassen. Die Praxis zeigt, dass übermäßige Komplexität keineswegs ein Indikator für Wirksamkeit ist. Wie einfacheres System, desto einfacher ist der Handel.

Was sollte im Fahrzeug enthalten sein?

Eine Strategie zu erstellen ist ein bisschen wie ein Baukasten; man muss nur die richtigen Teile auswählen. Beim Erstellen eines Fahrzeugs können und sollten Sie Folgendes verwenden:

  • Indikatoren. Darüber hinaus sollte man weder ihrer Anzahl noch übermäßiger Komplexität hinterherjagen; selbst bei vollmechanischen Fahrzeugen reichen 3-5 Stück;
  • grafische Muster – bekannte Flaggen, Wimpel, Dreiecke, Kopf und Schultern, doppelte Unter- und Oberteile funktionieren immer noch gut;
  • grafische Konstruktionen;
  • Fibo-Werte;
  • Elemente der Fundamentalanalyse – jetzt ist es schwierig, allein mit Nachrichten Geld zu verdienen, aber es ist notwendig, den Wirtschaftskalender beim Handel zu berücksichtigen. Bringen Sie die Transaktionen zumindest einfach in die Gewinnschwelle, bevor wichtige Statistiken für die USA oder Europa veröffentlicht werden, oder schließen Sie den Gewinn sogar vollständig ab.

Es gibt auch eine Reihe von Techniken, deren Nutzen fraglich ist:

  • Martingale ist zunächst eine unrentable Taktik. Die einzige Erfolgschance besteht darin, dass Sie vor dem Verlust den Einzahlungsbetrag zurückerhalten und etwas verdienen können.

  • Es ist auch unerwünscht, ein Schloss zu verwenden, es sei denn, es ist absolut notwendig; dann ist es ziemlich schwierig, das Schloss zu verlassen;
  • Es ist auch besser, keine Signale von außen zu nutzen. Signale von außen bedeuten beispielsweise einen Vergleich der Anzahl der Verkäufer/Käufer, verschiedene Stimmungsindizes der Mehrheit der Händler usw. Es gibt aber auch eine Reihe von Ressourcen, die Sie anhören können, beispielsweise Autochartist gibt gute Signale basierend auf grafischen Mustern;
  • Auch auf Elemente der Wellenanalyse sollte besser verzichtet werden (zumindest für Anfänger). Zwar gibt es hier Ausnahmen, zum Beispiel basiert der Handel mit Wolfe Waves genau auf der Wellenanalyse, ist aber nicht besonders komplex.

Entwicklung einer einfachen Indikatorstrategie

Nehmen wir an, dass die Grundidee der Strategie darin besteht, ausschließlich in Trendrichtung zu handeln. Darüber hinaus werden Sie nicht im Moment des Aufkommens eines Trends in den Markt einsteigen, was ziemlich riskant ist, sondern nach Abschluss einer kleinen Korrektur.

Die Strategie sollte bei fast jedem Währungspaar funktionieren; dies ist notwendig, da aufgrund des großen Zeitrahmens Signale nicht sehr oft auftreten. Daher wird die Situation anhand von 5-7 Währungspaaren gleichzeitig beurteilt. Was den Zeitrahmen betrifft, ist D1 geeignet; wir gehen davon aus, dass Forex in der Anfangsphase nur eine Ergänzung zur Hauptarbeit ist, deshalb werden wir mit täglichen Kerzen handeln.

Jetzt müssen Sie entscheiden, wie genau der Zeitpunkt des Eintritts bestimmt wird. Es gibt viele Möglichkeiten, einen Trend zu erkennen:

  • visuell – aber durch bloßes Hinsehen können Sie keine klaren Handelsregeln entwickeln;
  • Verwendung eines oder mehrerer gleitender Durchschnitte;
  • Je nach Wert des ADX-Indikators liegt bei mehr als 30 ein starker Trend vor, bei weniger als 20 ist der Markt ruhig;
  • Verwendung grafischer Konstruktionen;
  • Mit Bollinger-Bändern können Sie die Stärke eines Trends anhand des Abstands zwischen der oberen und unteren Grenze des Kanals beurteilen.

Im Allgemeinen gibt es viele Möglichkeiten, aber da die Strategie so einfach wie möglich sein muss, konzentrieren wir uns auf gleitende Durchschnitte. Oder besser gesagt, bei einem MA beurteilen wir die Richtung des Trends anhand der Position des Preises im Verhältnis dazu. Sie können mit Zeiträumen beginnen, die den Preis über einen gesamten Zeitraum (Woche, Monat, Quartal usw.) mitteln. Beispiel: 20 ergibt den Durchschnitt des Preises über den letzten Monat. Am schwierigsten ist es, den passenden MA-Zeitraum auszuwählen, aber hier müssen Sie durch Ausprobieren vorgehen.

Die Hauptidee des Handels wird folgende sein: Wir warten darauf, dass die Trendbewegung auftritt, dann folgt innerhalb eines Tages eine Korrektur, nach deren Ende ein Geschäft abgeschlossen wird. Stellt man das alles in Form klarer Regeln dar, dann sieht der Handlungsalgorithmus so aus (am Beispiel von Käufen):

  • Zuerst überprüfen wir die Preisposition relativ zum MA. Der Preis sollte über der Linie liegen.
  • Als nächstes müssen wir eine Trendbewegung finden, wir brauchen eine Kerze mit einem großen Körper und kleinen Schatten (es ist ratsam, dass der Wert des Schattens 10-15 % der Größe des Kerzenkörpers nicht überschreitet);
  • Darauf sollte eine Kerze mit einer kleinen Tagesspanne (Abstand vom Hoch zum Schluss) folgen. Der Schlusskurs sollte nicht das Niveau von 50 % des Vortages erreichen – an diesem Tag erfolgt die Preiskorrektur.

In diesem Fall kann die Korrektur nach zwei Szenarien erfolgen:

  • Wenn sich eine Kerze mit einem langen Schatten darunter bildet, können Sie am Ende des Tages sofort einen Handel eröffnen. Diese Form der Kerze zeigt an, dass die Korrektur bereits abgeschlossen ist;
  • Eine mögliche Option ist, wenn die Korrekturkerze bei einem Minimum schließt, d. h. der Rollback ist noch nicht abgeschlossen, in diesem Fall müssen Sie warten, bis die nächste Kerze schließt; wenn sie weiß ist, können Sie eine Long-Position eröffnen.

Um die Position aufrechtzuerhalten und Schutzaufträge zu erfüllen, sollte der Stop-Loss mit einem großen Körper mindestens über die Mitte der Kerze hinaus platziert werden. Um das Zielniveau zu erreichen, reicht es aus, den Wert derselben Kerze vom Kaufniveau beiseite zu legen; Sie können einen Trailing Stop verwenden.

Die Regeln der Strategie stehen fest, es bleibt nur noch, sie in der Praxis zu testen. Die Praxis zeigt, dass selbst ein so einfacher Algorithmus mehr als die Hälfte der profitablen Trades produziert (und wenn man den Trade frühzeitig auf Null setzt, sinkt die Wahrscheinlichkeit eines Verlusts).

Einstieg am Anfang des Trends

Der oben vorgeschlagene TS verfehlt einen Teil der Trendbewegung, benötigt aber nicht viel Zeit für die Marktanalyse. Wenn es möglich ist, das Verhalten des Tagespreises zu überwachen, können Sie versuchen, den Trend gleich zu Beginn seiner Entstehung zu nutzen. Die Hauptidee der Strategie besteht also darin, in den Markt einzusteigen, nachdem der Preis beginnt, den horizontalen Kanal zu verlassen.

Und hier ist es sehr wichtig, rechtzeitig, gleich zu Beginn des Trends, ein zuverlässiges Signal zu erhalten. Auch hier können gleitende Durchschnitte Abhilfe schaffen, allerdings werden sie etwas anders eingesetzt als in der vorherigen Strategie. Sie können mehrere MAs mit unterschiedlichen Perioden nehmen und die Entstehung eines Trends anhand ihrer relativen Lage zueinander beurteilen.

Dies ist kein revolutionärer Ansatz; Bill Williams verwendete etwas Ähnliches in seinem berühmten Alligator. Daher kann dieser Indikator sogar als Grundlage für den TS herangezogen werden.

Wenn wir Alligator mit Standardeinstellungen zu H1 hinzufügen, sehen wir, dass es viele falsche Signale gibt; unsere Aufgabe ist es, sie auszusortieren. Zu diesem Zweck betreten wir den Markt mit einer ausstehenden Order und bestimmen die Höhe der Platzierung mithilfe von Fraktalen.

Im Ergebnis sieht der Arbeitsablauf wie folgt aus (am Beispiel Einkäufe):

  • Wir suchen nach einem flachen Bereich auf der Karte (alle Alligatorlinien sind chaotisch miteinander verflochten);
  • Als nächstes benötigen Sie eine fraktale Kerze (und diese sollte sich über den Linien befinden, ohne sie auch nur mit dem unteren Schatten zu berühren);
  • eine Kauf-Stopp-Order wird knapp über ihrem Maximum platziert und eine Schutzorder wird hinter der unteren Grenze der Konsolidierungszone platziert;
  • TP ist entweder fest (50–70 Pence) oder es wird ein Trailing Stop verwendet. Im Allgemeinen ist es ziemlich schwierig, die Stärke einer Trendbewegung vorherzusagen, daher ist es besser, einen Trailing Stop als einen festen TP zu verwenden oder das Zielniveau mithilfe derselben technischen Analyse zu bestimmen.

In diesem Beispiel geht es nicht darum, eine Strategie von Grund auf zu entwickeln, sondern vielmehr um eine leichte Anpassung einer bereits bekannten Strategie an den modernen Markt.

Beispiel eines einfachen kombinierten Systems

Die Idee ist immer noch dieselbe – Eintrag am Ende der Korrektur, aber wir werden dieses Problem auf andere Weise lösen. Das Ziel bleibt dasselbe – den Zeitpunkt des Abschlusses der Korrektur zu bestimmen und in die Trendrichtung einzusteigen. Wenn wir jedoch früher den gleitenden Durchschnitt verwendet haben, werden wir jetzt die Fibo-Niveaus und den Oszillator verwenden, um den Abschluss des Rollbacks zu bestimmen.

Uns interessiert eine ausgeprägte Trendbewegung, diese lässt sich auch visuell feststellen. Danach müssen Sie nur noch die Fibo-Werte entsprechend strecken. Dies ist notwendig, um die potenziellen Werte für den Abschluss der Korrektur zu bestimmen. Das bedeutendste Korrekturniveau liegt bei 38,2 %, es ist erlaubt, bei Rebounds von 50 % und 61,8 % zu handeln.

Aber die Tatsache, dass der Preis das Fibo-Niveau berührt, reicht nicht aus; es bedarf einer Bestätigung. Stochastic kann diese Aufgabe recht gut bewältigen (Sie können versuchen, RSI für denselben Zweck zu verwenden). Beispielsweise muss für eine Kauftransaktion der Preis nahe am Korrekturniveau liegen und die Stochastik muss sich zu diesem Zeitpunkt im überverkauften Bereich befinden.

Nachdem der Preis das Niveau erreicht hat, warten wir, bis der Stochastic die überverkaufte Zone verlässt und kauft. Der Stop kann jenseits des nächsten Korrekturniveaus platziert werden, und der TP kann mindestens auf dem aktuellen Hoch vor Beginn des Pullbacks platziert werden.

Fibo-Pegel und ein Oszillator sind lediglich das Minimum, das zum Empfang eines Signals erforderlich ist. Bei Bedarf können Sie das System durch die Einführung zusätzlicher Filter verkomplizieren.

Strategien basierend auf technischer Analyse

Wenn die technische Analyse in reiner Form zum Einsatz kommt, wird die Aufgabe etwas einfacher, es ist nicht mehr notwendig, ein Fahrzeug von Grund auf zu entwickeln. Es gibt eine Reihe von Techniken und Werkzeugen, deren Wirksamkeit im Laufe der Jahre getestet wurde, und der Händler kann nur die geeigneten auswählen und sie im Bauwesen einsetzen.
Grundsätzlich reicht es für einen erfolgreichen Handel:

  • Trendlinien – wir bauen sie auf unterschiedlichen Zeitrahmen auf, beginnend mit der höchsten Linie und allmählich absteigend zur Arbeitslinie;
  • Fibonacci-Niveaus sollten auf signifikante Preisbewegungen in der Geschichte ausgedehnt werden. Von zentraler Bedeutung sind die Korrekturwerte 38,2, 50 und 61,8 %; die Praxis zeigt, dass die Korrektur am häufigsten bei diesen Werten endet;
  • MT4 implementiert auch eine Reihe anderer technischer Analysetools, zum Beispiel Andrews Pitchforks, eine Reihe von Gann-Tools, verschiedene Arten von Kanälen usw.

Aber für eine ziemlich genaue Prognose reichen Fibo-Niveaus und Trendlinien aus; Bereiche mit Konzentrationen von Niveaus und Linien fungieren normalerweise als Unterstützung/Widerstand. Der Handel kann sowohl für einen Ausbruch als auch für eine Erholung von Niveaus und Linien durchgeführt werden.

Als zusätzliche Filter können Sie Candlestick-Muster und eine Art Indikator hinzufügen, um nach Divergenzen zu suchen (derselbe Stochastic oder MACD). Erfahren Sie mehr über den Einsatz technischer Analysen.

Filter für Handelssysteme

Jedes Handelsinstrument erzeugt viele Signale und einige davon sind unrentabel, selbst wenn die Idee funktioniert und der Handel im Allgemeinen profitabel ist. Nachdem die Systemregeln erstellt wurden, können Sie eine Reihe universeller Filter verwenden, die dazu beitragen, das Verhältnis von profitablen/unrentablen Transaktionen zu verbessern.

Es gibt eine Reihe von Filtern, die für fast jede Strategie geeignet sind:

  • Situation auf höheren Zeitrahmen. Wenn beispielsweise die Strategie auf H1 nach einer mechanischen Strategie ausgeführt wird, dann wäre es nicht verkehrt, zu betrachten, was auf H4 und D1 passiert;
  • Durchschnittliche Tagesspanne, d. h. die Entfernung, die der Preis durchschnittlich pro Tag zurücklegt; beim Intraday-Handel hilft dies dabei, eine Reihe von Signalen zu filtern. Stellen wir uns vor, dass sich der Preis tagsüber im Durchschnitt um 100-120 Pips bewegt, wenn der Preis an einem der Tage am Abend bereits 90-100 Pips in eine Richtung überschritten hat und der TS ein Signal zum Markteintritt gibt Wenn der Verkehr in die gleiche Richtung fährt, ist es sinnvoll, ihn zu ignorieren. Laut Statistiken ist es unwahrscheinlich, dass der Verkehr an diesem Tag anhält.

Wichtig! Die Einhaltung dieser Regel führt dazu, dass einige profitable Trades verpasst werden, aber das Verhältnis von profitablen/verlustbringenden Trades wird steigen.

  • Auch die Anzahl der Kerzen nach der Signalbildung spielt eine Rolle; es gibt sogar einen Filter von 5 Kerzen, auf den wir näher eingehen werden.

Wenn der TS ein Signal gibt, sollte sich die Situation im Idealfall fast unmittelbar nach Abschluss der Transaktion (d. h. bei den nächsten 1-3 Kerzen) zu unseren Gunsten entwickeln. Geschieht dies nicht, werden die Faktoren, die zum Zeitpunkt des Markteintritts des Händlers von Bedeutung waren, umso weniger Einfluss auf den Markt haben, je mehr Zeit seit dem Abschluss der Transaktion vergangen ist. Ihr Einfluss schwindet mit der Zeit.

Als Kriterium können Sie 5 Kerzen nehmen; wenn sich der Preis nach Abschluss eines Geschäfts für 5 Kerzen nicht in eine profitable Richtung bewegt hat, ist es besser, das Geschäft manuell abzuschließen. Dies bedeutet ein Szenario, in dem das Diagramm an Ort und Stelle bleibt, der Preis jedoch auf die unrentable Seite tendiert, dann wird dieser Filter nicht angewendet.

Diese Bedingung gilt für fast alle Zeitrahmen (mit Ausnahme von m1-m5). Natürlich besteht immer noch die Möglichkeit, dass sich der Preis, nachdem er sich um eine Marke bewegt hat, in die richtige Richtung bewegt, aber unsere Wahl ist Stabilität. Es ist besser, ein paar profitable Trades zu opfern, aber 3-5 unrentable zu vermeiden.

Zusammenfassend

Ohne ein Handelssystem zu arbeiten ist wie der Tod, daran sollte sich jeder Händler erinnern. In diesem Fall ist der Verlust der Kaution nur eine Frage der Zeit.

Die Auswahl eines geeigneten Fahrzeugs ist nicht schwierig, außerdem finden Sie gut funktionierende Systeme im öffentlichen Bereich. Sie können sich auch um die Erstellung einer eigenen Strategie kümmern, zumal hierfür keine Kenntnisse in Programmiersprachen erforderlich sind. Sie müssen lediglich eine Vorstellung und zumindest Grundkenntnisse darüber haben, wie der Markt funktioniert und welche Indikatoren für welche Zwecke verwendet werden.

Der Prozess selbst ähnelt dem Zusammenbau eines Baukastens: Zuerst legen wir ein Problem fest und wählen dann einfach die notwendigen Werkzeuge aus, um es zu lösen. Nach Überprüfung des Verlaufs können Sie mit dem TS-Test auf einem Demo- oder Cent-Konto fortfahren.


Spitze