AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Grundkonzept eines Spieles (Intervale)
Thema durchsuchen
Ansicht
Themen-Optionen

Grundkonzept eines Spieles (Intervale)

Ein Thema von Dragon27 · begonnen am 18. Apr 2007 · letzter Beitrag vom 19. Apr 2007
Antwort Antwort
Seite 1 von 2  1 2      
Dragon27

Registriert seit: 20. Nov 2003
Ort: Aßling
543 Beiträge
 
Delphi XE6 Enterprise
 
#1

Grundkonzept eines Spieles (Intervale)

  Alt 18. Apr 2007, 15:15
Hallo,

habe folgendes logik Problem:

Ich möchte eine einfache Wirtschaftssimulation OHNE Grafik schreiben also simple mit Buttons etc... So nun gibt es hier eine Menge Ereignisse die sich immer und immer wiederholen....

Sagen wir als Beispiel die Produktion... Es wird ja immer und immer wieder nach einer gewissen Zeit etwas Produziert also Produkte +1.....

So nur wie setze ich das am Besten um, denn ein Spiel hat ja 100te solcher Ereignisse und 100 Timer verwendne oder sagen wir 50 wenn Ereignisse nebeneinander laufen sind wohl doch nicht die beste Lösung...

Wie würdet Ihr das machen?

Danke!
Delphi is ......... DELPHI!!
  Mit Zitat antworten Zitat
Benutzerbild von Schaedel
Schaedel

Registriert seit: 5. Jan 2006
Ort: Saarland
174 Beiträge
 
Delphi 2007 Professional
 
#2

Re: Grundkonzept eines Spieles (Intervale)

  Alt 18. Apr 2007, 15:20
Ich würde das ganze mit einer Datenbank verknüpfen und ein paar Trigger dazu schreiben.
Eine andere Lösung fällt mir gerade nicht ein.
Michael S.
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Grundkonzept eines Spieles (Intervale)

  Alt 18. Apr 2007, 15:40
Am besten erstellst eine Liste von events, die der Timer dann im onTimer durchläuft. Siehe Hier im Forum suchenevents in einer Liste
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Dragon27

Registriert seit: 20. Nov 2003
Ort: Aßling
543 Beiträge
 
Delphi XE6 Enterprise
 
#4

Re: Grundkonzept eines Spieles (Intervale)

  Alt 18. Apr 2007, 15:53
Hallo,

was ist ein Trigger?

Danke!
Delphi is ......... DELPHI!!
  Mit Zitat antworten Zitat
SirTwist

Registriert seit: 28. Sep 2006
196 Beiträge
 
Delphi XE Professional
 
#5

Re: Grundkonzept eines Spieles (Intervale)

  Alt 18. Apr 2007, 23:14
Ich würde das so machen:

Alles, was irgendwie regelmäßig bearbeitet wird, wird als eine Klasse definiert, die von einer Basisklasse abgeleitet ist:

Delphi-Quellcode:
type
  TBasis = class
    procedure Simulate; dynamic;
  end;

  TFirma = class(TBasis)
    procedure Simulate; override;
  end;
Natürlich brauchen Deine Klassen noch Konstruktoren, Destruktoren und weißderGeierwas dazu. Aber Du kannst nun alles, was abgearbeitet werden muss, in einer TList speichern und mit einem einzigen TimerEvent abarbeiten:

  for i:=0 to Liste.Count-1 do TBasis(Liste[i]).Simulate; Bei einer TFirma würdest Du in Simulate halt etwas produzieren (und in einer Klassenvariablen AnzGueter abspeichern), aber nur, wenn vorher in einem verbundenen TStahlwerk genügend Rohmaterial hergestellt wurde usw usf.

Ist die Idee dahinter halbwegs klargeworden?

Zur Verfeinerung könnte man der Simulate-Routine noch einen Parameter mitgeben: die Anzahl Millisekunden, die seit dem letzten Aufruf vergangen sind. Dann würde halt die Produktionsmenge in Abhängigkeit von den Millisekunden berechnet werden.
  Mit Zitat antworten Zitat
Dragon27

Registriert seit: 20. Nov 2003
Ort: Aßling
543 Beiträge
 
Delphi XE6 Enterprise
 
#6

