Оценка пользовательских историй
— Теперь, — подвел итог совещания Карлос, — займемся оценкой размера историй в пунктах.
— А что такое пункты? — поинтересовался Фрэнк.
— Пункт — это безразмерная величина объема и сложности истории, — ответил Карлос. — Предположим, мы решили, что оценка сохранения партии составляет три пункта. Если, на наш взгляд, реализация восстановления сохраненной партии требует таких же усилий, то мы присвоим ей оценку «три пункта». Если же мы решим, что восстановление партии требует чуть меньше усилий, то дадим ей два пункта.
— Получается, что числа ничего не значат? — спросил Фрэнк.
— Только относительно. Два — вдвое больше одного. Восемь — вчетверо больше двух. Примерно так. Это все, что они значат, — пояснил Карлос. — Мы будем заниматься оценкой, играя в покер планирования. — Карлос раздал присутствующим по набору карт с цифрами 1, 2, 3, 5 и 8. — Теперь Делани прочтет нам одну из пользовательских историй. Мы обсудим ее и сможем задать вопросы. Затем каждый поднимет одну из розданных мною карт. Цифры на ней — это наши оценки. Все сначала выберут карты, а потом одновременно откроют их. Если цифры окажутся одинаковыми, это и будет оценка, а если нет, то мы обсудим их и историю в течение нескольких минут и повторим процесс. Процесс повторяется до тех пор, пока все не придут к одной и той же оценке.
Карлос ответил на несколько вопросов относительно метода и попросил Делани прочитать первую историю: «Как игрок я могу начать новую игру».
— Пару первых историй всегда трудно оценивать, — сказала Саша. — Поскольку мы оцениваем истории по отношению друг к другу, тяжело, когда не с чем сравнивать. В принципе, нам надо просто решить, какой считать эту первую историю — маленькой или большой. Если после оценки четырех-пяти историй мы решим, что нужно изменить оценку первой истории, то это вполне можно сделать.
— Что ты имеешь в виду под «этой историей»? — спросил Аллан. — Пока неясно, что означает «начало новой игры».
— Мы написали эту историю, когда размышляли о том, чего пользователь может захотеть после запуска нашей программы, — сказала Делани. — Мы говорили, что он, скорее всего, захочет начать новую игру или восстановить старую. Вот и все, что имелось в виду.
— А эта история включает в себя построение чистого игрового поля и задание установок, с тем чтобы компьютер был готов играть? — спросил Аллан.
— На мой взгляд, включает. Не думаю, что для этой истории нужно красивое игровое поле. У нас есть другая история о создании эстетически привлекательного экрана. Но эта история, несомненно, требует создания игрового поля Havannah на экране.
Карлос немного подождал, чтобы удостовериться, нет ли других вопросов. «А теперь каждый выбирает карту с оценкой этой истории».
— Один, — сказал Аллан, показывая всем свою карту.
— Пока рано, Аллан, — сделал замечание Карлос. — У каждого должен быть шанс обдумать свое решение, не видя оценок, которые дают другие. Это позволяет избежать необъективности. — Он выдержал паузу: — Похоже, все сделали свой выбор. Открываем карты.
Цифры на картах варьировали от единицы у Аллана и Роуз до пяти у Прасада.
— Почему пять, Прасад? — спросил Карлос.
— На мой взгляд, эта история из разряда крупных, — ответил тот.
— И близко не валялась, — возразил Аллан. — Все, что нужно для нее, это пользовательский интерфейс, где игрок может выбрать кнопку «Начать новую игру» и получить чистое игровое поле Havannah. Поле не обязательно должно выглядеть красиво, а размещения фишек здесь не требуется. Для этого есть отдельные истории. Эта история простая.
— Хорошо, я не смотрел на нее под таким углом, — сказал Прасад.
Подождав немного, Карлос опять предложил всем выбрать карту с оценкой. Теперь на большинстве карт была единица, и только Прасад выбрал «два». Прошел еще один короткий обмен мнениями, а потом Карлос поинтересовался, может ли Прасад согласиться с оценкой «один». Тот ответил, что может, и первую историю оценили в один пункт.
— Наша следующая история, — сказала Делани, — звучит так: «Как игрок я могу восстановить сохраненную игру».
После двухминутного обсуждения, как эта история должна работать, Карлос попросил членов команды выбрать карты. В первом раунде достичь согласия не удалось. Саша настаивала на том, что эта история в два раза больше, чем первая, поскольку предполагает создание чистого игрового поля Havannah, считывание сохраненной игры из файла и расстановку фишек на поле. Под влиянием аргументов Саши команда согласилась оценить историю в два пункта.
— Окей, следующая история — «Как игрок я могу выбирать уровень сложности». Давайте оценим ее, — сказала Саша.
— Это уже целый генератор ходов, — заметил Аллан. — Это довольно сложно. Можем ли мы на время оставить эту историю и вернуться к ней после того, как оценим несколько историй покрупнее?
— Я не против, — ответила Саша.
— Погодите, — сказала Роуз. — Я думаю, что это история о выборе пользователем уровня сложности, а не об игре компьютера на этом уровне сложности. Это просто — всего лишь одно или два поля на экране.
— Именно это я и имел в виду, когда записывал эту историю, — вставил слово Фрэнк.
— Отлично, но тогда нам нужна такая история: «Как игрок я могу играть против компьютера на разных уровнях сложности», — сказала Роуз.
— А можно разбить эту историю? — спросил Аллан. — Я думаю, она довольно сложна. Как насчет такой: «Как игрок я могу играть против слабого компьютерного противника»? И таких: «Как игрок я могу играть против сильного компьютерного противника» и «Как игрок я могу играть против среднего компьютерного противника»?
— Конечно, давайте так и поступим, — сказала Саша. — Начнем с выбора игроком уровня компьютерного противника. Выбирайте карты из ваших колод. Готовы? Открываемся. — Все подняли карты с цифрой «один». — На мой взгляд, это вполне резонно. Мы говорим, что у этой истории такой же размер, как и у «Как игрок я могу начать новую игру».
Все закивали в знак согласия с тем, что две истории действительно имеют один размер.
— Теперь перейдем к истории «Как игрок я могу играть против слабого компьютерного противника», — предложил Аллан, горевший желанием обсудить истории, связанные с генератором ходов, разрабатывать который, скорее всего, придется ему. — Насколько сильно должен играть наш слабый движок?
— Он не может играть случайным образом, — сказала Делани. — Но он не должен быть очень сильным. Эта игра обманчиво проста, а на деле большинству людей требуется определенное время, чтобы выбрать хороший ход. Вместе с тем даже на низком уровне сложности необходимо знать, что лучше строить — кольцо, мост или вилку в зависимости от ходов игрока.
— Ну так давайте оценим ее, — сказал Аллан.
— Погодите, — вставил слово Прасад, — как мы будем тестировать это? Похоже, тестирование окажется сложным делом.
— Хороший вопрос, — сказал Карлос. — Какие будут соображения? — Он обвел взглядом присутствующих.
— Один из способов — идентифицировать группу позиций, посмотреть, что предлагает движок, и спросить у какого-нибудь хорошего игрока, насколько хороши эти ходы, — сказала Роуз.
— Звучит хорошо. А можно ли это автоматизировать? — спросила Делани. — Нам нужно автоматизировать тестирование так, чтобы, если движок начнет генерировать странные ходы, как наша Deep Black & White в апреле, мы сразу узнали об этом.
— Абсолютно согласен, — заметил Прасад. — Мы можем создать файл, который описывает позиции на доске и потом говорит, как компьютер должен реагировать.
— Приемлемых ходов может быть несколько, — сказал Аллан. — Этот файл должен допускать определение нескольких хороших ответов.
— Отличные ответы. Однако у нас нет необходимости браться за создание этого файла прямо сейчас. Давайте все же оценим историю, — вернул присутствовавших к теме Карлос.
В зале воцарилась тишина — все погрузились в обдумывание того, насколько сложной будет реализация этой истории. Выбрав карты, все одновременно подняли их.
— Аллан, ты ведь должен был поднять одну карту, а не все сразу. Тебе трудно принять решение?
— Нет, просто у меня не нашлось карты с достаточно большим числом, поэтому я и поднял их все. Все эти карты, — программист показал карты с цифрами 1, 2, 3, 5 и 8, — в сумме дают 19. Это, на мой взгляд, и есть правильная оценка.
— У меня есть карты и с большими числами — 13, 20, 40 и 100, — сказал Карлос и раздал всем дополнительные карты. — Я надеялся, что они не понадобятся нам, однако их тоже можно использовать.
— А почему ты надеялся, что они не понадобятся?
— По отношению к историям, которые мы оценивали до сих пор, любая история размером 100 пунктов будет слишком большой, чтобы уложиться в одну итерацию. То же самое будет, скорее всего, справедливо и для остальных карт с большими числами, которые я вам только что раздал. В наличии нескольких крупных историй нет ничего страшного, и мы вполне можем оценить их, присвоив большие значения. Нужно, однако, помнить, что перед реализацией их придется разбивать на части, с тем чтобы они укладывались в одну итерацию. И еще нужно помнить, что оценки очень больших функций будут, скорее всего, менее точными. Именно по этой причине диапазоны становятся шире.
— Итак, Аллан, ты даешь этой истории 19. Уверен? — спросила Саша, глядя на восьмерку в своей руке.
— Абсолютно. Прежде всего мне нужно побольше узнать об этой игре. Движок должен будет распознавать, что пытается построить игрок — кольцо, мост или вилку. Он должен решить, какую фигуру ему нужно попытаться построить. Он должен решить, каким будет ход — наступательным или защитным. На создание даже первого слабого движка потребуется довольно много усилий.
— Ну, тебе виднее. Но 19 — слишком много, — сказала Саша.
— Прасад, почему ты считаешь, что должно быть три? — спросил Карлос, фокусируя внимание на оценщиках с предельными значениями.
— Тестирование не кажется мне сложным. Не думаю, что с ним придется много возиться. Я создам текстовые файлы для тестирования, и все.
— Конечно, но ведь мы оцениваем историю в целом, а не твою часть работы с нею. Тестирование, может быть, и тянет только на тройку, однако нужно учитывать и время, которое потребуется Аллану, — пояснил Карлос.
— Вот незадача! Тогда Аллан прав, — сказал Прасад. — Это большая история.
— Давайте посмотрим, прав ли он. Возьмите свои карты и дайте новую оценку с учетом того, что вы только что услышали, — предложил Карлос. Он выждал несколько секунд, чтобы у всех была возможность подумать. — Показывайте свои оценки.
На всех картах в этот раз было 20.
— Похоже, ты всех убедил, Аллан, — сказал Карлос. — Двадцать, однако, великовато для одной истории. Аллан, нельзя ли как-то разбить эту историю? Может быть, для начала достаточно слабого движка? С последующей доработкой перед поставкой?
— Не представляю, как это сделать, — сказал Аллан, задумался на мгновение и продолжил. — Можно, конечно, сделать так, чтобы движок каждый раз выбирал наступательный ход в стремлении построить свою фигуру независимо от ходов игрока. Но, на мой взгляд, это не очень хорошая идея.
— А что, если первый движок будет распознавать только кольца? — спросила Роуз. — Тогда мы на время смогли бы отбросить мосты и вилки. Аллан, разве ты не можешь написать программу, которая будет делать наступательные и защитные ходы, ориентированные на построение — и блокировку — только колец?
— Без проблем. Это может сработать. Поэтому давайте разобьем нашу историю на три части по числу фигур.
Все согласились и оценили эти три истории, как показано в табл. 23.4.
— Когда это была одна история, мы ее оценивали в 20 пунктов. Теперь оценка составляет 21. Нужно ли снять один пункт с какой-нибудь истории, чтобы оценка осталась на уровне 20? — спросил Фрэнк.
— Нет. Пусть оценки остаются такими, как есть, — они не такие уж точные, — ответил Карлос. — Разбивка историй помогает нам видеть больше. Сумма оценок не обязательно должна быть равна оценке крупной истории.
— Аллан, а как мы поступим с движками среднего и высокого уровня? На твой взгляд, в каждом случае должна быть одна история или их тоже нужно разбить на кольца, мосты и вилки?
— Достаточно одной истории. Я думаю, нам нужно определить движок среднего уровня как такой, который никогда не допускает грубых ошибок, — сказал Аллан. — Он, возможно, не всегда будет делать лучшие ходы, но грубых ошибок точно не допустит. Тестирование можно организовать так, как мы уже говорили, и привлечь к этому процессу хороших игроков. Если он будет делать обоснованные с их точки зрения ходы, то все в порядке. Для движка высокого уровня можно добавить условие выбора наилучшего хода. В зависимости от результатов мы можем устанавливать, насколько далеко будет смотреть генератор ходов.
— Так как бы ты сформулировал это в виде историй? — спросил Фрэнк.
— Я думаю, так: «Как игрок я могу играть против движка среднего уровня», — сказала Делани.
— Пожалуй, — согласился Карлос. — Вы можете написать на этой карточке истории примечание о том, что «Всегда делает ходы, которые хороший игрок считает приемлемыми» — это одно из условий удовлетворенности для данной истории. Оно поможет вам не забывать о том, что «движок среднего уровня» не требует создания еще одной истории о приемлемости ходов.
Команда продолжила обсуждение этой истории, провела раунд покера планирования и решила оценить ее в восемь пунктов.
— А потом, на мой взгляд, нам нужна история «Как игрок я могу играть против движка высокого уровня», — сказал Фрэнк.
— Она как минимум в два раза больше, чем история с движком среднего уровня, — заметил Аллан. — Предыдущую историю мы оценили в восемь. Но мне бы не хотелось давать этой истории оценку 16. Может быть, достаточно 13? Это самая скромная величина. Или все же остановимся на 16?
— Представьте, — сказал Карлос, — что карточки — это ведра. Если история равна 16, то она не войдет в ведро, которое вмещает 13. Введение новых величин нам ни к чему, поскольку это приводит к излишней точности. Мы не знаем, сколько здесь в точности: 13, 16 или 19. Важно помнить, что это всего лишь оценки, а не гарантии.
— Окей, я думаю, что эта история в два-три раза больше, чем движок среднего уровня, — сказал Аллан. — Это означает диапазон от 16 до 24. Поскольку 24 не войдет в ведро, вмещающее 20, значит, мне надо дать оценку 40? Это многовато. Наша история не тянет по размеру на пять историй с движком среднего уровня.
— Нет, я бы не стал делать этого, — ответил Карлос. — Это, конечно, ведра, но представьте, что их наполняют не водой, а песком. Значит, вы можете насыпать песок горкой.
— Перейдем к оценке, — сказал Аллан.
После этого обсуждения все единодушно согласились с Алланом и подняли оценку 20.
— Итак, мы оцениваем эту историю в 20, — сказал Карлос. — На данном этапе это нормально, но потом, вполне возможно, нам придется разбить такую работу как минимум на две части.
— Значит, нам не нужно разбивать эту историю на более мелкие, точно так же, как историю со слабым движком? — спросил Аллан.
— Нет, мы можем сделать это позже, когда подойдет очередь реализации этой истории, — ответил Карлос. — К тому времени мы будем знать больше, а разбивка прямо сейчас ничего полезного нам не принесет.
— Хорошо. Идем дальше, — предложила Делани. — На очереди история «Как игрок я хотел бы иметь возможность использовать систему для игры с другим человеком на моем компьютере». Имеется в виду, что два игрока могут сидеть за одним компьютером и делать ходы по очереди с помощью клавиатуры или мыши. Все, что нам здесь нужно, это получать от компьютера сообщение, когда кто-то выигрывает.
— Другие функции, которые мы идентифицировали, по-прежнему работают, так ведь? — спросил Прасад. — Два игрока могут захотеть использовать функцию отмены и повтора или получать подсказку.
— Конечно, — ответила Делани.
— Думаю, нам надо добавить историю «Как игрок я хочу, чтобы компьютер распознавал выигрышную фигуру», — заметил Аллан.
— А разве это не часть историй о генераторе ходов?
— Да, но если мы вытащим ее, то сможем реализовать отдельно, а это позволит нам быстро написать версию игры «человек против человека» при наличии работающего генератора ходов.
Возражений не последовало, и новую историю оценили в два пункта.
— Аллан, ведь тогда понизятся оценки историй для слабого движка, не так ли? — спросил Фрэнк.
— Не должны. Я бы не стал менять их оценки. Но, если тебе так хочется, можно понизить восьмипунктовые истории до семипунктовых.
— Нет, не нужно этого делать, — вмешался Карлос. — В результате наши оценки окажутся слишком точными. Если бы мы хотели понизить оценку до пяти, то это было бы нормально, а так оставим ее равной восьми.
— Пять — это слишком мало, — сказал Аллан.
— Итак, возвращаемся к оценке истории «Как игрок я хотел бы иметь возможность использовать систему для игры с другим человеком на моем компьютере».
После двух раундов покера планирования члены команды пришли к согласованной оценке: три пункта.
— Теперь очередь истории «Как игроку мне хотелось бы, чтобы оформление игры на экране было эстетически приятным», — прочитала Делани.
— Ну наконец-то моя история, — сказала Роуз, художник.
— Да, только мне хочется переформулировать ее, — сказала Саша. — В нынешней форме она расплывчата и очень большая. Я бы предпочла, чтобы она выглядела так: «Как игрок я хотел бы иметь возможность выбирать между деревянными доской и фишками и металлическими доской и фишками». Что еще мы подразумевали под словами «эстетически приятный»?
— Это имеет отношение к общему облику и впечатлению от игры, — ответил Фрэнк. — Скорее всего, нам не нужны многочисленные меню, но они должны выглядеть красиво. Опции меню должны иметь логичное расположение. Нам нужен привлекательный начальный экран при загрузке игры. Доска и фишки — это весь пользовательский интерфейс. Наверное, нужно сделать какой-нибудь фон вокруг игрового поля. Думаю, это должно быть что-то художественное. Роуз нужно время, чтобы сделать нечто оригинальное.
— Понятно. А нельзя ли разбить это на отдельные истории? — спросила Саша.
— Можно, — вставила слово Делани, — но все может оказаться не так просто. На мой взгляд, меню нужно разрабатывать в контексте тех функций, для которых требуются эти меню или их разделы. Роуз, тебя устроит, если будет одна история для начального экрана и еще одна история для художественного фона?
— Да, вполне. Мне в любом случае пришлось бы работать над ними по отдельности.
Команда быстро оценила следующий набор историй.
— А что нам делать с этой историей? — спросил Прасад, указывая на карточку, где значилось «Как игрок я хотел бы иметь возможность иногда пользоваться подсказками».
— Что ты имеешь в виду?
— Если мы сделаем генератор ходов, эта история будет несложной. Нужно лишь, чтобы генератор предложил новый ход, но не компьютеру, а игроку. Это проще простого. Но если у нас не будет готового генератора ходов, то история становится по размеру такой же, как и создание целого генератора ходов.
— Ну вот, мы получили взаимозависимость: подсказку можно сделать только после реализации генератора ходов, — сказал Аллан.
— Да, но я не думаю, что это будет проблемой, — заметила Саша. — Разработка генератора ходов до функции подсказки вполне естественна для реализации этих историй. Взаимозависимость не будет нам мешать, и на нее не нужно обращать внимания. А чтобы не забыть о существовании такой взаимозависимости, ее можно записать в карточку. Так или иначе, эту историю можно оценить, исходя из предположения, что генератор ходов существует.
Все согласились, и историю оценили в один пункт.
— А что бы мы сделали, если бы и впрямь захотели реализовать подсказку до разработки генератора ходов?
— Иногда невозможно избавиться от взаимозависимости и с этим нужно смириться, как вы это делали до использования agile-подхода, — пояснил Карлос. — Чаще всего, однако, от нее удается избавиться. В нашем случае можно написать код, который позволяет пользователю запрашивать подсказку, отображать ее на экране и делать ход за пользователя, если он согласен. Чтобы получить подсказку, в системе должно быть нечто, называемое генератором подсказок. В конечном итоге он должен будет обращаться к генератору ходов для получения рекомендации, однако сейчас можно ограничиться тем, чтобы он выдавал ближайшую свободную клетку или случайную свободную клетку. Таким образом можно реализовать историю подсказки даже до начала разработки генератора ходов.
— Надо не забыть вернуться к этому вопросу позднее и сделать так, чтобы генератор подсказки действительно обращался к генератору ходов, — сказал Аллан.
— Да, — подтвердил Карлос. — Мы можем создать еще одну историю, что-нибудь вроде такой: «Как игрок я хочу получать хорошие подсказки», а не просто подсказки.
— Это, скорее всего, очень маленькое изменение, — заметил Аллан. — Мы удаляем то, что генератор подсказки делает для поиска свободной клетки, и вместо этого посылаем запрос генератору ходов. Такую историю нужно оценить как единицу — точно так же, как и первоначальную историю. Не похоже, чтобы это давало какой-то выигрыш.
— Ну да, — сказал Карлос, — иногда полезно иметь карту с нулем вместо значащих цифр, которые у нас есть. Поскольку нам нужно вернуться к генератору подсказок и подкорректировать код, требуется карточка истории, не позволяющая забыть об этом. Однако задача настолько проста, что хочется дать ей нулевую оценку.
Карлос раздал всем игрокам в покер планирования карты с нулем: «Я придержал их с тем, чтобы вы не использовали ноль до тех пор, пока не зайдет разговор о том, какая история может быть нулевой». У каждого участника теперь была колода карт, содержащая 0, 1, 2, 3, 5, 8, 13, 20, 40 и 100.
— В нашем случае, впрочем, необходимо добавить поддержку подсказки после реализации генератора ходов. Так? — спросил Фрэнк.
— Да, мы оформим это как однопунктовую историю, — ответила Саша.
Обсуждение продолжалось до тех пор, пока команда не оценила все записанные истории. Эти истории с оценками приведены в табл. 23.5.
— Так что мы будем делать после этого? Нам нужна еще одна двухнедельная итерация на Deep Black & White, прежде чем мы сможем отправить ее издателю, — сказал Фрэнк.
— Пока остальные работают над ней, я опрошу нескольких потенциальных покупателей новой игры, — сказала Делани. — Я хочу понять, какие функции наиболее важны.
— На это уйдет много времени?
— Нет, я собираюсь закончить все до завершения итерации, — добавила Делани. — Давайте соберемся опять через две недели, сразу после отгрузки Deep Black & White и после того, как Фрэнк соберет нас, чтобы отпраздновать завершение этой работы.
— Хорошая идея. Я займусь организацией этого мероприятия. Гамбургеры подойдут, Делани? Или мы замахнемся на пиццу?
Таблица 23.5. Оценки всех записанных историй
Текст истории |
Оценка |
Как игрок я могу начать новую игру |
1 |
Как игрок я могу восстановить сохраненную игру |
2 |
Как игрок я могу выбирать уровень сложности |
1 |
Как игрок я могу играть против слабого движка, распознающего только кольца |
8 |
Как игрок я могу играть против слабого движка, распознающего только мосты |
5 |
Как игрок я могу играть против слабого движка, распознающего только вилки |
8 |
Как игрок я могу играть против движка среднего уровня |
8 |
Как игрок я могу играть против движка высокого уровня |
20 |
Как игрок я хотел бы иметь возможность использовать систему для игры с другим человеком на моем компьютере |
3 |
Как игрок я хочу, чтобы компьютер распознавал выигрышную фигуру |
2 |
Как игрок я хочу видеть привлекательный начальный экран при загрузке игры |
5 |
Как игрок я хочу видеть привлекательный фон вокруг игрового поля, сочетающийся с выбранной доской |
5 |
Как игрок я хотел бы иметь возможность выбирать между деревянной и металлической доской и фишками |
8 |
Как игрок я хотел бы иметь возможность иногда пользоваться подсказками |
1 |
Как новый игрок я хочу иметь возможность ознакомиться с интерактивным самоучителем по игре |
8 |
Как игрок я хочу, чтобы в игре был музыкальный фон |
5 |
Как игрок я могу выбирать музыкальный фон игры |
1 |
Как игрок я хочу ставить фишку на доску с помощью клавиатуры или мыши |
3 |
Как игрок я хочу видеть визуальный индикатор очередности хода |
2 |
Как игрок я хотел бы видеть визуальный индикатор последней поставленной фишки (возможно, сделать ее мигающей) |
2 |
Как игрок я хотел бы иметь возможность отменять и повторять ходы |
2 |
Как игрок я хотел бы иметь возможность сохранять партии |
3 |
Как игрок я хочу иметь возможность закончить игру |
1 |
Как игрок я хочу возобновлять игру так, чтобы можно было отказаться от текущей игры и начать новую |
1 |
Как новый игрок я хочу иметь доступ к онлайновой справочной системе |
8 |
Как игрок я хочу, чтобы все фишки выигрышной фигуры мигали или подсвечивались с тем, чтобы можно было видеть выигрышную фигуру |
3 |
Как новый игрок я хотел бы получать предупреждение о неудачном ходе и иметь возможность отменять его |
8 |
Как новый игрок я хотел бы, когда наступает моя очередь делать ход, видеть клетку, на которую нужно поставить фишку, чтобы ее не занял компьютер и не обыграл меня |
3 |
Как игрок я хотел бы, чтобы компьютеру требовалось на ход не более двух секунд на 2,0 ГГц PC |
8 |
Как игрок я хочу, чтобы система отслеживала, сколько партий я выиграл, а сколько проиграл (в зависимости от уровня сложности?) |
3 |
Как игрок я хотел бы добавлять комментарии к сохраненным партиям |
3 |
Как игрок я хотел бы просматривать ходы с тем, чтобы иметь возможность анализировать сыгранные партии |
5 |