Како сам изградио свој пројекат за једну особу: шаховски мотор за популарни мотор за развој игре

Недавно сам завршио један од својих летњих пројеката: шаховски ГУИ мотор направљен помоћу Рен'Пи Висуал Новел Гаме Девелопмент Енгине-а и питхон-шаховске библиотеке.

Овај мотор ће бити интегрисан у кинетичку нову игру, Тхе Винд ат Давн , по завршетку те игре.

У овом посту бих желео да поделим нека кључна учења, техничка и нетехничка, која сам прикупио гурајући овај пројекат од једне особе од почетка до краја за месец дана.

Цените вредност преписивања старог кода

За ЦС пројекте у школи ретко имам прилику или искусим потребу да поново погледам свој код.

Међутим, ово није случај када радим на својим страственим пројектима: волим да искористим сваку прилику да побољшам њихову употребљивост и поновну употребу у нади да ће мој код бити вредан за друге програмере.

Овај шаховски мотор заснован је на шаховском механизму који сам створио у Рен'Пиу и ванилин Питхону док сам предавао себе Питхону током моје прве летње паузе на факултету.

Тај стари шаховски мотор је, пак, заснован на пројекту мог колеџа Интро то ЦС класе (шаховска ГУИ игра написана у Рацкет-у, функционалном програмском језику). То ће рећи, двапут сам преписивао свој код како бих произвео овај последњи шаховски мотор.

За свој први препис, једноставно сам „превео“ шаховску логику (за утврђивање да ли је потез легалан, услови ендгаме-а итд.) Са Рекета на Пајтон. Такође сам експериментисао са објектно оријентисаним програмирањем, написао минимак шаховски АИ пратећи мрежне водиче и имплементирао ГУИ у Рен'Пи.

Будући да сам знао само основне основе шаха и написао сам своју шаховску логику према школском пројекту, оцењујући спецификације, мој први шаховски мотор није подржавао посебне потезе као што су ен пассант, кастелинг или промоција.

Да бих се позабавио овим проблемом у свом другом преписивању, истраживао сам Питхон библиотеке отвореног кода и пронашао питхон-цхесс, библиотеку са потпуном подршком за шаховске потезе и услове у завршници, попут захтева за нерешеним резултатом када се догоди троструко понављање.

Поврх тога, такође је интегрисао Стоцкфисх, шаховски АИ, и ова интеграција ће омогућити мом шаховском мотору да конфигурише снагу шаховског АИ.

Ове две карактеристике додале су велику вредност мом шаховском мотору верзије 2.0 и омогућиле ми да се усредсредим на важније аспекте мог преписивања, које ћу описати у наставку.

Прочитајте документацију и имајте на уму компатибилност

Постала ми је навика да прелазим кроз документацију библиотека која ми је потребна за мој пројекат пре него што ускочим у дизајн и код. Ово ми помаже да проценим било који проблем у зависности и компатибилности који се може појавити.

Ово издање Рен'Пи ГитХуб указује на чињеницу да Рен'Пи користи Питхон 2 и још увек није пренет на Питхон 3. Дакле, препознао сам да ми треба верзија питхон-шаха која подржава Питхон 2, као најновија верзија подржава Питхон 3.7+.

Срећом, верзија 0.23.10 подржава и Питхон 2.7 и Питхон 3.4+. На крају сам се одлучио за верзију 0.23.11 јер је то последња верзија која и даље подржава Питхон 2.7.

Пошто сам средио проблеме зависности и компатибилности, био сам спреман да пређем на дизајн и кодирање.

Пратите најбоље праксе софтверског инжењерства

Напомена: Многи термини поменути у овом одељку потичу из Агиле / Сцрум-а.

Прикупите карактеристике захтева за дизајн пројеката

Иако је примамљиво да пређем директно на кодирање, не могу довољно нагласити важност дизајна.

Замислите дизајн као мапу пута на високом нивоу која јасно оцртава почетну тачку, прекретнице и крајње тачке пројекта. То омогућава програмерима да се обрате на сложене детаље у сложеним детаљима примене.

Ово је посебно важно за ваннаставне пројекте, јер они обично немају детаљне, високотехничке спецификације, док већина школских пројеката то има.

За свој шаховски мотор препознао сам следеће преправке / додатне карактеристике:

  • Интегришите шаховску логику из питон-шаха
  • У мом Рен'Пи ГУИ коду, замените шаховску логику и шаховски АИ који сам написао шаховском логиком и Стоцкфисх АПИ-јем из питхон-цхесс
  • Подржава различите режиме играња: играч против играча, играч против рачунара (где играч може да одабере да игра као црно или бело), ​​подесива снага шаховског АИ кроз прилагођавање конфигурационих параметара Стоцкфисх-а
  • Развити Рен'Пи ГУИ за промоцију пешака
  • Развити Рен'Пи ГУИ за полагање права на реми у случају троструког понављања или правила педесет потеза

