Entwickler-Ecke

Freeware Projekte - Weltraum => ein 2D Weltraumschlachtspiel


Delphianer23 - Fr 07.03.03 20:19
Titel: Weltraum => ein 2D Weltraumschlachtspiel
Ein 2D Ballerspiel. Es gibt 15 verschiedene Level und
4 Schwierigkeitsstufen. Da ich keine Lust hatte so lange
daran zu proggen, hab ich alle halbfertigen Features
rausgeworfen.

Im Moment arbeite ich gerade daran das Programm in
erweiterter Form in opengl zu übersetzen. evtl auch 3d ...

über http://www.board.envision.de.ms/
oder http://www.envision-studios.de/
kann man noch einiges mehr über "Envision Studios" und
das Spiel erfahren. (evtl. ist unser altes Forum noch nicht übertragen)

Direkter Downloadlink: (600 kb)
http://www.8ung.at/harth/weltraum.zip

Es kann ganz leicht die Geschwindigkeit, Beschleunigung, Schussgeschwindikeit, SChussanzahl usw. der Gegner und
des eigenen Fliegers geändert werden.

Ich hab das SPiel schon zu oft gespielt um relativ objektiv
zu urteilen.
Ist es zu schnell zu langsam, oder zu was auch immer?
Man kann die EInstellungen für bestimmte Schwierigkeitstufen
modifizieren.

Wie ist eure Meinung?
Wie soll es abgestimmt werden?


tommie-lie - Fr 07.03.03 21:00

Nach Entpacken und Ausführen:
"Diese Anwendung wird aufgrund eines ungültigen Vorgangs geschlossen."

Nach wegklicken:
"Exception EReadError in Module WELTRAUM.EXE at 00019E03.
Error reading imlist20.Bitmap: Invalid ImageList"

Neustart bringt nix.
Hab's unter Win98SE probiert. Scheint ein Problem mit dem Lesen aus irgendwelchen Ressourcedateien zu sein...


Verbesserungsvorschläge kann ich so ohne weiteres nicht geben, zumindest nicht zum Gameplay ;-)


Delphianer23 - Fr 07.03.03 21:06

Das PRoblem hatte schonmal wer.

Bei anderen funzt es allerdings.
Auch bei mir funktionierts (XP).
Auch auf meinem 233mhz Netzwerkrechner mit
Windows 98 funzt es.
Ich habs nochmal probiert von nem anderem Rechner
=> da läufts auch. (xp professiol)

Ich musste es allerdings 2mal runterladen.
Es handelt sich wahrscheinlich um einen Downloadfehler.
(Die Datei sollte 536 kb groß sein)

Mein Server ist nicht der allerzuverlässigste.
Ich bitte um Geduld ...


Delphianer23 - Fr 07.03.03 21:37

ich kann es euch auch als email schicken.
Das dürfte für den download schneller sein und
weniger Fehlerbelastet.

Interesenten einfach ihre email Adresse hier reinschreiben, oder
wer das nicht will einfach ne PersonalMessage an mich.


tommie-lie - Sa 08.03.03 14:17

die Datei ist bei mir aber 549.626 Bytes groß (entspricht also 536 kByte). Wenn es ein Downloadfehler wäre, würde die ZIP-Datei ja vermutlich nicht gehen. Es sei denn, es ist ein großer Zufall und die Checksumme stimmt noch.


Alibi - Sa 08.03.03 14:24

Ist das so gedacht oder ist mein Rechner zu klein (1.1Ghz)? Das Spiel ist laaaaaaangsam. :)


Delphianer23 - Sa 08.03.03 15:12

ich hab nen 500mhz Rechner und es läuft flüssig und gar nicht
langsam ...

Der Flieger braucht ca. 5 Sekunden um von der linken Seite zur
rechten Seite mit vollspeed zu fliegen?

Wie lange braucht er bei dir?


Delete - Sa 08.03.03 15:38

Die Steuerung ist irgendwie schwerfällig.

Das Zielen ist auch irgendwie recht mühsam.

Aber was das schlimmste ist: Mit einem 17''-TFT-Monitor ist im Spiel die Schrift oben links nicht zu erkennen!!!! Keine Ahnung, was da steht. Acu ist der Hintergrund irgendwie so grau gemuster / gerastert. Keine Ahnung, ob das so sein soll oder nicht.

Bild nicht mehr verfügbar.

Das ist keine Vergrößerung oder Verkleinerung!!!


torstenheinze - Sa 08.03.03 15:55

bei mir ist der schwarz, denn ich hab meinen bild schirm ein bischen dunkler gestellt, und net so hell.


Alibi - Sa 08.03.03 16:07

