NoxArt / CityNameAnimal

Android memory game for FIT VUT university course
0 stars 0 forks source link

Hraní hry #16

Open NoxArt opened 10 years ago

NoxArt commented 10 years ago

Už by mělo být možno posílat hráčova slova

Na server jsem přidal handler, že pokud zpráva == send_words & count(unique(send_words od hráčů v daném kole)) == player_count, tak se aktivuje nové kolo přidáním zprávy round_started, stejně jak to bylo minulé kolo. Pokud ovšem round == round_limit, tak se místo toho přidá game_finished.

Jakmile bude nějaká databáze (wink, wink), tak přidám ještě před to vložení zprávy o bodech hráčů

Takže s vynecháním bodování by už mělo být teoreticky možné dodělat komplet hraní hry?

(updatována wiki - dole message)

IevgenRagulin commented 10 years ago

Podle mě server by neměl hned po odesílání slov posílat zprávu round_started. Možna něco nechápu. Představuji si to tak, že pokud zpráva == send_words & count(unique(send_words od hráčů v daném kole)) == player_count tak server 1) V případě automatického vyhodnocení pošle zprávu round_ended s výsledky. Pak až admin zmáčkne start_game, server odpovědí zprávou round_started. 2) V případě ručního vyhodnocení pošle zprávu round_ended, a všechna slova co hráče napsali. Pak hráče to vyhodnotí a až všichni skončí hodnocení, teda zpráva == send_evaluations& count(unique(send_evaluations od hráčů v daném kole)) == player_count server pošle zprávu round_started Nebo až admin zmáčkne tlačítko start_game.

Nebo hodnocení se děla až na konci, až skončíme hrát všechna kola? Tým pádem by to fungovalo jak jsi to napsal.

IevgenRagulin commented 10 years ago

Chtěl jsem také říct, že do 6. prosince nebudu moct dělat na projektu kvůli odevzdaní projektu GMU :(

NoxArt commented 10 years ago

Může být, mj. v současnosti bych ani to ruční vyhodnocení neřešil, až pokud by byl čas, což nebude

To je celkem rána, protože tu Activity část's měl nastudovanou, resp. nemám moc projité ty Async věci ... prosil bych zbytek, aby se taky přidal, ať to neděláme dva...už jeden

IevgenRagulin commented 10 years ago

Dneska ještě dodělám odesílání slov, aktivace nového kola

NoxArt commented 10 years ago

To bude skvělé, díky moc. Tak ať to GMU dáš v pohodě

IevgenRagulin commented 10 years ago

Díky, myslím to bude v pořádku. Nevíš nahodou proč to haže chybu FileNotFoundException na řádku InputStream stream = connection.getInputStream(); v HttpConnect.post() když se snažím poslat slova? Musí se něco upravit na serveru nebo v aplikaci?

11-27 11:41:34.898: E/MessageQueue(2541): null
11-27 11:41:34.898: E/MessageQueue(2541): java.io.FileNotFoundException: https://fit.noxart.cz/tam/
11-27 11:41:34.898: E/MessageQueue(2541):   at libcore.net.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:186)
11-27 11:41:34.898: E/MessageQueue(2541):   at libcore.net.http.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:271)
11-27 11:41:34.898: E/MessageQueue(2541):   at cz.fit.tam.utils.HttpConnect.post(HttpConnect.java:107)
11-27 11:41:34.898: E/MessageQueue(2541):   at cz.fit.tam.model.MessageQueue.sendMessage(MessageQueue.java:79)
11-27 11:41:34.898: E/MessageQueue(2541):   at cz.fit.tam.model.GameClient.sendWords(GameClient.java:213)
11-27 11:41:34.898: E/MessageQueue(2541):   at cz.fit.tam.model.Game.sendWords(Game.java:163)
11-27 11:41:34.898: E/MessageQueue(2541):   at cz.fit.tam.PlayingActivity$SendWordsAsyncTask.doInBackground(PlayingActivity.java:241)
11-27 11:41:34.898: E/MessageQueue(2541):   at cz.fit.tam.PlayingActivity$SendWordsAsyncTask.doInBackground(PlayingActivity.java:1)
NoxArt commented 10 years ago

Na serveru, už je to opraveno

IevgenRagulin commented 10 years ago

Super, díky. Zatím ale server neodesílá odpověd' round_started nebo game_finished nebo něco špatně dělám...