Развити доказ прототипа концепта

Прототип Прооф оф Цонцепт (ПОЦ) помаже ми да измерим време и напор потребне за примену потребних карактеристика.

За свој шаховски мотор ПОЦ интегрисао сам шах са питоном са својим оригиналним Рен'Пи ГУИ кодом. Уверио сам се да је његов скуп функција минималан, али се лако може проширити:

  • Интегрисао сам питхон-шах са својим оригиналним Рен'Пи ГУИ кодом и могао сам да померам фигуре
  • Имплементирао сам само играча против играча да бих одложио интеграцију Стоцкфисх-а за шаховску АИ
  • Дозволио сам само непромовисане потезе како бих одложио развој ГУИ-а за промоцију пешака

Утврдите дефиницију пројекта спремни и дефиницију готовог

Дефиниција спремности (ДоР) мог пројекта природно следи из мог почетног испитивања компатибилности верзије библиотеке и мог ПОЦ-а.

Паралелно са тим, дефиниција готовог пројекта (ДоД) следи из захтева за карактеристике које сам идентификовао у фази дизајнирања.

Испоручите минимално одржив производ, или још боље, минимални производ који вам се допада

Када сам био у фази прикупљања захтева за фазу дизајна, знао сам да мој пројекат има много затегнутих циљева - можда чак и више него што бих икада могао да постигнем.

Дакле, било ми је важно да имплементирам врло основни скуп потребних карактеристика, испоручим минимално одрживи производ (МВП) и прикупим повратне информације како бих га поновио.

Још боље, желео бих да испоручим минимално леп производ (МЛП) на својој првој итерацији. Минута је у томе што док МВП не захтева ништа више од функционалних карактеристика, МЛП по свом дизајну има симпатично корисничко искуство.

На пример, да бих применио потезе за промоцију пешака, за МВП бих могао да затражим од корисника да притисну различите тастере да би изабрали тип комада у који желе да се промовишу (попут Б за бискупа и К за витеза).

За МЛП бих применио кориснички интерфејс са дугмадима у облику комада који мењају боје када се задрже или одаберу.

Будите сами свој менаџер пројеката

Ако сматрате да је праћење листе функција (плус све већа листа грешака и исправки) неодољиво, нисте сами. Време је да будете свој менаџер пројеката.

Сматрао сам да је Трелло невероватно средство како за пројекте са једном особом, тако и за пројекте са великим тимовима.

Ево како обично организујем своју Трелло плочу за кодирање:

Имати четири листе: Заостатак (за функције које ће се претресати), ТОДО , Доинг и Готово.

Имати ознаке у боји:

  • Спреман за КА: Црвена етикета да привучем пажњу мојих саиграча
  • Утицај: низак (жути) наспрам високи (наранџасти), одређен количином удара коју ће карактеристика или исправка грешке створити. На пример, благо неусклађени УИ панел има мали утицај где је детерминистички рушива грешка јаког удара.
  • Процена времена које ће бити потребно за примену: тривијално (<1 сат, теал), средње (1-2 сата, светло плава) и тешко (2–4 сата, тамно плава).

    Моје друго основно правило је да, ако проценим да ће картици требати више од 4 сата да је применим, вероватно бих је требао раставити на неколико фино зрнатих карата.

  • Боја служи као одличан визуелни знак: Увек се борим са картицама са наранџастим и теал ознакама (јак ударац и кратко време посвећености) пре него што се борим са онима са жутим и тешким ознакама (слаб ударац, али посвећеност времену).

Напишите документацију и размислите о свом учењу

Када сте пребацили сваку Трелло картицу са ТОДО на Доинг то Доне и исправили сваку гадну грешку, да ли је коначно време да се пројекат позове? Да и не.

Да бих максимализирао своје учење из пројекта, сматрам да ми се изузетно исплати размислити о својим могућностима за понети, техничким или софт вештинама:

  1. Напишите јасан, сажет РЕАДМЕ у спремиште пројеката ГитХуб. Ово помаже другим програмерима да разумеју и да се заинтересују за пројекат.
  2. Напишите чланак на блогу (попут овог који сада пишем) о аспектима вишег нивоа, на пример, прегледу архитектуре, дизајну карактеристика, изазовима и решењима итд.

Кредити и везе

Велико хвала Тим Мин-у што ме је понукао да радим на овом пројекту, за његове доприносе (идеје за нове функције + КА) на одбору Трелло-а и за то што ме држи одговорном. Тим је писац кинетичке игре романа Ветар у зору .

  • Моје спремиште ГитХуб шаховског мотора
  • Јавна Трелло табла за овај пројекат шаховског мотора
  • Рен'Пи: Визуелни нови механизам за развој игара
  • питхон-цхесс: чиста Питхон шаховска библиотека

Останимо у контакту! Повежите се са мном на ЛинкедИн-у, ГитХуб-у, Медиум-у или погледајте моју личну веб страницу.