1. Rider, Jypeli ja ComTest asennusohjeet

Tämän luvun ohjeilla asennetaan Jypeli-kehitystyökalut (JetBrains Rider ja Jypeli) sekä ComTest-laajennus Rideriin.

1.1 Asennuksen vaiheet

  1. .NET ja Jypeli asennettu (linkki vie toiseen dokumenttiin)
  2. Asenna Rider
  3. Testaa Jypeli
  4. Asenna ComTest

1.2 Rider

Lataa JetBrains Rider osoitteesta https://www.jetbrains.com/rider/. Klikkaa Download ja valitse käyttöjärjestelmäsi.

Voit käyttää Rideria maksuttomasti opiskelutarkoituksiin.

macOS - mistä tiedän minkä Riderin lataan?

Klikkaa työpöydän vasemmasta yläreunasta ompun kuvaa ja valitse "Tietoja tästä tietokonesta" (tms)

Valitse Riderin asennuspaketti suorittimen mukaan. Jos suorittimen kohdalla lukee M1 tai M2, valitse ".dmg (Apple Silicon)". Jos taas suorittimen kohdalla lukee Intel, valitse ".dmg (Intel)".

Linux

Ubuntuun asennuksen sai helpommin ottamalla Software & Updates -"kaupasta".

Asennus

Käytä oletusasetuksia eli klikkaile Next ja lopuksi Install. Windowsissa Vesa asensi hakemistoon c:\devel\rider.

Ensimmäinen käynnistys

Käynnistä Rider. Hyväksy käyttöehdot. Rekisteröitymiseen tarvitaan nimi ja sähköpostiosoite, jota kautta tili vahvistetaan. Voit käyttää itse valitsemaasi sähköpostiosoitetta (gmail, hotmail, jyu, ...).

Näppäinoikotiet voi asettaa oman maun mukaan. Opettajat käyttävät VS Code -asetusta. Näppäinoikoteitä voi säätää myös jälkikäteen kohdasta Settings -> Keymap.

Plugineja ei tarvitse ladata.

Kokeile toimiiko

Valitse New Solution. Tämän jälkeen .NET / .NET Core alta valitse Console Application ja paina Create. Korvaa Program.cs tiedoston sisältö seuraavalla:

Console.WriteLine("Toimii :-)");

ja valitse ylävalikosta Run. Riderin alaosaan pitäisi avautua konsoli-ikkuna, jossa lukee Riderin suorittama komento ohjelman ajamiseksi ja sen jälkeen "Toimii :-)".

Solutionin ja projektien luomiseksi on yksityiskohtaisemmat ohjeet täällä.

# jypeli

1.3 Jypeli

1.3.1 Asentaminen

Jos et jo aikaisemmissa vaiheissa asentanut Jypeliä, niin mene komentoriville (esim GitBash, Terminal) ja kirjoita siellä (ei Riderissä)

dotnet new install Jypeli.Templates

Jos ylempi ohje ei toimi tai olet yliopiston koneella, kirjoita

dotnet new --install Jypeli.Templates

Jos on ongelmia, katso auttaako jokin kohdan 7 ratkaisuvaihtoehdoista.

1.3.2 Kokeile toimiiko

  1. Käynnistä Rider
  2. Valitse New Solution, valitse Tasohyppelypeli (yliopiston koneilla valitse .NET versioksi 6.0) ja paina Create. Ensimmäisellä kerralla projektin luomisessa saattaa hieman kestää.
  3. Klikkaa ylhäällä olevaa vihreää kolmiota jonka vieressä lukee Run tai käytä näppäinoikotietä (näet näppäinoikotien pitäessäsi kursoria Run-kuvakkeen päällä).
  4. Nyt pitäisi aueta ikkuna, jossa on nuolinäppäimillä toimiva norsupeli. Jos näin kävi, Jypelin asennus onnistui.

Jypeli vaatii, että sinulla on .NET asennettuna. Nämä sinulla pitäisi olla, jos olet seurannut asennusohjeita.

1.3.3 Jypelin päivittäminen

Kun Jypeliin julkaistaan päivitys, Rider lataa sen sinulle automaattisesti uutta projektia luodessa.

