Code Monkey home page Code Monkey logo

multipoints's Introduction

About

Клиент для игры Точки

lobby-screenshot

game-screenshot

Building

Build the project with sbt createSignedJar.

Исходники MultiPoints

Исходники MultiPoints открыты и доступны по адресу https://github.com/vn971/multipoints

Лицензия - GPL v2. Для работы с исходниками MultiPoints вам понадобятся:

  • Компилятор джавы JDK. В линуксе пакет называется openjdk-7-jdk. В винде надо залезть на сайт и пытаться выбрать версию jdk без нахлобучек и доп.пакетов, мегов на 20-30.
  • IDE. Я лично использую для разработки eclipse http://eclipse.org
  • система контроля версий git https://git-scm.com/
  • средство сборки проектов SBT http://scala-sbt.org/
  • также желательно наличие аккаунта на https://github.com

Компоненты программы

Программа в первом приближении состоит из трёх слоёв:

  • чистый GUI
  • чистая серверная часть
  • менеджер GUI (промежуточная часть)

Серверная часть отвечает за общение с физическим (удалённым) сервером, чистый GUI отвечает за прорисовку, менеджер GUI отвечает за взаимодействие первого и второго.

Схема взаимодействия

Схема взаимодействия слоёв в большинстве случаев одна из двух видов. Первый вид:

  • происходит событие на сервере =>
  • серверная часть получает событие, преобразует его в надлежащую форму, отсылает менеджеру GUI =>
  • менеджер GUI находит нужную компоненту GUI которая должна отразить изменение (возможно несколько), отсылает компоненте относящиеся к ней данные =>
  • нужная компонента GUI отрисовывает изменение.

Второй наиболее популярный вид взаимодействия:

  • пользователь что-то тыкает в GUI =>
  • часть с чистым GUI получает изменение, у себя никак графически ничего не изменяет, отсылает событие =>
  • если действие было только визуально, то событие отправляется менеджеру GUI.
  • если действие содержит в себе какие-то данные для отсылки серверу, то событие адресуется серверной части =>
  • серверная часть отсылает изменения на физический удалённый сервер =>
  • если сервер не поддерживает отчётов о получении, то серверная часть тут же отсылает менеджеру GUI отправленные ("подтверждённые") данные.

Также, для компонент GUI доступна операция "подписи за обновлениями" некоторых событий сервера. Например, есть компоненты, которые подписываются на изменения описания игры. Когда описание игры изменяется, компоненты автоматически обновляются. Разница между таким способом обновления и способом через менеджер в том, что менеджер чётко знает какие компоненты ему нужно обновить (чаще всего это одна или две), в то время подписчиков может быть сколь угодно много, и они не связаны никак между собой.

Одна из задач, которые я хочу попробовать для MultiPoints -- это перевести все имеющиеся компоненты в подписчиков, для более единообразной работы программы. Но пока-что это только на стадии разработки/обдумки, поэтому общение ведётся и через подпись на обновление, и через менеджер GUI.

Ключевые компоненты GUI

  • чат. Позволяет принимать сообщения от пользователя и прорисовывать входящие сообщения.
  • список игр. Позволяет "тыкать" по играм для захода в них.
  • список пользователей.
  • ... (надо будет дописать потом)

описание классов

  • com.google.sites.priymakpoints.* -- классы Алексея Приймака. Там работа с встроенным ИИ, а также обучалка "pointsIQ".
  • Ai2GuiInterface, Gui2Ai_Interface -- интерфейсы для общения с ИИ версии 2 (старая).
  • ConsoleAi6, ConsoleGui6 -- интерфейсы для общения с ИИ, версия 6 (последняя).
  • KeijKvantttAi -- реализация интерфейся для общения с ИИ. Называется почему-то KeijKvanttt, но на самом деле работает с любой программой имплементирующей интерейс.
  • RandomAI -- тестовый ИИ.
  • DotColored, Dot -- классы в состоянии разработки.
  • GameInfoListener -- класс через который GUI может подписываться на изменения описания комнаты.
  • GameOuterInfo -- класс, хранящий "внешнюю" информацию о комнате.
  • GamePool -- внутренний класс для GuiController.
  • PlayerChangeListener -- класс через который GUI может подписываться на изменения информации об игроке.
  • Sgf -- класс, отвечающий за работу с SGF.
  • TimeLeft, TimeSettings -- класс, через который Server объясняет GUI сколько у каждого игрока осталось время и "тикает" ли оно (уменьшается).
  • RandomMovesProvider -- класс генерит произвольные ходы. Делает это быстро, даже когда поле почти полностью заполненное.
  • SingleGameEngineInterface -- интерфейс для просчёта окружений на поле
  • SingleGameEngine -- класс, просчитывающий окружения на поле. Он помнит расположение точек на поле, все окружения. Умеет принимать новые точки, просчитывать окружения и говорить что получилось.
  • AiPanel -- вкладка (tab) для игры с ИИ. В разработке, по сути ничего там нет.
  • GameInvitePersonal -- всплывающее окошко с настройками индивидуального приглашения на игру.
  • GameRoom -- вкладка с игрой
  • GameSettings -- всплывающее окошко с настройками создания новой игры
  • GuiCommon -- всякие общие методы GUI. Например, преобразовать цвет "Color" в html-код.
  • JTabbedPaneMod -- класс отвечающий за вкладки (умеет закрывать вкладки, в отличии от дефолтного класса Swing).
  • LangRoom -- языковая комната. Это то, где общий чат на весь сервер. В теории их может быть несколько, но ни на одном из существующих серверов пока такой возможности нет. Функция не тестировалась.
  • Paper -- класс, отвечающий за прорисовку поля. Несовершенный, его много где можно подправить. Рядом вроде даже где-то readme валяется с тем как хочется чтобы оно умело.
  • PrivateChat -- вкладка с приватным чатом.
  • RoomInterface -- попытка выделить общий интерфейс для всех вкладок. Попытка провальная. Ведутся работы по уничтожению этого класса.
  • RoomPart_Chat -- класс отвечающий только за чат. Текст сверху и линия ввода снизу. Такой чат можно вставлять в разные компоненты -- например, в игровую вкладку, во вкладку с общим чатом, во вкладку с приватным чатом и т.п.
  • RoomPart_GameList -- аналогично пункту выше, только список игр.
  • RoomPart_UserList -- аналогично пункту выше, только список игроков.
  • SelfishGuiStarter -- класс с дурацким названием отвечающий за загрузку приложения. Переименовывать нельзя, иначе перестанут работать старые JNLP-файлики. В этом же классе создаётся верхнее меню проги.
  • TabCloseable -- класс, прорисовывающий закрывающуюся вкладку. То пространство на котором название вкладки и крестик чтобы закрыть.
  • TimerLabel -- панелька, показывающая оставшееся время в игре.
  • WelcomePanel -- стартовый tab приветствующий пользователя и дающий возможность зайти дальше на IRC/zagram
  • GuiController -- промежуточный слой между GUI и Server. Смотри выше в описании.
  • ServerInterface -- интерфейс сервера. В нём методы типа "сказать что-то в такой-то комнате", "сходить туда-то в такой-то комнате", "сделать то-то"...
  • AiVirtualServer -- класс для сервера. Конкретно, ИИ, прикидывающегося сервером. Это некоторый костыль чтобы вкладка с игрой с ИИ выглядела как комната в живом сервере. Сделал так в своё время по просьбе Алексея Приймака.
  • IrcNicknameManager -- класс для запоминания и извлечения IRC-ников.
  • IrcRegexp -- класс для обработки ников IRC (извлечение о статусе и т.п.)
  • MockServerForGui -- виртуальный класс для сервера. Для тестирования GUI.
  • ServerPointsxt -- класс сервера, присоединяющийся к реальному удалённому IRC-серверу.
  • ServerZagram2 -- класс сервера, присоединяющийся к zagram
  • Sounds -- класс, воспроизводящий звук поставленной точки, приватное сообщение и т.п.

