Autor Beitrag
waldmeister
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 136

Win XP
D7 Enterp
BeitragVerfasst: Mi 13.11.02 20:08 
Sorry für den Titel,a ber mir is nix besserers eingefallen um mein problem zu beschreiben.

Mein Problem:

ich arbeite an einem Strategiespiel bei dem man auch bauen kann.
ich möchte das so machen ,dass der user z.b. eingibt wieviele häuser er bauen will un diese dann nach 24 zeiteinheiten fertig sind. allerdings kann er jeder zeit neue häuser bauen, die dann auch wieder nach 24 stunden fertig sind. ich habe das bisher versucht mit einem array von 1..24 zu lösen aber hatte dabei keinen erfolg.

Wisst ihr wie ich das machen könnt??

_________________
der wald....der meister....der meister des waldes....der waldmeister
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Mi 13.11.02 21:07 
1. Könntest Du das etwas genauer beschreiben? Ich bin mir nicht sicher, dass ich Dich richtig verstanden habe.

2. Sollte ich Dich richtig verstanden haben: könntest Du nicht eine Art "Zeitzähler" einbauen? Dann könntest Du das so machen: möchte jemand ein Haus bauen, wird dieses in 24 Zeiteinheiten fertig sein. Du speicherst, das zum Zeitpunkt "aktuelle Zeit +24" ein Haus gebaut werden soll. Und beim Beginn jeder Zeiteinheit fragst Du dann ab, ob in dieser Zeiteinheit etwas gebaut werden soll.

MfG,
Peter

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
waldmeister Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 136

Win XP
D7 Enterp
BeitragVerfasst: Mi 13.11.02 21:37 
hast mich schon richtig verstanden, denke ich *g*

das mit dem Zeitzähler war mir auch klar, ich wollte das in nem Timer machen, aber so sollte es auch gehn. Dann bräuchte ich nur ne art variable, der ich 2 werte zuweisen kann, also was gebaut werden soll un wann!!

_________________
der wald....der meister....der meister des waldes....der waldmeister
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Do 14.11.02 14:35 
Ja, genau! Ich würde es so machen, dass Du Dir ein Array baust, welches die Bauaufträge speichert. Am besten machst Du das so, dass du direkt beim einsortieren guckst, dass die Aufträge auch zeitlich sortiert sind. Das macht die Sache sehr viel einfacher.
Über das Array und die Speicherung solltest Du allerdings mal genauer nachdenken, damit Du pro Zeiteinheit möglichst wenig daran ändern musst. Sonst wird das ganze ziemlich langsam. Also wirklich überlegen, wie die Bauaufträge sortiert werden, wie sie am besten hinzugefügt werden und wie man sie am besten wieder entfernt. Mein Vorschlag übersteht dein Nachdenken wahrscheinlich keine 3 Sekunden, aber das ist ja immer so mit ersten Ideen.

MfG,
Peter

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
waldmeister Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 136

Win XP
D7 Enterp
BeitragVerfasst: Do 14.11.02 15:09 
Das programm ist nicht so umfangreich, da is das ziemlich egal wie ich das mit den arrays mache. aber wenn ich später, wie bei allen meinen programmen, eine überarbeitete optimierte version erstelle, dann muss ich da wahrscheinlich schon drauf achten!

_________________
der wald....der meister....der meister des waldes....der waldmeister
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Do 14.11.02 15:56 
Hi!

Dann solltest Du eventuell für das Array einen Datentypen erstellen, dem Du verschiedene Funktionen zuweist, die Du zum einsortieren, abrufen, etc. der Bauauftträge verwendest. Dann kannst Du hinterher die Implementation dieses Arrays und der Funktionen beliebig ändern, ohne auch nur eine Änderung im Programm vornehmen zu müssen, da die Schnittstellen gleich bleiben.

MfG,
Peter

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
waldmeister Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 136

Win XP
D7 Enterp
BeitragVerfasst: Sa 16.11.02 09:41 
wie mache ich sowas?? ich meine einen datentyp erstellen!

_________________
der wald....der meister....der meister des waldes....der waldmeister
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Sa 16.11.02 11:42 
Hi!

Ich habe auch erst letztens erkannt, dass Objekte auch in Delphi ziemlich praktische Dinger sein können. Aus Java kannte ich das, aber das musste ich nur zwangshalber lernen und war generell nicht so begeistert. Aber Objekte sind echt praktisch. Hier habe ich ein Objekt "Vektor" erstellt, dass aber noch kaum Funktionen besitzt:

ausblenden volle Höhe 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:
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:
unit vektorU;

interface

type eins_bis_drei = 1..3;

type TVektor = class(TObject)
     private
       element : ARRAY[0..2] OF Extended;

     public
       constructor add(v1, v2 : TVektor); overload;
       constructor create(v : TVektor); overload;
       constructor create(x,y,z : Extended); overload;
       constructor create; overload;
       procedure add(v1 : TVektor); overload;
       procedure add(x,y,z : Extended); overload;
       function komponente(nummer : eins_bis_drei) : Extended;
     end;


implementation

constructor TVektor.add(v1, v2 : TVektor);
VAR i : INTEGER;
begin
  for i:=0 TO 2 DO
  element[i]:=v1.komponente(i+1)+v2.komponente(i+1);
end;

constructor TVektor.create(v : TVektor);
VAR i : INTEGER;
begin
  for i:=0 TO 2 DO
  self.element[i]:=v.komponente(i+1);
end;


constructor TVektor.create(x,y,z : Extended);
begin
  element[0]:=x;
  element[1]:=y;
  element[2]:=z;
end;

constructor TVektor.create;
begin
  element[0]:=0;
  element[1]:=0;
  element[2]:=0;
end;


procedure TVektor.add(v1 : TVektor);
VAR i : INTEGER;
begin
  for i:=0 TO 2 DO
  self.element[i]:=self.element[i]+v1.komponente(i+1);
end;

procedure TVektor.add(x,y,z : Extended);
begin
  self.element[0]:=self.element[0]+x;
  self.element[1]:=self.element[1]+y;
  self.element[2]:=self.element[2]+z;
end;

function TVektor.komponente(nummer : eins_bis_drei) : Extended;
begin
  result:=self.element[nummer-1];
end;

end.


Wenn Du diese Unit in ein Programm einbindest, kannst Du über einen beliebigen der vier Kosntruktoren einen Vektor erstellen und damit im Rahmen der implementierten Methoden arbeiten. Und solange Du den Methodenkopf nicht änderst, kannst Du die Implemetation Deiner Methoden beliebig ändern, ohne das derjenige, der Dein Objekt benutzt, etwas davon merkt. Und ohne, dass Du Dein Programm, welches das Objekt benutzt, ändern musst.
MfG,
Peter

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".