Suurten päivitysten yhteydessä ns. major-versio saattaa muuttua. Tällöin Jypeli on asennettava uudestaan komennolla

dotnet new install Jypeli.Templates

Jypeli-version vaihtaminen aikaisempaan (valinnaista lisätietoa)

1.4 Rider-asetukset

# vesanAsetukset

Oletusasetukset koodin muotoilulle ja analysoinnille ovat tämän kurssin näkökulmasta usein turhan aggressiivisia (ts. auttavat turhan innokkaasti tai väärään suuntaan), joten muutetaan asetuksia tämän kurssin suositusten mukaisiksi.

Jos haluat varmuuskopioida nykyiset asetuksesi, tee se valikosta File \(\rightarrow\) Manage IDE Settings \(\rightarrow\) Export Settings.

  • Lataa asetuspaketti (settings.zip) (Linuxissa voi joutua vaihtamaan tarkentimen .jar latauksen jälkeen)
  • TODO: Joku opiskelija voisi kommentoida toimiiko tuo settings edelleen kun Rider on päivittynyt
  • Mene Riderissa File \(\rightarrow\) Manage IDE Settings \(\rightarrow\) Import Settings
  • Etsi ja valitse äsken haettu tiedosto
  • Klikkaa OK, sitten Import and Restart

Vaihtoehtoisesti voit mukauttaa asetuksia yksitellen alla olevien ohjeiden mukaisesti.

Ja uusimmassa Riderissa joudut joka tapauksessa alla olevalla manuaaliohjeella poistamaan oikoluvun käytöstä (ainakin toistaiseksi).

Pro tip: Jos käytät Rideria usealla tietokoneella, voit synkronoida asetuksesi valitsemalla File \(\rightarrow\) Manage IDE Settings \(\rightarrow\) Settings sync.

Toimii ainakin 2024.2.3 versiolla

05 Sep 24

Toimii 2024.3 versiolla

04 Feb 25

Kurssin koodin muotoilu- ja analyysiasetusten ("settings.zip") selitykset (valinnaista lisätietoa)

Suositeltavat käyttöliittymän asetukset (valinnaista lisätietoa)

# comtest

1.5 ComTest

ComTest-testaustyökalua tarvitaan neljännestä demoviikosta alkaen.

Riderille on tarjolla toistaiseksi testikäytössä oleva ComTest-laajennos

Tiedoksi (älä avaa jos et halua tutkia sisältö): Pluginin sivu JetBrains pluginrepossa:
https://plugins.jetbrains.com/plugin/20223-comtest-rider

Plugin sisältää valmiiksi oikean ComTestin eikä vaadi muuta esiasennusta taikka konfigurointia.

1.5.1 Pluginin asentaminen

Uusinta pluginia ei ole vielä kokeiltu muuta kuin Win11. Kuittaa kommentilla jos kokeilet muussa käyttiksessä.

  1. Avaa Rider ja luo ConsoleMain projekti
  2. Mene File | Settings | Plugins:
  3. Valitse Marketplace-välilehti ja hae hakusanalla ComTest
  4. Valitse Comtest Runner -pluginin kohdalta Install.

  1. Paina Save
  2. Käynnistä Rider uudelleen.

Jatkossa päivittäminen onnistuu samasta valikosta, mutta Install-painikkeen sijaan näkyy Update.

Macbookissa asentui ok ja Test-valikkoon ilmestyi kaksi Comtest-riviä. Jos kirjoitan koodiin comtest, Rider ei kuitenkaan tarjoile vaihtoehtoa, jolla saisi kirjoitettua testeille "mallipohjan".

16 Mar 25 (edited 16 Mar 25)
# comtestcode

1.5.2 ComTest-testipohjan lisääminen koodiin

TODO: Tämä ei ole asennus- vaan käyttöohje

19 Dec 23

Plugin lisää uuden comt-pohjan, jolla voi generoida valmiin pohjan yksikkötestien kirjoittamiselle.