Re: Grundkonzept eines Spieles (Intervale)

  Alt 19. Apr 2007, 10:17
Hallo,

danke für die Idee mit den Klassen! Hilft mir sehr weiter....

Nun habe ich noch ein Problem:

Ich würde gerne die Klassen als Array machen, da es Tiere sind und es davon mehrere gibt. Aber das Tier soll auch sterben können
also wird ja der Destructor aufgerufen. Nun habe ich aber bei einem Array das Problem, dass dann z.B. 1 2 und 3 belegt sind ... 4 stirbt
und 5 6 sind belegt.

Gibt es da eine saubere Lösung?

Danke!
Delphi is ......... DELPHI!!
  Mit Zitat antworten Zitat
Gruber_Hans_12345

Registriert seit: 14. Aug 2004
1.426 Beiträge
 
Delphi 2007 Professional
 
#7

Re: Grundkonzept eines Spieles (Intervale)

  Alt 19. Apr 2007, 10:22
ja, man nehme eine Liste (TList)
Gruss Hans

2B or not 2B, that is FF
  Mit Zitat antworten Zitat
Dragon27

Registriert seit: 20. Nov 2003
Ort: Aßling
543 Beiträge
 
Delphi XE6 Enterprise
 
#8

Re: Grundkonzept eines Spieles (Intervale)

  Alt 19. Apr 2007, 10:28
Hallo,

okay also meine Klasse sieht im Moment so aus:

Delphi-Quellcode:
unit UClassTier;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;



type
  TTier = class
  private
    FName: string;
    FAlter:Integer;
    FMaxAlter:Integer;
   Procedure SetName(Name:String);
  public
    property Name: string read FName write SetName;
    Function SetAlterUp():Boolean; //Gibt bei True Tod zurück
  end;

implementation



Procedure TTier.SetName(Name:String);
begin
if Length(Name)< 3 then begin
MessageDlg('Leider hast du einen zu kurzen Namen gewählt! Bitte probiere es nochmal!',mterror,[mbok],0);
end else begin
FName:=Name;
end;
end;


Function TTier.SetAlterUp():Boolean;
begin
FAlter:=FAlter+1;
if FMaxAlter=FAlter then begin
MessageDlg(FName+' ist nun schon über '+inttostr(FAlter)+' Jahre alt und wird jetzt sterben!',mterror,[mbok],0);
//Hier sollte das Tier sterben.......
Result:=true;
end else Result:=false;

end;


end.
So nun sollte praktisch die Klasse sich bei SetAlterUp zerstören (weil ja Tod) aber dann steht das doch noch immer in der Liste, oder?

Danke!
Delphi is ......... DELPHI!!
  Mit Zitat antworten Zitat
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.883 Beiträge
 
Delphi 12 Athens
 
#9

Re: Grundkonzept eines Spieles (Intervale)

  Alt 19. Apr 2007, 10:29
Oder du rückst das Array auf.
Es kommt drauf an wenn du die liste öfter durchläufst als du teile daruas löschst ist ein
Array meist schneller. Wenn du dagegen öfter einfügst und löschst solltest du eine Liste nehmen.
Wenn du wenige Elemente in der Liste hast brauchst du ebenfalls kein Array.
Andreas
Monads? Wtf are Monads?
  Mit Zitat antworten Zitat
Gruber_Hans_12345

Registriert seit: 14. Aug 2004
1.426 Beiträge
 
Delphi 2007 Professional
 
#10

Re: Grundkonzept eines Spieles (Intervale)

  Alt 19. Apr 2007, 10:34
ich würde sagen, der vorteil von einer TList in punkte übersichtlichkeit und so überwiegt dem vorteil, das man eventuell dort oder da ein paar cpu ticks einsparen kann.

aus der Liste kannst du das Elemente ganz einfach entfernen mit
Liste.Delete(Index);
oder Liste.Remove(totesTier);

kannst ja jedem Tier auch noch speichern, zu welcher Liste es gehört, und dann mit
self.Parent.Remove(self) das Tier aus der Liste entfernen (freigeben mußt du es trotzdem noch)

aber das kommt dann drauf an, von wo du SetAlterUp aufrufst ....
Gruss Hans

2B or not 2B, that is FF
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:43 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz