Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Mi Jul 09, 2025 08:12

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 12 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: probleme mit einer datenbank
BeitragVerfasst: Mo Jan 15, 2007 16:02 
Offline
DGL Member

Registriert: Sa Jan 13, 2007 18:39
Beiträge: 15
hi,
ich bin neu hier und ich finde diese seite sehr gut :D
ich versuche momentan ein kampfskript zu schreiben, das einen kampf von raumschiffen mit bestimmten statuswerten simuliert.. da die anzahl der raumschiffe und ihre werte nicht konstant sind wollte ich jedes mal bei kampfstart die schiffinformationen in eine datenbank speichern..
dann wollte ich in jeder kampfrunde die daten laden, die berechnungen durchführen und dann wieder in der datenbank speichern..
leider ist das problem, das ich in der datenbank nichts ändern kann, weil sie nicht im edit- oder insertmode ist..
außerdem muss ich die einzelnen zeilen der datenbank immer mit
Code:
  1. table1.moveby(1);
aufrufen und wenn ich 2 for.. to.. do.. schleifen habe und die eine schleife während der anderen erst durchlaufen wird, die jeweils einmal durch alle zeilen der datenbank durchlaufen sollen, dann muss ich ich jedes mal die aktuelle position um die anzahl der reihen der datenbank nach oben schieben und dann wieder um den parameter der schleife nach unten.. gibt es nicht eine einfachere möglichkeit einzelne zeilen anzusprechen?
es wäre super, wenn mir jemand sagen könnte, wie ich diese probleme lösen kann..
vielen dank :D


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jan 15, 2007 16:37 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Jun 20, 2003 13:59
Beiträge: 134
herzlich willkommen hier im forum :)

vieleicht solltest du noch ein paar infos mehr geben:
von welchem typ ist table1.

alternativ konntest du deine datenbank mit "Dynamically Linked Lists" aufbauen und die dann in eine datei schreiben und beim start wieder auslesen.

_________________
ghost-site.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jan 15, 2007 16:40 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Hallo und erst mal herzlich Willkommen.

Allerdings muss ich gestehen, dass mich deine Frage gerade ein wenig überrascht. ;) Datenbankfragen hatten wir bisher noch gar nicht oder nur selten und ich habe es verpeilt. Aber wo wir gerade schon beim Thema sind. Ein Kampfskript? Das wird so etwas ähnliches wie ein Spiel, oder? Und dann sind wir schon bei der nächsten Sache. Datenbanken schreiben ihr Daten relativ zügig auf die Festplatte. Sollte dein Program jetzt ein Server für Rundenbasiertes Internetspiel werden, bei dem alle 1-2 Tage ein Zug abgegeben wird, dann würde ich eine Datenbank für durchaus gerechtfertig halten. Für so ziemlich alles andere halte ich eine Datenbank für vollkommen ungeeignet.

Bei Datenbanken wäre es außerdem ganz sinnvoll wenn du noch erwähnen welche Datenbank du womit ansteuerst. Alleine im Delphi gibt unzählige Möglichkeiten dies zu tun. Und alle sind anders.

Nichts desto trotz denke ich, dass du auf eine Datenbank verzichten solltest. Wenn es sich um Spieledaten handelt wären üblicherweise Listen oder Bäume die bessere Alternative. Aber um das abzuschätzen müsstest du mal ein bisschen mehr über dein Projekt erzählen. ;)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jan 15, 2007 16:59 
Offline
DGL Member

Registriert: Sa Jan 13, 2007 18:39
Beiträge: 15
ok, vielen dank für die tipps :)
das soll ein rundenbasiertes spiel sein, aber nicht online.. das übersteigt meine fähigkeiten :wink:
ich habe es mir so vorgestellt, das man immer in seinem zug schiffe bauen / versenden / mit ihnen kämpfen kann usw.. (zusätzlich gibt es noch forschung und planetenausbau.. mit planetenaubau baut man beispielsweise gebäude, die die forschungseffizienz erhöhen oder die die schnellere produktion von schiffen ermöglicht.. mit der forschung kann man dann verschiedene technologien und schiffe erforschen, die jeweils verschiedene statuswerte haben und somit den kampf beeinflussen..)
es gibt z.b. folgende werte:
hp (trefferpunkte eines schiffes), eatk (energieangriff), katk (konventioneller angriff), a (antrieb), p (panzerung) und s (schilde).
man hat z.b. ein solches schiff: 100hp, 10eatk, 10katk, 10a, 10p, 10s
jetzt sollte eigendlich für jedes schiff in der datenbank überprüft werden, wem es gehört und alle die dem spieler 1 gehören sollen spieler 2 angreifen.. danach greifen alle schiffe von spieler 2 spieler 1 an..
dazu hatte ich vor, folgende formel zu verwenden:
Code:
  1.     if katk/p>eatk/s then atkmode:=0;
  2.     if katk/p<eatk/s then atkmode:=1;
  3.     if katk/p=eatk/s then atkmode:=random(2);
  4.     if atkmode=0 then hp:=hp-(katk/p*(100-(a/10))/100);
  5.     if atkmode=1 then hp:=hp-(eatk/s*(100-(a/10))/100);