Käyttö:

  1. Kirjoita testattavalle funktiolle runko, esimerkiksi

        public static int Sum(int a, int b) 
        {
            return 0;
        }
  2. Siirrä kursori rungon yläpuolelle ja kirjoita ///, jolloin Rider generoi valmiin rungon funktion dokumentaatiolle:

  3. Lisää uusi rivi dokumentaation alapuolelle:

  4. Kirjoita comt ja varmista, että ehdotuksissa näkyy vastaava pohja:

  5. Paina Enter. Dokumentaation loppuun ilmestyy valmis pohja ComTest-testille:

  1. Kirjoita tuonne <pre name="test"> rivin ja </pre> rivin väliin

        /// Sum(0, 0) === 0;
        /// Sum(2, 3) === 5;
        /// Sum(-2, 1) === -1;
  2. Aja testit alla olevilla ohjeilla.

  3. Pitäisi tulla punaista.

  4. Korjaa funktion return-lause muotoon

            return a + b;
  5. Aja testit uudelleen, pitäisi tulla vihreää.

1.5.3 Testikoodin generointi ja ajaminen

Valitse Tests | ComTest: Generate Tests from Solution varsinaisen testikoodin generointiin tehtyihin ComTest-testeihin perustuen. Tämä valinta generoi (tai päivittää mikäli testit olivat muuttuneet) ja myös ajaa kaikki testit solutionissa.

Voit myös pelkästään ajaa testit (ilman generointia / päivitystä) valinnalla Tests | Run All Tests from Solution

Vinkki: Nopeinta on käyttää pikanäppäimiä:

  • Generoi/päivitä ja aja testit komennolla Ctrl + Shift + T (Windows) tai ⇧ + ⌘ + T (macOS)
  • Testien ajo manuaalisesti: Ctrl + U, L (Windows) tai ⌘ + ; (macOS)

1.5.4 Oman pikanäppäimen tekeminen

Vesa: Koska mulla ei toimi tuo Ctrl + Shift + T ja haluan, että ajon voisi suorittaa Ctrl+Q, niin vaihdan pikanäppäintä:

  • File/Settings/Keymap
  • kynän kuvasta oikealle hakusanaksi comt
  • Valitaan löytyvistä ehdotuksista ComTest: Generate Test from Solution tuplaklikkaamalla
  • poistetaan vanha näppäin yhdistelmä (Remove...)
  • tuplaklikataan uudelleen
  • Add Keyboard Shortcut
  • Painetaan sinisellä kehystetyssä laatikossa haluttua näppäinyhdistelmää (nyt siis Ctrl+Q)
  • OK/Save

1.5.5 Lähdekoodi

Pluginin lähdekoodi: https://gitlab.jyu.fi/tie/tools/comtest.intellij

1.5.6 Esimerkkejä ComTestin käytöstä

# solution

2. Solution ja projekti

Rider käyttää ns. projekti-solution-struktuuria koodin organisointiin.

Projekti sisältää yhteen ohjelmaan (peliin tai konsolisovellukseen) liittyvän koodin ja grafiikka- ja musiikkitiedostot.

Projekti kuuluu aina johonkin solutioniin. Yksi solution voi sisältää yhden tai useampia projekteja. (Sivuhuomio: Solution on Microsoftin keksimä nimi tällaiselle projekteja koostavalle kapistukselle. Sana ei varsinaisesti tarkoita mitään.)

Esimerkiksi yksi demokerta voi olla yksi solution joka sisältää useita projekteja (demotehtäviä). Useiden projektien lisäämisessä samaan solutioniin on se etu, että silloin voi pitää samaan demoon liittyvät tehtävät yhtä aikaa näkyvillä ilman että niitä tarvitsee jatkuvasti avata tai sulkea.

Riderissa tehdyt solutionit ja projektit ovat yhteensopivia Visual Studion kanssa.

2.1 Suositeltava hakemistorakenne

Kurssilla kannattaa kaikki kurssin asiat tehdä esimerkiksi alikansion (hakemiston) ohj1 alle. Tuo ohj kansio ohj1 voi alla käyttötarkoituksesta riippuen eri paikassa:

Mikroluokan koneessa

c:\MyTemp\Anonymous\ohj1

ja omassa kannettavassa esimerkiksi:

Windows: `/c/kurssit/ohj1`    
Mac ja Linux: `~/kurssit/ohj1` 

ja sitten tuon kansion alla on alikansiota tyyliin:

