Autor Beitrag
HenryHux
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 542
Erhaltene Danke: 33

Windows 7 Premium
Delphi XE, Eclipse
BeitragVerfasst: Mo 03.10.11 13:02 
Hi,

ich arbeite schon länger an einem Pokerspiel, was mir imho ganz gut gelungen ist.
Ich bin jedoch nicht der einzige der mitgeholfen hat, die KIs hat wer anders programmiert.
Wir haben das vor gut einem Jahr angefangen und immer mal wieder Hobby-mäßig dran gearbeitet und so kam es, dass wir ohne Ahnung von irgendwas einfach quick n' dirty was zusammengepuzzelt haben.
Jetzt haben wir über 4k if-Anweisungen für die KIs - die Züge lassen sich leider nicht so einfach berechnen.
Bevor wir das veröffentlichen würden wir das gerne alles in eine Datenbank auslagern, die dann auch der jeweilige User verändern kann.

Dann zur eigentlichen Frage:

Welcher Datenbanktyp?
Es muss definitiv was Performantes sein, denn bei jedem Zug wird dann einiges abgeglichen.
Ich dachte an Sql, wollte aber euch mal fragen was am geeignetsten ist oder ob es zu den Datenbanken vielleicht eine bessere Alternative gibt.

Wenn ich das mache müsste ich auch eine Art Konvertierer bauen, per Hand mach ich das nicht :P
Dürfte das machbar sein, der andere Programmierer hat da teilweise komplexe Klammerungen hinterlassen.

Danke für die Hilfe,

lg
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6395
Erhaltene Danke: 149

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Mo 03.10.11 15:48 
Datenbanken gibt es derzeit genügend auf dem Markt.
Ich nehme mal an, dass da nur ein paar 1000 Datensätze erzeugt würden. Über Performanzproblem würde ich mir da keine Gedanken machen.

Erstmal müssten andere Fragen geklärt werden:
1. Soll die DB kostenlos sein?
2. Soll übers Netzwerk mit gespielt werden?
2.1 Falls ja, soll bei allen Spielern die selbe KI (also auch die selbe DB) genutzt werden?
3. Oder ist eine Embedded-Datenbank vielleicht die bessere Lösung?

Wie aufwändig eine Konvertierung ist, oder ob das überhaupt realisierbar ist, kann man (zumindest ich) nicht ohne Source beurteilen.

Vielleicht lohnt sich der Einsatz einer DB auch gar nicht. Du könntest die Sourcen der KI auch offenlegen. Dann kann jeder selbst daran basteln, wenn er möchte.
HenryHux Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 542
Erhaltene Danke: 33

Windows 7 Premium
Delphi XE, Eclipse
BeitragVerfasst: Mo 03.10.11 15:57 
1. Jup.
2. Nein. Zumindest noch nicht.
3. Naja, eigentlich wäre es extern schon ganz angenehm.

Normalerweise hätte ich gedacht schön machen wir ne Tabelle, jede Variable bekommt ne Spalte.
Wär recht schnell konvertiert gewesen und genau das was ich wollte.
Aber wie gesagt die ganzen Anweisungen sehen leider nicht nur so
if (bd1) and (bd2) and (bd3) then ... aus sondern auch
if (bd1) and ((bd2) or (bd3)) then ... so.
Das machts natürlich zu einem Problem, ich denke nicht, dass das mit Tabellen so einfach geht.
Am liebsten wäre mir halt einfach eine externe Quelle, die ich nicht kompilieren muss (dh auch nicht korrigieren)
und bei der ich auch schnell mal was verändern kann.

Danke, lg
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19339
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 03.10.11 16:45 
user profile iconHenryHux hat folgendes geschrieben Zum zitierten Posting springen:
if (bd1) and ((bd2) or (bd3)) then ... so.
Das machts natürlich zu einem Problem, ich denke nicht, dass das mit Tabellen so einfach geht.
Doch, das kann schon gehen, aber einfach ist es wohl nicht das performant hinzubekommen. ;-)

Als Datenbank würde ich jedenfalls Firebird nehmen. Das DBMS lässt sich leicht zwischen Embedded und Server umschalten und ab XE 2010 sind auch direkte Anbindungen in Delphi möglich (vorher aber auch, nur nicht ganz so direkt).


Zuletzt bearbeitet von jaenicke am Di 04.10.11 08:52, insgesamt 3-mal bearbeitet
HenryHux Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 542
Erhaltene Danke: 33

Windows 7 Premium
Delphi XE, Eclipse
BeitragVerfasst: Mo 03.10.11 17:13 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconHenryHux hat folgendes geschrieben Zum zitierten Posting springen:
if (bd1) and ((bd2) or (bd3)) then ... so.
Das machts natürlich zu einem Problem, ich denke nicht, dass das mit Tabellen so einfach geht.
Doch, das kann schon gehen, aber einfach ist es wohl nicht das performant hinzubekommen. ;-


user profile iconjasocul hat mich überzeugt, die Performance ist mir jetzt mal egal.
Wie würde ich das hinbekommen, dass es auch noch für den User angenehm zu bedienen ist?
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19339
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 03.10.11 17:17 
Ohne mehr Details zu dem was da bei diesen Abfragen abläuft lässt sich dazu nicht viel sagen. :gruebel:
HenryHux Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 542
Erhaltene Danke: 33

Windows 7 Premium
Delphi XE, Eclipse
BeitragVerfasst: Mo 03.10.11 17:28 
Um das zu vereinfachen :
Ich hab nen paar Variablen für die dealt cards die ich überprüfe.
if (card[1] = 4and (card[2] = 3and ((card[3] > 2or (card[4] < 9)) then Q.E.D :D
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6395
Erhaltene Danke: 149

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Di 04.10.11 06:53 
Ich würde auch zu Firebird raten. Scheint am besten zu passen.
user profile iconjaenicke hat den wesentlichen Vorteil schon genannt. Der Wechsel zwischen embedded und server ist relativ einfach.

Wie du deine Abfragen realisierst kann ich dir so nicht sagen.
Ich würde evtl. über Stored Procedures gehen, da die SQL-Abfragen vermutlich nicht von der ganz einfachen Sorte sein werden, soweit ich das jetzt abschätzen kann.


Zuletzt bearbeitet von jasocul am Di 04.10.11 07:29, insgesamt 1-mal bearbeitet
Nersgatt
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1581
Erhaltene Danke: 279


Delphi 10 Seattle Prof.
BeitragVerfasst: Di 04.10.11 07:09 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Das DBMS lässt sich leicht zwischen Embedded und Server umschalten und ab XE sind auch direkte Anbindungen in Delphi möglich (vorher aber auch, nur nicht ganz so direkt).

Würdest Du das bitte erläutern, was Du damit meinst? Danke!

_________________
Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19339
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 04.10.11 07:32 
Bei Delphi XE (oder vielleicht auch 2010 schon?) ist ein direkter dbExpress Treiber enthalten. So kann ich einfach im Datenbankexplorer den Knoten Firebird auswählen und die Datenbank angeben. Dann ziehe ich die Tabelle einfach auf das Formular oder Datenmodul.

In den Versionen vorher musste man da einen Fremdtreiber benutzen. Wie das in der IDE aussah weiß ich nicht.
Nersgatt
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1581
Erhaltene Danke: 279


Delphi 10 Seattle Prof.
BeitragVerfasst: Di 04.10.11 07:35 
Ah, ok. Ich hatte mich gewundert, dass Du schriebst "ab XE". Ist nämlich in der Tat schon seit 2010 enthalten.

_________________
Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)