Battle2048

From EIK wiki

Meeskond

Andrus Seiman, Kristjan Peterson

Alustasime kolmekesi koos Annely Aasalaidiga, kuid Annely tunnistas, et ei jõudnud panustada teistega võrdselt projekti ning seetõttu soovis ta taandada ennast projekti liikmete nimekirjast. Lubas aine sügisel uuesti deklareerida.

Idee

Luua tuntud arvutimängu “2048” uusversioon, mis võimaldab lisaks klassikalisele mänguvariandile mängida ka mitmel mängijal üksteise vastu.

Arvutimäng “2048” on väga lihtne kuid väga kaasahaarav mäng, kus mängija eesmärgiks on liigutada 4x4 mõõtmelisel ruutudeväljal erinevate väärtustega klotse eesmärgiga teenida punkte läbikombineerida ühesuguse väärtusega klotse. Esimene versioon mängust ilmus veebis vabavarlisena aastal 2014 ning ositus väga populaarseks.


Rakenduse analüüs

Rakenduse sisu

Mäng baseerub klassikalisel “2048”-l, kuid sisaldab uudseid variatsioone. Näiteks järgmised neli stsenaariumi:

  1. Klassikaline 2048 üksikmäng, kuid ilma 2048 piiranguta. Mäng kestab seni, kuni enam liikuda ei saa. Mitte siis kui ühes ruudu väärtuseks saab 2048 nagu klassikalises mängus. Mängu eesmärk on koguda maksimaalselt punkte.
  2. Üksikmäng kella vastu (näiteks 2 või 3 minuti piirang). Mängu eesmärk on koguda lühikese ajaga maksimaalselt punkte. Aeg võiks olla piisavalt lühike, et kasutajal oleks pidevalt kiusatus mängu lõppedes uuesti proovida, sest uue tulemuse saab ruttu teade. Klassikaline mäng võib vahete vahel venida mitmekümne minuti pikkuseks, seega oleks uusversioon sellele hea alternatiiv.
  3. Mäng üksteise vasu ühel mängulaual. Kaks mängijat mängivad ühel mängulaual ja tehes kordamööda käike. Mängu algul on kummalgi piiratud hulk mõtlemisaega (näiteks 2 minutit). Mõtlemisaeg väheneb vastavalt sellele kaua aega kulub käigu tegemiseks (mäng malekellaga). Kui ühel mängijal aeg otsa saab, siis tema enam käia ei saa. Teine mängija saab oma aja lõpuni mängida. Võidab see kes rohkem punkte teenib. Kui ajapiirangu jooksul käia enam ei saa, siis võidab see, kes tegi viimase käigu.
  4. Mäng üksteise vastu kahel mängu laual. Kaks mängijat mängivad paralleelselt eraldi mängulaudadel. Kummalgi on mängijal on mängu algul 3 minutit mõtlemisaega. Igakord kui mängija teenib punkte lahutatakse vastase mõtlemisajast mingi mõtteline osa ja liidetakse punkti saanud mängija mõtleimsajale. Mäng käib seni kuni mõlemal mängijal on mõtlemisaeg otsas. Võidab see kel rohkem punkte. Et mäng oleks tasakaalus tuleb katseeksitus meetodil selgitada, kui palju peaks aega liitma või lahutama punkte teenides. Esialgu võiks proovida näiteks võtta arvu 2 aste ja muuta see sekunditeks - näiteks teenides 2, 4, 8, 16, 32, 64, jne. Punkti liidetakse/lahutatakse 1, 2, 3, 4, 5, 6, jne sekundit. Kui mõju liiga väike, siis peaks mängitavuse huvides korrutama mingi teguriga.

Mängu kaasahaaravust tõstmiseks tuleb kindlasti salvestada erinevaid “edetabeleid”, et mängijal oleks pidevalt soovi oma tulemusi ja miks mitte ka teiste mängijate omasid üle trumbata. Lisaks tavapärasele max. punktidele võiks talletada ka muid karakteristikuid, milles mõõtu võtta. Näiteks:

  • Max. punktid
  • Max. punktid esimese 3 minuti jooksul (vms. aeg)
  • Vähim aeg, mis kulus esimese 100 punkti saavutamiseks
  • Vähim aeg, mis kulus 2048 saavutamiseks
  • jne.

Erinevad edetabelid tuleks hoida lokaalses või võrgu andmebaasis. Ideaalis võiks olla võrguadnembaas (näiteks enos.itcollege.ee-s), mille suhtes siis aegajalt sünkroniseeritakse lokaalset andmebaasi.

