eliot/game/coord.cpp
Olivier Teulière 5b682ef9b8 - Removed Game::format*
- Added Game::getPlayer
2005-11-05 15:48:59 +00:00

110 lines
3 KiB
C++

/* Eliot */
/* Copyright (C) 1999 Antoine Fraboulet */
/* */
/* This file is part of Eliot. */
/* */
/* Eliot is free software; you can redistribute it and/or modify */
/* it under the terms of the GNU General Public License as published by */
/* the Free Software Foundation; either version 2 of the License, or */
/* (at your option) any later version. */
/* */
/* Eliot is distributed in the hope that it will be useful, */
/* but WITHOUT ANY WARRANTY; without even the implied warranty of */
/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */
/* GNU General Public License for more details. */
/* */
/* You should have received a copy of the GNU General Public License */
/* along with this program; if not, write to the Free Software */
/* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
/**
* \file coord.cpp
* \brief Eliot coordinate system
* \author Antoine Fraboulet
* \date 2005
*/
#include <string>
#include "coord.h"
#include "board.h" // for BOARD_MIN and BOARD_MAX (TODO: remove this include)
#include "debug.h"
Coord::Coord(int iRow, int iCol, Direction iDir)
{
m_row = iRow;
m_col = iCol;
m_dir = iDir;
}
Coord::Coord(const string &iStr)
{
setFromString(iStr);
}
bool Coord::isValid() const
{
return (m_row >= BOARD_MIN && m_row <= BOARD_MAX &&
m_col >= BOARD_MIN && m_col <= BOARD_MAX);
}
void Coord::operator=(const Coord &iOther)
{
m_dir = iOther.m_dir;
m_row = iOther.m_row;
m_col = iOther.m_col;
}
void Coord::swap()
{
int tmp = m_col;
m_col = m_row;
m_row = tmp;
}
void Coord::setFromString(const string &iStr)
{
char l[4];
int col;
if (sscanf(iStr.c_str(), "%1[a-oA-O]%2d", l, &col) == 2)
{
setDir(HORIZONTAL);
}
else if (sscanf(iStr.c_str(), "%2d%1[a-oA-O]", &col, l) == 2)
{
setDir(VERTICAL);
}
else
{
col = -1;
l[0] = 'A' - 1;
}
int row = toupper(*l) - 'A' + 1;
setCol(col);
setRow(row);
}
string Coord::toString() const
{
ASSERT(isValid(), "Invalid coordinates");
string res;
char s[5];
sprintf(s, "%d", m_col);
if (getDir() == HORIZONTAL)
{
res = string(1, m_row + 'A' - 1) + s;
}
else
{
res = s + string(1, m_row + 'A' - 1);
}
return res;
}
/// Local Variables:
/// mode: hs-minor
/// c-basic-offset: 4
/// End: