Entwickler-Ecke

Open Source Projekte - Scorch/Artillery Clone (ursprünglich von battledevil)


P-A-L - Di 24.03.09 12:56
Titel: Scorch/Artillery Clone (ursprünglich von battledevil)
Hallo zusammen,

vor einiger Zeit hatte battledevil unter http://www.delphi-library.de/topic_Spieletutorial+fuer+Einsteiger++Artillery_51745.html ein wunderbares Tutorial für einen Artillery/Scorch-Clone gepostet.

Der dort gezeigte Quelltext weist jedoch ein paar Bugs auf:
- Die Landschaft wird vom "gepimpten" Himmel überzeichnet
- Es wird nur das Rohr des jeweils aktiven Panzers gezeichnet

Ich habe diese korrigiert und ein paar Verbesserungen eingefügt:
- Die Panzerung der Panzer wird auf der Seite angezeigt, auf der sich diese befinden
- Der Winkel des Rohres wird "in Richtung des Gegners" angezeigt
- Ein Log schreibt wichtige Ereignisse mit
- Der Schaden berechnet sich nach der Entfernung zur Explosion

Ich möchte das Programm gern mit anderen Nutzern Teilen, daher poste ich es hier. Ich hoffe, battledevil hat nichts dagegen, ihm gebührt schließlich das Copyright. :)

Wenn ihr den (auskommentierten) Himmel irgendwie funktionstüchtig machen könnt oder sonst Vorschläge zur Verbesserung habt, her damit!

Grüße

P-A-L

EDIT:

Neue Version 1.1 beinhaltet einige Änderungen, die meine "Tester" angeregt haben... :)
- Rundenzählung (wichtig für Log)
- Fallschaden (wenn Panzer herunterfällt)
- Schaden durch direkte Treffer stark erhöht
- Log ist jetzt scrollbar
- Schnellere Schussdarstellung
- Panzerung wird auch als "Lebensbalken" angezeigt
- Wind wird in Pfeilform dargestellt
- Alle Labels mit Fettdruck, um Schrift besser Lesen zu können

Weiterhin gewünscht werden Vorschläge, wie folgende "Features" implementiert werden könnten:
- Farblich abgestufter Himmel
- Herunterfallen der Teile der Landschaft, welche "in der Luft hängen"

EDIT2:

Neue Version 1.2 behebt einen Bug und fügt etwas Funktionalität hinzu:
- Bug in Fallschadenberechnung (Höhenunterschied wurd immer zum roten Panzer berechnet, auch wenn Blau fiel) behoben
- Vollständig über Tastatur spielbar (leider nicht mehr mit der Maus)
- 'A'-Taste schaltet Cheat-Modus an/aus (Fadenkreuz zeigt Einschlagpunkt bei gegenwärtigen Einstellungen)


P-A-L - Di 24.03.09 21:47

Neue Version hochgeladen...

Dateien und Changelog siehe erster Post! :)

Hat irgendjemand eine Idee, wie man die Teile der Landschaft, welche "in der Luft hängen", herunterfallen lassen könnte?


Xentar - Di 24.03.09 21:59

Sieht doch schon ganz gut aus.

Einige Vorschläge:
- Bitte häng im ersten Post einen Screenshot mit an
- "Form1" als Titel ist unschön ;)
- Formular sollte meiner Meinung nach in der Mitte des Bildschirms starten (TForm.Position auf poScreenCenter setzen)
- Ich fänds toll, wenn man das Spiel rein mit der Tastatur steuern könnte. Also z.B. mit den Cursortasten den Winkel + Geschwindigkeit einstellen, mit Leertaste schießen oder so.
- Eine KI oder Multiplayer über Netzwerk wär toll :D In dem Zusammenhang vielleicht auch direkt mehr Spieler.
- Vielleicht auch verschiedene Waffen, mit unterschiedlicher Feuerkraft

Und noch zu deinem Code:
- Hat das einen Grund, dass du immer 4 mal einrückst? "Standard" sind 2.


P-A-L - Di 24.03.09 22:39

user profile iconXentar hat folgendes geschrieben Zum zitierten Posting springen:
Sieht doch schon ganz gut aus.