Lisaks võiks pidada meeles ka kasutajaid meeles, et mängijad saaksid jälgida ka iseenda kohta käivaid näitajaid. Samas võiks jääda võimalus mängida ilma sisse logimata anonüümselt.

Funktsionaalsus

Esialgu võib jagada ülesande kolmeks suureks osaks:

  • Kasutaja liidese loomine, valikmenüüd, menüüdes liikumine, jne.:
    • kasutaja loomine/sisse logimine (ideaalis võiks kasutada näiteks Microsofti kasutajakontosid),
    • mängude valik
    • statistikaga tutvumine
  • “2048” mängumooduli loomine.
    • Esimene ülesanne on luua klasikalise 2048 variant, mida täiendades luua uudsed variandid.
      • Mäng üksi kella vastu
      • Mäng üksteise vastu kahel laual
      • Mäng üksteise vastu ühel laual
  • Andmebaasiga tulemuste salvestamise ära sidumine:
    • Lokaalne andmebaas
    • Ideaalis võiks olla ka online andmebaas (näiteks enos.itcollege.ee), millega siis aegajalt sünkroniseeritaks andmeid. Sel juhul saaksid kasutajad erinevatest arvutitest üksteisega kaudselt mõõtu võtta.

“Must have”

  • “2048” mängu funktsionaalsus
  • erinevad mängu variatsioonid
  • mängijate registreerimine / sisse logimine
  • edetableite salvestamine lokaalsesse andmebaasi

“Nice to have”

  • online andmebaasiga sünkroniseerimine,
  • mäng arvuti vastu
  • Microsofti kasutajanime kasutamine
  • üldine “silmailu”

Andmebaasi disain

Rakenduse andmebaas on võrdlemisi lihtne sisaldades esialgse kava järgi 4 tabelit: kaustajate tabel, tulemuste tabel, mängu tüüpide tabel ning tulemuste tüüpide tabel.

Neist esimene sisaldab informatsiooni kasutajate, nende nimede ja ideaalis ka Microsofti kasutajate kontode kohta. Kui õnnestub realiseerida MS kasutaja tunnustega autentimine, siis ei pea ise kasutajaid (ja nende paroole) talletama hakkama. See on turvalisuse sesiukohast tülikas ülesanne, et teha seda esimene kord kohe õieti.

Tulemuste tabel, kuhu talletatakse kõik tulemused sõltumata konkreetsest mängu tüübist või võrreldavast skoorist.

Kaks viimast tabelit: mängud tüüpide tabel ja tulemsute tabel määravad ära, mis mängudest, milliseid tulemusi talletatakse. Selline disain võimaldab hiljem lisada erinevaid mängude tüüpe ja erinevat tüüpi skoore, milles võistelda.


Battle2048db.png

Andmebaasi disaini skeem

Kasutajaliidese disain

Vaated:


1. Sisselogimine/Registreerimine

Kui kasutajal on eelnevalt konto loodud vajutab ta saab ta kohe end sisse logida sisestadas enda kasutajanime ning parooli. Vajutades nupule „Sisene“ viiakse kasutaja rakenduse pealehele, kus ta saab valida endale sobiva mängustiili.

Kui kasutaja on eelnevalt registreerimata, siis kasutaja vajutab "Registreeri" tabile, mis järel kasutaja registreerib end sisestades kasutajanime ning kaks korda parooli. Vajutades nupule „Registreeri“ viiakse kasutaja koheselt rakenduse pealehele, kus ta saab valida endale sobiva mängustiili.


2. Mängu valik (Pealeht sisseloginutele)

Nimekiri erinevatest mängustiilidest, kus kasutaja saab algatada uue mängu vastava nupu peale klikkides

- Üksikmäng

- Üksikmäng kella vastu

- Mäng kahekesi ühel laual (malekella printsiibil)

- Mäng kahekesi eraldi mängu laudadel

Kui mängija valib kahe mängijaga mängu, siis minnakse ajutiselt uuesti Sisselogimise/Registreerimise lehel, kus saab end sisse logida teine mängija. Peale teise mängija õnnestunud tuvastamist liigutakse edasi.


3. Mänguvaade

- Sõltuvalt mängu tüübist on kuvatud 1 või 2 mängulauda, mängukell, jooksvad skoorid. Võimalik, et lisame ka konkreetse mängu top skoorid vms.

- Mängu lõppedes küsitakse, kas alustada kohe uuesti samade mängijatega ja sama tüüpi mänguga või valida midagi muud.


