Source Code (Use browser search to find items of interest.)
Class Index
ksirtet'AIElement (./kdegames/ksirtet/ai.h:108)
class AIElement : public QObject
{
Q_OBJECT
public:
AIElement(const QString &description, const AIElementInfo &,
int(*)(const Board &main, const Board ¤t));
bool normal() const;
void readConfig();
void addToLayout(QGrid *, int spacing,
const char *slotChanged, QObject *receiver);
void writeConfig();
void setDefault();
bool isDefault() const;
double points(const Board &main, const Board ¤t) const;
signals:
void changed();
void triggerChanged(int);
void coeffChanged(double);
private slots:
void slotTriggerChanged(int i) { trigger = i; emit changed(); }
void slotCoeffChanged(double d) { coeff = d; emit changed(); }
private:
const QString description;
const AIElementInfo &info;
int (*func)(const Board &, const Board &);
double coeff;
int trigger;
};
//-----------------------------------------------------------------------------
ksirtet'AIElement::AIElement() (./kdegames/ksirtet/ai.cpp:260)
AIElement::AIElement(const QString &d, const AIElementInfo &i,
int (*f)(const Board &, const Board &))
: description(d), info(i), func(f)
{
ASSERT( info.tmax>=info.tmin
&& info.tdef<=info.tmax && info.tdef>=info.tmin );
ASSERT( info.cmax>=info.cmin && info.cmin>=0
&& info.cdef<=info.cmax && info.cdef>=info.cmin );
readConfig();
}
ksirtet'AIElement::readConfig() (./kdegames/ksirtet/ai.cpp:272)
void AIElement::readConfig()
{
kapp->config()->setGroup(AI_GRP);
trigger = info.tdef;
if (info.triggered) {
QString s = QString("%1 [%2]").arg(info.key).arg("TRIG");
trigger = kapp->config()->readNumEntry(s, info.tdef);
trigger = QMAX(QMIN(trigger, info.tmax), info.tmin);
}
QString s = QString("%1 [%2]").arg(info.key).arg("COEF");
coeff = kapp->config()->readDoubleNumEntry(s, info.cdef);
coeff = QMAX(QMIN(coeff, info.cmax), info.cmin);
}
ksirtet'AIElement::normal() (./kdegames/ksirtet/ai.cpp:286)
bool AIElement::normal() const
{
return info.cmin!=0 || info.cmin!=info.cmax;
}
ksirtet'AIElement::addToLayout() (./kdegames/ksirtet/ai.cpp:291)
void AIElement::addToLayout(QGrid *grid, int spacing,
const char *slotChanged, QObject *receiver)
{
QLabel *lab = new QLabel(description, grid);
lab->setFrameStyle(QFrame::Panel | QFrame::Sunken);
QString s = " ";
if ( normal() ) s = info.negative ? "-" : "+";
lab = new QLabel(s, grid);
lab->setFrameStyle(QFrame::Panel | QFrame::Sunken);
QVBox *vb = new QVBox(grid);
vb->setMargin(spacing);
vb->setSpacing(spacing);
vb->setFrameStyle(QFrame::Panel | QFrame::Sunken);
KIntNumInput *ki = 0;
if (info.triggered) {
QHBox *hb2 = 0;
if ( normal() ) {
hb2 = new QHBox(vb);
hb2->setSpacing(spacing);
(void)new QLabel(i18n("Trigger"), hb2);
}
ki = new KIntNumInput(trigger, normal() ? hb2 : vb);
ki->setRange(info.tmin, info.tmax);
connect(ki, SIGNAL(valueChanged(int)),
SLOT(slotTriggerChanged(int)));
connect(this, SIGNAL(triggerChanged(int)),
ki, SLOT(setValue(int)));
}
if ( normal() ) {
KDoubleNumInput *kd = new KDoubleNumInput(coeff, vb);
kd->setRange(info.cmin, info.cmax, 1);
kd->setSpecialValueText(i18n("Off"));
connect(kd, SIGNAL(valueChanged(double)),
SLOT(slotCoeffChanged(double)));
connect(this, SIGNAL(coeffChanged(double)),
kd, SLOT(setValue(double)));
}
connect(this, SIGNAL(changed()), receiver, slotChanged);
}
ksirtet'AIElement::writeConfig() (./kdegames/ksirtet/ai.cpp:336)
void AIElement::writeConfig()
{
KConfig *conf = kapp->config();
conf->setGroup(AI_GRP);
if (info.triggered) {
QString s = QString("%1 [%2]").arg(info.key).arg("TRIG");
conf->writeEntry(s, trigger);
}
if ( normal() ) {
QString s = QString("%1 [%2]").arg(info.key).arg("COEF");
conf->writeEntry(s, coeff);
}
}
ksirtet'AIElement::setDefault() (./kdegames/ksirtet/ai.cpp:350)
void AIElement::setDefault()
{
coeff = info.cdef;
emit coeffChanged(coeff);
trigger = info.tdef;
emit triggerChanged(trigger);
}
ksirtet'AIElement::isDefault() (./kdegames/ksirtet/ai.cpp:358)
bool AIElement::isDefault() const
{
return ( coeff==info.cdef && trigger==info.tdef );
}
ksirtet'AIElement::points() (./kdegames/ksirtet/ai.cpp:363)
double AIElement::points(const Board &main, const Board ¤t) const
{
if ( func==0 || coeff==0 ) return 0;
int v = func(main, current);
if ( info.triggered && v<trigger ) return 0;
return v * coeff * (info.negative ? -1 : 1);
}
//-----------------------------------------------------------------------------