Autor Beitrag
kai_lamers Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 24



BeitragVerfasst: Di 14.10.08 06:12 
Hey,

danke - du hast ja noch die ganz alte Version, lade doch einfach mal die neuste im Thread ganz oben herunter und schau dann, ob sich was geändert hat ;)

Lg,
Kai
elundril
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: Di 14.10.08 10:19 
user profile iconHidden hat folgendes geschrieben Zum zitierten Posting springen:
Jop. Nur statt SaveToFile dann CopyToClipboard ;)


warum statt savetofile, copytoclipboard. die meisten spiele speichern screenshots in einen extra ordner in ihrem verzeichnis. dadurch kann man einen screenshot machen und braucht ihn nicht sofort in paint einfügen wenn man ihn länger haben will.

_________________
This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
passiv
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 270

WIN XP Professional
Delphi 7 Enterprise, Java (Eclipse), Python 2.5, Django 1.1
BeitragVerfasst: Di 14.10.08 11:39 
user profile iconHidden hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconpassiv hat folgendes geschrieben Zum zitierten Posting springen:
nur scheiterts bei mir an der grafik-engine. die TPaintBox is wohl nicht so super :roll:
Kannst du das näher erläutern? IMHO für ein Spiel die einzige saubere Lösung ;)
naja: ich kann damit nur schlecht eine Isobaten-ansicht zaubern. und fullscreen geht auch nur bedingt. geschweige denn von sinnvollem scrolling der landkarte.


user profile iconkai_lamers hat folgendes geschrieben Zum zitierten Posting springen:
also ich halte es für sinnvoll jedem Building im Objectmanager einen propertymanager zuzuweisen, da schließlich auch jedes Gebäude eigene properties besitzt - so ist erstmal jedes Gebäude eine "autarke" Instanz, auf die ich mithilfe des Propertymanagers vollen Zugriff habe und auch haben möchte.
na eben. jeder propertymanager ist im endeffekt die eigenschaften des buildings. d.h.: du könntest die eigenschaften vom propertymanager direkt im building einbauen ... oder check ichs einfach nicht?

user profile iconkai_lamers hat folgendes geschrieben Zum zitierten Posting springen:
Es gibt übrigens nur EIN Objectmanager und den besitzt die Klasse TGame - also von vielen Objektmanagern kann da wirklich nicht die Rede sein ;)
na eh ned, es waren nur so viele dinge, die alle irgendwie gekürzt/zusammengefügt werden könnte ...

user profile iconkai_lamers hat folgendes geschrieben Zum zitierten Posting springen:
Natürlich könnte man auch das Object Array entsprechend mehrdimensional anlegen, sodas nach festgelegter Syntax gesagt werden kann Object_Array[id, 1]=Need Oat, ...[id,2]=Need Stone, doch empfinde ich den Zugriff mithilfe des Prop.Managers anhand folgender Klassen sehr viel angenehmer.
Tgame.Tobjectinspector.TBuilding[Integer].TPropertymanager.TProperylist
da könntest du bei Tgame.Tobjectinspector einen streichen. und die TPropertylist könnte man eben gleich im TBuilding reinbauen. dann spart man sich 2 Ojekte und eine Menge schreibarbeit ;)

user profile iconkai_lamers hat folgendes geschrieben Zum zitierten Posting springen:
Performanter und sinnvoller geht es immer - am grundlegenden Klassenkonzept werde ich auch erstmal nichts mehr großartig ändern - Da auf diesem Konzept alle meine Planungen, derzeit noch auf Papier, aufgebaut sind.
auch klar, dass da dran rütteln sich fast nicht mehr lohnt. wollt nur mal sehen, was die leute (außer uns beiden) zu den beiden techniken sagen. so, vor- und nachteile abwägen. lernen für weiteres programmieren. oder vielleicht aussagen von profis, dies wissen, welche methode mehr vor-/nachteile hat.
nachdem sie aber dazu überhaupt nix sagen, war das eh umsonst (vielleicht wirds jetzt was :roll: ).

user profile iconkai_lamers hat folgendes geschrieben Zum zitierten Posting springen:
Jetzt wo ich mir deinen Beitrag das 2. mal durchgelesen habe: Quasi genau so habe ich es doch gemacht?!
ich hoff jetzt is klarer auf was ich hinaus will ;)