So um und bei 18 Sekunden hab ich gezählt.


Delphianer23 - Sa 08.03.03 16:41

AAAAAAHHHHHHHH, was ist da los?
@Luckie, das soll gar nicht so sein!!!
Normalerweise ist es ein richtig schwarzer Hintergrund mit
Textout wird dann was draufgeplastert.

@alibi, dann läuft es bei dir so langsam wie auf nen 233 mhz
Rechner :nut:

Es gibt 2 Probleme:

1. Downloadfehler
- Lösung: Mehrmals runterladen :lol:

2. Nicht genug Systemresourcen (außerst sich in invaliden imagelists)
- Lösung: andere Programme beenden oder neustarten

=> nach Neustart läuft das Programm selbst auf einem 233mhz
Rechner mit sehr wenig ram.
Vorher kam auch dort der Fehler mit den Imagelists.

Auch bei zwei anderen Testern läuft es einwandfrei.

Warum brauchen die Imagelists so viel Systemresourcen?
Wenn die Systemresourcen nicht vorhanden sind oder benutzt werden
kommt die Fehler meldung mit den invaliden Imagelists.

Dort sind aber nicht viele Bilder drin un vor allem keine großen.
Lösungsvorschläge???
Was soll ich tun??????? :crying:


tommie-lie - Sa 08.03.03 19:01

Also wenn es deiner Meinung nach an den Ressourcen liegt, ist die minimale Anforderung wohl anscheindend 123 MB RAM, denn soviel sind laut CPUCool frei und es läuft nicht. Mit 127 läuft's. Das solltest du mal abstellen. Evtl solltest du mal versuchen, die Bilder nicht in der ImageList zu haben, sondern "manuell" zur Laufzeit zu laden. Ist zwar mehr Code, könnte aber zu besseren Zahlen beisteuern.
Aber jetzt läuft's endlich auch bei mir. Nach dem Beenden bleibt in der Taskleiste noch ein Eintrag stehen, der verschwindet, wenn man draufklickt, das solltest du abstellen.
Wenn man ein neues Spiel beginnen will, wo man da diese Plus- und Minus-Buttons hat: Die Dinger sehen extrem beschissen aus. Du solltest sie so anordnen, daß sie zumindest horizontal zentriert sind. Daß sie dann auch noch die gleiche Entfernung von der Mitte (dieses Ding mit der "1" drin) haben, gibt der Sache den letzten Schliff.
Die Steuerung ist nicht träge. Dafür aber äußerst schwierig, weil sich der Sucher mit dem Schiff mitbewegt. Evtl sollte man, wenn einem die Erde als Kriegsschauplatz nicht reicht, doch einen kleinen taktischen Computer dabei haben, der die Kanone richtig ausrichtet, immer auf den gleichen Fleck. Das würde die Sache ungemein erleichtern.
Was die Geschwindigkeit angeht, so brauche ich von rechts nach links 16,4 Sekunden. Und das bei 779 MHz. Das sollte man auch ändern...

Was das mit Luckies TFT ist, darüber kann ich auch nichts sagen. Auf meinem CRT funktioniert's einwandfrei. Könnte allerdings daran liegen, daß das Spiel die Auflösung ändert und der TFT stretchen muss. Aber eigentlich sollte er die dazwischenliegenden Pixel nicht weiß färben... (macht der das immer so, Luckie?)

Ein Sternenhintergrund wäre noch was feines. Aber nicht so 'ne Riesentextur nehmen, sondern mit Tiles arbeiten! Sonst läuft es nicht erst ab 127MB, sondern erst ab 512 oder so :roll:


Delphianer23 - Sa 08.03.03 19:32

warum läuft es dann auf einem 233mhz Rechner mit 32 Ram????
(schneller als bei dir )

bei mir geht es von links nach rechts in 5 sec. (450mhz)

Ich hab die Bilder Manuell schon mal geladen, dass war aber
LANGSAMER.
Warum verbrauchen imaglists soviel Resourcen?
Insgesamt sind da 8 Bildern drin zwishcen 6*6 udn 32*32 Pixeln...

Ich würds ja gern ändern, aber es kann doch nicht sein dass
imagelist so einen gigantischen SPeicher verbraten.
Das mit der Kanone ist extra, hab ich extra eingebaut, damit es
nicht so einfach ist.

Ich hab noch en paar Frage an euch, könnt ihr es bitte mal testen?

1.Funktioniert der Sound??

2. Was für eine ZAhl steht unten links am Bildschirmrand??
Im SPiel selbst ist sie bei mir bei etwa 140 im Menü bei
32000 ...


