protected:

void paintEvent(QPaintEvent *event); void mousePressEvent(QMouseEvent *event);

private:

enum { Empty = Cross = 'X', Nought = '0* };

void clearBoard();

void restoreStateO;

QString sessionFileName() const;

QRect cellRect(int row, int column) const;

int cellWidth() const { return width() / 3; }

int cellHeight() const { return heightO / 3; }

bool threeInARow(int rowl, int coll, int row3, int col3) const;

char board[3][3]; int turnNumber;

};

Класс TicTacToe наследует QWidget и переопределяет функции sizeHint(), paint-Event() и mousePressEvent(). Он также обеспечивает функции gamelnProgressO и saveState(), которые мы использовали в нашем классе Application.

TicTacToe::TicTacToe(QWidget *parent, const char *name) : QWidget(parent, name)

{

clearBoardO;

if (qApp->isSessionRestored()) restoreStateO;

setWindowTitle(t r("Tic-Tac-Toe"));

}

В конструкторе мы стираем игровое поле и, если приложение было вызвано с оп­цией -session, вызываем закрытую функцию restoreStateO для восстановления старого сеанса.

void TicTacToe::clearBoard() {

for (int row = 0; row < 3; ++row) {

for (int column = 0; column < 3; ++column) { board[row][column] = Empty;

}

}

turnNumber = 0;

}

В функции clearBoard() мы стираем все ячейки и устанавливаем turnNumber на значение 0.

QString TicTacToe::saveState() const {

QFile file(sessionFileNameO); if (file.open(QI0Device::Write0nly)) { QTextStream out(&file); for (int row = 0; row < 3; ++row) {

for (int column = 0; column < 3; ++column) { out « board[row][column];

}

}

}

return file. fileNameO;

}

В функции saveStateO мы записываем состояние игрового поля на диск. Фор­мат достаточно простой: «X» для крестиков, «О» для ноликов и «-» для пустых ячеек.

QString TicTacToe::sessionFileName() const {

return QDir::homePath() + "/.tictactoe_" + qApp->sessionId() + "_" + qApp->sessionKey();

}

Закрытая функция sessionFileName() возвращает имя файла для текущего иден­тификатора сеанса и ключа сеанса. Данная функция используется как в saveState(), так и в rest о restate (). Имя файла определяется на основе идентификатора сеанса и ключа сеанса.

void TicTacToe:: restoreState() {

QFile file(sessionFileNameO); if (file.open(QIODevice::Readonly)) { QTextStream in(&file); for (int row = 0; row < 3; ++row) {


<< назад вперед >>