Все GUI-классы разрабатываются в NetBeans, графическим редактором.

multipoints's People

Stargazers

 avatar

Watchers

 avatar  avatar  avatar

Forkers

orctech

multipoints's Issues

graphical inaccuracy: surrounded point has incorrect color

Screenshot (look around the center, a bit to the left):

Game saved in sgftochki format:

(;FF[4]GM[40]CA[UTF-8]SZ[39:32]RU[Punish=0,Holes=1,AddTurn=0,MustSurr=1,MinArea=1,Pass=0,Stop=1,LastSafe=0,ScoreTerr=0,InstantWin=0]AP[pointsOp]PB[^vn91]PW[^ЯроБот3]TM[1]OT[1]
DT[2015-11-22 17:57:16]

WR[0]BR[0]
;W[qq]
;B[rq]
;W[rr]
;B[qr]
;W[qp]
;B[An]
;W[sq]
;B[Go]
;W[rp]
;B[Ht]
;W[qs]
;B[KA]
;W[pr]
;B[bv]
;W[st]
;B[ac]
;W[In]
;B[Cx]
;W[ur]
;B[du]
;W[Io]
;B[dd]
;W[uu]
;B[wA]
;W[Gp]
;B[At]
;W[Kx]
;B[fi]
;W[ek]
;B[nz]
;W[Ir]
;B[vs]
;W[Hp]
;B[da]
;W[ff]
;B[zp]
;W[Kp]
;B[tF]
;W[en]
;B[sh]
;W[ws]
;B[ko]
;W[dx]
;B[Lf]
;W[xs]
;B[ci]
;W[wz]
;B[up]
;W[Bq]
;B[ro]
;W[vr]
;B[Iv]
;W[wB]
;B[Aq]
;W[Dt]
;B[hE]
;W[Fq]
;B[eh]
;W[Jy]
;B[us]
;W[rv]
;B[Ao]
;W[gj]
;B[DF]
;W[JC]
;B[dA]
;W[tr]
;B[kD]
;W[Gw]
;B[xi]
;W[JD]
;B[au]
;W[yu]
;B[py]
;W[xt]
;B[hv]
;W[dh]
;B[Jp]
;W[uw]
;B[ai]
;W[pq]
;B[pd]
;W[vx]
;B[ux]
;W[my]
;B[vw]
;W[Lr]
;B[Fh]
;W[no]
;B[Ko]
;W[qv]
;B[ox]
;W[eg]
;B[Du]
;W[Ar]
;B[yE]
;W[db]
;B[ht]
;W[sx]
;B[es]
;W[Fn]
;B[Ef]
;W[Ft]
;B[tt]
;W[If]
;B[rF]
;W[kC]
;B[Mr]
;W[Dr]
;B[Ap]
;W[wo]
;B[Eo]
;W[kF]
;B[xe]
;W[uD]
;B[pa]
;W[KE]
;B[dg]
;W[vA]
;B[xm]
;W[Ds]
;B[ll]
;W[Eu]
;B[Le]
;W[pe]
;B[lr]
;W[Dz]
;B[bF]
;W[sA]
;B[ui]
;W[ym]
;B[ol]
;W[Jl]
;B[nF]
;W[od]
;B[Dm]
;W[me]
;B[va]
;W[sk]
;B[mt]
;W[kn]
;B[fc]
;W[gt]
;B[Cs]
;W[zi]
;B[bj]
;W[jw]
;B[uE]
;W[fF]
;B[oz]
;W[gE]
;B[Lo]
;W[er]
;B[bl]
;W[aw]
;B[dq]
;W[zA]
;B[Ee]
;W[Ag]
;B[rA]
;W[IB]
;B[Ho]
;W[hc]
;B[Fx]
;W[sy]
;B[aq]
;W[cw]
;B[El]
;W[jq]
;B[xB]
;W[cu]
;B[we]
;W[xv]
;B[fj]
;W[sv]
;B[ls]
;W[Li]
;B[En]
;W[Dn]
;B[tj]
;W[lB]
;B[cp]
;W[iE]
;B[wd]
;W[Kh]
;B[gB]
;W[xE]
;B[iA]
;W[FB]
;B[yn]
;W[Fy]
;B[mx]
;W[kf]
;B[hA]
;W[cb]
;B[kw]
;W[pt]
;B[xy]
;W[Cq]
;B[xr]
;W[nn]
;B[wm]
;W[Fc]
;B[bs]
;W[sB]
;B[sc]
;W[Ge]
;B[mo]
;W[FE]
;B[pE]
;W[Fo]
;B[zd]
;W[cg]
;B[go]
;W[Mm]
;B[Ih]
;W[wi]
;B[vj]
;W[jn]
;B[CE]
;W[Ex]
;B[Be]
;W[Cg]
;B[Hc]
;W[iq]
;B[wC]
;W[Ck]
;B[GA]
;W[id]
;B[gA]
;W[vc]
;B[Ep]
;W[rt]
;B[nB]
;W[np]
;B[mF]
;W[ln]
;B[xp]
;W[Gu]
;B[nw]
;W[Gv]
;B[tp]
;W[wx]
;B[zj]
;W[ig]
;B[Jg]
;W[Kr]
;B[hs]
;W[dn]
;B[yy]
;W[sw]
;B[cl]
;W[CC]
;B[eq]
;W[fh]
;B[oF]
;W[fD]
;B[ud]
;W[wk]
;B[Ky]
;W[tE]
;B[gr]
;W[Bb]
;B[qe]
;W[Mp]
;B[Ke]
;W[iv]
;B[fz]
;W[qz]
;B[EF]
;W[Gy]
;B[aB]
;W[tq]
;B[Cd]
;W[cm]
;B[xz]
;W[BD]
;B[gC]
;W[JF]
;B[Ji]
;W[yw]
;B[Kl]
;W[nf]
;B[ba]
;W[Js]
;B[cC]
;W[hD]
;B[yx]
;W[Kb]
;B[zF]
;W[ew]
;B[mn]
;W[eA]
;B[Gk]
;W[sF]
;B[Ll]
;W[dz]
;B[Id]
;W[oq]
;B[ED]
;W[jl]
;B[jz]
;W[Cm]
;B[Hl]
;W[rj]
;B[bm]
;W[jE]
;B[in]
;W[Bt]
;B[Kc]
;W[xA]
;B[dl]
;W[kB]
;B[ku]
;W[Cl]
;B[ww]
;W[dw]
;B[ae]
;W[li]
;B[yz]
;W[ya]
;B[pC]
;W[Ek]
;B[Jv]
;W[ni]
;B[an]
;W[jj]
;B[uk]
;W[jt]
;B[cD]
;W[bo]
;B[ps]
;W[Ba]
;B[ia]
;W[hB]
;B[rg]
;W[mb]
;B[Hq]
;W[iw]
;B[bB]
;W[ga]
;B[lA]
;W[ja]
;B[Fa]
;W[ky]
;B[yp]
;W[lo]
;B[Bi]
;W[jD]
;B[pf]
;W[hi]
;B[uz]
;W[fk]
;B[uB]
;W[Mi]
;B[Ah]
;W[Bp]
;B[Lw]
;W[xF]
;B[AA]
;W[tc]
;B[ng]
;W[zy]
;B[pw]
;W[IF]
;B[DA]
;W[Gn]
;B[Ab]
;W[tn]
;B[ID]
;W[zl]
;B[Mj]
;W[yA]
;B[vD]
;W[oi]
;B[Ae]
;W[fE]
;B[ib]
;W[aD]
;B[hp]
;W[Bo]
;B[ov]
;W[Iy]
;B[qD]
;W[Mz]
;B[Aa]
;W[ip]
;B[dF]
;W[JE]
;B[vF]
;W[ej]
;B[jy]
;W[ge]
;B[bg]
;W[ei]
;B[lw]
;W[DB]
;B[qk]
;W[Bj]
;B[te]
;W[Eh]
;B[xD]
;W[Di]
;B[pF]
;W[fp]
;B[zg]
;W[xc]
;B[ec]
;W[wu]
;B[Co]
;W[io]
;B[bh]
;W[EE]
;B[vC]
;W[rf]
;B[lm]
;W[Lj]
;B[mC]
;W[bb]
;B[bf]
;W[Bv]
;B[Br]
;W[zC]
;B[rl]
;W[tm]
;B[yj]
;W[pk]
;B[Au]
;W[eu]
;B[hw]
;W[lF]
;B[Kq]
;W[ph]
;B[Fl]
;W[uf]
;B[uo]
;W[qg]
;B[nj]
;W[nc]
;B[fl]
;W[fA]
;B[iu]
;W[Lt]
;B[Gq]
;W[iy]
;B[Ak]
;W[mB]
;B[LE]
;W[xh]
;B[Lh]
;W[wh]
;B[ua]
;W[xn]
;B[Hy]
;W[nb]
;B[Em]
;W[qf]
;B[Ik]
;W[ug]
;B[jc]
;W[Fj]
;B[xw]
;W[he]
;B[nm]
;W[De]
;B[Hf]
;W[rC]
;B[Mo]
;W[rm]
;B[zt]
;W[sE]
;B[lx]
;W[qx]
;B[tl]
;W[uc]
;B[GC]
;W[gl]
;B[dk]
;W[se]
;B[rn]
;W[wE]
;B[FA]
;W[dE]
;B[Dd]
;W[Jr]
;B[dm]
;W[vd]
;B[eF]
;W[uA]
;B[Dj]
;W[Hw]
;B[wc]
;W[wp]
;B[Ew]
;W[qC]
;B[Lv]
;W[BC]
;B[bx]
;W[ct]
;B[Me]
;W[ne]
;B[Ca]
;W[ld]
;B[vh]
;W[Al]
;B[Lx]
;W[qi]
;B[Lb]
;W[MD]
;B[Mx]
;W[pb]
;B[LA]
;W[qy]
;B[yk]
;W[po]
;B[tw]
;W[Kz]
;B[fw]
;W[Bd]
;B[lg]
;W[so]
;B[yt]
;W[Ka]
;B[xa]
;W[ra]
;B[iC]
;W[wa]
;B[wF]
;W[yh]
;B[Dg]
;W[aF]
;B[Is]
;W[cz]
;B[hm]
;W[kl]
;B[Jm]
;W[mp]
;B[cj]
;W[Gi]
;B[Bh]
;W[zD]
;B[nh]
;W[Dv]
;B[Ec]
;W[sl]
;B[Fz]
;W[fy]
;B[uy]
;W[Fk]
;B[tb]
;W[zs]
;B[gk]
;W[qj]
;B[Jd]
;W[if]
;B[px]
;W[Eq]
;B[vm]
;W[ns]
;B[nl]
;W[Kv]
;B[zz]
;W[vz]
;B[Ic]
;W[JB]
;B[He]
;W[fb]
;B[ut]
;W[Mu]
;B[cA]
;W[Fm]
;B[CD]
;W[Bm]
;B[rs]
;W[tu]
;B[kb]
;W[yq]
;B[qm]
;W[Km]
;B[Do]
;W[qA]
;B[Gb]
;W[jf]
;B[Aw]
;W[qE]
;B[cx]
;W[tA]
;B[ao]
;W[Fg]
;B[be]
;W[os]
;B[ye]
;W[Hn]
;B[rd]
;W[GF]
;B[sg]
;W[xl]
;B[Lc]
;W[wl]
;B[eB]
;W[Bc]
;B[Iu]
;W[fa]
;B[ds]
;W[fr]
;B[Gc]
;W[Gh]
;B[kp]
;W[fs]
;B[or]
;W[la]
;B[jA]
;W[kA]
;B[il]
;W[IA]
;B[kz]
;W[Gd]
;B[gd]
;W[xo]
;B[om]
;W[LC]
;B[Md]
;W[jm]
;B[vt]
;W[Dh]
;B[Ce]
;W[Jw]
;B[AE]
;W[ex]
;B[ok]
;W[as]
;B[oB]
;W[im]
;B[Er]
;W[Bn]
;B[nd]
;W[IC]
;B[xq]
;W[wy]
;B[hk]
;W[xk]
;B[td]
;W[sn]
;B[jo]
;W[cF]
;B[AC]
;W[hf]
;B[Ki]
;W[Dy]
;B[gh]
;W[Hi]
;B[sz]
;W[ij]
;B[Fp]
;W[bA]
;B[ka]
;W[kx]
;B[Gf]
;W[Mt]
;B[ob]
;W[sb]
;B[na]
;W[DD]
;B[eC]
;W[al]
;B[cf]
;W[Jo]
;B[AF]
;W[Gt]
;B[dr]
;W[kE]
;B[qB]
;W[ic]
;B[ix]
;W[Ml]
;B[Fb]
;W[zr]
;B[Gs]
;W[Dk]
;B[LD]
;W[mg]
;B[Ay]
;W[FC]
;B[mu]
;W[tC]
;B[Hk]
;W[ve]
;B[rh]
;W[lk]
;B[Eb]
;W[Gl]
;B[eE]
;W[kt]
;B[rD]
;W[ik]
;B[yl]
;W[dD]
;B[rc]
;W[sr]
;B[LB]
;W[gb]
;B[rb]
;W[AB]
;B[ou]
;W[gD]
;B[FF]
;W[xj]
;B[wt]
;W[MB]
;B[vE]
;W[gq]
;B[it]
;W[HD]
;B[hr]
;W[Ja]
;B[IE]
;W[gu]
;B[zk]
;W[jC]
;B[Ei]
;W[dB]
;B[wD]
;W[wb]
;B[pB]
;W[KC]
;B[ay]
;W[Db]
;B[Dc]
;W[bw]
;B[xd]
;W[nu]
;B[Af]
;W[lu]
;B[ot]
;W[gf]
;B[yB]
;W[bC]
;B[qt]
;W[de]
;B[lj]
;W[aA]
;B[ar]
;W[su]
;B[rx]
;W[md]
;B[ab]
;W[Jx]
;B[gv]
;W[HA]
;B[fe]
;W[ey]
;B[af]
;W[hl]
;B[Bz]
;W[yc]
;B[Hs]
;W[Ln]
;B[nv]
;W[yd]
;B[qo]
;W[ss]
;B[nA]
;W[ly]
;B[bn]
;W[um]
;B[Bg]
;W[bt]
;B[cy]
;W[ax]
;B[mw]
;W[ch]
;B[aj]
;W[Cw]
;B[It]
;W[aC]
;B[vy]
;W[Ga]
;B[Hd]
;W[Dw]
;B[ef]
;W[yf]
;B[Ii]
;W[qc]
;B[EC]
;W[Iz]
;B[zn]
;W[Ai]
;B[qw]
;W[vu]
;B[uq]
;W[Mk]
;B[ju]
;W[Bu]
;B[uF]
;W[pA]
;B[ap]
;W[ks]
;B[Hv]
;W[Ms]
;B[ce]
;W[Ad]
;B[HF]
;W[Fe]
;B[cn]
;W[of]
;B[kh]
;W[Am]
;B[Cj]
;W[yC]
;B[av]
;W[oh]
;B[Az]
;W[Ib]
;B[ep]
;W[HE]
;B[ry]
;W[bq]
;B[Hu]
;W[yr]
;B[pv]
;W[oo]
;B[tx]
;W[qa]
;B[mh]
;W[Lq]
;B[lc]
;W[lh]
;B[Mc]
;W[ys]
;B[yv]
;W[mq]
;B[gm]
;W[GD]
;B[ow]
;W[eb]
;B[tf]
;W[Fw]
;B[og]
;W[Jq]
;B[ih]
;W[jr]
;B[Mn]
;W[ki]
;B[yD]
;W[iD]
;B[dC]
;W[pp]
;B[oD]
;W[wg]
;B[Ff]
;W[GB]
;B[xx]
;W[tD]
;B[Ci]
;W[jp]
;B[dj]
;W[iz]
;B[Gr]
;W[gp]
;B[Lp]
;W[zB]
;B[MC]
;W[jF]
;B[ms]
;W[el]
;B[gF]
;W[hn]
;B[ag]
;W[vb]
;B[iF]
;W[sf]
;B[oE]
;W[Kk]
;B[KB]
;W[mA]
;B[CF]
;W[gz]
;B[KD]
;W[jx]
;B[Hg]
;W[hx]
;B[zw]
;W[dy]
;B[vv]
;W[tz]
;B[BA]
;W[hh]
;B[Jf]
;W[nC]
;B[Df]
;W[nq]
;B[un]
;W[Ju]
;B[vi]
;W[Jj]
;B[Jc]
;W[gx]
;B[vf]
;W[hq]
;B[za]
;W[hb]
;B[tB]
;W[sd]
;B[BE]
;W[hd]
;B[Ch]
;W[ME]
;B[BB]
;W[bp]
;B[Kn]
;W[cq]
;B[lq]
;W[jB]
;B[Gj]
;W[Hr]
;B[vk]
;W[nE]
;B[Bs]
;W[eo]
;B[gw]
;W[ny]
;B[vq]
;W[Ez]
;B[bk]
;W[ul]
;B[JA]
;W[ca]
;B[Jk]
;W[Mv]
;B[Jt]
;W[xu]
;B[Kj]
;W[br]
;B[js]
;W[co]
;B[bi]
;W[ak]
;B[EB]
;W[Ha]
;B[ir]
;W[lp]
;B[nr]
;W[am]
;B[wr]
;W[MF]
;B[eD]
;W[zf]
;B[dp]
;W[As]
;B[Jb]
;W[Ix]
;B[kd]
;W[mf]
;B[Ac]
;W[rB]
;B[Im]
;W[si]
;B[My]
;W[Lg]
;B[fv]
;W[Mh]
;B[Il]
;W[ad]
;B[di]
;W[vg]
;B[BF]
;W[hy]
;B[Ma]
;W[do]
;B[pu]
;W[dv]
;B[ea]
;W[kv]
;B[xf]
;W[Fi]
;B[wf]
;W[Lu]
;B[sD]
;W[yg]
;B[lb]
;W[ze]
;B[Cc]
;W[pc]
;B[kc]
;W[nt]
;B[je]
;W[mv]
;B[hz]
;W[Ly]
;B[cc]
;W[fB]
;B[rw]
;W[fC]
;B[cE]
;W[MA]
;B[Gm]
;W[sC]
;B[zh]
;W[lz]
;B[fn]
;W[nx]
;B[lv]
;W[fm]
;B[Kw]
;W[by]
;B[bD]
;W[LF]
;B[Cb]
;W[Jn]
;B[bz]
;W[GE]
;B[ma]
;W[Ij]
;B[ta]
;W[xC]
;B[Gg]
;W[lD]
;B[jg]
;W[AD]
;B[bd]
;W[mD]
;B[Mb]
;W[zc]
;B[ji]
;W[mz]
;B[La]
;W[az]
;B[at]
;W[Ej]
;B[Kg]
;W[rE]
;B[Hh]
;W[pD]
;B[kg]
;W[mc]
;B[sa]
;W[oC]
;B[ub]
;W[hF]
;B[op]
;W[Ld]
;B[Eg]
;W[ke]
;B[oc]
;W[Hb]
;B[yF]
;W[oa]
;B[gc]
;W[jd]
;B[Kf]
;W[Da]
;B[nD]
;W[mE]
;B[ha]
;W[aE]
;B[em]
;W[xb]
;B[Jh]
;W[dc]
;B[cv]
;W[Mg]
;B[yb]
;W[bu]
;B[lE]
;W[bc]
;B[Mf]
;W[cd]
;B[zE]
;W[vB]
;B[ah]
;W[uC]
;B[zb]
;W[gy]
;B[jb]
;W[Ea]
;B[aa]
;W[Mq]
;B[bE]
;W[oe]
;B[qF]
;W[KF]
;B[ck]
;W[DE]
;B[sm]
;W[Mw]
;B[Ia]
)