IevgenRagulin commented 10 years ago

Nevím jestli jsi něco opravoval nebo ne, ale už vidím zprávu round_started) asi to byla moje chyba

NoxArt commented 10 years ago

Aha, po debatě zakomentoval. Tak jsem to zase aktivoval. Navíc to pro účely round_started/game_finished už ignoruje staré zprávy.

Teď mě napadá, že nevim jak řešit uplynutí limitu, zatím je to jen po odeslání všech odpovědí, tzn. funguje, pokud odešlou všichni, ale kontroluje se aktuální počet, ne max. tzn. to jede i pokud hraješ sám a # hráčů = 1.

NoxArt commented 10 years ago

Asi to navážu na get_messages...jo, to by šlo

IevgenRagulin commented 10 years ago

Jak navažeš na get_messages? Mohl bys to prosím vysvětlit?

Myslel jsem si, že pokud někdo skončí dřív, než uplyne ten limit, tak zmačne hotovo. Server na první takovou zprávu odpoví round_started. Na ostatní zprávy send_words pro ten round nebude odpovidat nic. Ten druhý hrač dostane zprávu round_started, a až tu zprávu dostane tak automatický se odešle to, co on vyplnil a přepne ho do nového kola.

Pokud uplyne limit, tak odešleme slova. Server na první takovou zprávu odpoví round_started. Na ostatní zprávy send_words pro ten round nebude odpovidat nic. Tym pádem ale všichni ostatní hráči dostanou zprávu round_started i když pro ně limit ne uplynul (to se asi muže stat kvůli tomu že někdo má rychlejší internet, nekdo pomalejší a nezačinaji vyplnovat kolo současně)

Možna rozumím tomu špatně.. pokud ano, prosím o vysvětlení

NoxArt commented 10 years ago

Aha ... máš pravdu, to mě nenapadlo, pošle se to samo. Tak okey. Pardon za zmatení

IevgenRagulin commented 10 years ago

Ted' jsem zkusil odeslat slova v hře která má 2 kola. Server odpovídá zprávou game_finished 11-27 13:52:43.702: W/get_messages(1110): {"result":[{"id":"602","type":"send_words","data":"{\"words\":\",,,,\",\"round\":\"1\"}"},{"id":"603","type":"game_finished","data":null}]}

NoxArt commented 10 years ago

Hned po odeslání slov s round=1 to pošle game_finished? To je divné...mrknu na to

NoxArt commented 10 years ago

Hmm, nějak blbne fetchColumn ... už by to mělo být opravené

IevgenRagulin commented 10 years ago

Díky, už to funguje. Ještě jeden dotaz.. Zkusil jsem spustit dva emulatory aby bylo tam dva hrače. Tak pokud tam je dva hrače a jeden odešle slova, tak server neodesila pak round_started. Myslel jsem si že pokud jeden hráč vyplni, tak round se skončí, ne?

NoxArt commented 10 years ago

Aha, já myslel že až všichni, tak jsem to změnil, je to triviální

IevgenRagulin commented 10 years ago

Super, funguje. Můžu tě taky poprosit abys udělal to tak aby server odesilal zprávu round_started jen po obdržení prvního výsledku tohoto kola? Protože ted' funguje to tak že round_started se odesila po obdržení odpovědi od každého hráče. Tým pádem po prvním roundu, pokud máme tří hráče, server odešle tří zprávy round_started, a po prvním raundu bychom přešli do čtvrtého.

NoxArt commented 10 years ago

aha, jasně :) to jsem nedomyslel

NoxArt commented 10 years ago

Tak teď snad?

IevgenRagulin commented 10 years ago

Nic se asi nezměnilo ..

NoxArt commented 10 years ago

Když se dívám do databáze, třeba 184, tak se zdá, že to funguje dobře, po 1. send_words už to nehází round_started pro další z toho kola ... přístup do DB máš, že?

IevgenRagulin commented 10 years ago

Přístup do DB mám, ted' se na to dívám...

IevgenRagulin commented 10 years ago

už vidím.. byla to chyba v mém kodu. po obdržení zprávy nastavoval jsem nové aktuální kolo a pak jsem odesílal slova. Mělo by to byt naopak) Pardon

NoxArt commented 10 years ago

V pohodě, hlavně že se na to přišlo

