reede, 23. jaanuar 2015

SmartChess 1.0 juhend

Sätete menüüst:
Nuppude ostmine - selle välja lülitamisel saab mängida tavalist malet.
Lippude ostmine - näitab, kas lippe saab osta
Nuppude asetamine - Nuppude ülendamine: ostetud nuppe saab paigutada enda nuppude peale. Tagumine rida: Ostetud nuppe saab paigutada ainult oma poole tagumise rea vabale ruudule. Mõlemad: saab paigutada mõlemat viisi.
Tuli: Määrab, kas kontrollitakse ja näidatakse tuld.
Etturi väärtus: Määrab ära kõigi nuppude ostmise hinna. (ratsu, oda - 3*EV; vanker - 5*EV; lipp - 9*EV)

Mängus:
Üleval paremal saab pausele mängu panna, alla anda ja käiku näha.
Selle alt saab nuppe ostmisel valida ja tehteid lahendada.
All paremal näeb tuld, aega ja punkte.

Käimiseks peab valima hiirega nupu (vasaku klikiga) ja valima sihtruudu (samuti vasaku klikiga). Pärast nupu valimist kuid enne käimist saab valiku tagasi võtta parema kliki või escape nupuga. Pärast nupu ostmist küsitakse nuppu, mida tahetakse osta. Ainult ühe nupu saab käigus osta. Kui ei soovita nuppu osta, peab vajutama escape nuppu. Esimesel käigul ei saa valge ülesandeid lahendada. Järgnevatel käikudel tulevad pärast nupu ostmist tehted. Numbrinuppe saab kasutada vastuse sisestamiseks. Enteriga saab saata oma vastuse. Õige vastus annab 1 punkti, vale vastuse eest kaotatakse 1 punkt. Iga käigu vahepeal on aega, kus saab teine mängija klaviatuuri ja hiire üle võtta.

kolmapäev, 21. jaanuar 2015

Smartchess 1.0

Jõudsime valmis mängitava PyGame'i versiooniga. http://pastebin.com/T2cGz8SP
Mängu mängimiseks on vaja kogu folderit, Pythonit ja Pygame'i



See oli meie esimene programm PyGame'is. Uus versioon kasutab programmiväliseid pilte, seekord pole programm vaid üks fail. Nii saab graafikat uuendada piltide kaustas muutmisega, ei pea koodi sisse ronima. Kuna see vajab oma kausta ja mitut faili niikuinii, siis nüüd programm ka salvestab oma sätted tekstifaili. Hetkel saab muuta resolutsiooni (soovitatav on keskmise peal mängida, teistel on graafika kas kokku pressitud või välja venitatud), nuppude ostmist üleüldiselt (kui väljas siis on tavaline male), lippude ostmist, nuppude asetamist ostmisel, tule kontrollimist ja etturi väärtust.

Tagantjärele tarkusega oleks võinud kodeerida mängutsüklit palju pareminim praegu on pausi peale panek ja allaandmine piiratud peaaegu ainult käimise ajale (kuid selle saab parandada).

Veel asju, mis võiks paremaks teha: valida font, mille tähemärgid on sama suured, et joonistatud tekst ei hüppaks ringi kogu aeg (märgatav 7 puhul kui taimerit vaadata); paremad nupud/menüüd; üle viia nupud .png piltidele (hetkel on need PyGame'is endas joonistatud), siis saab neid kasutada ka ostmise piltidena (Ma ei ole kindel, kuidas piltides nähtamatus töötab PyGame'is, kuid arvatavasti ei ole PyGame'is ainult nelinurksed sprite'id); lisada helid; lisada menüüdele nuppe juurde (nt oleks vist parem, kui saaks lahkuda mängust mängusiseselt, hetkel saab seda teha vaid operatsioonisüsteemi poolt antud käskudega).

