Erster Versuch eines Strategiespiels

Spiele, Demos, Grafikzeug und anderes unterhaltendes.
ahab
Beiträge: 9
Registriert: 04.11.2008 22:39

Erster Versuch eines Strategiespiels

Beitrag von ahab »

Hallo liebe PB-Progger,

ich möchte euch meinen ersten Versuch in der Spieleprogrammierung vorstellen: Noch handelt es sich um kein Spiel, sondern nur um einen Ansatz. Es soll mal ein Multiplayer-Echtzeitstrategiespiel nach Art von Sudden Strike (also ohne Basisbau) werden. Bevor ich jedoch weiter mache, möchte ich mir von allen, die Lust haben mal einen Blick auf den Code zu werfen, ein wenig Rat holen. Dies ist mein erstes Spiel überhaupt und auch das erste mal, dass ich die Sceen-Library benutze. Deshalb wäre ich für Anregungen was man besser machen könnte sehr dankbar.

Was bereits umgesetzt ist:
- Beliebige Karten können geladen und befahren werden (zur Zeit gibt es aber nur eine :) )
- Verschiedene Auflösung werden durch Scrolling unterstützt
- Wegfindung mit dem A*-Algorithmus (meiner Meinung ist mir hier eine sehr gute Implementation gelunden, über Kommentare würde ich mich freuen)
- Beliebige Einheitentypen können einfach hinzugefügt werden.

Was noch fehlt:
- Einheiten erkennen sich gegenseitig nicht als Hindernis (hierfür habe ich aber schon eine sehr schöne Lösung)
- Kampfsystem fehlt
- Probleme bei der Synchronisierung der Positionen der Einheiten im Netzwerk, siehe nettest.exe im Quellcode-Paket (hier wären Tipps super!)
- Auswahl mehrerer Einheiten

Außerdem stürzt die Anwendung bei Benutzung von ALT+TAB ab. Alle meine Versuche mit IsScreenActive( ) sind fehlgeschlagen, da sich der Screen nicht mehr maximieren ließ!?!

Lange Rede kurzer Sinn, schaut es euch doch einfach mal an. Es gibt übrigens noch keinen Namen für das Spiel, das Projekt heißt bisher schlicht "Panzer".

- exe: http://tim.blessuren.de/panzer.zip
- Quellcode: http://tim.blessuren.de/prog/panzer14.pb.html
- Quellcode inkl. Grafiken: http://tim.blessuren.de/prog/panzer_src.zip

Und hier noch ein Sceenshot...
<img src="http://tim.blessuren.de/screenshot.png">
Benutzeravatar
KeyKon
Beiträge: 1412
Registriert: 10.09.2004 20:51
Computerausstattung: Laptop: i5 2,8 Ghz, 16GB DDR3 RAM, GeForce 555GT 2GB VRAM
PC: i7 4,3 Ghz, 32GB DDR3 RAM, GeForce 680 GTX 4GB VRAM
Win10 x64 Home/Prof
PB 5.30 (64bit)
Wohnort: Ansbach
Kontaktdaten:

Beitrag von KeyKon »

Also ich finde die Umsetzung schon sehr gelungen, dafür das es dein erstes Projekt in dem Bereich ist, das Pathfinding funktioniert wirklich klassen!
Grafisch is da sicher noch mehr drin (Jetz hauptsächlich auf die Map bezogen, aber ich denke das du das so gelöst hast das die map eh nur ein Bild mit Kollision map is und du hier einfach noch nich viel zeit ins bild gesteckt hast...)
Eine andere Sache wäre vll noch als anregung die Panzer nich mit Sprites sondern mit Sprite3D anzuzeigen, so kannst du sie in den Kurven sanft drehen, ich habe da schonmal was kleines ganz in der Art geschrieben (Link) da kann ich dir wenn du willst ein paar Tipps geben wenns dir gefällt...

EDIT:
Ich hab mir den Code jetz mal angeguggt und hab einige Tipps für dich:
- Ich weis nicht ob es auf lange Zeit so gut ist alle Grafiken in die Exe zu packen, das ist zwar dann schön kompackt aber (meiner Meinung) wird der Code dadurch ziemlich undurchsichtig, eine tolle Idee wäre zum Beispiel ein kleines Format zu basteln in dem die einzelnen Einheiten mit allen Bildern und einer Datei mit den Daten zum jeweiligen Fahrzeug zusammengepackt werden, dadurch wäre das auch sehr Modular und bei entsprechender umsetzung ohne Neu-Compilieren des Codes erweiterbar...
- Da dein Spiel ohnehin für alle Auflösungen funktioniert solltest du im Startbildschirm einfach eine Liste aller am PC möglichen Auflösungen zur Auswahl geben (mit ExamineScreenModes())
(\/) (°,,,°) (\/)
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

> solltest du im Startbildschirm einfach eine Liste aller am PC möglichen Auflösungen zur Auswahl geben (mit ExamineScreenModes())

das anständig zu machen ist allerdings auch wesentlich mehr aufwand als man denkt.
ein wirklich gutes universelles include dafür ist schon ein eigenständiges kleinprojekt.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
KeyKon
Beiträge: 1412
Registriert: 10.09.2004 20:51
Computerausstattung: Laptop: i5 2,8 Ghz, 16GB DDR3 RAM, GeForce 555GT 2GB VRAM
PC: i7 4,3 Ghz, 32GB DDR3 RAM, GeForce 680 GTX 4GB VRAM
Win10 x64 Home/Prof
PB 5.30 (64bit)
Wohnort: Ansbach
Kontaktdaten:

