Harjoitustyö
Harjoitustyö
- on osa kurssisuoritusta ja arvioidaan asteikolla hyväksytty/hylätty. Harjoitustyö pitää olla hyväksytty ennen kuin kurssista voi saada arvosanan.
- tehdään yksin tai parityönä. Mikäli luontaista paria ei löydy, ei sitä kannata ehkä etsiäkään väkisin. Kolmen hengen ja sitä isompia ryhmiä ei hyväksytä.
- sisältää keskimääräisesti opiskelijaa kohti noin 27 tuntia työtä. Parityönä tehtävän työn määrä on siis laskennallisesti 54 tuntia. Katso tarkat vaatimukset paritöille alla.
- voi olla Jypeli-työkaluilla tehty peli, mutta voi olla jokin muukin C#-kielellä tehty komentoriviohjelma. Muita kieliä ei hyväksytä.
1. Vaiheet ja aikataulu
Harjoitustyöhön kuuluu kolme vaihetta, jotka on listattu alla.
Harjoitustyön vaiheet palautetaan esittelemällä ne ohjaajalle. Voit esittää harjoitustyösi pääteohjauksissa tai sopimalla erillinen ohjausaika sähköpostitse (ohj1-opet@tim.jyu.fi).
Vaiheet tulee palauttaa valitsemasi opintojaksototeutuksen aikataulun mukaisesti.
Harjoitustyön vaiheiden tarkistuslista
Merkitse jokaisen vaiheen alavaiheet valmiiksi ruksimalla ne.
Vaihe 1: Suunnitelma versiohallinnassa
Luo oma etävarasto GitLabiin tai GitHubiinPlease
to interact with this component. - Katso kirjalliset ohjeet tai ohjevideo
Kopioi ja liitä etävarastosi osoite alla olevaan laatikkoon:Please
to interact with this component. Please
to interact with this component.
Hae etävarasto omalle tietokoneellePlease
to interact with this component. git-työkalun avulla- Sinulla tulee olla
git-työkalu asennettuna, katso työkaluohjeet - Katso git-ohjeet omien tietojen asettamiseksi ja etävaraston lataamiseksi omalle tietokoneelle
- Sinulla tulee olla
Kirjoita harjoitustyön suunnitelma ladattuun harjoitustyökansioonPlease
to interact with this component. - Katso suunnitelman vaatimukset alla
- Katso esimerkkisuunnitelma
Lataa suunnitelmasi ja kuvasi etävarastoonPlease
to interact with this component. - Katso ohjeet tiedostojen lisäämiseksi git-varastoon ja ohjeet git-varaston lataamiseksi etävarastoon
- Esittele suunnitelma ohjaajalle lähi- tai etäohjauksessa.
Vaihe 2: Työ 50 % valmis
Tee työsi eteenpäin suunnitelman mukaanPlease
to interact with this component. - Luo ohjelmakoodia varten uusi solution. Aseta
Solution directory-kohtaan sama polku kuin 1. vaiheen git-varastolla. Esim.C:\kurssit\ohj1\ht - Pidä mielessä suunnitelmasi sekä harjoitustyön vaatimukset
- Jos teet harjoitustyön parityönä, muista tehdä tarkaa tuntikirjanpito
- Luo ohjelmakoodia varten uusi solution. Aseta
Varmista, että työsi koodi on ajan tasalla etävarastossaPlease
to interact with this component. - Katso ohjeet tiedostojen lisäämiseksi git-varastoon ja ohjeet git-varaston lataamiseksi etävarastoon
- Muista pitää etävarasto ajan tasalla mahdolisimman usein!
- Esittele suunnitelma ohjaajalle lähi- tai etäohjauksessa.
Jos tämä vaihe on pahasti kesken, tarkastaja palauttaa työn opiskelijalle ja antaa 7 päivää aikaa tehdä korjaukset, jonka jälkeen vaihe tarkastetaan uudelleen.
Vaihe 3: Työ 100 % valmis
Tarkista, että työ täyttää kaikki vaaditut osa-alueetPlease
to interact with this component. - Näet kaikki tarkastettavat osa-alueet vaatimuksista kohdasta "Tarkastettavat osa-alueet"
- Jos teet harjoitustyön parityönä, tarkista, että tuntikirjanpito on ajan tasalla
Varmista, että työsi lopullinen koodi on etävarastossaPlease
to interact with this component. - Katso ohjeet tiedostojen lisäämiseksi git-varastoon ja ohjeet git-varaston lataamiseksi etävarastoon
- Huomaa, että etävarastossa olevan työn tulee olla toimiva! Voit esimerkiksi kokeilla ladata etävarasto omalle tietokoneelle eri kansioon ja yrittää ajaa solution.
- Esittele suunnitelma ohjaajalle lähi- tai etäohjauksessa.
Mikäli ohjaaja antaa merkittävän määrän korjauskehotuksia, opiskelijalla on 7 päivää aikaa tehdä korjaukset, jonka jälkeen vaihe tarkastetaan uudelleen.
2. Vaatimukset
2.1 Suunnitelma
Harjoitustyö täytyy olla suunniteltu ja suunnitelman tulee olla ohjaajan hyväksymä. Suunnitelmat tallennetaan GitLabiin, ks. yläpuolelta vaiheen 1 tarkistuslista.
Suunnitelmassa pitää olla ainakin seuraavat asiat (soveltaen ei-peliharjoitustyöhön):
- Tekijöiden nimet
- Pelin nimi
- Harjoitustyön osoite gitissä
- Pelaajien lukumäärä (1-4)
- Pelin taustatarina tai kuvaus pelin teemasta
- Pelin idea ja tavoitteet
- Hahmotelma pelistä (kuva tai kuvia paperilla käsin tai tietokoneella piirrettynä)
- Jonkinlainen kuvaus siitä, miten peli etenee
- Pelissä olevat oliot, niiden toiminnot ja missä suhteessa ne ovat toisiinsa
- Toteutuksen suunnitelma: mitä tekisin ja missä järjestyksessä? Millä aikataululla?
Voit katsoa vinkkejä seuraavista esimerkkisuunitelmista:
- Hirsipuu (peli)
- AngryLego (peli)
- Työaikaraportti (ei-peli), katso myös tutoriaali työaikaraporttiin
2.2 Toiminnallisuus
Pelissä pitää tapahtua jotakin, eli ruudulla pitää tapahtua jotain järkevää. Käyttäjän tulee voida osallistua peliin interaktiivisesti esimerkiksi hiiren ja/tai näppäimistön välityksellä.
2.3 Koodi
Työssä on oltava vähintään muutama aliohjelma Jypelin valmiiden aliohjelmien (Main, Begin) lisäksi.
Muut tarkastettavat osa-alueet on lueteltu alempana kohdassa "Tarkastettavat osa-alueet".
2.4 Paritöistä
Kaikki ryhmäläiset käyttävät samaa etävaraston osoitetta. Ks. Git-ohjeet.
Parityöt, työnjako: Molempien on annettava kutakuinkin yhtäläinen panos työn ohjelmalliseen toteutukseen. Yksittäisenä varoittavana esimerkkinä mainittakoon parityö, jossa toinen on paneutunut grafiikan tekemiseen ja toinen ohjelmointiin. Tällöin grafiikkaan paneutuneelta osallistujalta voidaan pyytää lisänäyttöjä työn ohjelmalliseen toteutukseen johon parityön toinen osapuoli ei saa osallistua. Lisäksi kummankin tekijän on pystyttävä esittämään riittävän tarkka tuntikirjanpito ja selvitys mitä työajalla on tehty, jotta osaamistavoitteet ohjelmoinnin osalta voidaan todentaa.
Parityöt, työn vaativuus: Työn on oltava vaativampi kuin yksin tehdyn työn, ja tässä työmäärä on tärkein mittari. Ohjaajat käyvät työn läpi tarkastustilaisuudessa ryhmäläisten kanssa. Yksittäistä pelin ominaisuutta joka kaikilta paritöiltä vaadittaisiin ei yleisellä tasolla voi antaa. Näiden kriteerien tarkoitus ei ole vaikeuttaa tekemistä vaan ehkäistä ennalta vapaamatkustamista.
2.5 Tarkastettavat osa-alueet
Alla on tarkastettavien osa-alueiden lista, jonka ohjaajat tulevat tarkastamaan harjoitustyön esittelemisen yhteydessä.
Nimeäminen on johdonmukaista ja noudattaa kurssin koodauskäytänteitä.
Näkyvyys: Aliohjelmien ja attribuuttien näkyvyys tulee olla määritelty (
public,private). Julkisia staattisia (public static) muuttujia ei saa olla.Ei turhia peliluokan attribuutteja.
Jos joitain koko peliluokkaan näkyviä arvoja tarvitaan, pyritään käyttämään vakioita (
const). Kuvat, äänet, animaatiot ja muut raskaat resurssit on kuitenkin hyvä pitää attribuutteina, jolloin ne ladataan vain kerran pelin aikana. Esim. kuvien olioviitteet voi kiinnittää muuttumattomaksistatic readonlymääreellä.Toimii: Ohjelma toimii, ei kaadu ja päättyy asiallisesti.
Pelissä pitää tapahtua jotakin järkevää, johon käyttäjä voi osallistua interaktiivisesti. Pelissä pitää myös olla tavoite, haaste tai tarina.
Ei toistoa, joka olisi voitu tehdä silmukoilla tai aliohjelmilla.
Myöskään aliohjelmien välillä ei saa olla toistoa: esimerkiksi
LuoVihu1jaLuoVihu2, joissa olisi lähes sama koodi kahteen kertaan.Taulukko: Käytetään taulukkoa tai listaa.
Tietorakenteella täytyy olla jokin tarkoitus siten, että sinne tallennetaan useita arvoja, joita todella käytetään pelissä. Tietorakenteen käytön tulee parantaa koodin laatua ja helpottaa koodin lukemista, kirjoittamista tai edelleenkehittämistä. Keinotekoisia tai vailla käyttötarkoitusta olevia tietorakenteita ei hyväksytä. Esimerkkejä.
Silmukka: Ainakin yksi silmukka.
Silmukalla täytyy olla jokin tarkoitus siten, että rakenteen avulla luetaan ja/tai käsitellään tietoa. Ei riitä että lisätään "tähtiä taivaalle silmukassa 10 kpl." Silmukalla tulee olla merkitys, joka parantaa koodin laatua ja helpottaa koodin lukemista, kirjoittamista tai edelleenkehittämistä. Esimerkkejä.
Ei turhia literaaleja: Kiinteiden lukuarvojen tai muiden sellaisten arvojen käyttö, jotka heikentävät koodin ylläpidettävyyttä, on kielletty.
Et siis saa tehdä koodia kuten
jossa 18 on hyvin todennäköisesti turha literaali. Sen tilalle tulee laittaa muuttuja tai vakio, kuten
Vakiot ilmaistaan
const-määreellä.}+ 2 tyhjää: Aliohjelmien loppusulun}jälkeen tasan kaksi tyhjää riviä.Dokumentaatio: Luokat, aliohjelmat ja attribuutit tulee dokumentoida.
Dokumenteissa kuvataan muun muassa sitä, mitä aliohjelmat tekevät, ei miten ne sen tekevät. Luokan alussa tulee olla tekijän nimi ja versio (
@author,@version). Myös attribuutit dokumentoidaansummary-tagein.Funktio: Pelissä on funktio.
Funktio ottaa vastaan parametrin tai parametreja, käsittelee parametrina saatua tietoa, ja palauttaa arvon annetun syötteen perusteella. Funktion täytyy prosessoida tietoa jotenkin; funktiolla täytyy olla jokin todellinen tarkoitus ohjelman kokonaisuuden kannalta. Tyypillisesti funktiossa voi hyödyntää silmukkaa tai taulukkoa/listaa. Esimerkkejä.
Ei virheitä eikä varoituksia Riderin oikeassa yläkulmassa. Muista asentaa kurssin Rider-asetukset
Ei-pelien tapauksessa osoitettu myös taito testata aliohjelmia.
3. Usein kysytyt kysymykset ja muut vinkit
Kun tallennat pelin olioita tai tapahtumia listaan / taulukkoon, voit käsitellä niitä yhdellä silmukalla ja paketoida logiikan omaan funktioon. Näin syntyy sekä selkeää että tehokasta koodia.
Mitä pelidataa kannattaa kerätä? Tässä esimerkkejä.
- Pelaajan syötteet: painetut näppäimet, kosketukset
- Pelimaailman tila: viholliset, kerättävät, esteet
- Tapahtumat: törmäysten tagit, pistemäärät, aikaleimat, ratakierrokset
Tallenna tiedot listaan sitä mukaa kun ne (olio, tapahtuma...) syntyvät.
Millainen funktio voisi olla? Tässä esimerkkejä. Huomaa, että nämä ovat enemmän ideoita siitä, millaiset funktiot voisivat olla pelissä hyödyllisiä.
- Laske aikojen keskiarvo
- Etsi minimi, maksimi tai eniten kerätty esine
- Yhdistele dataa (esim. kaksinpelissä pallon hallinta-aika)
- Erityisesti ei-peleissä jokin muu tiedonkäsittely, johon liittyy sisään menevä aineisto ja siitä tehty laskennallinen tulos
Pidä laskentalogiikka omassa funktiossa, jotta peliluokka pysyy selkeänä.
Milloin dataa käsitellään? Tässä esimerkkejä.
- Kenttä vaihtuu
- Aikaraja ylittyy
- Peli alkaa alusta
Hyödynnä tulokset pelissä Tässä esimerkkejä.
- Näytä pelaajalle (pisteet, tilastot, top-ajat)
- Käynnistä uusi vaikeustaso, jos keskimääräinen kierrosaika laskee
- Palkitse pelaaja, kun kerättyjen esineiden määrä ylittää rajan
🐦⬛ Jypelin kirjaston ohjeissa on koodiesimerkkejä, joissa käytetään silmukkaa tai taulukkoa. Nämä eivät sellaisenaan riitä, vaan työssä tulee olla oman ajatustyön tulos.
Mikäli omassa pelissä ei ole taulukkoa/listaa, silmukkaa tai funktiota, pitää ohjaajalle esittää itse tehdyn (ts. työ on tehty omatoimisesti ilman merkittävää apua ohjaajalta tai muilta opiskelijoilta) demotehtävän vastaus, missä em. asioiden osaaminen on näytetty. Tästä voi laittaa vaikka kommentin omaan harjoitustyöhön tyyliin:
// TODO: taulukko, ks: https://tim.jyu.fi/answers/kurssit/tie/ohj1//demot/demo7?answerNumber=1&task=matriisiensumma&user=vesalLinkin saa otettua demotehtävän vierellä olevasta pienestä Link-linkistä klikkaamalla sitä hiiren oikealla painikkeella, ja kopioimalla linkin osoite.
Kyllä, vaihtoehtoja ovat esimerkiksi:
Muita vaihtoehtoja:
- Yksi esimerkki voisi olla vaikkapa lukea tiedostosta suomenkielinen teksti ja lasketaan mitä vokaalia on eniten.
- Tai työ voi olla tietyn WWW-sivun lukeminen ja sieltä tiettyjen tietojen käsittely yksinkertaiseen muotoon.
- Esimerkiksi joltakin sääsivulta päivän tuuliarvojen maksimi ja keskiarvo.
Monet Advent of code -tapahtuman tehtävät voivat hyvinkin soveltua harjoitustyön aiheeksi -- tosin loppupään tehtävät ovat jo hyvin vaikeita. Inspraatiota voi hakea myös vaikkapa täältä http://nifty.stanford.edu/. Katso tuolta CS1-tasoiset tehtävät, niiden pitäisi (suurelta osin) olla tämän kurssin osaamistavoitteiden mukaisia. Näissäkin tapauksissa suunnitelma tulee kuitenkin hyväksyttää ohjaajalla.
Ei-pelien tapauksessa ohjelmaan tehdyt testattavissa olevat aliohjelmat tulee testata.
Riittääkö harjoitustyöksi siis, että tekee ohjeiden mukaan työaikaraportin?
Olennaista on, että työssä osoittaa kykyä tuottaa itsenäisesti luvussa 2.5 mainittua osa-alueita täyttävää koodia. Pohjaksi voi ottaa työaikaraportti-tutorialin, mutta lopputulos tulee olla oma (esim. joku oma funktio, joka laskee jotain tai joku oma toiminto tutorialin ulkopuolella) -- tutorialista kopioitua lopputulosta ei hyväksytä. Ohjaaja varmasti tenttaa suullisesti HT3:n yhteydessä, että olet tehnyt projektin itse ja ymmärrät sen osat -DZ
—- Aloita vaikka pistämällä kentälle jotakin olioita
- MontaPalloa.cs
- Jos peli on tasohyppelymäinen, luo uusi projekti kohdasta Jypeli -> Tasohyppely
- Seuraavassa videossa on esitelty kuinka kuvia käytetään. Sitä ennen (ks sisällön tuominen peliin) on
- piirretty/haettu tarvittavat kuvat, muista tekijänoikeus
- tehty projektiin Content-niminen kansio ja kopioitu kuvat sinne
- klikattu hiiren oikealla kutakin kuvaa (tai valittu monta) ja Properties ja sieltä valittu "Copy if newer"
- ei-pelin tekijöille:
Lähtökohtaisesti on kolme tapaa, joita tällä opintojaksolla suositellaan:
- Kunkin tekee muutoksia omalla koneella ja lataa ne samaan etävarastoon
- Pariohjelmointi
- Koodieditorin jakaminen verkossa (Google Docs -tyylinen samanaikainen muokkaus)
Eri koneet, sama etävarasto: Yleisin tapa yhdessä ohjelmointiin on, että kumpikin lataa saman etävaraston omalle tietokoneelle, tekee omia muutoksia ja lataa ne takaisin samaan etävarastoon. Niin kauan kuin muutoksia ei tehdä päällekkäin (eli kummatkin muokkaatte samaa koodiriviä) tai päällekkäiset muutokset ovat tarpeeksi yksinkertaisia, git-työkalu osaa yhdistää kahden eri tekijän muutokset yhteen. Tässä tärkeintä on, että muutokset lähetetään etävarastoon (git push) ja ladataan (git pull) sieltä mahdollisimman usein. Tapauksissa, jossa git-työkalu ei pysty yhdistämään kahden henkilön muutoksia, syntyy ns. konflikti, joka pitää ratkaista itse. Git-konfliktien ratkaiseminen on tämän opintojakson ulkopuolella; ongelmatilanteissa ota yhteyttä siis ohjaajaan.
Pariohjelmointi: Toinen tapa työskennellä yhdessä on pariohjelmointi (engl. pair programming). Siinä kumpikin pari työskentelee saman tietokoneen äärellä: yksi parista ohjelmoi ja toinen seuraa tai ohjaa. Ajatus on, että rooleja vaihdetaan usein -- vaihto voi tapahtua jopa "lennosta". Koska muutokset tehdään samalla tietokoneella, koodin lataaminen etävarastoon menee samalla tavalla kuin jos tekisi harjoitustyötä yksin. Pariohjelmoinnin tapauksessa tulee kuitenkin pitää tarkasti tuntikirjanpitoa, sillä kunkin parin työpanosta ei näe suoraan git-versiohistoriasta. Pariohjelmointi lisäksi toimii parhaiten lähitapaamisissa, sillä "vuoron vaihtaminen" etänä on yleensä hankalaa.
Työskentely samanaikaisesti verkossa: Jos työtä halutaan työstää yhtä aikaa samassa editorissa, helpoin tapa on käyttää Riderin Code With Me -ominaisuutta. Ominaisuuden avulla koodieditorista tulee Google Docs -tapainen alue, jossa kaksi tai useampaa henkilöä voi muokata koodia samanaikaisesti eri koneella. Muutokset tallentuvat yhdelle tietokoneelle, josta ne on helppoa ladata etävarastoon ilman konflikteja. Ominaisuus on Riderissa betakokeilussa. Valitettavasti non-commercial-lisenssillä (oletus tällä kurssilla) session enimmäisaika on 30 minuuttia. Jos anot opiskelijalisenssiä, saat (ilmeisesti) rajattoman käyttöajan.
Voit anoa itsellesi maksuttoman opiskelijalisenssin käyttäen student.jyu.fi-sähköpostiosoitetta. Noudata huolellisesti alla olevia ohjeita.
Varmista, että student.jyu.fi-osoitteesi toimii. Kannattaa lähettää itselleen testiposti jostain ulkopuolisesta osoitteesta (esim. Gmail tai Hotmail) ja katsoa tuleeko posti itselle perille. Ota varmuuden vuoksi mahdollinen edelleenohjaus pois päältä. Huomioi, että edelleenohjauksen deaktivoitumisessa on viivettä. Jos posti ei tule perille, tarkista account.jyu.fi -> sähköpostiasetukset. Selvitä tarvittaessa Digipalveluiden (help.jyu.fi) kanssa missä vika on.
Et voi edetä tässä ohjeessa, jos opiskelijasähköpostisi ei toimi.
Siirry osoitteeseen https://www.jetbrains.com/community/education/#students
Klikkaa Apply now.
Täytä tiedot Apply with: University email address -lomakkeessa, ole tarkkana että annat student.jyu.fi-loppuisen opiskelijasähköpostiosoitteen. Hyväksy mahdolliset käyttöehdot. Klikkaa Apply for free products.
Avaa yliopiston sähköpostisi, noudata JetBrainsin lähettämän vahvistusviestin ohjeita ja vahvista lisenssi. Jos viesti ei tulekaan, älä lähetä lomaketta useita kertoja "varmuuden vuoksi". Siitä on vain ja ainoastaan haittaa.
JetBrains pyytää linkittämään lisenssin JetBrains-tiliin. Tilin voinee luoda M365/Microsoft-tilin kautta valitsemalla Sign in with Microsoft ja yhdistämällä suoraan
yliopiston sähköpostiin.
Lisenssi on voimassa vuoden, jonka jälkeen sen voi uusia.
Jos teet yrityksiä väärällä sähköpostiosoitteella (esim. muulla kuin tuo pitkä student-muoto), niin
JetBrains lisää osoitteesi mustalle listalle, ja sen jälkeen osoitteen avaamista pitää pyytää lomakkeella:
Code With Me käyttöönotto: Valitse yläpalkista Tools -> Enable Code With Me ja lopuksi Enable and restart
Session aloitus
Yksi ryhmänjäsen käynnistää Code With Me session oikealta ylhäältä löytyvästä kuvakkeesta. (henkilön kuva plus merkillä)
Valitse sopivat oikeudet. Edit files sopivin mikäli koodataan yhdessä. Tämän jälkeen valitse Start Session
Lähetä liittymislinkki kaikille koodisessioon osallistuville. Linkin saat jälleen oikealta ylhäältä Code With Me valikosta.
Sessioon Liittyminen
Mene linkkiin, jonka session aloittaja jakoi ja paina Join Session. Mikäli mitään ei tapahdu, asenna sivun ohjeiden mukaan Toolbox App.
Odota, että session aloittaja hyväksyy liittymispyynnön.
These are the current permissions for this document; please modify if needed. You can always modify these permissions from the manage page.