Delphianer23 - Sa 08.03.03 19:59

so hab ichs gemacht:

So wird da Anfangshintergrundbild immer einzeln geladen:

bBild:= TBitmap.Create;
bBild.LoadFromFile('anfang.bmp');
Form1.image1.Canvas.draw(0,0,bBild);
bBild.free;

in onidle wird im SPiel selbst gezeichnet mit imagelists.
Das berechnen läuft über einen timer. Also müsste es
bei allen gleich schnell sein.

Korrigiert habe ich jetzt das die onidle Schleife im Menü
sleep(50) macht, wenn kein aktueelles SPiel läuft damit sie
nicht so oft durchlaufen wird.

Außerdem war bei dem obigen Code etwas drucheinandergekommen
ich hab versehentlich:

Form1.image1.Canvas.brush.bitmap:=bBild;
Form1.image1.Canvas.draw(0,0,bBild);
Form1.image1.Canvas.brush.bitmap:=nil;

das createn und freeen wurde ganz am Anfang und am Ende gemacht...
Das nil war dann bei manchen auch nicht da...

Ich weiß nicht warum so sinnlose Codefetzen bei mir im PRog
rumgeflogen sind. DAs liegt wahrscheinlich daran, das ihc mehere
Versionen hatte und ein bißchen durcheinandergekommen bin.

Was könnte noch Resourcen verschlingen?
(ich würde es nicht merken, da ich 512 mb ram habe)


tommie-lie - Sa 08.03.03 20:06

aha, dann weiß ich, was das für 'ne Zahl ist: ein framecounter, richtig?
Also im Menü so an die 37.000, im Spiel nur um die 130 (nie weniger als 120).

Sounds soll's auch geben?
Nein, bei mir funktionieren die. Nur die Datei "Dooo.wav" wird nicht gespielt. Ich weiß auch nicht, bei welcher gelegenheit. Hab' schon selbstmord begangen weil ich dachte, daß das der Sound für Game Over ist, aber auch nicht. Aber sonst gehen alle.
Aber du könntest das Paket deutlich verkleinern, wenn du die ganzen doppelten Sounddateien da rauswerfen würdest. Wieso brauchst du 8mal die gleiche Datei?

Wie das mit den ImageLists ist, weiß ich nicht.
Und mit dem manuellen Laden meinte ich eigentlich nicht, daß sie jedesmal neu geladen werden sollen, wenn sie gezeichnet werden, sondern daß du ein array of TBitmap hast und beim Spielstart das array mit den Bildern füllst. Später kannst du dann auf die einzelnen Bilder im Array genauso zugreifen wie in der Imagelist, aber vielleicht ist es ein bisschen effektiver vom Speicher her, also effektiver wie jetzt, aufrund des dynamsichen Charakters kann man immer noch nicht von Effektivität sprechen.


Thunderman - Sa 08.03.03 20:14

Hallo!

Hab mir dein Spiel noch nicht angeguckt, aber 2 Fragen:
1.)

Quelltext
1:
2:
3:
4:
bBild:= TBitmap.Create; 
bBild.LoadFromFile('anfang.bmp'); 
Form1.image1.Canvas.draw(0,0,bBild); 
bBild.free;
Zeichnest Du den Hintergrund jedesmal auf diese Weise, oder nur einmal am Anfang? Wenn Du es jedesmal so machst, bremst das ungemein, weil Du das Bild jedesmal neu von der Festplatte lädst. Dann wäre eine globale Variable sinnvoller, in die Du das Bild beim Starten lädst, und die Du dann beim beenden wieder freigibst.
2.) Führst Du jetzt im Menü in jedem OnIdle ein Sleep(50); aus? Von Sleep halte ich nämlich nicht alzuviel, da es dein gesammtes Programm lahm legt. Benutze da lieber eine eigene Prozedur in der Art:

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
procedure Delay(ms: Cardinal);
var
  Start : Cardinal;
begin
  Start := GetTickCount;
  while GetTickCount < Start + ms do
    Application.ProcessMessages;
end;

Kann jetzt natürlich auch überflüssig gewesen sein, nur das fiel mir beim Durchlesen deiner Postings auf.


Delphianer23 - Sa 08.03.03 20:15

ich hab beides ausprobiert.
Hab mal alle vorher geladen und erst am schluss gefreet.
Imagelist ist viel schneller. Ich weiß auch nicht warum.
Die haben das anscheinend optimiert.

Das Problem ist nur, dass die imagelist anscheinend nicht
sehr kompatibel sind und viel Resourcen verwenden.
Anderes PRoblem ist, dass ohne imagelist ich nur
viereckige Bilder einbringen kann, da könnte dann der schwarze
Rand überlappen. Oder gibt es eine Methode mit der man so
was ausblenden kann und wenig Rechenpower brauch?

