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) {
<< назад вперед >>