es wird zunächst überprüft, ob die eigenen energetischen waffen an den schilden des gegners oder die eigenen konventionellen waffen mehr schaden an der panzerung des gegners hinterlassen.. dann werden die hp um das verhältnis dieser werte reduziert.. dabei nimmt der faktor in dem a vorkommt noch einen zwischen 0,999 und wenn der maximale gegnerische antrieb 250 ist 0,75 an, um die ausweichchance der schiffe durch erhöhte geschwindigkeit zu berücksichtigen (ich könnte auch über zufall einen wert von 0 bis 99 ermitteln lassen und prüfen ob der größer als a ist und sonst geht der angriff daneben, aber ich will nicht das gleiche kämpfe hintereinander zu verschiedenen ergebnissen führen, weil das zu zufallslastig wäre..)
wenn das berechnet wurde sollen die daten wieder abgespeichert werden und es soll weiter simuliert werden, was die restlichen schiffe für einen schaden anrichten, bis eine partei keine schiffe mehr über hat..
wenn ich die werte eines schiffes als array oder so speichern will, dann wäre das denke ich mal sehr kompliziert, weil man dann vermutlich für jeden statuswert ein array bräuchte und weil unbekannt ist, wieviele schiffe in den kampf verwickelt sind..
ich hoffe, das ist genau genug beschrieben, wenn nicht, dann sagt einfach bescheid..
vielen dank für die guten tipps bisher :D

Edit: ich habe die datenbank mit database desctop erstellt und es ist eine paradoxdatenbank..
und die verbindung zum formular habe ich über den form wizard gemacht, weil ich keine ahnung habe wie ich die datenbanken manuell anbinden kann.. die daten sind momentan in einem DBGrid


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jan 15, 2007 17:23 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Also ein typisches rundesbasiertest Weltraumstrategiespiel. Dann würde ich an deiner Stelle mal ganz fix deine Datenbank vergessen. Und wenn ich ehrlich bin solltest du dir vorher auf JEDEN FALL erst einmal ein bisschen Objektorientierung aneignen. Ohne so etwas dürfte dich dein Problem ganz schön schnell aus den Latschen hauen.

Wenn du das getan hast dann kannst du für deine Schiffe eine Klasse erstellen von denen du 10-20 in einer Liste hast. Evtl auch eine Liste für jede Rasse. Die Rassen können wiederrum Klassen sein. Und so weiter.

Aber zu rundenbasierten Strategiespielen kann der ein oder andere mehr sagen als ich. Nur so viel du solltest dich von deinem derzeitigen Ansatz verabschieden. Das wird komplexer als du es erwartest. Bzw wird es durch die Richtige Technik (OOP) einfacher als du vielleicht denkst.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jan 15, 2007 18:26 
Offline
DGL Member

Registriert: Sa Okt 22, 2005 20:24
Beiträge: 291
Wohnort: Frauenfeld/CH
Ich schliesse mich Lossy an, Objektorientierung ist wohl das wichtigste an so einem Projekt.

Probiere auch eher kleine Dinge auszutesten am Anfang und nicht extrem grosse Dinge zuerst zu machen, mach kleine schritte!

mfg

_________________
bester uo-shard: www.uosigena.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jan 15, 2007 19:26 
Offline
DGL Member

Registriert: Sa Jan 13, 2007 18:39
Beiträge: 15
ok, dann werde ich es mal versuchen..
vielen dank :)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jan 15, 2007 20:21 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Nachdem du weißt wie Objekt Orientierung funktioniert solltest du mal diese Tutorials durchlesen: Tutorial_Softwareentwicklung1 (+ den 2. Teil)
Dadurch solltest du ein gefühl bekommen, wie man sich von Anfang an etwas mehr Gedanken zur Struktur des Programms macht. Falls dich das Thema dann weiter interessiert, solltest du dir dann noch paar Texte zum Software-Design durchlesen.

Ich hab am Ende des Tutorial_Quickstart ein paar mahnende Worte an die viele angehenden "Engine-Programmierer" gerichtet. Quintessenz ist, dass man sich an Projekte erst dann wagen sollte, wenn man weiß was man tut. Dazu benötigt man vorallem Erfahrung. Falls man zu schnell zu große Sachen machen will, produziert man viel Wegwerfcode. Und das will man im Allgemeinen ja nicht.