surrounding bug

A point does not get surrounded, although it should.
The point in question is [10-19].

SGFTOCHKI:

(;FF[4]GM[40]CA[UTF-8]SZ[39:32]RU[Punish=0,Holes=1,AddTurn=0,MustSurr=1,MinArea=1,Pass=0,Stop=1,LastSafe=0,ScoreTerr=0,InstantWin=0]AP[pointsOp]PB[^тестер]PW[^ЯроБот3]TM[1]OT[1]
DT[2015-11-23 14:40:49]

WR[0]BR[0]
;W[qq]
;B[rq]
;W[qp]
;B[rp]
;W[rr]
;B[qr]
;W[sr]
;B[qo]
;W[pp]
;B[po]
;W[op]
;B[ps]
;W[ro]
;B[sp]
;W[qs]
;B[pr]
;W[pt]
;B[oo]
;W[os]
;B[qt]
;W[rs]
;B[ot]
;W[tp]
;B[so]
;W[pu]
;B[or]
;W[np]
;B[ns]
;W[rn]
;B[sn]
;W[tq]
;B[mo]
;W[sm]
;B[tn]
;W[mp]
;B[lp]
;W[mq]
;B[lq]
;W[mr]
;B[ls]
;W[tm]
;B[un]
;W[no]
;B[nn]
;W[lo]
;B[mn]
;W[on]
;B[kr]
;W[nl]
;B[qu]
;W[qv]
;B[pv]
;W[ru]
;B[ou]
;W[rt]
;B[mt]
;W[ql]
;B[pw]
;W[rm]
;B[om]
;W[pk]
;B[ol]
;W[ok]
;B[nk]
;W[nm]
;B[pn]
;W[nj]
;B[mk]
;W[rv]
;B[mj]
;W[rj]
;B[mi]
;W[km]
;B[mh]
;W[jk]
;B[mm]
;W[uk]
;B[ml]
;W[um]
;B[mg]
;W[ti]
;B[mf]
;W[qh]
;B[me]
;W[sg]
;B[md]
;W[kn]
;B[nd]
;W[re]
;B[od]
;W[jl]
;B[px]
;W[rf]
;B[py]
;W[im]
;B[pz]
;W[uh]
;B[pA]
;W[og]
;B[pB]
;W[us]
;B[pC]
;W[ri]
;B[qC]
;W[ip]
;B[rC]
;W[tw]
;B[jr]
;W[hk]
;B[ir]
;W[io]
;B[hr]
;W[fq]
;B[gr]
;W[vp]
;B[fr]
;W[ij]
;B[er]
;W[jf]
;B[dr]
;W[iu]
;B[dq]
;W[pi]
;B[dp]
;W[gf]
;B[do]
;W[uj]
;B[dn]
;W[vu]
;B[dm]
;W[gl]
;B[pd]
;W[gi]
;B[qd]
;W[hp]
;B[rd]
;W[ue]
;B[sC]
;W[hh]
;B[tC]
;W[eh]
;B[uC]
;W[ii]
;B[ht]
;W[qD]
;B[lB]
;W[bn]
;B[Km]
;W[sd]
;B[xv]
;W[vt]
;B[Eh]
;W[oa]
;B[Gv]
;W[Gt]
;B[eq]
;W[en]
;B[lu]
;W[lh]
;B[iE]
;W[kg]
;B[wx]
;W[lf]
;B[Mt]
;W[uf]
;B[Il]
;W[kz]
;B[DB]
;W[FA]
;B[Ib]
;W[qF]
;B[dh]
;W[fo]
;B[Hp]
;W[fe]
;B[nv]
;W[Jq]
;B[JC]
;W[ld]
;B[LD]
;W[hd]
;B[gp]
;W[vv]
;B[au]
;W[Mr]
;B[uw]
;W[vw]
;B[in]
;W[fl]
;B[zj]
;W[KF]
;B[si]
;W[dg]
;B[cu]
;W[wo]
;B[Gh]
;W[ek]
;B[La]
;W[qA]
;B[Em]
;W[JB]
;B[af]
;W[jB]
;B[BA]
;W[Gl]
;B[Hv]
;W[Gu]
;B[Fg]
;W[Ew]
;B[Gx]
;W[jw]
;B[eC]
;W[ai]
;B[cc]
;W[Fq]
;B[gx]
;W[vn]
;B[EB]
;W[hn]
;B[kl]
;W[bk]
;B[Iz]
;W[zB]
;B[iC]
;W[ry]
;B[EC]
;W[Gi]
;B[Lc]
;W[sz]
;B[DA]
;W[fz]
;B[Fw]
;W[gt]
;B[yz]
;W[tF]
;B[Aw]
;W[Gg]
;B[rc]
;W[Ee]
;B[Gm]
;W[td]
;B[ma]
;W[gC]
;B[ft]
;W[Ep]
;B[xf]
;W[It]
;B[Cy]
;W[Ez]
;B[ke]
;W[Jl]
;B[Bz]
;W[na]
;B[ay]
;W[nf]
;B[Cf]
;W[ca]
;B[Li]
;W[vq]
;B[sA]
;W[zk]
;B[zg]
;W[Bk]
;B[za]
;W[Fd]
;B[Lj]
;W[uy]
;B[wn]
;W[Bd]
;B[Is]
;W[be]
;B[Kq]
;W[le]
;B[vz]
;W[Fc]
;B[Ek]
;W[dd]
;B[yg]
;W[Hq]
;B[kx]
;W[cy]
;B[yn]
;W[IA]
;B[GF]
;W[Kv]
;B[Mn]
;W[bj]
;B[la]
;W[hx]
;B[lE]
;W[Ll]
;B[Cn]
;W[ex]
;B[bA]
;W[tl]
;B[zt]
;W[Ig]
;B[Ih]
;W[wi]
;B[df]
;W[ln]
;B[hj]
;W[eE]
;B[jm]
;W[qw]
;B[Hg]
;W[sj]
;B[GE]
;W[hi]
;B[iy]
;W[wB]
;B[Dj]
;W[cr]
;B[tf]
;W[xr]
;B[vl]
;W[Im]
;B[Hf]
;W[Hb]
;B[Gq]
;W[il]
;B[kE]
;W[Gc]
;B[vi]
;W[Cw]
;B[wF]
;W[bw]
;B[tA]
;W[jh]
;B[cv]
;W[bc]
;B[CC]
;W[Dp]
;B[hw]
;W[Jy]
;B[Bu]
;W[ar]
;B[EA]
;W[Dc]
;B[fu]
;W[Eg]
;B[HA]
;W[Bx]
;B[it]
;W[Hl]
;B[HB]
;W[Gp]
;B[ly]
;W[qj]
;B[Ga]
;W[Gn]
;B[ku]
;W[Fi]
;B[Aq]
;W[De]
;B[ve]
;W[Ij]
;B[EF]
;W[Ao]
;B[Iq]
;W[zp]
;B[Ii]
;W[ce]
;B[ha]
;W[Fs]
;B[Hh]
;W[ta]
;B[Gw]
;W[zA]
;B[Jo]
;W[lD]
;B[ab]
;W[yc]
;B[hs]
;W[yy]
;B[fA]
;W[fd]
;B[ub]
;W[dD]
;B[qc]
;W[cj]
;B[Bc]
;W[FF]
;B[ll]
;W[gA]
;B[xj]
;W[ud]
;B[fv]
;W[Ip]
;B[nC]
;W[dt]
;B[jn]
;W[Hc]
;B[ra]
;W[vm]
;B[Id]
;W[wj]
;B[mC]
;W[ea]
;B[IE]
;W[ax]
;B[AC]
;W[ie]
;B[di]
;W[Ev]
;B[dx]
;W[Co]
;B[Ke]
;W[Ld]
;B[rA]
;W[yF]
;B[Bt]
;W[Ge]
;B[Hr]
;W[At]
;B[Ka]
;W[ym]
;B[JD]
;W[Jb]
;B[Fp]
;W[Lk]
;B[fk]
;W[mz]
;B[tk]
;W[fB]
;B[Jw]
;W[aA]
;B[mD]
;W[pD]
;B[Jj]
;W[Bv]
;B[th]
;W[Dt]
;B[xp]
;W[xo]
;B[JF]
;W[Ks]
;B[Ba]
;W[jz]
;B[vd]
;W[qn]
;B[Cx]
;W[Ln]
;B[jx]
;W[xq]
;B[eF]
;W[zl]
;B[my]
;W[fb]
;B[je]
;W[Hi]
;B[gF]
;W[Dh]
;B[Ml]
;W[KD]
;B[uE]
;W[CA]
;B[Bo]
;W[Fo]
;B[cn]
;W[zv]
;B[Kx]
;W[Br]
;B[vo]
;W[Dy]
;B[Bj]
;W[Mk]
;B[Kb]
;W[Lz]
;B[wz]
;W[Jr]
;B[sv]
;W[IC]
;B[vA]
;W[Fh]
;B[xz]
;W[bd]
;B[FB]
;W[BF]
;B[bz]
;W[zD]
;B[pa]
;W[bu]
;B[wl]
;W[Jx]
;B[Eq]
;W[Ky]
;B[ez]
;W[de]
;B[Cl]
;W[ux]
;B[ci]
;W[jp]
;B[Au]
;W[Kn]
;B[Kj]
;W[IB]
;B[zF]
;W[Dd]
;B[Ca]
;W[zh]
;B[pF]
;W[Ar]
;B[dz]
;W[zc]
;B[Eo]
;W[Dk]
;B[tb]
;W[Cu]
;B[iq]
;W[vc]
;B[mE]
;W[zr]
;B[pe]
;W[kp]
;B[fa]
;W[Cq]
;B[Js]
;W[xu]
;B[yj]
;W[Ho]
;B[Kr]
;W[vr]
;B[dF]
;W[yv]
;B[Iw]
;W[oD]
;B[sw]
;W[by]
;B[sD]
;W[Es]
;B[tz]
;W[yr]
;B[kh]
;W[vs]
;B[CF]
;W[uA]
;B[hy]
;W[cE]
;B[fF]
;W[br]
;B[bF]
;W[Jt]
;B[Da]
;W[wr]
;B[vh]
;W[lb]
;B[bi]
;W[dw]
;B[sa]
;W[Kt]
;B[Ad]
;W[Kp]
;B[nz]
;W[yD]
;B[Ie]
;W[aw]
;B[Mz]
;W[Dq]
;B[Ae]
;W[vg]
;B[xi]
;W[wf]
;B[Do]
;W[rB]
;B[oF]
;W[Je]
;B[Cd]
;W[GB]
;B[we]
;W[bE]
;B[Bb]
;W[Ex]
;B[ep]
;W[sy]
;B[jt]
;W[Hj]
;B[gv]
;W[BD]
;B[CB]
;W[Hy]
;B[eD]
;W[zE]
;B[cF]
;W[Ej]
;B[Ji]
;W[Lp]
;B[ff]
;W[Ef]
;B[Lv]
;W[em]
;B[zs]
;W[GC]
;B[al]
;W[CD]
;B[gg]
;W[uo]
;B[gq]
;W[Kw]
;B[mu]
;W[Lf]
;B[nx]
;W[eB]
;B[fD]
;W[My]
;B[oB]
;W[cf]
;B[eg]
;W[fn]
;B[By]
;W[ED]
;B[ct]
;W[Gf]
;B[wy]
;W[vb]
;B[sf]
;W[Jc]
;B[Lg]
;W[Fz]
;B[fh]
;W[Hd]
;B[xg]
;W[CE]
;B[wb]
;W[xn]
;B[pf]
;W[ug]
;B[Lw]
;W[jc]
;B[xA]
;W[Hu]
;B[An]
;W[Kg]
;B[sB]
;W[Be]
;B[ut]
;W[aj]
;B[Mm]
;W[Jf]
;B[sh]
;W[ni]
;B[cw]
;W[GA]
;B[kd]
;W[sc]
;B[lC]
;W[gn]
;B[du]
;W[aa]
;B[db]
;W[yu]
;B[eb]
;W[dE]
;B[ox]
;W[kC]
;B[tv]
;W[xe]
;B[Fl]
;W[Jp]
;B[fc]
;W[Bg]
;B[tx]
;W[kD]
;B[Lr]
;W[yx]
;B[Jk]
;W[mx]
;B[yC]
;W[lz]
;B[MA]
;W[iA]
;B[vD]
;W[fi]
;B[KB]
;W[yl]
;B[he]
;W[BE]
;B[ec]
;W[Ac]
;B[ka]
;W[ty]
;B[da]
;W[cz]
;B[oy]
;W[ge]
;B[Lu]
;W[hA]
;B[Lq]
;W[ed]
;B[tr]
;W[aC]
;B[bq]
;W[Ce]
;B[lv]
;W[wC]
;B[yi]
;W[uB]
;B[Mb]
;W[Ic]
;B[ji]
;W[xc]
;B[jy]
;W[uF]
;B[Ag]
;W[xB]
;B[lt]
;W[vC]
;B[go]
;W[uz]
;B[eu]
;W[zz]
;B[gj]
;W[jq]
;B[KC]
;W[wm]
;B[Bs]
;W[MC]
;B[st]
;W[yE]
;B[Ki]
;W[bv]
;B[mB]
;W[Md]
;B[kj]
;W[ck]
;B[Eb]
;W[bh]
;B[rF]
;W[FE]
;B[Dx]
;W[wD]
;B[ui]
;W[HC]
;B[jC]
;W[pm]
;B[vf]
;W[gc]
;B[gB]
;W[Mv]
;B[hE]
;W[JA]
;B[Cg]
;W[et]
;B[qi]
;W[Bp]
;B[Go]
;W[Kd]
;B[BC]
;W[rz]
;B[Et]
;W[Ay]
;B[Mg]
;W[MF]
;B[sF]
;W[wg]
;B[wk]
;W[FD]
;B[DD]
;W[tB]
;B[oe]
;W[ej]
;B[ho]
;W[cC]
;B[Ku]
;W[Hs]
;B[HE]
;W[wc]
;B[Ly]
;W[wp]
;B[sx]
;W[dv]
;B[zb]
;W[ww]
;B[ID]
;W[cg]
;B[Fr]
;W[ul]
;B[BB]
;W[wA]
;B[Bi]
;W[iz]
;B[kc]
;W[oj]
;B[Du]
;W[cb]
;B[As]
;W[yp]
;B[ia]
;W[ga]
;B[Gk]
;W[Mo]
;B[Dv]
;W[Am]
;B[ik]
;W[xw]
;B[ib]
;W[Af]
;B[MB]
;W[xx]
;B[tD]
;W[tt]
;B[Cb]
;W[ag]
;B[sq]
;W[qx]
;B[sb]
;W[gd]
;B[dB]
;W[DE]
;B[ow]
;W[jd]
;B[Ja]
;W[ky]
;B[qm]
;W[zn]
;B[nu]
;W[fE]
;B[yB]
;W[hz]
;B[ne]
;W[Mc]
;B[Lm]
;W[nh]
;B[Ht]
;W[qE]
;B[oh]
;W[nA]
;B[HD]
;W[Ai]
;B[bg]
;W[MD]
;B[jb]
;W[Bm]
;B[Iv]
;W[Lx]
;B[LF]
;W[Bn]
;B[vB]
;W[Hm]
;B[Ed]
;W[ja]
;B[jF]
;W[pj]
;B[cd]
;W[aF]
;B[fy]
;W[nb]
;B[ny]
;W[Ju]
;B[zd]
;W[hB]
;B[GD]
;W[av]
;B[bs]
;W[jA]
;B[xD]
;W[yA]
;B[Me]
;W[bD]
;B[iF]
;W[Kz]
;B[cq]
;W[gD]
;B[Aa]
;W[dC]
;B[Dm]
;W[Lo]
;B[hu]
;W[FC]
;B[ch]
;W[Ab]
;B[Ea]
;W[rh]
;B[Fu]
;W[Kl]
;B[hb]
;W[id]
;B[Fy]
;W[hD]
;B[vF]
;W[aE]
;B[ds]
;W[Ia]
;B[zi]
;W[bf]
;B[gm]
;W[Aj]
;B[rg]
;W[of]
;B[oE]
;W[Mw]
;B[nF]
;W[kA]
;B[Lt]
;W[En]
;B[EE]
;W[co]
;B[Gj]
;W[KE]
;B[li]
;W[Dn]
;B[at]
;W[Fa]
;B[ya]
;W[fx]
;B[hF]
;W[Mh]
;B[Kh]
;W[xC]
;B[mF]
;W[AE]
;B[Ck]
;W[kB]
;B[Io]
;W[xb]
;B[ks]
;W[Bh]
;B[hC]
;W[Ik]
;B[IF]
;W[Le]
;B[kq]
;W[ki]
;B[oz]
;W[dy]
;B[lj]
;W[cx]
;B[gE]
;W[kb]
;B[Ms]
;W[Lh]
;B[aB]
;W[mc]
;B[bb]
;W[Mj]
;B[jE]
;W[Mi]
;B[rE]
;W[eA]
;B[dc]
;W[bB]
;B[Cc]
;W[az]
;B[Ha]
;W[Mq]
;B[pb]
;W[Ls]
;B[aD]
;W[gy]
;B[js]
;W[mA]
;B[Mx]
;W[pg]
;B[In]
;W[wa]
;B[dj]
;W[pE]
;B[kk]
;W[dk]
;B[va]
;W[qz]
;B[Jn]
;W[jD]
;B[Gd]
;W[LE]
;B[gw]
;W[Jm]
;B[bC]
;W[Lb]
;B[mb]
;W[iD]
;B[cp]
;W[bo]
;B[to]
;W[LC]
;B[cl]
;W[qB]
;B[bx]
;W[kt]
;B[ua]
;W[Ec]
;B[KA]
;W[fp]
;B[ae]
;W[jj]
;B[ov]
;W[gb]
;B[bl]
;W[ao]
;B[qa]
;W[xE]
;B[cD]
;W[uD]
;B[gz]
;W[qf]
;B[lA]
;W[rD]
;B[lF]
;W[bm]
;B[Db]
;W[tE]
;B[as]
;W[fw]
;B[ng]
;W[wE]
;B[lg]
;W[nD]
;B[el]
;W[oC]
;B[Mp]
;W[dl]
;B[pl]
;W[zm]
;B[LA]
;W[nc]
;B[ev]
;W[oc]
;B[cm]
;W[ah]
;B[AF]
;W[LB]
;B[pc]
;W[Mf]
;B[qb]
;W[vE]
;B[Kc]
;W[Gb]
;B[is]
;W[sE]
;B[qy]
;W[qe]
;B[oA]
;W[ba]
;B[aq]
;W[hc]
;B[bt]
;W[ak]
;B[uc]
;W[am]
;B[yb]
;W[Mu]
;B[ob]
;W[lm]
;B[nt]
;W[kF]
;B[ME]
;W[an]
;B[xa]
;W[hq]
;B[ad]
;W[ew]
;B[bp]
;W[ap]
;B[cs]
;W[Cp]
;B[DF]
;W[eo]
;B[nE]
;W[HF]
;B[ic]
)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.