IevgenRagulin commented 10 years ago

Přidal jsem odesílání slov, aktivace nového kola, přechod do Activity RoundEvaluation v případě zprávy game_finished. Ted to funguje trochu zvláštně: ten, kdo ukončí kolo první, odesílá slova (stejná) dvakrát. To nevadí nebo bude lepší když to upravím?

NoxArt commented 10 years ago

Myslim že ne, kdyžtak to nějak pak upravim

NoxArt commented 10 years ago

Dobrá práce!

IevgenRagulin commented 10 years ago

Díky. Neřekl bych že je dobrá (ma bagy), ale aspon nějak funguje. Chci se zepat jak to je s vyhodnocením opdovědi? Rozumím tomu správně že po skončení všech kol server odešle výsledky všíchnim hračům?

NoxArt commented 10 years ago

Mělo by to být spíš po kole ... což znamená, že před začátkem kola by měl server stihnout dostat všechny odpovědi a vystavit zprávu s hodnoceními... Ale pokud se to nestihne, tak holt až na konci

IevgenRagulin commented 10 years ago

Mohli bychom se dneska potkat ve Skypu a domluvit se o tom? Mám s toho trochu zmátek.

S pohledu uživatele asi lepší by bylo kdybychom ukazovali výsledky po kole. S pohledu implementace je trochu jednodušší to úkazovat na konci.

V případě ukazování po kole, vidím to tak 1) nějaky uživatel odešle slova (a to nezaleží na tom jestli odesila po uplynuti času nebo po zmačnuti send_words) 2) server odešle zprávu round_ended 3) všichni odešlou slova, přejdou do obrazovky výsledku kde zatím žadné výsledky nejsou, všíchni čekaji na vysledky 4) server odešle zprávu s vysledky až dostané slova od všech uživatelů 5) výsledky se zobrazi na obrazovce uživatelů 6) pokud ten round nebyl poslední admin bude moct zmačknout tlačítko StartNextRound. Pokud ten kolo bylo poslední každý bude moct zmačknout tlačítko ShowFinalResults.

V případě ukazování na konci 1) nějaky uživatel odešle slova (a to nezaleží na tom jestli odesila po uplynuti času nebo po zmačnuti send_words) pokud to není poslední kolo: 2a) server odešle zprávu round_started 3a) všichni odešlou slova, přejdou do nasledujicího kola pokud to je poslední kolo: 2b) server odešle zprávu game_ended 3b) všichni odešlou slova a přejdou do obrazovky s vysledky kde zatím žádné vysledky nejsou 4b) až server obdrží slova od všech uživatelů, odešle velkou zprávu s vysledky pro jednotlivá kola. 5b) výsledky se zobrazí

NoxArt commented 10 years ago

Určitě, jen nechám doběhnout analýzu disku. Nějak mi to tu blbne, asi to bylo Comodo, ale projistotu...

Se vším souhlasím, akorát varianta "po kole" by šla zjednodušit takto: 5) Výsledky se zobrazí na obrazovce uživatelů a začne odpočet do začátku dalšího kola 6) -není-

Tzn. nové kolo se nepouští manuálně, prostě po konci jednoho kola se za X sekund spustí další. Přičemž dostávají informaci o čase, takže když to někdo obdrží trochu později, odpočítá se méně a začne to stejně. Jediný problém by bylo, kdyby zpoždění bylo větší než čekání, ale to holt prostě se připojí pozdě. A měl by se mu odečíst ten čas z kola.

To by myslim nevyžadovalo velké úpravy. Co se týče serveru, akorát k vystavení výsledků přidám zprávu o novém kole.

Kdyžtak napiš jestli souhlasíš. Úpravu serveru dělat můžu, aplikace až večer. Nemám tu wifi a na tomto PC (ač win7) mi prostě nejede ani reverse tethering, ani se mi nepodařilo zprovoznit emulátor.

IevgenRagulin commented 10 years ago

Zjednodušení - souhlasím "Co se týče serveru, akorát k vystavení výsledků přidám zprávu o novém kole." Zprávu o novém kole server už odesíla, ne? Nemuselo to byt naopak "k zpravě o novém kole přidám vystavení vysledku"? Taky jsem psal, že musela by se přídat zpráva o ukončení kola. Nebo to je zbytečný, co myslíš?

