Source Code (Use browser search to find items of interest.)
Class Index
ksirtet'Piece (./kdegames/ksirtet/gpiece.h:85)
class Piece
{
public:
Piece();
~Piece();
void copy(const Piece *, bool toNonGraphic);
void setBlockInfo(BlockInfo *bi) { binfo = bi; }
static void setPieceInfo(const GPieceInfo *pi) { _info = pi; }
static const GPieceInfo *info() { return _info; }
uint nbBlocks() const { return blocks.size(); }
uint nbConfigurations() const { return _info->nbConfigurations(type); }
int value(uint i) const { return blocks[i].b->value(); }
uint col(uint i, uint p) const { return p + blocks[i].i; }
uint line(uint i, uint l) const { return l - blocks[i].j; }
int toX(uint col) const;
int toY(uint line) const;
int minX() const;
int maxX() const;
int width() const { return maxX() - minX() + 1; }
int minY() const;
int maxY() const;
int height() const { return maxY() - minY() + 1; }
void generateNext(int type = -1);
void rotate(bool left, int x, int y);
void move(int x, int y);
void moveCenter();
void show(bool show);
void setRandomSequence(KRandomSequence *_random) { random = _random; }
Block *garbageBlock() const;
Block *takeBlock(uint i);
private:
typedef struct {
Block *b;
int i, j;
} BlockData;
QArray<BlockData> blocks;
uint type;
KRandomSequence *random;
static const GPieceInfo *_info;
BlockInfo *binfo;
Piece(const Piece &); // disabled
Piece &operator =(const Piece &); // disabled
void moveBlock(uint i, int x, int y);
};
ksirtet'Piece::Piece() (./kdegames/ksirtet/gpiece.cpp:137)
Piece::Piece()
: binfo(0)
{
blocks.resize(_info->nbBlocks());
for (uint i=0; i<blocks.size(); i++) blocks[i].b = new Block;
}
ksirtet'Piece::~Piece() (./kdegames/ksirtet/gpiece.cpp:144)
Piece::~Piece()
{
for (uint i=0; i<blocks.size(); i++) delete blocks[i].b;
}
ksirtet'Piece::rotate() (./kdegames/ksirtet/gpiece.cpp:149)
void Piece::rotate(bool left, int x, int y)
{
for (uint i=0; i<blocks.size(); i++) {
int tmp = blocks[i].i;
blocks[i].i = blocks[i].j * (left ? 1 : -1);
blocks[i].j = tmp * (left ? -1 : 1);
if (binfo) moveBlock(i, x, y);
}
}
ksirtet'Piece::minX() (./kdegames/ksirtet/gpiece.cpp:159)
int Piece::minX() const
{
int min = blocks[0].i;
for(uint i=1; i<blocks.size(); i++) min = QMIN(min, blocks[i].i);
return min;
}
ksirtet'Piece::maxX() (./kdegames/ksirtet/gpiece.cpp:166)
int Piece::maxX() const
{
int max = blocks[0].i;
for(uint i=1; i<blocks.size(); i++) max = QMAX(max, blocks[i].i);
return max;
}
ksirtet'Piece::minY() (./kdegames/ksirtet/gpiece.cpp:173)
int Piece::minY() const
{
int min = blocks[0].j;
for(uint i=1; i<blocks.size(); i++) min = QMIN(min, blocks[i].j);
return min;
}
ksirtet'Piece::maxY() (./kdegames/ksirtet/gpiece.cpp:180)
int Piece::maxY() const
{
int max = blocks[0].j;
for(uint i=1; i<blocks.size(); i++) max = QMAX(max, blocks[i].j);
return max;
}
ksirtet'Piece::copy() (./kdegames/ksirtet/gpiece.cpp:187)
void Piece::copy(const Piece *p, bool toNonGraphic)
{
for (uint i=0; i<blocks.size(); i++) {
blocks[i].b->setValue(p->blocks[i].b->value(),
(toNonGraphic ? 0 : binfo));
blocks[i].i = p->blocks[i].i;
blocks[i].j = p->blocks[i].j;
}
type = p->type;
random = p->random;
}
ksirtet'Piece::generateNext() (./kdegames/ksirtet/gpiece.cpp:199)
void Piece::generateNext(int _type)
{
ASSERT(binfo); // ie graphic
type = (_type==-1 ? random->getLong(_info->nbTypes()-1) : (uint)_type );
for (uint i=0; i<blocks.size(); i++) {
uint f = _info->form(type);
blocks[i].i = _info->i(f)[i];
blocks[i].j = _info->j(f)[i];
blocks[i].b->setValue(_info->value(type, i), binfo);
}
}
ksirtet'Piece::moveCenter() (./kdegames/ksirtet/gpiece.cpp:212)
void Piece::moveCenter()
{
uint bw = binfo->sequences().blockWidth();
int x = (binfo->width() - width()*bw)/2 - minX()*bw;
uint bh = binfo->sequences().blockHeight();
int y = (binfo->height() - height()*bh)/2 - minY()*bh;
move(x, y);
}
ksirtet'Piece::move() (./kdegames/ksirtet/gpiece.cpp:221)
void Piece::move(int x, int y)
{
for (uint i=0; i<blocks.size(); i++) moveBlock(i, x, y);
}
ksirtet'Piece::moveBlock() (./kdegames/ksirtet/gpiece.cpp:226)
void Piece::moveBlock(uint i, int x, int y)
{
blocks[i].b->move(x + toX(blocks[i].i), y + toY(blocks[i].j));
}
ksirtet'Piece::toX() (./kdegames/ksirtet/gpiece.cpp:231)
int Piece::toX(uint col) const
{
return col*binfo->sequences().blockWidth();
}
ksirtet'Piece::toY() (./kdegames/ksirtet/gpiece.cpp:236)
int Piece::toY(uint line) const
{
return line*binfo->sequences().blockHeight();
}
ksirtet'Piece::garbageBlock() (./kdegames/ksirtet/gpiece.cpp:241)
Block *Piece::garbageBlock() const
{
Block *b = new Block;
b->setValue(_info->garbageType(), binfo);
return b;
}
ksirtet'Piece::takeBlock() (./kdegames/ksirtet/gpiece.cpp:248)
Block *Piece::takeBlock(uint i)
{
Block *b = blocks[i].b;
blocks[i].b = new Block;
return b;
}
ksirtet'Piece::show() (./kdegames/ksirtet/gpiece.cpp:255)
void Piece::show(bool show)
{
for (uint i=0; i<blocks.size(); i++)
blocks[i].b->show(show);
}