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