Zápisnica č.

Dátum

Miesto

Čas

12

2. 3. 2009

Softvérové štúdio

11.00

 

Zúčastnení

členovia

Bc. Juraj Ligocký

Bc. Michal Hrubý

Bc. Gabriel Pán

Bc. Ján Hric

Bc. Marek Polák

Pedagóg

Ing. Ivan Kapustík

Zapisovateľ

Bc. Ján Hric

 

Program stretnutia

Cieľom stretnutia bolo určiť postup vývoja v letnom semestri, najmä čo sa týka programovania a využívania podporných prostriedkov.

  1. Rozhodnutie sa pre hráča
  2. Oboznámenie sa s podstatou fungovania hráča DAInamite
  3. Rozdelenie úloh na programovaní

 

Priebeh stretnutia

  1. Rozhodnutie sa pre hráča

-        IK poukázal na neprítomnosť plánu na letný semester na webovej stránke. JL dostal za úlohu tento nedostatok napraviť.

-        Zrekapitulovali sme si súčasný stav - máme dvoch hráčov a potrebujeme jedného z nich vziať ako základ pre ďalšiu prácu. Po výsledkoch minulotýždňového testovania sme si istí vhodnosťou fakultnej počítačovej výbavy pre javového hráča. Vzhľadom na väčšie skúsenosti s Javou väčšiny členov tímu sme sa rozhodli pre pokračovanie v hráčovi tímu DAInamite.

-        JH vysvetlil princíp rozhodovania sa hráča Jahodových princov. Vysvetlil najmä, čo je potrebné, ak by sme chceli toto rozhodovanie preniesť do hráča DAInamite. Hlavnou triedou je WorldModel. Napísanie jej metód a pár pomocných (zväčša geometrických) tried umožní prevziať ľubovoľnú časť správania Jahodových princov. Trieda je pomerne obsiahla, predpokladáme však prítomnosť mnohých jej metód (alebo im podobným) v javovom hráčovi. Všetky triedy a metódy použité v Jahodových princoch od hlavného cyklu (metóda mainLoop) nižšie sú vypísané v prílohe A.

 

  1. Oboznámenie sa s podstatou fungovania hráča DAInamite

-        MP vysvetlil príčinu nehybnosti tímu DAInamite počas minulotýžňového testovania. Hráč si po spustení nahrá z konfiguračného súboru zoznam taktík používaných pri rôznych režimoch hry. Pri testovaní sme nepoužili správny konfiguračný súbor.

-        Štruktúra konfiguračného súboru je jednoduchá: obsahuje zoznam taktík (názvov tried) a pri každej taktike zoznam režimov hry, v ktorých sa má použiť. Špeciálne slovo ALWAYS definuje použitie taktiky v každom režime.

-        Každá taktika je definovaná v potomkovi abstraktnej triedy AbstractState. Z jednoduchých taktík dostupných v zdrojovom kóde tímu DAInamite MP spomenul DribbleState (driblovanie), PassState (prihrávanie) a SearchState (hľadanie lopty obzeraním sa; používa sa v každom režime hry).

-        MP nakoniec predviedol ukážku vlastných jednoduchých taktík - beh k lopte, vykopnutie lopty, driblovanie a kop na bránu. Jeho ukážka dokazuje reálnu šancu vytvoriť počas semestra vlastnú taktiku, napr. prevzatím správania z Jahodových princov.

 

  1. Rozdelenie úloh na programovaní

-        Tím sa zhodol na nutnosti začať programovať. Každý člen tímu musí mať už počas tohto týždňa spojazdnené vývojové prostredie.

-        Načim zabezpečiť vhodné podporné prostriedky, aby sme nestrávili mnoho času synchronizáciou zdrojových kódov. GP a JL polemizovali o použití prostredí NetBeansEclipse. Nejednotnosť použitých prostredí zvyšuje nutnosť použitia podporných prostriedkov.

o       GP navrhol použitie systémov SVN a Maven.

o       MP už počas stretnutia spojazdnil systém SVN na servri Google.

o       Ak by sa systém Maven nepodarilo spojazdniť, alternatívou je pracovať bez neho. Potrebujeme to však vyriešiť čím skôr.

-        MP sa ponúkol napísať krátky návod na prípravu vývojového prostredia pre hráča DAInamite, aby bol každý člen tímu schopný rýchlo začať pracovať.

-        JH vyjadril požiadavku vývoja pod OS Linux. MP ho ubezpečil, že je to možné. Ďalej JH vyjadril nespokojnosť s nespoluprácou hráča DAInamite so servrom verzie 13. Toto sa pokúsi napraviť.

 

 

Plnenie úloh z predchádzajúcich stretnutí

Id

Opis

Zodpovedný

Termín

Stav

11.1

Umiestniť dokumentáciu javového hráča na tímovú stránku.

Hric

2. 3. 2009

Splnená

11.2

Opísať nižšie funkcie hráča tímu Jahodových princov.

Hric

2. 3. 2009

Splnená

11.3

Namapovať funkcie existujúce v javovom hráčovi na funkcie tímu Jahodových princov.

Pán

2. 3. 2009

12.7

11.4

Nainštalovať a oboznámiť sa s javovým hráčom.

Všetci

2. 3. 2009

12.1

11.5

Naštudovať správanie javového hráča a implementovať jednoduché správanie.

Polák, Ligocký

2. 3. 2009

Splnená

 

Nové úlohy

Id

Opis

Zodpovedný

Termín

12.1

Napísať stručný návod na preklad a spustenie hráča DAInamite.

Polák

3. 3. 2009

12.2

Pokúsiť sa spojazdniť systém Maven a napísať stručný návod na použitie.