user profile iconkai_lamers hat folgendes geschrieben Zum zitierten Posting springen:
Es gibt eine Klasse Tgame, die besitzt einen Objectmanager, welcher ein Array des Typs TBuilding besitzt. Jedes TBuilding besitzt dann halt einen Objectmanager, aber dazu: s.o.
ja und da dran hängt wieder was dran. aber dazu: s.o. ;)

_________________
Die Probleme, die es in der Welt gibt, sind nicht mit der gleichen Denkweise zu lösen, die sie erzeugt hat.
Albert Einstein
wurstuk
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 77

Win XP, Ubuntu
Delphi 7 personal
BeitragVerfasst: Di 14.10.08 13:58 
WOW!!! Die neuste Version ist ja schon voll cool! :D

Aber bei mir ist immer noch das Netz^^ aber egal^^

Mir sind bloß noch ein paar Idee gekommen, wie wäre es wenn jedes Gebäude eine Bauzeit hätte?

Gibt es später eig. vllt noch Menüs von den Gebäuden also so das mann z.B. bei einer Schmiede einstellen kann ob sie Schwerter oder Äxte produziert^^

Soll mann Später Gebäude aufwerten können? also das sich dann pro lvl Produktion usw. steigert und wenn sollte mann die Gebäude dann per Hand aufwerten oder automatisch wenn sie eine bestimmte Zeit stehen?

hmmm das sind jetzt eher fragen aber ich hoffe es hilft ein bisschen^^

_________________
Wer Rechtschreibfehler findet darf sie behalten!
<(^_^)> <[$_$]>
passiv
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 270

WIN XP Professional
Delphi 7 Enterprise, Java (Eclipse), Python 2.5, Django 1.1
BeitragVerfasst: Di 14.10.08 19:15 
gebäudeaufwerten find ich im caesar IV ganz cool. da gehts darum, dass nur wohnhäuser und märkte, theater und andere luxusdinger die in wohngebieten stehen aufwerten. dabei wird die umgebung bewertet, wie ruhig, schön, oä es ist. und jedes industrie-ding zieht die attraktivität des gebiets in einem bestimmten radius runter.

_________________
Die Probleme, die es in der Welt gibt, sind nicht mit der gleichen Denkweise zu lösen, die sie erzeugt hat.
Albert Einstein
DelphiMarkus
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 303

OpenSuSE
Delphi 2009 Pro., Lazarus
BeitragVerfasst: Mi 15.10.08 14:06 
Ich würde das Aufwerten von Gebäuden auch mit reinnehmen. Bei Siedler 5 und 6 gibt es das ja auch und ich finde es gut. :) Das kostet was, aber es macht Sinn, weil man keinen weiteren Platz mehr verschwendet und trotzdem z.B. mehr Bewohner in einem Haus wohnen können.
Ansonsten ist das Spiel schon wirklich gut geworden, man kann zwar noch fast nichts machen (oder irre ich mich da??), aber es sieht schonmal sehr gut aus und ist bestimmt eine gute Grundlage. :wink:

Das die Gebäude eine Bauzeit haben fände ich gut, das Spiel ist dann "gemütlicher", weil nicht sofort alles da ist, sondern erst seine Zeit braucht bis es fertig ist. Am schönsten wäre es, wenn man beim Bauen zusehen kann, aber das ist für den Anfang vielleicht nicht so ganz wichtig und außerdem wäre es nochmal mehr Arbeit als so schon. :D

Ich finde es Spitze! Nur weiter so!! :zustimm:
passiv
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 270

WIN XP Professional
Delphi 7 Enterprise, Java (Eclipse), Python 2.5, Django 1.1
BeitragVerfasst: Do 16.10.08 07:30 
nagut, das mit den wohnhäusern hab ich vergessen zu erwähnen: wenn die aufleveln, passen mehr leute rein. und wenn märkte aufleveln (das tun sie, wenn die wohnhäuser rundherum das auch tun), dann passen mehr rohstoffe rein.

_________________
Die Probleme, die es in der Welt gibt, sind nicht mit der gleichen Denkweise zu lösen, die sie erzeugt hat.
Albert Einstein
kai_lamers Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 24



BeitragVerfasst: Sa 18.10.08 12:30 
Hey,

die Woche über gab es nix neues, da ich während der Schule und aufgrund von Training einfach nicht dazu komme mich länger vor den Rechner zu setzen und was zu machen.
Erstmal danke für die weiteren Anregungen, dass die Gebäude eine Bauzeit bekommen, find ich gut - werde ich auch heute noch in die Klasse mit einpflanzen.

