Autor Beitrag
fidionael
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 232

Win XP SP2, Ubuntu 6.06
Delphi 7 PE, Delphi 3 Prof
BeitragVerfasst: Do 16.03.06 16:45 
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 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.

ausblenden volle Höhe 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:
///////////////////////////////////////////////////////////////////////////////
// StarDodger2 - UGUI V1.5 by Nikolas Jansen
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);

     { BEGIN Darstellung der Sterne }
     for i:=1 to 30 do
         DXImages.Items[0].Draw(DXDraw.Surface,
                                Space.StarCoord(i).X,Space.StarCoord(i).Y,
                                0);
     { END   Darstellung der Sterne }

     { BEGIN Darstellung des Schiffes }
     if (Teleport_Animation<0then
        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;
     { END   Darstellung des Schiffes }

     { BEGIN Teleportanimation }
     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;
     { END   Teleportanimation }

     { BEGIN Explosionsanimation }
     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;
     { END   Explosionsanimation }

     { BEGIN Spielgeschehen }
     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;
     { END   Spielgeschehen }

     with DXDraw.Surface.Canvas do begin
          { BEGIN Darstellung der Framerate (DEBUG)
          Brush.Color:=clBlack; Font.Color:=clWhite; Font.Size:=12;
          TextOut(0,ClientHeight-TextHeight('F'),
                  'FPS: '+IntToStr(DXTimer.FrameRate));
          { END   Darstellung der Framerate (DEBUG) }


          { BEGIN Darstellung des Spiel-Starten-Textes }
          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;
          { END   Darstellung des Spiel-Starten-Textes }

          { BEGIN Darstellung des Pause-Textes }
          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;
          { END   Darstellung des Pause-Textes }

          { BEGIN Darstellung des Punktestandes }
          Brush.Color:=clBlack; Font.Color:=clWhite; Font.Size:=12;
          TextOut(0,0,IntToStr(Score));
          { END   Darstellung des Punktestandes }

          { BEGIN Darstellung des Lebensbalkens }
          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));
          { END   Darstellung des Lebensbalkens }

          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.


ausblenden volle Höhe 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:
///////////////////////////////////////////////////////////////////////////////
// StarDodger2 - UGame V1.5 by Nikolas Jansen
unit UGame;

interface

type
  TCoord = record
    X,Y: Integer;
  end;

  TSpace = class(TObject)
    private
      GameWidth, GameHeight: Integer;
      Star: Array[1..30of 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+20and
               (s.Y+20>Star[i].Y) and (s.Y<Star[i].Y+20then
               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+20and
            (y+40>Star[i].Y) and (y<Star[i].Y+20then 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>=0and (X<=GameWidth-32then xCoord:=X; end;

procedure TShip.SetY(Y: Integer);
begin if (Y>=0and (Y<=GameHeight-40then 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 user profile iconTino: Code- durch Delphi-Tags ersetzt


Zuletzt bearbeitet von fidionael am Mo 19.03.07 00:20, insgesamt 18-mal bearbeitet
starsurfer
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 334

Win 95, Win 98, Win XP, Win Vista, Linux
D5 Enterprise ,D2005, D6 Personal, Visual C++ Express 2005, C++ Builder 6 E, Dev-C++
BeitragVerfasst: 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

_________________
GEIZ IST GEIL! - Ihr Sozialamt


Zuletzt bearbeitet von starsurfer am Do 16.03.06 17:08, insgesamt 5-mal bearbeitet
Martin1966
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1068

Win 2000, Win XP
Delphi 7, Delphi 2005
BeitragVerfasst: 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. ;-)

_________________
Ein Nutzer der Ecke ;-)
fidionael Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 232

Win XP SP2, Ubuntu 6.06
Delphi 7 PE, Delphi 3 Prof
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 334

Win 95, Win 98, Win XP, Win Vista, Linux
D5 Enterprise ,D2005, D6 Personal, Visual C++ Express 2005, C++ Builder 6 E, Dev-C++
BeitragVerfasst: Do 16.03.06 18:41 
unter der voraussetzung das die sterne 20pixel breit sind würde ich das so machen:

ausblenden Delphi-Quelltext
1:
xCoord:=Random(GameWidth/20)*20;					


damit setzt er die sterne so das sie sich nicht überlappen

(glaub ich- ungetestet :D)

_________________
GEIZ IST GEIL! - Ihr Sozialamt
F34r0fTh3D4rk
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5284
Erhaltene Danke: 27

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: 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


Zuletzt bearbeitet von F34r0fTh3D4rk am Do 16.03.06 18:48, insgesamt 1-mal bearbeitet
Danniolo
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 693



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5284
Erhaltene Danke: 27

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: Do 16.03.06 18:49 
user profile iconstarsurfer hat folgendes geschrieben:
unter der voraussetzung das die sterne 20pixel breit sind würde ich das so machen:

ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 232

Win XP SP2, Ubuntu 6.06
Delphi 7 PE, Delphi 3 Prof
BeitragVerfasst: Do 16.03.06 18:53 
user profile iconF34r0fTh3D4rk 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?

user profile iconDanniolo 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! :)


Zuletzt bearbeitet von fidionael am Do 16.03.06 18:57, insgesamt 2-mal bearbeitet
F34r0fTh3D4rk
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5284
Erhaltene Danke: 27

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 232

Win XP SP2, Ubuntu 6.06
Delphi 7 PE, Delphi 3 Prof
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 232

Win XP SP2, Ubuntu 6.06
Delphi 7 PE, Delphi 3 Prof
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 232

Win XP SP2, Ubuntu 6.06
Delphi 7 PE, Delphi 3 Prof
BeitragVerfasst: 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 nochmal der Link auf das entsprechende Topic.

Mfg
jakobwenzel
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1889
Erhaltene Danke: 1

XP home, ubuntu
BDS 2006 Prof
BeitragVerfasst: 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

_________________
I thought what I'd do was, I'd pretend I was one of those deaf-mutes.
fidionael Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 232

Win XP SP2, Ubuntu 6.06
Delphi 7 PE, Delphi 3 Prof
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5284
Erhaltene Danke: 27

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: Di 21.03.06 15:36 
bei sounds kann ich dir helfen.
fidionael Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 232

Win XP SP2, Ubuntu 6.06
Delphi 7 PE, Delphi 3 Prof
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1094

Win XP SP2, Win 2000 SP4
Delphi 7, 2k5
BeitragVerfasst: 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

_________________
Theorie ist wenn man alles weiß, aber nichts funktioniert. Praxis ist wenn alles funktioniert, aber niemand weiß warum.
Microsoft vereint Theorie und Praxis: Nichts funktioniert und niemand weiß warum.
fidionael Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 232

Win XP SP2, Ubuntu 6.06
Delphi 7 PE, Delphi 3 Prof
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 232

Win XP SP2, Ubuntu 6.06
Delphi 7 PE, Delphi 3 Prof
BeitragVerfasst: 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