ohj1
 |
 +-demot 
 |  +-demo1
 |  | +-HelloWorld
 |  | +-Lumiukko
 |  | 
 |  '-demo2
 |    +-Lumiukko2
 |    +-LukujenLaskemista
 |
 '-ohjaukset
    +-paate1
    | +-HelloWorld
    | +-Lumiukko
    '-paate2

Eli esimerkiksi demo1 on yksi solution jonka alla on useita projekteja. Usein projekti on yksi demotehtävä.

# uusisolution

2.2 Uusi solution

Luodaan uusi solution ja siihen projekti. Tässä esimerkissä luodaan demo1-niminen solution ja siihen Lumiukko-niminen projekti demot-alikansioon:

Mikäli haluat lisätä projektin olemassa olevaan solutioniin, siirry lukuun 9.

  • Valitse New Solution.
    • Mikäli joku vanha solution on jo auki, niin sama onnistuu yläpalkista File/New Solution.
Uusi solution Linuxissa
Uusi solution Linuxissa
  • Valitse vasemmalta templates-listasta FysiikkaPeli.

  • Anna solutionin nimeksi demoX, esimerkiksi demo1

  • Anna projektin nimi, esimerkiksi Lumiukko tai Teht3Lumiukko (Huom Iso alkukirjan!).

  • Kirjoita tai selaa poluksi (Anonymous tilalle oma käyttäjätunnuksesi jos se on eri):

    • oma Windows kone: C:\kurssit\ohj1\demot
    • Mac: /Users/Anonymous/kurssit/ohj1/demot
    • Linux: /home/Anonymous/kurssit/ohj1/demot
    • mikroluokssa C:\MyTemp\Anonymous\ohj1\demot

    HUOM! Yliopiston mikroluokissa projekti tulee tehdä ensin tietokoneen kiintolevylle, esim. C:\MyTemp\Anonymous\.... Siirrä lopuksi tiedostot U-asemallesi tai muualle talteen.

  • Jätä Put solution and project in the same directory-boksi tyhjäksi.

  • Framework-kohtaan net8.0

  • Klikkaa Create.

  • Levylle syntyy nyt hierarkia:

    kurssit                    - kaikkien kurssien hakemisto
      ohj1                     - ohj1 kurssin hakemisto
        demot                  - demojen hakemisto
          demo1                - demo1:n hakemisto
            demo1.sln          - solutionintiedosto jossa luetellan mitä projekteja
            Lumiukko           - hakmeisto jonka alla Lumiukko-projekti     
              bin              - hakemisto jonne tulee ajettavaa koodia
              obj              - hakemisto jonne tulee käännettyjä tiedostoja
              Lumiukko.cs      - C#-tiedosto johon tulee lumiukon piirtävä koodi
              Ohjelma.cs       - C#-pääohjelma
              Lumiukko.csproj  - projektin tiedosto jossa kerrotaan mitä tiedotoja projektiin liittyy
  • Klikkaa Solution Explorerissa Lumiukko.cs-kooditiedostoa. Koodissa pitäisi näkyä:

    public class Lumiukko : PhysicsGame
    {
        public override void Begin()
        {
            // Kirjoita ohjelmakoodisi tähän
    
            PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
            Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
        }
    }
  • Kokeile käynnistää ohjelma Run/Run 'Lumiukko', jolloin pitäisi näkyä uusi ikkuna vaaleansinisellä taustalla. Jos kaikki toimii, sulje ikkuna.

  • Pyyhi pois koko se rivi jossa lukee "Kirjoita ohjelmakoodisi tähän" ja kirjoita tilalle

            Level.Background.Color = Color.Black;
            PhysicsObject pallo = new PhysicsObject(200, 200, Shape.Circle);
            pallo.Color = Color.White;
            Add(pallo);
  • Käynnistä ohjelma uudestaan ja tarkista että ohjelma muuttui.

  • Kirjoita luokan dokumentaatiokommentti näppäilemällä luokan esittelyrivin (elipublic class...) yläpuolelle kolme kauttaviivaa ///. Kirjoita <summary>-tagien väliin selvitys luokan toiminnasta (eli että piirretään lumiukko)
  • Kirjoita vastaavasti Begin-metodin dokumentaatiokommentit.