4. Rekordite tabel

Nimekiri erinevatest mängustiilidest, kus kasutaja saab valida, millise stiili rekordeid ta vaadata tahab. Klikkides vastava stiili peale avaneb allpool tabel 10 parima tulemusega.

- Üksikmäng

- Üksikmäng kella vastu

- Mäng kahekesi ühel laual (malekella printsiibil)

- Mäng kahekesi eraldi mängu laudadel


5. Seaded

Kasutaja saab muuta oma parooli. Nicetohave’na ka rakenduse välimust

Tööjaotus

Esialgne vastustus jaguneb järgmiselt:

  1. Kasutajaliides disain ja arendus (Annely)
  2. “2048” mängumooduli loomine (Kristjan)
  3. Andmebaasi disain ja andmebaasi ühenduse arendus (Andrus)

Kui mingid osad hakkavad valmis saama, siis panustatakse ühiselt aeglasemalt liikunud osadesse ja lisafunktsionaalsuste loomisesse.

Tehnoloogiad

  • GUI: Windows Presentation Foundation
  • Database: mingi andmebaasi teek
  • ...

Prototüüp

prototüüp

Arendusprotsess

Ettevalmistused, dokumentatsioon, jne.

29.09.2016 Meeskonna loomine. Projekti idees kokku leppimine.

01.10.2016 - 10.10.2016 Idee kallal töötamine. Tööjaotuse kokku leppimine.

11.10.2016 Wiki lehe loomine.

11.10.2016 TFS repositooriumi registreerimine.

11.10.2016 - 30.10.2016 Projekti funktsionaalsuse anaalüüs.

31.10.2016 - 30.11.2016 Individuaalne töö. Paralleelselt arendati mängu algoritmi, andmebaasi liidest koos (BO) mudelitega ja vastavate servicitega ning kasutajaliidest.


Üksikute komponentide ühendamine töötavaks prototüübiks

01.-12.12.2016 Andmebaasi, Service-objektide ning BO-mudelite loomine.

12.-16.12.2016 GUI vaadete loomine ja ühendamine BO-mudelitega. Skooride tabeli ja mängulaua lisamine.

17.12.2016 Täiustati mängualgoritmi ning ühendati see mängulaua vaatega.

18.12.2016 Valmis prototüüp. Prototüübis on realiseeritud: klassikaline 2048 mäng, koos tulemuste (ja mängijate andmete) salvestamisega ja laadimisega andmebaasist.


Lõpliku versiooni loomine

09.-11.01.2017 Lisati ülejäänud kolme mängu funktsionaalsus: ajapiiranguga üksikmäng, mäng kahel mängulaual üksteise vastu ning mäng ühelmängulaual kordmööda malekellaga.

12.-14.01.2017 Lisati taimeri funktsioon mänguaja mõõtmiseks. Taimer realiseerit algul lihtsalt DispatchTimer objekti kasutades, kuid see ostus ebatäpseks, sest tüklites reaalselt kulundu aeg võis olla erinev, mistõttu ajalinenihe hakkab kuhjuma. Hiljem lisati StopWatch objekt, mis hoiab kella täpsena. DispatchTimer-i ülesandedk jäi vaid regulaarselt kasutajaliidest uuendada.

15.01.2017 Mängulaud annab nüüd värviga märku kumma kasutaja käik on. Selleks lisati koodis (mitte XAML-is) bindingud ruutude väärtuse ja vastavate GUI objektide omaduste vahel. Selleks, et väärtusele vastavalt saaks muuta tähe värvi, joone paksust, jne. tuli luua vastavad Converter klassid. Lisati täiendavad edetabelid ("First 60s" - esimese minutiga enim teenitud punkte, "Fastest 2048" - lühim aeg, millega jõuti ruuduni "2048").

16.01.2017 Lisati "Help/about" aken. Lisaks ühendati FB login kasutajate autentimiseks. Sellega on projekt peaaegu valmis. Jäi viimane probleem - nimelt jätab browser FB kasutaja meelde ning ükskord sisselogides pole hetkel võimalust end välja logida, et mõni teine kasutaja saaks FB kaudu sisse logida.

19.01.2017 Lõpliku versiooni link lisati wikisse.


Meeskonnaliikmete panus

Andrus andmebaasimudel, prototüüp, lõpptoode, dokumentatsioon, analüüs, jne.

Kristjan mängualgoritm, testimine, dokumentatsioon, analüüs, jne.

Annely GUI vaated, analüüs, jne.