Beitrag von KeyKon »

Wiso?
(\/) (°,,,°) (\/)
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

weil du je nach Monitor/Grafikkarten-Kombination zwölf bis zweihundert(!) datensätze zurückbekommst,
die keine genormte Ordnung besitzen,
jede Generation jedes Herstellers sortiert die Modes anders in die Liste.

außerdem gibt es keinen verläßlichen indikator, um festzustellen, ob die ausgabe widescreen ist oder nicht
- du kannst nur den momentanen desktop vermessen und daraus schlüsse ziehen.
wenn du einen 4:3 oder 5:4 screen auf einem Wide-Monitor öffnest,
kann er das zwar anzeigen, aber es wird verzerrt.
die 4:3 modes tauchen in der liste eines wide-monitors genauso auf,
wie die wide-modes in der liste eines 4:3 CRTs auftauchen.

also das wär schon ein bissele arbeit, da eine vernünftige routine zu stricken,
der aus dem Wust von Datensätzen eine handvoll sinnvoll aussortiert und dich auswählen läßt.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
KeyKon
Beiträge: 1412
Registriert: 10.09.2004 20:51
Computerausstattung: Laptop: i5 2,8 Ghz, 16GB DDR3 RAM, GeForce 555GT 2GB VRAM
PC: i7 4,3 Ghz, 32GB DDR3 RAM, GeForce 680 GTX 4GB VRAM
Win10 x64 Home/Prof
PB 5.30 (64bit)
Wohnort: Ansbach
Kontaktdaten:

Beitrag von KeyKon »

So aufwändig hab ich das ja nich gemeint^^ Ich will schlicht die Möglichkeit haben jede mögliche Auflösung auszuwählen. Welche die Richtige ist sollte schon jeder selbst wissen (Ich kenne z.B. kein Game das Auflösungen aussondert die nich zum Format des Desktops/Monitors passen)

Ich Verwende immer das hier, es Zeigt nur 32 Bit Auflösungen an und irgnoriert die Framerate, außerdem wird das ganze nach Breite sortiert:

Code: Alles auswählen

InitSprite()

Structure smodes
  width.w
  height.w
EndStructure
NewList ScreenModes.smodes()

Debug ExamineScreenModes()

While NextScreenMode()
  If ScreenModeDepth() = 32
    double = 0
    ForEach ScreenModes()
      If ScreenModes()\width = ScreenModeWidth() And ScreenModes()\height = ScreenModeHeight()
        double = 1
        Break
      EndIf
    Next
    If double = 0
      AddElement(ScreenModes())
       ScreenModes()\width = ScreenModeWidth()
       ScreenModes()\height = ScreenModeHeight()
    EndIf
  EndIf
Wend

SortStructuredList(ScreenModes(),#PB_Sort_Ascending,OffsetOf(smodes\width),#PB_Sort_Word)

ForEach ScreenModes()
  Debug Str(ScreenModes()\width)+" - "+Str(ScreenModes()\height)
Next

(\/) (°,,,°) (\/)
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

klar, man kann abstriche machen... ich meine auch nur, dass sowas nicht wirklich nötig ist für's erste oder zweite projekt.


deine routine hat aber einen kleinen aber eklatanten schönheitsfehler:
was machst du, wenn das prog auf einem rechner laufen soll,
der keine 32bit anzeige hat, wie zum beispiel einige ältere laptops mit unter 1GHz?
bei meinem vadder funktioniert NIX mit 32bit, da muss man 16bit wählen.
hab ich gemerkt, als mein resolution-changer dort erst gestreikt hatte.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
THEEX
Beiträge: 804
Registriert: 07.09.2004 03:13

Beitrag von THEEX »

Hmmm, wie wärs mit einer Kurzanleitung?
Eine Art Query-Planner soll die Ausführung von Map/Reduce-Funktionen in Hadoop stark beschleunigen.
Benutzeravatar
KeyKon
Beiträge: 1412
Registriert: 10.09.2004 20:51
Computerausstattung: Laptop: i5 2,8 Ghz, 16GB DDR3 RAM, GeForce 555GT 2GB VRAM
PC: i7 4,3 Ghz, 32GB DDR3 RAM, GeForce 680 GTX 4GB VRAM
Win10 x64 Home/Prof
PB 5.30 (64bit)
Wohnort: Ansbach
Kontaktdaten:

Beitrag von KeyKon »

Kaeru Gaman hat geschrieben:deine routine hat aber einen kleinen aber eklatanten schönheitsfehler:
Zugegeben an sowas ist hier nicht gedacht (ich denke aber das sowas inzwischen doch sehr selten geworden ist)
Wäre aber auch kein Problem das überprüfen auf 32 bit einfach weg zu lassen...
(\/) (°,,,°) (\/)
Benutzeravatar
dllfreak2001
Beiträge: 2925
Registriert: 07.09.2004 23:44
Wohnort: Bayern

Beitrag von dllfreak2001 »

genial, die optik hat so auch irgendwie etwas... Sieht auf jedenfall nicht schlecht aus.

Ich finde man sollte bewusst derart alte Rechner ausgrenzen, irgendwann ist auch Schluss. Spiele machen auf solchen Maschinen sowieso nicht wirklich Spass und sind meist nicht dafür gedacht.
I´a dllfreak2001
Antworten