Pán

9. 3. 2009

12.3

Skompilovať a spustiť hráča DAInamite pod Linuxom.

Hric, Hrubý

9. 3. 2009

12.4

Upraviť hráča DAInamite na spoluprácu so servrom verzie 13.

Hric

30. 3. 2009

12.5

Napísať stručný návod na použitie klienta SVN.

Polák

9. 3. 2009

12.6

Umiestiť na stránku plán na letný semester.

Ligocký

9. 3. 2009

12.7

Identifikovať, opísať a začať programovať taktiku založenú na Jahodových princoch.

Ligocký, Hric, Hrubý

9. 3. 2009

 

 

 

 

 

Použité skratky:

 

JL        Bc. Juraj Ligocký    

MH      Bc. Michal Hrubý

GP       Bc. Gabriel Pán

JH        Bc. Ján Hric

MP      Bc. Marek Polák

IK        Ing. Ivan Kapustík

 


Príloha A

 

Triedy a metódy Jahodových princov

 

Nasledujúci zoznam vznikol preskúmaním zdrojového kódu hráča Jahodových princov, počnúc metódou mainLoop triedy Player. Prezreli sa metódy tried PlayerBasicPlayer, ostatné triedy sa neskúmali. Zoznam teda obsahuje všetky používané metódy tried PlayerBasicPlayer a všetky metódy iných tried, ktoré sa z nich volajú. Prenesením týchto tried do hráča DAInamite sa vytvorí predpoklad na naprogramovanie ľubovoľného správania Jahodových princov.

 

Player

mainLoop

performPenalty

shallISaySomething

amIAgentToSaySomething

sayBallStatus

sayOppAttackerStatus

deMeer5

kickToPass

circleKickToPass

kickToPlay

kickToScore

passTo

passToTeammateFitness

passToOpponentFitness

passToFitness

passToFitness

BasicPlayer

turnBodyToPoint

turnBodyToObject

kickTo

accelerateBallToVelocity

freezeBall

catchBall

kickBallCloseToBody

intercept

moveToPos

turnNeckToObject

turnNeckToPoint

dashToPoint

turnBackToPoint

directTowards

interceptClose

collideWithBall

teleportToPos

alignNeckWithBody

turnAround

adjustView

searchBall

canDribbleWithBall

handleWithBall

oscillateView

isFreeCone

canDribbleFast

canDribbleSlow

dribbleFast

dribbleSlow

dribbleWithBall

dribble

turnWithBallTo

kickBallCloseToBody

getInterestRadius

WorldModel

            getActualKickPowerRate

            getAgentEffort

            getAgentGlobalBodyAngle

            getAgentGlobalPosition

            getAgentGlobalVelocity

            getAgentObjectType

            getAgentSpeed

            getAgentStamina

            getAgentViewAngle

            getAngleForTurn

            getBallPos

            getBallSpeed

            getClosestInSetTo

            getClosestRelativeInSet

            getConfidence

            getCurrentCycle

            getCurrentTime

            getFastestInSetTo

            getFeature

            getGlobalPosition

            getGlobalVelocity

            getKickPowerForSpeed

            getKickSpeedToTravel

            getNrInSetInCircle

            getNrInSetInCone

            getOffsideX

            getPlayerNumber

            getPlayMode

            getPosOpponentGoal

            getPowerForDash

            getRecvThink

            getRelativeAngle

            getRelativeDistance

            getSide

            getStrategicPosition

            getTimeChangeInformation

            getTimeLastHearMessage

            getTimeLastSeeMessage

            getTimeLastSenseMessage

            getTimeLastSeen

            isBallCatchable

            isBallKickable

            isBeforeKickOff

            isCollisionAfterCommand

            isDeadBallThem

            isDeadBallUs

            isFeatureRelevant

            isGoalKickUs

            isKickOffUs

            isPenaltyThem

            isPenaltyUs

            iterateObjectStart

            iterateObjectNext

            iterateObjectDone

            predictAgentPos

            predictAgentPosAfterCommand

            predictAgentStateAfterCommand

            predictBallInfoAfterCommand

            predictCommandToInterceptBall

            predictFinalAgentPos

            predictPosAfterNrCycles

            predictStateAfterTurn

            processRecvThink

            setAgentViewAngle

            setCommunicationString

            waitForNewInformation

ServerSettings

            getBallAccelMax

            getBallDecay

            getBallSize

            getBallSpeedMax

            getGoalWidth

            getHearDecay

            getKickableMargin

            getKickPowerRate

            getMaximalKickDist

            getMaxNeckAng

            getMaxPower

            getMinNeckAng

            getPenAllowMultKicks

            getPlayerSize

            getPlayerSpeedMax

            getRecoverDecThr

            getStaminaMax

            getSynchMode

            getVisibleDistance

PlayerSettings

            getBallConfThr

            getDribbleAngThr

            getPlayerConfThr

            getPlayerWhenToKick

            getPlayerWhenToTurnAngle

            getTurnWithBallAngThr

            getTurnWithBallFreezeThr

Formations

            getFormation

            getPlayerType

            setFormation

VecPosition

            getDirection

            getDistanceTo

            getMagnitude

            normalizeAngle

            operator-

            pointsDistance

            rotate

            setVecPosition

Line

            getCircleIntersectionPoints

            getIntersection

            getPointOnLineClosestTo

            makeLineFromPositionAndAngle

            makeLineFromTwoPoints

Circle

Stamina

            getEffort

AngDeg

            getDirection

SoccerCommand

            isIllegal

            makeCommand

ArsToolbox

            circleLineIntersection

            createLineTo

            linePointDistance

            trim

cFuzzyObj

            //všetko