NoxArt commented 10 years ago

Máš pravdu, odesílá ... tu bych měl tedy změnit na zprávu o ukončení kola, protože ta tam vlastně není, a doplnit ten start nového kola za odlišné podmínky.

Asi ne, měl by to být signál pro ostatní hráče, že někdo už odevzdal a má se jim ukončit kolo a odeslat výsledky ... chápu to dobře?

IevgenRagulin commented 10 years ago

"Asi ne, měl by to být signál pro ostatní hráče, že někdo už odevzdal a má se jim ukončit kolo a odeslat výsledky ... chápu to dobře?" Ano, to jsem měl na myslí. Ale ted' mi napadlo že takovým signalem může byt zpráva round_started. Někdo odešle slova, server odpovědí zpravou round_started, všichni odešlou slova a přejdou do obrazovky čekaní na vysledky. Až vysledky od servera dostanou, tak začné odpočet do počatku nového kola.

Tým pádem potřebujeme o jednu zprávu méně. A na serveru by se muselo přidat jen zpráva o hodnocení. Co myslíš?

NoxArt commented 10 years ago

Ano, jen spíš obráceně:

1) Někdo odešle slova 2) Vystaví se round_ended 3) Tím odešlou slova ostatní 4) Po obdržení všech vystaví server round_started, obsahem: round, hodnocení minulého (u 1. kola v této zprávě bude chybět, 0. nebylo), datetime začátku dalšího kola

NoxArt commented 10 years ago

Čistější by bylo rozdělení round_started na scores + round_started, ale toto bude jednodušší

Mj. písmena už se vybírají náhodně váženě podle toho, kolik je jich zastoupených v databázi, tzn. q,w,x,y by měly být jen výjimečně

IevgenRagulin commented 10 years ago

Souhlasím. Chci se ještě zeptat kdy přibližně doděláš vyhodnocení? Přemyšlím jestli stihneme to udělat do útery nebo ne..

Ohledně round_started a datetime začátku dalšího kola - bude to v milliseconds..? Pro první kolo to se také odesila, že? Ted' s tím nic nedělám a prostě startuji kolo až dostanu zprávu round_started

NoxArt commented 10 years ago

Dnes večer to určitě bude.

Viděl bych to normálně unix timestamp, ten je asi seconds. Posílá se cílový čas, kdy kolo začne, takže milisekundy nejsou potřeba

Ano, pro první se taky posílá, aby tam bylo pár vteřin na připravení se

NoxArt commented 10 years ago

Mechanismus evaluace by měl být (ještě nepřidává zprávy) ... mohl bys prosím zkusit v nové hře odehrát pár kol, abych to mohl otestovat?

IevgenRagulin commented 10 years ago

Odehral jsem tří kola. Ale asi neuvedl jsem žádnou správnou odpověd

NoxArt commented 10 years ago

To nevadí, díky. Budu teď cestovat, ale jak dojedu, tak to dodělám

NoxArt commented 10 years ago

Teď už by to mělo dělat ten mechanismus, který jsme tu popisovali, snad to je správně

Evaluace zatím nekontroluje, jestli jsou slova i v databázi ... jenom jestli je vyplnil hráč sám nebo i ostatní (ale doplnit tu kontrolu nebude problém)

IevgenRagulin commented 10 years ago

Hlavně že odesila výsledky. Za hodinu budu doma a začnu na tom pracovat..

NoxArt commented 10 years ago

Opravil jsem tak teďka chybu, že startovalo nové kolo se stejným $round, ne $round + 1...ale asi byste napsali, kdyby se to u nahrávání nějak projevilo

IevgenRagulin commented 10 years ago

Projevilo se to u nahravaní, ale myslel jsem si že to je chyba v mém kódu) Nahrali jsme dvakrat první kolo, Katka tam pak přídá obrázek aby to vypadalo, že to je druhé kolo.

NoxArt commented 10 years ago

Ok, dobře, omlouvám se ... kdyžtak ještě až dokončíme tady toto, tak to může přidat

NoxArt commented 10 years ago

Za chvílu teda víc testnu tu evaluaci

Jinak zatím bych skryl ve vytváření hry (a seznamu her pokud je) to nastavení evaluace

NoxArt commented 10 years ago

Akorát je drobnost, že pro finální hodnocení se musí vytáhnout ještě kolo round_limit + 1