# uusiprojekti

2.3 Uusi projekti olemassa olevaan solutioniin

Oletetaan, että solution on jo olemassa. Lisätään siihen toinen projekti olemassa olevan lisäksi. Tässä esimerkissä luodaan uusi ConsoleMain-projekti olemassa olevaan demo1-solutioniin.

  • Klikkaa Explorer-paneelissa solutionin demo1 nimeä hiiren oikealla (Macissa kahdella sormella).
  • Valitse Add -> New Project
  • Valitse vasemmalta ConsoleMain-projektimalli
  • Anna nimeksi HelloWorld
  • Paina Create.
  • Ensimmäisellä kerralla projekti ajetaan klikkaamalla Explorerissa sen nimeä HelloWorld hiiren oikealla ja valitse Run HelloWorld. Myöhemmillä kerroilla voit käynnistää projektin käynnistämällä yläpalkista haluamasi projektin.

2.4 Jypeli-projektit

Jypeli-projektin voi tehdä valitsemalla solutionia tai projektia luodessa Custom Templates -kohdasta oikean projektimallin.

  • ConsoleMain (Konsolisovellukset, joissa on Ohj1 kurssin pohja)
  • Fysiikkapeli (Fysiikkaa käyttävät pelit ja muut graafiset sovellukset)
  • Tasohyppelypeli (Esimerkkipeli)
  • Android Fysiikkapeli (Android-alustaa varten)

2.4.1 Pääohjelma Jypeli-projekteissa (Main)

Jypeli-projektissa Main-pääohjelma menee Ohjelma.cs-tiedostoon, joten jos copy-pastetat koodin, joka sisältää Main-pääohjelman, niin poista Main-pääohjelma Portaat-luokan (tms. projektisi nimeä vastaava luokka) sisältä. Projektissa ei saa olla kahta Main-pääohjelmaa.

# content

2.4.2 Sisällön tuominen Jypeli-projektiin (Content-kansio)

Kuvat ja äänet lisätään peliprojektin Content-kansioon, joka näkyy editorin tiedostolistauksessa.

Content-kansion voi luoda klikkaamalla hiiren oikealla projektia -> Add -> Directory

Sisällön lisääminen
Sisällön lisääminen
  1. Lisää tiedosto klikkaamalla kansiota hiiren oikealla napilla -> Add -> Add Existing Item
  2. Valitse tiedosto(t) jonka haluat lisätä ja paina ok.
  3. Valitse Copy.
  4. Klikkaa tuomaasi tiedostoa Content-kansiossa hiiren oikealla ja valitse Properties
  5. Vaihda Copy to output directory -kohtaan "Copy if newer"

3. Muita ohjeita ja vinkkejä

3.1 Pikanäppäimet

3.2 Ikkunat

Riderisssa voi eri ikkunoita siirrellä hiirellä paikasta toiseen.

  • Kun ikkunaa siirtää ja irrottaa, siitä tulee Float-näkymä (View Mode).
  • Ikkunan oikeassa yläkulmassa on ikoni, jolla ikkunan saa telakoitumaan (Dock).
  • Oletuksena ikkuna telakoituu viimeiseen "kotiinsa". Jos telakoidun ikkunan raahaa ja päästää irti johonkin reunoista (vasen, ala tai oikea), ikkuna telakoituu sinne.
  • Telakoituja ikkunoita voi avata ja sulkea klikkaamalla niiden nimeä.
  • Ikkunan rattaankuvasta voi View Mode-kohdasta valita myös Window, jolloin ikkunasta tulee erillinen käyttöjärjestelmän ikkuna jonka voi vetää vaikka toiseen näyttöön.
  • Ikkunan rattaankuvasta löytyy myös Move To josta voi suoraan valita mihin ikkuna telakoituu.
  • lähdekoodi-ikkunoita (mm. .cs-päätteisiä) voi asetelle allekkain, rinnakkain tai vetää ihan omiksi ikkunoikseen, joita voi siirtää vaikka toiseen näyttöön.
  • Eri paikkaa viedyn lähdekoodi-ikkunan saa omaan TAB-listaansa joko vetämällä sen toisen lähdekoodi-ikkunan keskelle tai sitten sulkemalla ikkunan ja avaamalla uudelleen

