| Autor |
Beitrag |
kai_lamers 
      
Beiträge: 24
|
Verfasst: 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
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: Di 14.10.08 10:19
_________________ This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
|
|
passiv
      
Beiträge: 270
WIN XP Professional
Delphi 7 Enterprise, Java (Eclipse), Python 2.5, Django 1.1
|
Verfasst: Di 14.10.08 11:39
Hidden hat folgendes geschrieben : | passiv hat folgendes geschrieben : | nur scheiterts bei mir an der grafik-engine. die TPaintBox is wohl nicht so super  | 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.
kai_lamers hat folgendes geschrieben : | | 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?
kai_lamers hat folgendes geschrieben : | 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 ...
kai_lamers hat folgendes geschrieben : | 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
kai_lamers hat folgendes geschrieben : | | 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  ).
kai_lamers hat folgendes geschrieben : | | 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
kai_lamers hat folgendes geschrieben : | | 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
      
Beiträge: 77
Win XP, Ubuntu
Delphi 7 personal
|
Verfasst: Di 14.10.08 13:58
WOW!!! Die neuste Version ist ja schon voll cool!
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
      
Beiträge: 270
WIN XP Professional
Delphi 7 Enterprise, Java (Eclipse), Python 2.5, Django 1.1
|
Verfasst: 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
      
Beiträge: 303
OpenSuSE
Delphi 2009 Pro., Lazarus
|
Verfasst: 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.
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.
Ich finde es Spitze! Nur weiter so!! 
|
|
passiv
      
Beiträge: 270
WIN XP Professional
Delphi 7 Enterprise, Java (Eclipse), Python 2.5, Django 1.1
|
Verfasst: 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 
      
Beiträge: 24
|
Verfasst: 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 
      
Beiträge: 24
|
Verfasst: 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:
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:
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:
| constructor tbox.create(o0:Tobject; r0:Tbox); begin r:=r0; o:=o0; end;
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:
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; 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:
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.
|
|
|