Seltsam ist, dass das "Zeichnen", im onidle Prozess bei
dir genausoschnell ist wie bei mir. Der timer allerdings
ist viel langsamer ...
Woran könnte das liegen?
Der Timer müsste doch auch bei dir so schnell sein wie bei mir.

@thunderman
das Hintergrundbild ist völlig irrelevant. Es wird nämlich nur
1-2 mal im ganzen SPiel geladen und vor allen nur dann wenn
man sowie im Menü ist und keine Rechenpower benötigt.

für das sleep gilt das gleiche, weil es nur im Menü geschieht und
dem Zweck dient nicht so viel Rechenpower für nichts zu benutzen.

Ich hab mal ne neue Version hochgeladen. Könnte sein dass die
Fehler behoben sind. (Wenns an den Sachen lag ...)

man brauch den windowsmediaplayer für den sound, da
ich diese mediaplayer kombo benuzt habe


Delete - Sa 08.03.03 22:01

Keine Ahnung, ist der Monitor meines Vaters. Eventuell kann man da noch was einstellen.


Delphianer23 - So 09.03.03 01:57

@ tommie lie

Was meinst du eigentlich mit dynamischen Charaktar?


Aya - So 09.03.03 03:41

Hi,

kleine frage... wieso hast du die WAVE Dateien alle doppelt und dreifach dazugepackt??!

CRASHLIT1 .. CRASHLIT8.WAV - Alles genau die gleiche
CRASHMED1.WAV .. CRASHMED4.WAV - Genau die gleichen..
e1.wav .. e4.wav - Jep, die gleichen ;)
HIT.WAV .. HIT2.WAV - Ratet.. *g*
RIFLE1.WAV .. RIFLE2.WAV - Ich sag nix

Solltest du mal ändern ;)

Au'revoir,
Aya

PS: Die Geschwindigkeit... auf meinem Rechner brauch ich auch etwa 4-5Sek von links nach rechts (1024mb Ram, 2x 2GHz)


tommie-lie - So 09.03.03 14:20

wieso ist das bei euch alles so schnell?

Mit dynamischen Charakter meine ich, daß ein TBitmap am Anfang klein ist. Wenn du dann was reinlädtst, verändert sich die Größe dieses Speicherbereiches, weil da ja nun nicht nur der Header und die properties drin sind, sonsdern nebenbei auch noch ein paar bunte Pixel. Dadurch verändert sich die Größe beim Laden eines Bildes: dynamisch im Sinne der Definition.
Irgendwo hier wurde schonmal beschrieben, daß der alte Speicherbereich, in den das Bitmap ohne Pixel noch reingepasst hat, nicht wieder freigegeben wird. So. Ein array ist im Speicher immer in "einem Stück". Da du aber nie alle Bilder gleichzeitig laden kannst, sondern immer nur nacheinander, würdest du erst das array für's erste Bild vegrößern (vergrößern nicht die anzahl an Elementen, aber die Größe des verbrauchten Specihers). Dann für's zweite usw. Der Speicherbereich aus dem jeweils letzten Schritt wird nie freigegeben und bleibt unbenutzt.
Lindern kann man dieses Phänomen, indem man kein array benutzt, daß an einem Stück hängen muss, sondern einzelne TBitmap-Variablen nimmt. Ist zwar wesentlich unübersichtlicher, dafür wird aber nicht so viel Speicher verpulvert, sondern eben... weniger. Aber wenn die Bilder nicht besonders groß sind, sollte eigentlich auch ein array of TBitmap noch in meine 256 MB RAM passen...

@aya: hab' ich acuh schon bemängelt ;-P


Ach ja, das ganze Problem mit der Geschwindigkeit usw kann man lösen, indem man die Bewegung Zeitabhängig berechnet. Du lässt also einen Zähler mitlaufen und weißt, nach 1 Sekunde bewegt sich so ein Schiffchen um 10 Pixel. Jedesmal, wenn dein Programm gerade Zeit hat (OnIdle), schaut es, was bewegt werden soll und schaut auf die Uhr. Wenn erst 'ne halbe Sekunde vergangen ist, bewegt man's nur um 5 Pixel. Ist die Zeitspanne so klein, daß es weniger als ein Pixel ist, versucht man auf einem Mittelwert zu bleiben (zum Beispiel merkt man sich den letzten Wert und wartet solange, bis es sich endlich mal um einen Pixel bewegen würde). Dann läuft dein spiel von der Geschwindigkeit her überall. So werden mittlerweile eigentlich alle Spiele gesteuert, weil mittlerweile auch viel mit Zeitelementen gearbeitet wird. Nachteil: auf extrem langsamen Rechnern kann's zu Rucklern kommen - Vorteil: Wenn's läuft, läuft's richtig.