Sätete lugemisel õppisin sõnastiku andmemassiivi hindama. Lugemine tuli keeruline, kui tahtsin midagi sellist, millele võiks teisi sätteid juurde kirjutada nii, et ei peaks kogu koodi ümber kirjutama. Kui tekstifailis on sätted kirjas valemiga "x = y", kus x on sätte nimi (nt "check") ja y on sätte väärtus (nt "True") siis saab lihtsalt need splittida ja tekitada sõnastikus muutuja nimega x väärtusega y (booleanide jaoks oli vaja kirjutada funktsioon, mis muutis stringid booleaniks) ja hiljem kui vaja kontrollida millegi väärtust sai kasutada y leidmiseks options[x].


esmaspäev, 22. detsember 2014

Smartchess 1.5.3

Lihtsalt väike uuendus

Parandasin vea tulega ning tegelen taas mängu pygame versiooniga.
Lisaks kirjutas klassivend meile väikse koodirea, mis peaks võimaldama meie mängu mängimise ka Linuxil. Ei ole kindel kas see alati töötab, kuna pole Linuxi kasutaja.
Tänud Kristjan Kongasele!



Varsti avaldame ka mängitava graafikaga versiooni.

Alfred

pühapäev, 9. november 2014

Installeerimisvideo

Siin Alfred.

Kuna homme algab avalik hindamine, otsustasin teha elu veidi lihtsamaks meie mängu testijatele. Lõin väikse installeerimisõpetuse: http://youtu.be/oPEVO5w3vys
Videost saate kõik vajaliku info, et meie mäng praegusel kujul tööle saada.
Et asi veel lihtsam oleks, postitame edaspidi oma koodi ka .py failina, mille saab kohe tööle panna.
Praegune fail: http://tinyurl.com/ogaz2f5

Head testimist!

teisipäev, 4. november 2014

SmartChess beta 1.5.2 ja tõlge

(Ma ei tea, kas programm pidi 31. oktoobriks olema HITSAle esitades lõplik. Kui nii on, siis see postitus/versioon on tähtajast üle.)

Otsustasin mängu inglise keelde tõlkida. Selle käigus leidsin kirjavigu ning väikseid koodivigasid. Mäng on nüüd inglise keeles mängitav, kuid paljud funktsioonid küsivad eestikeelsete vastuste järgi sisendit (Saab aru , mis nuppe on vaja oma eesmärgi täitmiseks sisestada, kuid see on ebaintuitiivne [Erandiks on hetkel jah/ei küsimused, mis on J/E kujul]). Samuti pole eestikeelset juhendit.

Laua kuvamiseks ingliskeelsete tähtedega kirjutasin funktsioonid, mis teisendaks kogu boardType ja boardOwner listid (Kus hoitakse vastavalt ruudul oleva nupu liiki ja nupu omanikku) kuvamisfunktsiooni alguses ingliskeelseteks ning kuvamisfunktsiooni lõpus tagasi eestikeelseteks.

Eestikeelse versiooni kood: http://pastebin.com/p7NNd9ee
Ingliskeelse versiooni kood: http://pastebin.com/69hVhS95

reede, 31. oktoober 2014

Tulevikuplaanid

See on arvatavasti viimane kirjutis siin senikaua kuni selgub, kas saame Progetiigri konkurssil edasi.
Seega ma arvasin, et oleks kasulik kirjutada, mis meil plaanis on.

Esiteks kindlasti peaks ülesannete liike suurendama. Me algul arvasime, et jõuame praeguseks mitu tehtud, aga kool võtab palju aega ära ning nii kaugele me ei jõudnud. Lisaks on vaja mängu kindlasti tasakaalustada. Kuigi on meie versioon kindlasti mängitav, on punktide saamine pranglimisel liiga kerge või nuppude ostmine liiga odav. Selleks, et seda tasakaalustada peaks kindlasti paar õhtupoolikut kulutama mängides ja kahjuks hetkel sellist luksust meil pole.
Teine suur asi, mille üritame ette võtta, kui saame konkurssil edasi, on mängu ümbertegemine graafikaga ning hiire inputiga. Ise olen ma seda veidi juba vaadanud pygame abil ning hiire sisestus töötab väga mugavalt. Täielik ümbertegemine nõuab muidugi aega, sest ülesannete vastuste sisestus on täiesti erinev.