3.2.1 Näkymät

Ikkunanäkymä (siis niiden määrä ja sijoittelu) voi vaihdella tiloittain. Kurssilla tärkeimät tilat ovat muokkaus ja debug. Oletuksena ollaan muokkaustilassa ja debugtilaan päästään kun ohjelma pysähtyy breakpointtiin.

3.2.2 Ikkunoiden hakeminen

Ikkunat voi helposti vahigossa hukata ja silloin niitä voi etsiä seuraavista paikoista:

  • View/ToolWindows
  • Debug/Windows

Tärkeimmät ikkunat (suluissa mistä menusta ikkunan löytää jos se on hukkunut):

Muokkaustila:

  • peruseditointialue, tässäkin voi tiedostoja siirtää rinnakkain katseltavaksi tai irroitttaa kokonaan omiksi ikkunoikseen
  • Solution Explorer - näyttää solutionin rakenteen
  • Run - näyttää ohjelman tulosteen
  • File (View) - ohjelman käännösvirheet
  • Debug (View) - testien tulokset

4. Debuggaus

Ks debuggaus-materiaali.

5. Ongelmia

5.1 Rider-lisenssin uudelleenaktivointi

Lisenssi täytyy mahdollisesti aika ajoin uudelleenaktivoida kohdasta Help -> Manage licenses -> Activate.

# dotnet-not-found

5.2 dotnet not found / command not found: dotnet

5.3 Linux

Jos komentoriviltä tulee:

A fatal error occurred. The folder [/usr/share/dotnet/host/fxr] does not exist 

niin ks: https://stackoverflow.com/questions/73753672/a-fatal-error-occurred-the-folder-usr-share-dotnet-host-fxr-does-not-exist

5.4 Jypeli-peli ei käynnisty, esim. You must install or update .NET

Etene kuten kohdassa 5.2.

5.5 Näppäinkomennot eivät toimi

Iso osa editorin näppäinoikoteistä (TODO: Esimerkkejä?) ei toimi sellaisenaan muilla kuin Yhdysvaltalaisilla näppäimistöillä. On siis tarpeen valita toimimattomille suosikkikomennoillesi uudet näppäinoikotiet asetuksista: File → Settings → Keymap → Editor actions.

# silknet

5.6 Silk.NET.Core.Loader.SymbolLoadingException' occurred in Silk.NET.Core.dll: 'Native symbol not found (Symbol: glfwWindowHintString)

Yllä olevan virheviestin syynä on todennäköisimmin että sinulla ei ole GLFW asennettuna, tai se on liian vanha. Monen Linux-distron mukana tulee versio 3.2, mutta Jypeli vaatii vähintään version 3.3.

Asenna uusin GLFW-versio käyttämäsi paketinhallinnan avulla.

# glfw

5.7 System.PlatformNotSupportedException: GLFW is not supported on this platform...

Voi olla että tietokoneellasi ei ole näytönohjaimen ajureita asennettuna. Mene Windowsin asetukset -> Päivitykset -> Valinnaiset (päivitä-nappulan alapuolella) -> Ajurit. Asenna sieltä jotenkin näyttöön liittyvä ajuri, esimerkiksi "Intel Display Driver"

Jos ajuria ei löydy ja käytät kannettavaa, todennäköisesti sinulla on integroitu näytöonohjain, jolloin ajuri voi löytyä prosessorin valmistajan (Intel tai AMD) sivulta. Hae ajurit Googlesta esimerkiksi hakusanalla Intel graphics driver tai AMD graphics driver prosessorin valmistajasta riippuen.

5.8 Muita ongelmia?

Jos vastaan tuli jokin muu ongelma jota ei tällä sivulla ole raportoitu, ilmoita siitä jotta ongelma ja korjaus voidaan dokumentoida tänne.

# ongelmiarider

5.9 Ongelmia Riderin tai Jypelin kanssa

Kirjoita alle jos sinulla on jotakin ongelmia Riderin kanssa:

# riderongelmat

These are the current permissions for this document; please modify if needed. You can always modify these permissions from the manage page.