Also erstmal kleine Brötchen backen, und die Sahnetorte auf später verschieben. ;)

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jan 15, 2007 21:10 
Offline
DGL Member

Registriert: Sa Jan 13, 2007 18:39
Beiträge: 15
^^
das habe ich schon gemerkt.. bestimmt 90% meiner anwendungen habe ich nie fertig gestellt, weil mir immer irgendwelches wissen gefehlt hat, eine lösung dafür zu finden..
ich habe auch mal einen quelltext mit über 100.000 zeilen geschrieben, bis ich keine lust mehr hatte und 1 jahr später habe ich den selben effekt mit einem ca 500 zeiligen quelltext erzeugt.. das ist zwar unnötig, aber irgendwas muss ich ja programmieren, um besser darin zu werden und deswegen ist es eigendlich auhc die arbeit wert, einen unnötigen code geschrieben zu haben, aber dafür etwas wissen gewonnen zu haben.. wenn ich bedenke das ich seit über 2 jahren so gut wie jeden tag 5h oder so am programmieren bin, aber ohne struktur ist es schwer, aber durch dieses forum hoffe ich mal, das das was ich programmiere mal effektiver wird im verhältnis aufwand / erzieltes ergebnis.. ich werde mir mal die ganzen links durchlesen und versuchen, das in das programm zu übertragen..
vielen dank :)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jan 15, 2007 22:36 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 27, 2005 12:44
Beiträge: 393
Wohnort: Berlin
Programmiersprache: Java, C++, Groovy
Hallo,

also ich finde den Denkansatz, eine relationale Datenbank als Hilfsmittel für ein rundenbasiertes Spiel einzusetzen, garnicht mal so schlecht.

Zum einen kann man seine Daten damit persistent halten und braucht sich schonmal keine Gedanken über ein Format für das Abspeichern der Spielstände machen. (das könnte bei Lord of Universe ziemlich komplex werden)
Ausserdem kann man seine Daten nach allen möglichen Attributen ohne viel Aufwand sortieren (z.B. Highscorelisten, Zeiten für das Fertigstellen eines Schiffes usw.)
Letztendlich sind ja Objekte auch nichts anderes, als Attribute, die in Relation zueinander stehen.

Es gibt ja kleine Bibliotheken wie z.B. SQLite, mit denen man problemlos kleine Datenbanken aufbauen kann (es muss ja nicht gleich db2 oder oracle sein ;) )

Viele Grüße
dj3hut1


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jan 15, 2007 23:43 
Offline
DGL Member

Registriert: Sa Jan 13, 2007 18:39
Beiträge: 15
ich habe auch noch mal darüber nachgedacht..
ich habe es jetzt zwar so hinbekommen, das ich eine klasse mit einem array definiert habe, allerdings wie dj3hut1 schon sagte denke ich mal verkompliziert es das abspeichern von spielständen ungemein.. vielleicht wäre es sinnvoll, am beginn des spiels die datein einmal aus der datenbank zu laden und der klasse zuzuordnen, dann wärend der prozedur die klasse zu verwenden und wenn man die daten abspeichern will, wieder in die datenbank einzufügen..
allerdings habe ich leider immer noch keine ahnung, wie ich die datenbank in der runtime verändern kann..
Zitat:
sich schonmal keine Gedanken über ein Format für das Abspeichern der Spielstände machen

dabei fällt mir ein, das ich schon immer wissen wollte, ob und wie man sich mit delphi ein eigenes dateiformat definieren kann, in dem man abspeichert^^
ich schreibe nächsten monat eine facharbeit über datenverschlüßelung und deswegen wollte ich vllt. langfristig ein eigenes dateiformat definieren und jedes mal wenn ich datein daraus lade einen eigenen dechiffrirungsalgorithmus durchlaufen lassen, um es zu erschweren, das in dem spiel gecheatet werden kann ;)
das wäre wirklich super, wenn mir das jemand sagen könnte :D


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jan 16, 2007 00:02 
Offline
DGL Member

Registriert: Sa Okt 22, 2005 20:24
Beiträge: 291
Wohnort: Frauenfeld/CH
Schau dir einmal die Klasse TStream bzw. TFilestream an, da kannst du z.B. einen Integer so in eine Datei schreiben:

Filestream.Write(i,SizeOf(i));

logischerweise musst du TFilestream initialisieren und auch wieder deinitialisieren.

_________________
bester uo-shard: www.uosigena.de


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 12 Beiträge ] 
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 7 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.008s | 14 Queries | GZIP : On ]