Entwickler-Ecke
Freeware Projekte - StarDodger2
fidionael - Do 16.03.06 16:45
Titel: StarDodger2
Hallo,
ich habe für meinen Informatik Kurs, da wir ein kleines Spiel schreiben sollten, ein "Raumschiff fliegt durch den Weltraum und muss Sternen ausweichen"-Minigame geschrieben. Nun wollte ich, bevor ich dieses Programm nun meinem Lehrer gebe, bzw. dem Kurs vorstelle, euch, als Community einmal über den Quelltext gucken lassen, oder auch das Spiel testen lassen, für den Fall, dass vielleicht noch etwas verbesserungswürdig ist, an das ich nicht gedacht habe.
Achtung: Die Datei ist nicht mehr im Anhang, sondern
hier [
http://www.nikolas-jansen.de.vu/projekte/delphi/stardodger.zip] erhältlich!
Anmerkung: Ich habe mit der Version 1.5 mal wieder so ziemlich alles umgeworfen, was bisher vorhanden war. Als wesentlichste Änderung ist wohl die Benutzung von DelphiX zu bemerken. Die Highscore-Liste habe ich aus Übersichtsgründen zunächst mal entfernt, ich werde sie in der Version 1.6 wieder hinzufügen, wenn ich mir sicher bin, dass keine Bugs mehr im Spiel vorhanden sind.
UGUI.pas
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: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145: 146: 147: 148: 149: 150: 151: 152: 153: 154: 155: 156: 157: 158: 159: 160: 161: 162: 163: 164: 165: 166: 167: 168: 169: 170: 171: 172: 173: 174: 175: 176: 177: 178: 179: 180: 181: 182: 183: 184: 185: 186: 187: 188: 189: 190: 191: 192: 193: 194: 195: 196: 197: 198: 199: 200: 201: 202: 203: 204: 205: 206: 207: 208: 209: 210: 211: 212: 213: 214: 215: 216: 217: 218: 219: 220: 221: 222: 223: 224: 225: 226: 227: 228: 229: 230: 231: 232: 233: 234: 235: 236: 237: 238: 239: 240: 241: 242: 243: 244: 245: 246: 247: 248: 249: 250: 251: 252: 253: 254: 255: 256: 257: 258: 259: 260: 261: 262: 263: 264: 265: 266: 267: 268: 269: 270: 271: 272: 273: 274: 275: 276: 277: 278:
| unit UGUI;
interface
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, DXDraws, Menus, DXClass, MPlayer, DXSounds, UGame;
type TGUI = class(TForm) MainMenu1: TMainMenu; Spiel1: TMenuItem; Hilfe1: TMenuItem; NeuesSpiel1: TMenuItem; Highscoreanzeigen1: TMenuItem; Pause1: TMenuItem; Spielbeenden1: TMenuItem; Steuerung1: TMenuItem; About1: TMenuItem; DXDraw: TDXDraw; DXTimer: TDXTimer; DXImages: TDXImageList; DXWaves: TDXWaveList; BackgroundMusic: TMediaPlayer; Musik: TMenuItem; Hintergrundmusik1: TMenuItem; Sounds1: TMenuItem; DXSound: TDXSound; DXTeleport: TDXImageList; DXExplosion: TDXImageList; procedure Spielbeenden1Click(Sender: TObject); procedure Pause1Click(Sender: TObject); procedure Steuerung1Click(Sender: TObject); procedure About1Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure Hintergrundmusik1Click(Sender: TObject); procedure DXTimerTimer(Sender: TObject; LagCount: Integer); procedure DXDrawMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure Sounds1Click(Sender: TObject); procedure DXDrawInitialize(Sender: TObject); procedure DXSoundInitialize(Sender: TObject); procedure NeuesSpiel1Click(Sender: TObject); private Space: TSpace; Ship: TShip;
Started: Boolean; Score: Integer;
Teleport_Animation: Integer; Explosion_Animation: Integer; end;
var GUI: TGUI;
implementation
{$R *.DFM}
procedure TGUI.Spielbeenden1Click(Sender: TObject); begin DXTimer.Enabled:=False; if Application.MessageBox('Spiel wirklich beenden?',pChar(Caption), MB_YESNO) = 6 then Application.Terminate else DXTimer.Enabled:=True; end;
procedure TGUI.Pause1Click(Sender: TObject); begin Pause1.Checked := (Pause1.Checked=False); end;
procedure TGUI.Steuerung1Click(Sender: TObject); begin DXTimer.Enabled:=False; if Application.MessageBox('Steuern des Schiffes: Richtungstasten'+#10+ 'Teleport des Schiffes: Leertaste', pChar(Caption+': Steuerung'),MB_OK) <> 0 then DXTimer.Enabled:=True; end;
procedure TGUI.About1Click(Sender: TObject); begin DXTimer.Enabled:=False; if Application.MessageBox('StarDodger 2 (V1.5)'+#10+ 'Copyright (c) 2006 by Nikolas Jansen'+#10+#10+ 'Steuern Sie das Raumschiff durchs Weltall, ohne' +#10+'von Sternen getroffen zu werden.', pChar(Caption+': About'),MB_OK) <> 0 then DXTimer.Enabled:=True; end;
procedure TGUI.FormCreate(Sender: TObject); begin if Hintergrundmusik1.Checked then BackgroundMusic.Play;
Started:=False; Score:=0; Teleport_Animation:=-1; Explosion_Animation:=-1;
Space:=TSpace.Create(ClientWidth,ClientHeight); Ship:=TShip.Create(ClientWidth,ClientHeight); end;
procedure TGUI.Hintergrundmusik1Click(Sender: TObject); begin Hintergrundmusik1.Checked := (Hintergrundmusik1.Checked=False);
if Hintergrundmusik1.Checked then BackgroundMusic.Resume else BackgroundMusic.Pause; end;
procedure TGUI.DXTimerTimer(Sender: TObject; LagCount: Integer); var i: Integer; text: String; begin with Backgroundmusic do if Position = Length then Play;
DXDraw.Surface.Fill(0);
for i:=1 to 30 do DXImages.Items[0].Draw(DXDraw.Surface, Space.StarCoord(i).X,Space.StarCoord(i).Y, 0);
if (Teleport_Animation<0) then case Ship.CurrentHealth of 21..30: DXImages.Items[1].Draw(DXDraw.Surface,Ship.X,Ship.Y,0); 11..20: DXImages.Items[2].Draw(DXDraw.Surface,Ship.X,Ship.Y,0); 1..10: DXImages.Items[3].Draw(DXDraw.Surface,Ship.X,Ship.Y,0); end;
if Teleport_Animation > -1 then begin DXTeleport.Items[Teleport_Animation].Draw(DXDraw.Surface, Ship.X,Ship.Y,0); inc(Teleport_Animation); if Teleport_Animation>5 then begin Teleport_Animation:=-1; if Sounds1.Checked then DXWaves.Items[3].Play(False); Ship.Teleport; end; end;
if Explosion_Animation > -1 then begin DXExplosion.Items[Explosion_Animation div 2].Draw(DXDraw.Surface, Ship.X,Ship.Y,0); inc(Explosion_Animation); if Explosion_Animation>10 then begin Explosion_Animation:=-1; if Sounds1.Checked then DXWaves.Items[2].Play(False); FormCreate(self); end; end;
if (Started) and (not Pause1.Checked) then begin inc(Score);
Space.MoveStars;
if GetAsyncKeyState(VK_LEFT) <> 0 then Ship.X:=Ship.X-2; if GetAsyncKeyState(VK_RIGHT) <> 0 then Ship.X:=Ship.X+2; if GetAsyncKeyState(VK_UP) <> 0 then Ship.Y:=Ship.Y-2; if GetAsyncKeyState(VK_DOWN) <> 0 then Ship.Y:=Ship.Y+4; if GetAsyncKeyState(VK_SPACE) <> 0 then if Teleport_Animation < 0 then Teleport_Animation:=0;
if Space.StarCollision(Ship.X,Ship.Y) then begin Ship.CurrentHealth:=Ship.CurrentHealth - 1; if Sounds1.Checked then DXWaves.Items[1].Play(False);
if Ship.CurrentHealth < 1 then if Explosion_Animation < 0 then Explosion_Animation:=0; end; end;
with DXDraw.Surface.Canvas do begin
if not Started then begin Brush.Color:=clBlack; Font.Color:=clRed; Font.Size:=16; text:='Zum Starten des Spiels klicken'; TextOut(ClientWidth div 2 - TextWidth(text) div 2, ClientHeight div 2 - TextHeight(text) div 2 - 100, text); end;
if Pause1.Checked then begin Brush.Color:=clBlack; Font.Color:=clRed; Font.Size:=24; TextOut(ClientWidth div 2 - TextWidth('Pause') div 2, ClientHeight div 2 - TextHeight('Pause') div 2 - 100, 'Pause'); end;
Brush.Color:=clBlack; Font.Color:=clWhite; Font.Size:=12; TextOut(0,0,IntToStr(Score));
case Ship.CurrentHealth of 21..30: Brush.Color:=clGreen; 11..20: Brush.Color:=clYellow; 1..10: Brush.Color:=clRed; end; if Ship.CurrentHealth mod 10 = 0 then FillRect(rect(ClientWidth-100,0,ClientWidth,15)) else FillRect(rect(ClientWidth-100,0, ClientWidth-100+Ship.CurrentHealth mod 10 * 10,15));
Release; end;
DXDraw.Flip; end;
procedure TGUI.DXDrawMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if not Started then begin Started:=True; if Sounds1.Checked then DXWaves.Items[0].Play(False); end; end;
procedure TGUI.Sounds1Click(Sender: TObject); begin Sounds1.Checked := (Sounds1.Checked=False); end;
procedure TGUI.DXDrawInitialize(Sender: TObject); begin if not DXDraw.Initialized then begin MessageBox(Handle, 'DirectDraw konnte nicht initialisiert werden!', pChar(Caption),MB_ICONERROR); Application.Terminate; end; end;
procedure TGUI.DXSoundInitialize(Sender: TObject); begin if not DXSound.Initialized then begin MessageBox(Handle, 'DirectSound konnte nicht initialisiert werden!', pChar(Caption),MB_ICONERROR); Application.Terminate; end; end;
procedure TGUI.NeuesSpiel1Click(Sender: TObject); begin FormCreate(self); end;
end. |
UGame.pas
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: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113:
| unit UGame;
interface
type TCoord = record X,Y: Integer; end;
TSpace = class(TObject) private GameWidth, GameHeight: Integer; Star: Array[1..30] of TCoord; function StarOverlaps(s: TCoord; numStars, index: Integer) : Boolean; public constructor Create(Width, Height: Integer); procedure MoveStars; function StarCoord(Index: Integer) : TCoord; function StarCollision(x,y: Integer) : Boolean; end;
TShip = class(TObject) private GameWidth, GameHeight: Integer; xCoord,yCoord: Integer; Health: Integer; protected procedure SetX(X: Integer); procedure SetY(Y: Integer); public constructor Create(Width, Height: Integer); procedure Teleport; property X: Integer read xCoord write SetX; property Y: Integer read yCoord write SetY; property CurrentHealth: Integer read Health write Health; end;
implementation
function TSpace.StarOverlaps(s: TCoord; numStars, index: Integer) : Boolean; var i: Integer; begin Result:=False; for i:=1 to numStars do if index<>i then if (s.X+20>Star[i].X) and (s.X<Star[i].X+20) and (s.Y+20>Star[i].Y) and (s.Y<Star[i].Y+20) then Result:=True; end;
constructor TSpace.Create(Width, Height: Integer); var i: Integer; begin GameWidth:=Width; GameHeight:=Height; Randomize; for i:=1 to 30 do Repeat Star[i].X:=Random(GameWidth - 20); Star[i].Y:=Random(GameHeight - 20) - GameHeight; Until (StarOverlaps(Star[i],i-1,0)=False); end;
procedure TSpace.MoveStars; var i: Integer; begin for i:=1 to 30 do with Star[i] do begin Y:=Y+2; if Y>GameHeight then Repeat X:=Random(GameWidth - 20); Y:=Random(GameHeight - 20) - GameHeight; Until (StarOverlaps(Star[i],30, i)=False); end; end;
function TSpace.StarCoord(Index: Integer) : TCoord; begin Result.X:=Star[Index].X; Result.Y:=Star[Index].Y; end;
function TSpace.StarCollision(x,y: Integer) : Boolean; var i: Integer; begin Result:=False; for i:=1 to 30 do if (x+32>Star[i].X) and (x<Star[i].X+20) and (y+40>Star[i].Y) and (y<Star[i].Y+20) then begin Result:=True; Repeat Star[i].X:=Random(GameWidth - 20); Star[i].Y:=Random(GameHeight - 20) - GameHeight; Until (StarOverlaps(Star[i],30, i)=False); Break; end; end;
procedure TShip.SetX(X: Integer); begin if (X>=0) and (X<=GameWidth-32) then xCoord:=X; end;
procedure TShip.SetY(Y: Integer); begin if (Y>=0) and (Y<=GameHeight-40) then yCoord:=Y; end;
constructor TShip.Create(Width, Height: Integer); begin GameWidth:=Width; GameHeight:=Height; Randomize; xCoord:=GameWidth div 2 - 32 div 2; yCoord:=GameHeight - 40; Health:=30; end;
procedure TShip.Teleport; begin xCoord:=Random(GameWidth-32); end;
end. |
Vielen Dank schonmal...
Moderiert von
Tino: Code- durch Delphi-Tags ersetzt
starsurfer - Do 16.03.06 16:54
Ein "GAME OVER" am Ende ist besser als wenn das Spiel einfach stehen bleibt....
Manchmal überschneiden sich die Sterne und man sieht von einem nur die Hälfte, vll kannste das noch verhindern...
Ne Highscore Liste wäre vll noch ne Idee(kannste ja z.B.in ner inidatei speichern)
-ne kleine Hilfe (muss ja nich viel sein... nur welche Tasten und Sinn des Spiels[für ganz Doofe])
-Programminfo Fenster (mann soll ja sehen das du das Meisterwerk erstellt hast) :D
-Programm Speed erhöhen ab bestimmter Pkt-Zahl
Ansonsten Top
:zustimm:
//EDIT: Richtig Martin :D
Martin1966 - Do 16.03.06 16:57
Es wäre schön wenn die Sterne sich nicht überlagern würden. Oder du stellst diese Transparent dar.
edit: da hat starsurfer wohl seinen Beitrag kurz vor meinem Absenden erweitert. ;-)
fidionael - Do 16.03.06 18:35
Version 1.1
Geändert:
- GameOver Text erscheint nun am Ende des Spiels
- Pause-Funktion (bei Drücken der Taste "P") wurde hinzugefügt
- GameSpeed wird nun dynamisch mit der Anzahl der Punkte geändert
- Menüpunkt: Help -> About wurde hinzugefügt
Noch in Arbeit:
- Highscore-Liste
- Kein Überlagern der Sterne mehr
- Menüpunkt: Help -> Controls
Vielen Dank für eure Kritik, war echt hilfreich und das Programm ist jetzt schon um einiges schöner. Highscore-Liste und Menüpunkt: Help -> Controls dürfte ich auch in naher Zukunft fertig haben, aber wo ich noch nichtmal wirklich eine Vorstellung von habe: Wie krieg ich es elegant hin, dass die Sterne nicht mehr überlagern? Hat da vielleicht jemand eine Idee?
Mfg
starsurfer - Do 16.03.06 18:41
unter der voraussetzung das die sterne 20pixel breit sind würde ich das so machen:
Delphi-Quelltext
1:
| xCoord:=Random(GameWidth/20)*20; |
damit setzt er die sterne so das sie sich nicht überlappen
(glaub ich- ungetestet :D)
F34r0fTh3D4rk - Do 16.03.06 18:46
die steuerung ist zu hakelig, und man kann zb net oben und rechts gleichzeitig drücken .
es passiert oft, das ein ausweichen unmöglich ist.
was bewirkt die leertaste genau Oo ?
der sterne werden über den text gezeichnet
Danniolo - Do 16.03.06 18:48
Bug: wenn man GameOver is, dann auf About Klick und dann die AboutBox schließt, geht das Spiel weiter :roll:
F34r0fTh3D4rk - Do 16.03.06 18:49
starsurfer hat folgendes geschrieben: |
unter der voraussetzung das die sterne 20pixel breit sind würde ich das so machen:
Delphi-Quelltext 1:
| xCoord:=Random(GameWidth/20)*20; |
damit setzt er die sterne so das sie sich nicht überlappen
(glaub ich- ungetestet :D) |
ich glaube eher nicht, du musst das schon für jeden stern prüfen
fidionael - Do 16.03.06 18:53
F34r0fTh3D4rk hat folgendes geschrieben: |
| was bewirkt die leertaste genau Oo ? |
Leertaste bewirkt einen sofortigen Telport an eine zufällige Stelle irgendwo im Spielfeld. Ich habe auch darüber nachgedacht, eventuell bei diesem Teleport lediglich die x-Koordinate zu verändern, damit der Spieler das Raumschiff nicht erst suchen muss.
Wäre das besser?
Danniolo hat folgendes geschrieben: |
| Bug: wenn man GameOver is, dann auf About Klick und dann die AboutBox schließt, geht das Spiel weiter |
Ui, danke für den Hinweis - das werde ich schnellstmöglichst beheben! :)
F34r0fTh3D4rk - Do 16.03.06 18:54
ich würds irgendwo hinteleportieren wo was frei ist, aber da dort ja wenig platz ist, ist das schlecht Oo
fidionael - Fr 17.03.06 01:56
Version 1.2
Geändert:
- Bugfix: Nach GameOver kann man nicht mehr mit Hilfe des About Dialoges das Spiel fortführen
- Bugfix: Sterne werden nun nicht mehr über den Text gezeichnet
- Menüpunkt Help -> Controls wurde hinzugefügt
- Highscore-Liste wurde hinzugefügt
- Rhythmus der Gamespeed-Änderungen wurde modifiziert
Noch in Arbeit:
- Kein Überlagern der Sterne mehr
- Ausbesserung der Steuerung
- Ausbesserung des Teleports
- Sound
Erneut vielen Dank für die konstruktiven Kritiken und eure Hilfe!
Hat jemand vielleicht eine Idee, wie ich meinem Programm beibringe, dass zwei Richtungen gleichzeitig gedrückt werden, oder die Steuerung insgesamt etwas weniger hakig hinkriege? Außerdem scheint außer dem Startsound kein weiterer abgespielt zu werden; weiß vielleicht jemand woran das liegen könnte?
Mfg
fidionael - Fr 17.03.06 09:12
Version 1.3
Geändert:
- Bugfix: Das Spiel läuft nun weiter auch wenn man das Controls-Fenster nicht über den OK-Button schließt
- Kein Überlappen der Sterne mehr
- Den Menüpunkten Help -> Controls und Help -> About wurden Shortcuts zugewiesen
Noch in Arbeit:
- Ausbesserung der Steuerung
- Ausbesserung des Teleports
- Sound
Mir ist nach wie vor unklar, wieso nur der Startsound abgespielt und der Rest vom Programm einfach ignoriert wird...
Mfg
fidionael - Di 21.03.06 03:04
Version 1.4
Geändert:
- Man kann die Highscore-Liste nun zu beliebigen Zeitpunkt manuell aufrufen
- Völlig neues Teleportsystem(*)
Noch in Arbeit:
- Ausbesserung der Steuerung
-
Sound-Bug(**)
(*)
Neues Teleportsystem:
Anstatt einfach an einen zufälligen Punkt teleportiert zu werden, ist der Teleport nun intelligent. Die Y-Koordinate wird beibehalten und der X-Wert wird auf so verändert, dass in einer bestimmten Range kein Stern im Weg ist. Es wurde, damit Teleport nicht zu übermächtig wird, ein Teleportbalken eingeführt, welcher sich nach einem Teleport erst wieder füllt. Man kann jedoch jederzeit teleportieren; lediglich die Range wird durch den Balken beeinflusst.
(**)
Sound-Bug:
Ich brauche dringend Hilfe bei der Implementierung von Sounds. Das Problem habe ich oben beschrieben im Quelltext markiert und
hier [
http://www.delphi-forum.de/viewtopic.php?t=57667] nochmal der Link auf das entsprechende Topic.
Mfg
jakobwenzel - Di 21.03.06 09:16
Ein Bug: Wenn man im Spiel ESC drückt, kommt (bei mir) ein zerstückelter Game-Over-Screen (Schrift nur noch teilweise sichtbar), wenn man die Taste danach nochmal drückt, komt eine schöne Zugriffsverletzung, und man kann das Programm nicht mehr schließen, startet man nach dem drücken von ESC ein Spiel und will das Programm dann schließen, kommt ca. 20 Fehlermeldungen gleichzeitig.
Hoffe die Beschreibung ist ausführlich genug :wink:
//EDIT: Komisch, jetzt gehts ohne Fehlermeldung
fidionael - Di 21.03.06 13:22
Hm, ist mir ehrlich gesagt noch nicht passiert... Falls es nochmal auftreten sollte sag bitte Bescheid, ansonsten nehme ich es mal zur Kenntnis, werde aber keine Maßnahmen ergreifen ;)
F34r0fTh3D4rk - Di 21.03.06 15:36
bei sounds kann ich dir helfen.
fidionael - So 28.05.06 19:26
Version 1.5
Geändert:
- Sämtliches Zeichnen wird nun in DelphiX erledigt.
- Steuerung läuft nun flüssig
- Sound-Problem durch DelphiX-Komponenten gelöst
- Hintergrund-Musik hinzugefügt
- Musik/Sounds sind an-/ausschaltbar
- Highscore-Liste wurde entfernt (Begründung s. o.)
Noch in Arbeit:
- Reintegration der Highscore-Liste
Da in dieser Version fast alles umgeworfen wurde, wäre es wirklich nett, wenn ihr das Programm ein wenig auf Bugs testen könntet :)
Danke schonmal im Vorraus!
//Edit:
Version 1.5b
Geändert:
-Vergessener Teleport wurde implementiert :oops:
Born-to-Frag - So 28.05.06 20:04
Kann es nicht starten:
Exception EMCIDeviceError in module StarDodger.exe at 00037b27.
Die angeforderte Datei wurde nicht gefunden. Stellen die sicher, dass Pfad- und Dateiname richtig sind.
greetz
fidionael - So 28.05.06 20:47
Hm merkwürdig, den Fehler habe ich bei meinem 2t-Rechner auch, aber auf diesem hier nicht, auch wenn ich die Datei selbst in ein beliebiges Verzeichnis herunterlade...
Weiß irgendjemand was dieser Fehler zu bedeuten hat?
fidionael - So 28.05.06 23:30
Problem gelöst
Das oben beschriebene Problem ist nun gelöst. Der Fehler war, dass die TMediaPlayer-Komponente eine Midi-Datei benötigte, von welcher der Pfad fest gespeichert war. Daher lief die Anwendung auf meinem Rechner in jedem Verzeichnis, aber eben auf keinem anderen :D
Die Datei ist nun nicht mehr im Anhang erhältlich sondern auf meiner Homepage (Direktlink s. o.) und es ihr ladet nun nicht mehr das Spiel direkt runter, sondern eine Zip-Datei, welche alle nötigen Dateien beinhaltet.
Mfg
fidionael - Mo 29.05.06 01:36
Version 1.5c
Geändert:
- Teleportations- und Explosionsanimationen wurden hinzugefügt
- Teleportationssound wurde hinzugefügt
- Diverse kleine Bugs wurden behoben
Noch in Arbeit:
- Reintegration der Highscore-Liste (V1.6)
Mfg
starsurfer - Mo 29.05.06 09:26
ich habs mal getestet :D
1. häng die Zip doch wieder als Anhang hier im Forum an
2. der beamt sich imma noch in Sterne rein, wies aussieht läst du den beim beamen nur de x-Koordinate verändern, vll solltest du de y-Koordinate auch einbeziehen
star
mexx - Mo 29.05.06 10:10
Das Schiff ist zu langsam, man hat manchmal keine Chance und das wichtigste, manchmal hat man überhaupt keinen Weg OHNE Sterne. Zum Großteil fliegt man gegen die Sterne, weil es keine Bahn ohne gibt.
LLCoolDave - Mo 29.05.06 11:05
Eine Idee wäre vielleicht, die Sterngeschwindigkeit variabel zu gestalten, d.h. dass nicht alle Sterne gleich schnell fallen, sondenr jeder Stern in einem gewissen Rahmen eine zufällige Geschwindigkeit zugewiesen bekommt. Wenn du dann gleichzeitig die Zahl der Sterne reduzierst, wird das Ganze mehr zu einem Geschicklichkeitsspiel, und das vorwärts/zurück fliegen macht auch Sinn, da es bisher recht nutzlos scheint.
fidionael - Mo 29.05.06 11:35
starsurfer hat folgendes geschrieben: |
ich habs mal getestet :D
der beamt sich imma noch in Sterne rein, wies aussieht läst du den beim beamen nur de x-Koordinate verändern, vll solltest du de y-Koordinate auch einbeziehen[delphi] |
Aja, stimmt ich habe den Teleport wieder auf dumm gestellt; danke für den Hinweis ;)
mexx hat folgendes geschrieben: |
| Das Schiff ist zu langsam, man hat manchmal keine Chance und das wichtigste, manchmal hat man überhaupt keinen Weg OHNE Sterne. Zum Großteil fliegt man gegen die Sterne, weil es keine Bahn ohne gibt. |
Naja, das Schiff schneller zu machen ist trivial, aber bei der Erstellung der Sternpositionen darauf zu achten, dass es einen möglichen Pfad gibt? Erscheint mir sehr kompliziert und rechenaufwendig und für solche Situationen ist ja auch schließlich der Teleport als Notrettung da (wenn er denn wieder intelligent agiert).
LLCoolDave hat folgendes geschrieben: |
| Eine Idee wäre vielleicht, die Sterngeschwindigkeit variabel zu gestalten, d.h. dass nicht alle Sterne gleich schnell fallen, sondenr jeder Stern in einem gewissen Rahmen eine zufällige Geschwindigkeit zugewiesen bekommt. Wenn du dann gleichzeitig die Zahl der Sterne reduzierst, wird das Ganze mehr zu einem Geschicklichkeitsspiel, und das vorwärts/zurück fliegen macht auch Sinn, da es bisher recht nutzlos scheint. |
Das ist eine sehr gute Idee, danke für den Tipp, die Umsetzung davon wird in der nächsten Version auf jeden Fall vorhanden sein.
Vielen Dank für die Kritik, falls euch noch etwas auffällt, dürft ihr gerne noch weitere Anmerkungen machen, ansonsten fange ich mal an, an 1.6 zu arbeiten ;)
Mfg
//Edit:
Die zip-Datei hänge ich übrigens nicht wieder als Anhang an, da ich sie auf meiner HP sowieso veröffentlichen möchte und da sich die Versionen im Moment fast stündlich ändern, wär es sehr mühsam, die neue Datei immer auf 2 Server hochzuladen.
Ich bitte um Verständnis. Wenn ich ein Stable-Release habe, welches sich also vorraussichtlich für längere Zeit halten wird, hänge ich diesen wieder an, versprochen :)
mexx - Mo 29.05.06 11:37
Eine höhere Geschwindigkeit finde ich nicht so unwichtig. Ja mehr man nach oben fliegt, um so schneller sollte das Schiff werden. Damit könnte der Benutzer seine Spielgeschwindigkeit selber entscheiden.
fidionael - Mo 29.05.06 11:43
mexx hat folgendes geschrieben: |
| Eine höhere Geschwindigkeit finde ich nicht so unwichtig. Ja mehr man nach oben fliegt, um so schneller sollte das Schiff werden. Damit könnte der Benutzer seine Spielgeschwindigkeit selber entscheiden. |
Das eine höhere Geschwindigkeit
unwichtig sei, habe ich doch nie behauptet:
fidionael hat folgendes geschrieben: |
| Naja, das Schiff schneller zu machen ist trivial |
Trivial = Einfach ; Trivial <> Unwichtig :)
Das mit der steigenden Geschwindigkeit je höher sich das Schiff befindet, ist eine sehr nette Idee, ich muss nur mal schauen wie sich das mit der Idee von
LLCoolDave verträgt...
Mfg
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!