Seekord uut koodi versiooni pole :)

Väike eelvaade:

kolmapäev, 29. oktoober 2014

Veaparandus (beta 1.5.1)

Siin Alfred.

Leidsin väga suure vea tulekontrollis (funktsioon checkCheck).
Loodan, et siit lugedes saate aru, miks on väga tähtis koodi ka pärast kirjutamist igat moodi läbi testida, muidu jääb viga kauaks märkamata. See selgitus eeldab, et lugeja teab veidi pythoni keelt.
Peaks ära ütlema, et tekstis kirjeldatakse enda nuppe kui tule all oleva mängija omi.

Kui vaadata Smartchess beta 1.4 koodi, näeb lipul, odal ja vankril kontroll välja midagi sarnast:
  1. while .....:
  2.         if boardOwner[...] == turn:
  3.             break
  4.         elif boardType[...] == ".." or boardType[...] == ".."
  5.             return True
Selgitus: muutuja boardOwner oli kahemõõtmeline massiiv, mis kujutab laua igat ruutu kas tühjana (" "), valge ("V") või must ("M"); muutuja turn sisaldab seda, kelle käik on; boardType on sarnane boardOwnerile, sest on kahemõõtmeline massiiv, kuid omaniku asemel annab ta infot, mis tüüpi nupp igal ruudul on; märk != tähendab pythonis mitte võrdumist
Oda, lipu ja vankri jaoks on iga while tsükkel ühe suuna jaoks, kuhu nad liikuda saavad

Esimene if lause peaks jätma tsükli seisma kui sul on oma nupp sellel joonel ees.
Probleem oli selles, et kui ette jäi mõni musta nupp (näiteks lipul on ees ettur), sellega ei arvestatud, kuna tsükli peatav break käsklus töötab vaid siis, kui joonele sattub enda nupp.
Seda probleemi üritasime Smartchess beta 1.5-s parandada järgmiselt, muutes esimese näite 2. rea järgnevaks:
  1. if boardOwner[Y][X[1]] !=  " ":
  2.             break
Esialgu tundus, et see lahendas probleemi, kuna nüüd vahet pole kumma nupp ette jääb.
Teoorias kui satub mõni nupp ette, siis ta lõpetab tsükli.
Kui veidi aga seda vaadata näeb, et ta lõpetab tsükli siis kui satub ette ükskõik mis nupp.
Isegi siis kui see nupp annab tuld. Seega ei loetud ühegi oda, vankri ega lipu tuld
Selle vea ma paar päeva tagasi leidsingi.

Parandasin selle järgnevalt:
  1.     while .....:
  2.         if boardOwner[...] == turn:
  3.             break
  4.         elif boardOwner[...] != " ":
  5.             if boardType[...] == ... or boardType[...] == ...:
  6.                 return True
  7.             else:
  8.                 break
Siin on kõikide võimalustega arvestatud. Esimene if lause lõpetab tsükli (rida 2-3) siis, kui satub ette enda nupp. See on loogiline. Teine if lause (rida 4) on tehtud nii, et kui ruut ei ole tühi peab ta loogiliselt olema vastase oma (sest enda oma juba vaatasime). Kõigepealt kontrollitakse, aga kas see on tuld andev (sõltuvalt sellest millist ründejoont vaatame; rida 5). Kui on, annab tsükkel teada, et tuli on olemas (rida 6). Muidu saame olla kindel, et see vastase nupp ei anna tuld ja paneb selle tulejoone kinni ning tsükkel lõpetatakse break käsuga (rida 7-8).