Einige Vorschläge:
- Bitte häng im ersten Post einen Screenshot mit an
- "Form1" als Titel ist unschön ;)
- Formular sollte meiner Meinung nach in der Mitte des Bildschirms starten (TForm.Position auf poScreenCenter setzen)
- Ich fänds toll, wenn man das Spiel rein mit der Tastatur steuern könnte. Also z.B. mit den Cursortasten den Winkel + Geschwindigkeit einstellen, mit Leertaste schießen oder so.
- Eine KI oder Multiplayer über Netzwerk wär toll :D In dem Zusammenhang vielleicht auch direkt mehr Spieler.
- Vielleicht auch verschiedene Waffen, mit unterschiedlicher Feuerkraft

Und noch zu deinem Code:
- Hat das einen Grund, dass du immer 4 mal einrückst? "Standard" sind 2.


Vielen Dank für Deine Anregungen!

- Das mit dem Titel und dem Startort des Formulars ist mir auch aufgefallen, aber das hab ich dann im Eifer des Gefechts vergessen zu ändern... Ist nun geändert und zusammen mit einem Screenshot im ersten Post! Danke!!!
- Tastatursteuerung... Hmm, das ist natürlich eine Idee! Danke!
- KI ist schwierig, da die ja theoretisch den optimalen Schuss berechnen könnte und so immer träfe. Da könnte man mit Wahrscheinlichkeiten etwas reißen... Mal sehen. Multiplayer über Netzwerk - ich habe null Ahnung von Socket-Programmierung, hab aber schon Tutorials für Chats hier gesehen, daher ist das wohl prinzipiell kein Problem... Das ist dann aber sicher was für später...
- Mehr Spieler... Darüber hatte ich auch schon nachgedacht. Das zerstört natürlich das ganze derzeitige Interface-Konzept. Aber mehr Spaß macht das schon... Ich denke, das werde ich mal testen!
- Mehr Waffen - die Idee ist gut, aber was sollen die Unterschiede sein, so dass das auch "balanced" ist? Oder meinst du kaufbare Einweg-Superwaffen wie taktische Nuklearsprengköpfe (Explosionsradius*3) oder Streubomben (3 Geschosse statt einem)?
- Einrückungen: Jaaa, die waren schon in dem Quelltext des Originals von battledevil... Da hab ich sie durch copy-paste mitgeschleppt. War mir dann zu aufwändig die alle manuell zu stutzen...

Mein Hauptanliegen zur Zeit ist die Frage, warum der Himmel in der ursprünglichen Fassung den ganzen Bildschirm übermalt hatte... Ich hab das für meine Version einfach auskommentiert, aber das Ergebnis ist etwas langweilig...


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
procedure TForm1.SpielfeldZeichnen();
var i:integer;
begin
//    with Buffer.Canvas do
//    begin
//        for i:=1 to 600 do
//        begin
//            Pen.Color:=RGB(255 - i div 3, 255 - i div 3, 255);
//            MoveTo(0,i);
//            LineTo(800,i);
//        end;
//    end;

    Buffer.Canvas.Draw(0,0,Landschaft);

    PanzerZeichnen('rot');
    Buffer.Canvas.Draw(PanzerRot.X-7,PanzerRot.Y-3,Panzer);

    Panzerzeichnen('blau');
    Buffer.Canvas.Draw(PanzerBlau.X-7,PanzerBlau.Y-3,Panzer);

    Image1.Picture.Bitmap:=Buffer;  // Buffer-Bitmap in das Image kopieren

    ZeichneKanonen;
end;


Xentar - Di 24.03.09 22:58

Hab grad nochmal den Quellcode durchgeschaut. So auf Anhieb kann ich da auch nichts finden.

Aber noch ne Frage :D Kommst du aus der C Welt? Weil bei Prozeduraufrufen ohne Parameter die leeren Klammern mit dabei stehen ;)

Delphi-Quelltext
1:
procedure TForm1.SpielfeldZeichnen();                    


Zu den Waffen:
Hm.. kA wie man das lösen könnte.
Hatte zu DOS Zeiten mal ein Spiel.. glaub, das hieß einfach nur "Bomb"? Jedenfalls hat man da für jeden abgeschossenen Gegner Geld bekommen, wofür man sich dann neue Waffen kaufen konnte. Gabs dann so Sachen mit größerer Sprengkraft, aber auch nen Laser, der durch den Berg schießen konnte usw.
Andere Möglichkeit wäre vielleicht, dass alle Spieler gleich viele verschiedene Waffen bekommen - und man die am "klügsten" einsetzen muss?


