summaryrefslogtreecommitdiff
path: root/noncore/games/tetrix/gtetrix.h
blob: 520dd89a54f0b5c59065a3dbf81a3a3f6c641d15 (plain)
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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
/**********************************************************************
** Copyright (C) 2000 Trolltech AS.  All rights reserved.
**
** This file is part of Qtopia Environment.
**
** This file may be distributed and/or modified under the terms of the
** GNU General Public License version 2 as published by the Free Software
** Foundation and appearing in the file LICENSE.GPL included in the
** packaging of this file.
**
** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
**
** See http://www.trolltech.com/gpl/ for GPL licensing information.
**
** Contact info@trolltech.com if any conditions of this licensing are
** not clear to you.
**
**********************************************************************/


#ifndef GTETRIX_H
#define GTETRIX_H

#include "tpiece.h"


class GenericTetrix
{
public:
    GenericTetrix(int boardWidth = 10,int boardHeight = 22);
    virtual ~GenericTetrix();

    void clearBoard(int fillRandomLines = 0);
    void revealNextPiece(int revealIt);
    void updateBoard(int x1,int y1,int x2,int y2,int dontUpdateBlanks = 0);
    void updateNext(){if (showNext) showNextPiece();}
    void hideBoard();
    void showBoard();
    void fillRandom(int line);

    void moveLeft(int steps = 1);
    void moveRight(int steps = 1);
    void rotateLeft();
    void rotateRight();
    void dropDown();
    void oneLineDown();
    void newPiece();
    void removePiece();

    int  noOfClearLines()                     {return nClearLines;}
    int  getLinesRemoved()                    {return nLinesRemoved;}
    int  getPiecesDropped()                   {return nPiecesDropped;}
    int  getScore()                           {return score;}
    int  getLevel()                           {return level;}
    int  boardHeight()                        {return height;}
    int  boardWidth()                         {return width;}

    virtual void drawSquare(int x,int y,int value) = 0;
    virtual void gameOver() = 0;

    virtual void startGame(int gameType = 0,int fillRandomLines = 0);
    virtual void drawNextSquare(int x,int y,int value);
    virtual void pieceDropped(int dropHeight);
    virtual void updateRemoved(int noOfLines);
    virtual void updateScore(int newScore);
    virtual void updateLevel(int newLevel);

private:
    void  draw(int x, int y, int value){drawSquare(x,height - y,value);}
    void  removeFullLines();
    void  removeLine(int line);
    void  showPiece();
    void  erasePiece();
    void  internalPieceDropped(int dropHeight);
    void  gluePiece();
    void  showNextPiece(int erase = 0);
    void  eraseNextPiece(){showNextPiece(1);};
    int   canPosition(TetrixPiece &piece);    // Returns a boolean value.
    int   canMoveTo(int xPosition, int line); // Returns a boolean value.
    void  moveTo(int xPosition,int line);
    void  position(TetrixPiece &piece);
    void  optimizedMove(int newPos, int newLine,TetrixPiece &newPiece);
    
    int  &board(int x,int y){return boardPtr[width*y + x];}

    TetrixPiece currentPiece;
    TetrixPiece nextPiece;
    int         currentLine;
    int         currentPos;
    int         showNext;                    // Boolean variable.
    int         nLinesRemoved;
    int         nPiecesDropped;
    int         score;
    int         level;
    int         gameID;
    int         nClearLines;
    int         width;
    int         height;
    int         *boardPtr;
};


#endif