Zusätzlich werde ich jetzt endgültig dem Zugriffsfehler auf die Pelle rücken,
in ca. einer Stunde wird's dann was neues von mir geben.

Lg,
Kai
kai_lamers Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 24



BeitragVerfasst: Sa 18.10.08 14:38 
Titel: Hilfeeeeeeeeeeee
Hey,

ich habe da jetzt ein Problem und finde die Lösung einfach nicht.
Ich habe meine Infomessage Struktur nochmal komplett überarbeitet, sodass jetzt nicht mehr mit einem dynamischen String Array gearbeitet wird, sondern mit einem Stapel, den ich irgendwann mal für die Schule schreiben musste, der ist folgendermaßen aufgebaut:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
 Tbox=class(Tobject)
  private
    o,r:Tobject;
    head:Tbox;
  public
    constructor create(o0:Tobject; r0:Tbox);                virtual;
    property obj:Tobject read o write o;
    property right: Tobject read r write r;
  end;

   Tstapel=class(Tobject)
   private
    head:Tbox;
    help:tbox;
   public
    destructor destroy;
    function isempty:boolean;
    procedure push(o: Tobject);
    function top: Tobject;
    function pop: Tobject;
   end;


und so implementiert:

ausblenden volle Höhe Delphi-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:
//############################# TBOX #############################
constructor tbox.create(o0:Tobject; r0:Tbox);
begin
  r:=r0;
  o:=o0;
end;

//############################# TSTAPEL #############################

destructor tstapel.destroy;
begin
  while head <> nil do begin
    help:=head;
    head:=tbox(head.right);
    help.destroy;
  end;
end;

function tstapel.isempty:boolean;
begin
     result:=head=nil;
end;

function tstapel.top:tobject;
begin
  if head=nil then result:=nil
  else result :=head.obj;
end;

function tstapel.pop:tobject;
begin
     if head=nil then result:=nil
     else begin
     result:=head.obj;
     help:=head;
     head:=tbox(head.right);
     help.destroy;
     end;
end;

procedure tstapel.push(o:tobject);
begin
  head:=tbox.create(o,head);
end;


Das ganze wende ich nun folgendermaßen an:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
procedure Tgame.informplayer;
var i:integer;
begin
    eventwindow.delete_texts;
    eventwindow.text[0]:=' STATUS';
    i:=0;
      while not spieler.infostapel.isempty do begin
        if not spieler.infostapel.isempty then begin
          inc(i);
          b_akt_message:=TMessage(spieler.infostapel.pop);
          b_akt_message.time:=b_akt_message.time+1;
          eventwindow.text[i]:=b_akt_message.gmessage;
          //Nur wenn Zähler noch <=3 (Nachricht also nicht älter als 3 Sekunden), dann übernehme Nachricht in neuen Stapel
          if b_akt_message.time<=3 then
            b_help_stapel.push(b_akt_message);
        end;
      end;
      while not b_help_stapel.isempty do begin
        if not b_help_stapel.isempty then
          spieler.infostapel.push(b_help_stapel.pop);
      end;
end;


Problem ist folgendes:

Prinzipiell klappt alles soweit, also nach 3 Spielzyklen wird die Nachricht nicht weiter im Staque mit aufgenommen, alles wunderbar.
Nur habe ich ein Problem, wenn ich 3 Gebäude baue, dann steht dort:

"Gebäude erfolgreich gebaut
Gebäude erfolgreich gebaut
Gebäude erfolgreich gebaut"

Soweit also richtig, nur wenn ich jetzt versuche eines zu bauen, dies aber aufgrund fehlender Ressourcen nicht möglich ist:
"Gebäude konnte aufgrund fehlender Ressourcen nicht gebaut werden!
Gebäude konnte aufgrund fehlender Ressourcen nicht gebaut werden!
Gebäude konnte aufgrund fehlender Ressourcen nicht gebaut werden!
Gebäude konnte aufgrund fehlender Ressourcen nicht gebaut werden!"

Meint also, das b_akt_message nur einmal gelesen wird und dann entsprechend häufig in den Staque gepackt wird.

In den Staque füge ich folgendermaßen ein:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
 if result=-1 then begin
      object_array[object_id].Free;
      spieler.gamemessage.gmessage:='Gebäude konnte aufgrund fehlender Ressourcen nicht gebaut werden!';
      spieler.gamemessage.time:=0;
      spieler.infostapel.push(spieler.gamemessage);
    end;


Ich weiß echt nicht, woran es liegt.