P-A-L - Di 24.03.09 23:02

user profile iconXentar hat folgendes geschrieben Zum zitierten Posting springen:
Aber noch ne Frage :D Kommst du aus der C Welt? Weil bei Prozeduraufrufen ohne Parameter die leeren Klammern mit dabei stehen ;)

Delphi-Quelltext
1:
procedure TForm1.SpielfeldZeichnen();                    


Nein, bin eingefleischter TurboPascaler... :D Die Klammern standen schon im Original, da habe ich einfach den Stil beibehalten. Die machen ja auch nix böses, und irgendwie sieht's für mich auch besser aus, da sieht man gleich dass es eine Methode ist... :)

Hab jetzt einen Screenshot und einige deiner Anregungen in den ersten Post eingefügt.


P-A-L - Mi 25.03.09 18:29

Neue Version hochgeladen.

Das Spiel wird jetzt ausschließlich über die Tastatur gespielt, Pfeil_links/rechts ändert Winkel, Pfeil_oben/unten die Geschwindigkeit. Mit Leertaste wird der Schuss abgefeuert. 'A' schaltet den Cheat-Modus an/aus, in welchem der aktive Spieler den Zielpunkt unter den gegenwärtigen Einstellungen angezeigt bekommt. :)

Ich denke ernsthaft über eine KI nach... Wie würdet ihr das Lösen? Optimale Einstellungen finden, dann je nach Schwierigkeit zufällig davon abweichen? Oder Testschuss, Prüfen, merken, nächstes mal mehr/weniger usw.? Was macht die KI, wenn es keine Schussposition gibt (Berg ist im Weg, Wind ist falsch etc.)? Ideen?


Boldar - Mi 25.03.09 18:39

Also ich kenne sowas mit Burgen statt Panzern. Da konnte man dann z.B. bis zu drei Kanonen kaufen, Eine Windfahne kaufen, damit die Windstaärke angezeigt wird, ein Munitionsdepot kaufen (Mehr geschwindigkeit), was dann aber auch explodieren konnte, und Öltürme bauen, die mehr Geld bringen.


P-A-L - Mi 25.03.09 18:49

user profile iconBoldar hat folgendes geschrieben Zum zitierten Posting springen:
Also ich kenne sowas mit Burgen statt Panzern. Da konnte man dann z.B. bis zu drei Kanonen kaufen, Eine Windfahne kaufen, damit die Windstaärke angezeigt wird, ein Munitionsdepot kaufen (Mehr geschwindigkeit), was dann aber auch explodieren konnte, und Öltürme bauen, die mehr Geld bringen.


Ballerburg? :D

Ich habe als Kind immer Scorched Earth gespielt, das war mit bis zu zehn Panzern und jeder Menge Waffen. Ich bin dann über das Tutorial von battledevil gestolpert und hab mich riesig gefreut, nur leider funktionierte sein Quelltext bei mir nicht richtig. Irgendwie hab ich mich dann in die Aufgabe verbissen, aus dem alten Rohbau ein funkelndes neues Spiel zu machen! :) Mal sehen, wie weit ich komme.

Wenn jemand noch Ideen hat (vor allem bzgl. des Himmels und der herabfallenden Landschaft), bitte postet sie!!! Müssen keine ausgefeilten Quelltexte sein, ich brauch nur Ideen!


elundril - Mi 25.03.09 19:07

ich war mal dabei eine KI für das spiel zu schreiben, vl. find ich den quelltext irgendwo dann kann ich ihn dir posten. ;-)

lg elundril


P-A-L - Do 26.03.09 18:57

user profile iconelundril hat folgendes geschrieben Zum zitierten Posting springen:
ich war mal dabei eine KI für das spiel zu schreiben, vl. find ich den quelltext irgendwo dann kann ich ihn dir posten. ;-)

lg elundril


Gern, immer her damit! :)

Wenn du sie nicht findest, weißt du noch nach welchen Prinzipien sie gearbeitet hat?