За малкото време, което имахме на последната ни сбирка стигнахме до едно недовършено положение с нашия морски шах, практикувайки TDD. Това е една страхотна възможност за всеки един от вас, който не е опитвал TDD до сега. Кодът, който написахме по време на лекцията можете да намерите тук: https://gist.github.com/vladimiroff/633dec5791d59d3a4f5b
Това определено не е завършено решение и мога да ви дам няколко идеи за подобрение. Опитайте се да ги решите, спазвайки описаните стъпки:
На места виждаме
_Board__grid__
, което веднага ни казва, че или този атрибут не трябва да се използва така или не трябва да еprivate
(а примерноprotected
). Дори в тестове, освен ако не сме в особено екзотична ситуация, а тази не е такава. Оставям на вас да прецените дали да не използватеprivate
атрибут, в тестовете да "симулирате" ходовете или да си дефинирате метод за "import" на игра.Имаме дефинирани константи за
'X'
и'O'
, но нямаме такава за празно поле. Също така не ги използваме в тестовете.Въпреки, че
import
реда във файла с тестове минава автоматизираната PEP8 проверка, определено не изглежда добре.Опитайте се да намерите неизтествани от тези тестове случаи.
Имаме две дефинирани изключения. С повече желание, можем да ги направим повече и малко по-конкретни. Оставям на вас да решите дали има нужда от това (аргументации и за двете решения са добре дошли).
Идеи за нови функционалности:
Save/Load (или Export/Import) на игра. Нуждата от подобно нещо вече беше засегната в първия ни "кусур", но подобна функционалност е често срещана и може да се използва не само за улеснение по време на тестване.
Дъската ни в момента е 3x3. Не би следвало да е особено сложно да се направи NxN, където N е атрибут на инициализатора на
Board
. От тук и нуждата да се обърне повече внимание на неща, които предпочетохме да напишем директно с обяснението "дъската ни е 3x3, а не 100х100" по време на сбирката.Визуализация в команден ред на дъската. Споменахме, че това ще е добра идея да бъде имплементирано, но така и не стигнахме до него. Един
Board.__str__
би следвало да е напълно достатъчен.Така наречения Main loop за да може да се играе нашата игра и от обикновени хора... които са свикнали да работят в команден ред.
Най-вероятно можете да се сетите за още подобрения, които ги няма в тези два списъка. Публикувайте линкове към вашите имплементирации на подобрения, а ние ще даваме точки :)