Delphianer23 - So 09.03.03 14:38

@ aya, dass ist genau die Geschwindigkeit wie sie sein soll!

Ich erreiche sie allerdings schon mit einen 450mhz Rechner mit
512Mb ram ...

Warum ist es bei manchen so lahm?

Ich habe die Sounddateien doppelt, da sich der Sound überschneiden
soll. Ich habe mehere Mediaplayerkomponenten die dann gleichzeitig
spielen. Das zwei auf eine datei gleichzeitig zugreifen ist nicht
möglich.

@tommie-lie
das ist sicherlich die bessere Methode. Werd mal schauen ob ichs
umstellen kann.

Im Moment mache ich das Berechnen der Positionen über einen Timer
und das Zeichnen über onidle.
Da eigenltich jeder Rechner fähig sein müsste ein timerintervall mit
ner Berechnung ca. 50 mal in der Sekunde auszuführen sollte es
eigentlich kein prob sein. (Blöder Rechner :crying: )


torstenheinze - So 09.03.03 14:47

Blutiges Elend hat folgendes geschrieben:
Ich habe die Sounddateien doppelt, da sich der Sound überschneiden
soll. Ich habe mehere Mediaplayerkomponenten die dann gleichzeitig
spielen. Das zwei auf eine datei gleichzeitig zugreifen ist nicht
möglich.


na wenn das so ist, dann mach das doch so, das du nur die sounddatei jeweils einmal in dein ziparchiv packst, und wenn du das spiel startest, dann machst du das so, dass die sounddatei so-und-so viel mal kopiert werden, wie du es willst


Delphianer23 - So 09.03.03 15:04

@torstenheinze
gute Idee, doch es handelt sich um sehr kleine Dateien.
Die insgesamt ungepackten Daten von 180 kb sollte jede
Festplatte verkraften. :lol:

@tommie-lie
Ich habs mal eingebaut(noch nicht in die download Version).

Aber irgendwie harmoniert das so nicht so richtig. Ich glaub ich
bleib bei meiner Variante. Ich kann mir auch nicht erklären, warum
es bei euch so komisch läuft ...


tommie-lie - So 09.03.03 15:12

normalerweise sollte ein Timer überall gleich schnell laufen. Ob er aber ein OnIdle dafür braucht, weiß ich nicht.

Was die Sounddateien angeht: Wieso nicht über die API abspielen? Einfach Datei in den Speicher laden und dann sooft an die Soundkarte schicken, wie man Lust dazu hat. Dürfte sogar mit PlaySound gehen, ich glaub' der nimmt auch 'n Speicherpointer an...


Delphianer23 - So 09.03.03 15:59

Das Bildschirmproblem mit dem TFT 17, liegt
glaub ich nicht am Programm sondern am Bildschim.
Die 180 kb für den Sound sind nicht so wichtig.

Dann bleibt noch die Frage warum das Spiel auf manchen Rechnern
so langsam ist.
Woran könnte es liegen?
Ist bei der neuen Version überhaupt noch vorhanden?

Mein größtes PRoblem ist das mit der Rechnerauslastung ...
Eigentlich dürfte sie jetzt behoben sein. Der Taskmanager von
WindowsXP zeigt fast gar keine Speichererweiterung für das
Spiel an. Es wird für das Spiel direkt nur 3MB verwendet ... .
Aber man weiß ja nie.

Kann das einer von euch mal an der neuen Version überprüfen?

http://www.8ung.at/harth/weltraum.zip


Alex - So 09.03.03 17:35

Hab mir das Spiel nur kurz angeschaut
bei mir braucht das Schiff ca. 12 sec von links nach rechts..
Rechner: 500 Mhz W98
die Steuerung würde ich über die Pfeiltasten besser finden


tommie-lie - So 09.03.03 19:09

also deine neue Version läuft immer noch nicht, sobald ich auch nur MusicMatch laufen habe. Nur, wenn nur die Standard-Programme (meine Firewall, Webwasher, UDF-Treiber, Sidewinder-Treiber, Speichermanager, Lüftersteuerung, CPUCool) und höchstens noch der Windows Commander laufen, ist das Ding zufrieden. Mehr ist nicht drin.


mimi - So 29.06.03 20:28

das spiel ist nicht schlecht, nur das lachen am anfang stört mich... wäre toll wenn man das apschalten könnte...