Морски шах

Предадени решения

Краен срок:
15.04.2013 17:00
Точки:
6

Срокът за предаване на решения е отминал

Създайте клас TicTacToeBoard който да моделира игра на морски шах

Методи

Класът трябва да предефинира операторът [ ]
за да могат координатите от играта да се достъпват като dict:

>>> board = TicTacToeBoard()
>>> board["A1"] = "X"
>>> board["A2"] = "O"
>>> board["B1"] = "X"
>>> board["A2"]
'O'
>>> board["A1"]
'X'

Класът трябва да предефинира метода __str__():

>>> board = TicTacToeBoard()
>>> print(board)

  -------------
3 |   |   |   |
  -------------
2 |   |   |   |
  -------------
1 |   |   |   |
  -------------
    A   B   C

>>> board['B2'] = 'O'
>>> board['C1'] = 'X'
>>> print(board)

  -------------
3 |   |   |   |
  -------------
2 |   | O |   |
  -------------
1 |   |   | X |
  -------------
    A   B   C

>>>

Трябва да са дефинирани 4 изключения:

InvalidMove -- извиква се при опит за презаписване на поле на което вече е заето. Например:

>>> board["A1"] = 'X'
>>> board["A1"] = 'O'

InvalidValue -- извиква се при опит за записване на символ различен от ('X', 'O'). Например:

>>> board["B1"] = 'щ'
>>> board["B2"] = "Банани с пижами"

InvalidKey -- извиква се при опит за писане на невалидни координати:

>>> board["A51"] = 'X'
>>> board["NARNIA"] = 'O'

NotYourTurn -- Не е твой ред!!1!

>>> board["A1"] = 'O'
>>> board["A2"] = 'O'

Класът трябва да има метод game_status() който връща състоянието на играта:

>>> board = TicTacToeBoard()
>>> board["A1"] = "X"
>>> board.game_status()
'Game in progress.'
...
>>> board.game_status()
'Draw!'
...
>>> board.game_status()
'X wins!'
...
>>> board.game_status()
'O wins!'

Равен резултат (Draw!) има само тогава когато всички полета са запълнени и няма победител.

През останалото време статусът трябва да е "Game in progress" (освен ако няма победител, разбира се).