[go: up one dir, main page]

Menu

[r14]: / ai / tags / 0.1.2 / main.c  Maximize  Restore  History

Download this file

84 lines (66 with data), 3.4 kB

 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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
/*
* C++ Implementation: main
*
* Description:
*
*
* Author: Hendrik Hochstetter <hochsthk@studi.informatik.uni-stuttgart.de>, (C) 2008
*
* Copyright: See COPYING file that comes with this distribution
*
*/
#include "globals.h"
#include "aimanager.h"
#include <QtCore/QCoreApplication>
#include <QtCore/QDebug>
void myMessageOutput(QtMsgType type, const char *msg)
{
switch (type) {
case QtDebugMsg:
fprintf(stdout, "Debug: %s\n", msg);
break;
case QtWarningMsg:
fprintf(stdout, "Warning: %s\n", msg);
break;
case QtCriticalMsg:
fprintf(stdout, "Critical: %s\n", msg);
break;
case QtFatalMsg:
fprintf(stdout, "Fatal: %s\n", msg);
abort();
}
}
int main (int argc, char *argv[])
{
qInstallMsgHandler(myMessageOutput);
QCoreApplication *app = new QCoreApplication (argc, argv);
AiManager *aiManager = new AiManager (app);
aiManager -> run ();
aiManager -> writeSettings ();
return app -> exec ();
};
/**
\page ai AI: Die k&uuml;nstliche Intelligenz f&uuml;r 3d-pyramidal-schach
\section about Allgemein
Die KI wird &uuml;ber QSettings konfiguriert. Einstellbar sind Username und Passwort &uuml;ber die mit Server eine Verbindung hergestellt wird. Die maximale Anzahl an gleichzeitig laufenden KI-Threads kann genauso eingestellt werden, wie die Standard- Suchtiefe und die maximale Suchtiefe (die Standard-Suchtiefe kann durch die KI bei unruhigen Stellungen &uuml;berschritten werden). Die KI tritt jedem Spiel, das nach dem Schema KiName_Gegner aufgebaut ist als wei&szlig; bei und jedem nach Schema Gegner_KiName als schwarz. Auch einstellbar: das Refresh-Intervall, die Zeit, die der KI-Manager wartet, bis er auf dem Server schaut ob neue Spiele angelegt worden sind, denen die KI beitreten soll bzw. ob in einem Spiel die KI am Zug ist. Ist die KI am Zug wird ein AiBrain-Objekt erzeugt,
in dem dann die Berechnung des Zugs erfolgt.
\see AiManager AiPlayer AiBrain
\section implementation Implementierung der Darstellung für Felder
Felder werden als Integer dargestellt in jedes Field werden x, y und
z koordinaten (je aus {0..7}) kodiert. die ersten 3 bit für die x
koordinate dann 3 null-bits (um überläufe bei addition und subtraktion
abfangen zu können) 3bits für y usw.
Dadurch lassen sich Vektoraddition und Subtraktion (im positiven Zahlenbereich)
als einfache Integeradditionen realsieren. wenn ein oder mehr null-bits nach der addition/subtraktion ungleich 0 werden dann liegt das ergebnisfeld nicht auf dem brett.
\see Field
Bsp.: Feld (3,4,3) ist in o.g. Darstellung 0030403 (oktal)
\section implementation2 Implementierung der Darstellung für Züge
Für Züge wird wie für Felder als Datentyp Integer verwendet. Einziger Unterschied zwischen
Zügen und Feldern ist, dass Züge auch negative Komponenten enthalten können. Dieses Problem
wird dadurch gelöst, dass jeder Zugvektor in der Darstellung um 0030303 (oktal) verschoben
ist und erst nach Ausführung eines Zuges die 0030303 Verschiebung ausgeglichen wird.
Zusätzlich zu den Grundrichtungen möglicher Züge werden auch Skalierungen gespeichert.
Die Richtung der Züge richtet sich nach der Ausrichtung des Bretts und ist nicht relativ sondern absolut. weiß spielt und negative z-Richtung schwarz in positive, was aber nur bei Bauerzügen beachtet werden muss.
\see MoveVector Move
Bsp.: Der Springervektor (2,1,0) würde also 0030405 (oktal) lauten, (-2,0,1) wäre 0040301 (oktal).
**/