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);
}

//-----------------------------------------------------------------------------