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
- Jos et vielä ole asentanut .NET, niin asenna se ensin.
- .NET ja Jypeli asennettu (linkki vie toiseen dokumenttiin)
- Asenna Rider
- Testaa Jypeli
- 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:
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ä.
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
- Käynnistä Rider
- Valitse
New Solution
, valitseTasohyppelypeli
(yliopiston koneilla valitse .NET versioksi 6.0) ja painaCreate
. Ensimmäisellä kerralla projektin luomisessa saattaa hieman kestää. - 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ä). - 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 8.0 asennettuna. Nämä sinulla pitäisi olla, jos olet seurannut asennusohjeita.
Kun luot projektin, Rider käyttää oletuksena aina uusinta Jypelin versiota.
Mikäli haluat vaihtaa olemassa olevan projektin käyttämän Jypelin uudempaan versioon (tai mahdollisissa ongelmatilanteissa jopa vanhempaan versioon), toimi seuraavasti:
- Klikkaa projektisi Solution Explorerista
Dependencies
-valikkoa hiiren oikealla - Valitse
Manage NuGet Packages
- Aukeavasta valikosta näet käytössä olevan Jypelin version, sekä uusimman saatavilla olevan
- Oikeassa reunassa olevasta näkymästä voit päivittää uusimpaan versioon, tai voit
Version
valikon kautta vaihtaa version johonkin muuhun.
1.4 Rider-asetukset
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
—Seuraavassa on muutamia esimerkkejä varoituksista, joita settings.zipissä on otettu pois päältä. Näistä varoituksista on enemmänkin haittaa kuin hyötyä tämän kurssin kannalta. Ajatus on, että on parempi, että varoituksia tulee vain niistä asioista, jotka on oikeasti syytä ottaa huomioon. Kun opit ohjelmointia lisää, on noista edistyneemmistä varoituksistakin enemmän hyötyä. Kannattaa avata Riderissa joku solution, jos säädät seuraavia käsin.
Oikoluku: Poistetaan valitukset suomenkielisistä nimistä:
File/Settings
, kirjoita hakukentäänspell
ja meneSpelling
ja.NET Languages
(taiReSpeller
versiosta riippuen) ja ota senEnable
pois.Huomatus nimiavaruudesta: Kurssilla ei aina käytetä nimiavaruuksia: kirjoita asetusten hakukentään
inspection severity
ja mene asetuksissaEditor/Inspection Settings/Inspection Severity/C#
valitsemallaInspection Severity
alla olevista kielistä C#. Pitäisi tulla näkyviin uusi valikko C#:n kielikohtaisia asetuksia. Kirjoita tämän uuden valikon omaan hakuunnamespace
ja ota ruksi pois kohdastaNamespace does not correspond to file location
, joka löytyy uudesta valikossaConstraints violations
- alaotsikon alta.Luokasta ole luotu oliota: Kurssilla luokkia käytetään (myös) tallentamaan joukko staattisia aliohjelmia, joten tämä varoitus ei ole relevantti. Samaan tapaan kuin edellisessä kohdassa, mene ensin C#:n kielikohtaisiin asetuksiin:
Editor/Inspection Settings/Inspection Severity/C#
ja kirjoita avautuvan valikon hakukentääninstantiated
ja ota ruksi pois kohdastaNon-private accessibility
, joka on alaotsikonPotential Code Quality Issues
jaClass is never instantiated
-asetuksen alla.Metodi voisi olla private: Yleiskäyttöiseksi tarkoitetut funktiot kannattaa tehdä julkisiksi, mutta koska niitä ei ole vielä mistään kutsuttu, tätä ei huomata. Mene taas C#:n kielikohtaisten asetusten valikkoon
Editor/Inspection Settings/Inspection Severity/C#
edellisen kohdan tavoin. Haemember
ja etsiCommon Practices and Code Improvements
alaotsikon altaMember can be made private
-asetuksen alla oleva asetusNon-private accessibility
, josta ota ruksi pois.Luokkaa ei ole määritelty nimiavaruudessa: Koska kurssilla ei aina käytetä nimiavaruuksia: Jos koodissa on jossakin kohti alleviivattuna
class
-sanan jälkeinen nimi, niin mene sen nimen alkuun, paina nimeä ja vasemmalle syttyy vasaran kuva. Klikkaa vasaraa ja valitse valikostaInspection: 'Declare types in namespaces'/Configure inspection severity/Do not show
kuten kuvassa alla: TämänContext Actions
-valikon saa auki myös klikkaamalla hiiren oikealla painikkeella alleviivattua kohtaa ja valitsemalla valikostaShow Context Actions
. Joissain tapauksissa valikon saa auki rivinumeroiden vieressä olevasta hehkulampun kuvasta.Context Actions
-valikon saa auki kursorin kohdalla myös painamallaAlt + Enter
. Tällä samalla menetelmällä on helppo säätää pois häiritseviä alleviivauksia, mutta ensin on varmistuttava, että kyseinen asetus/alleviivaus/vihje ei ole itselle tarpeellinen tai huomionarvoinen.var
-sanan käyttö: Pyritään oppimaan tyyppien merkitystä. Toimi kuten edellä silloin kun ehdotetaan esimerkiksiint ika
tyyppisessä lausessaint
sanan kohdalle ettäuse var
, eli poista tämä huomautus käytöstä.Editor/General/Code Completion
poista ruksi "Preselect the best match to insert it by pressing dot, parantheses, and other keys"Editor/Inlay Hints
poista ruksi "Enable Inlay Hints in .NET languages"Muita huomautuksia joita saa poistaa:
- attribuuttien nimiin vaatii alleviivan alkuun, tämä ei ole kurssin koodauskäytänteiden mukaista (eli nimentään
pelaaja
, ei_pelaaja
) - tarvittaessa vakioiden nimeäminen (kurssilla on käytetty muotoa
VAKIO
, Rider haluaaVakio
=> saa vaihtaa valituksen pois)- muista kuitenkin välttää turhia attribuutteja (sitten kun tiedät mitä attribuutti tarkoittaa :-)
- attribuuttien nimiin vaatii alleviivan alkuun, tämä ei ole kurssin koodauskäytänteiden mukaista (eli nimentään
Tätä asetusta en enää löytänyt.
—Vesan muuttamat asetukset DO NOT SHOW-asentoon:
BuiltInTypeReferenceStyle
CheckNamespace
ClassNeverInstantiated_002EGlobal
ConvertIfStatementToReturnStatement
ConvertIfStatementToSwitchStatement
InconsistentNaming
JoinDeclarationAndInitializer
MemberCanBePrivate_002EGlobal
SuggestVarOrType_005FBuiltInTypes
SuggestVarOrType_005FElsewhere
SuggestVarOrType_005FSimpleTypes
UseCollectionExpression
UseObjectOrCollectionInitializer
Tässä on lueteltu muutamia asetuksia, joita luentojen esimerkeissä käytetään tai on käytetty. Jokainen voi toki rakennella ympäristöstään haluamansa, mutta näistä voi olla sinulle hyötyä jos haluat seurata täsmälleen luennolla käytettyjä asetuksia.
Siirrä alaosan paneelit yhteen reunaan. Ks. esimerkki. Tämän ansiosta esimerkiksi tulosteita on helpompi tarkastella hieman leveämmässä näkymässä. Joissakin tilanteissa (esimerkiksi debugatessa) joitakin paneeleja voi olla hyvä siirtää tarvittaessa oikeallekin. Voit myös piilottaa turhia paneeleja näkyviltä kun klikkaat hiiren oikealla kuvakkeen päällä ja sitten Hide.
Paneeleita voi "unpinnata" eli piilottaa näkyvistä silloin kun ne eivät ole aktiivisia. Klikkaa paneelista kolmea pistettä ja valitse View Mode -> Dock Unpinned. Jos unpinnaat esimerkiksi Debug-paneelin, voit ajaa ConsoleMain-sovelluksen (Debug-tilassa), ja painaa ajon jälkeen Esc-näppäintä. Paneeli sulkeutuu ja fokus siirtyy takaisin editoriin. (Ei tarvitse koskea hiireen, JES! :))
Piilota onnistuneen käännöksen "balloon"-ilmoitus. Omasta mielestäni tämä ilmoitus on täysin turha ja vain tiellä. Valitse Settings \(\rightarrow\) Notifications \(\rightarrow\) Build messages \(\rightarrow\) No popup. Suosittelen myös poistamaan valinnan kohdasta Show in tool window, koska harvemmin on tarvetta tietää tarkkoja kellonaikoja milloin käännös on onnistunut tai epäonnistunut.
Koko ruudun tilan saat käyntiin View \(\rightarrow\) Appearance \(\rightarrow\) Enter Full Screen. Minulla näppäinoikotie on Ctrl+Shift+Enter, mutta kuten mitä tahansa näppäinoikoteitä, tätäkin voi muuttaa kohdasta Settings \(\rightarrow\) Keymap. Myös Distraction Free Mode on mielestäni mukava, vaikkakin se piilottaa jotain hyviäkin käyttöliittymäelementtejä, kuten koodialueiden supistamiseen liittyvät pikkukolmiot.
Ns. Uuden käyttöliittymän saat valittua Settings \(\rightarrow\) New UI \(\rightarrow\) Enable New UI. On kuitenkin täysin makuasia kummasta tykkää enemmän, vanhasta vai uudesta UI:sta.
Debug/release-valikon näyttäminen New UI:ssa. Jos käytät uutta käyttöliittymävaihtoehtoa (Settings New UI), kannattaa ns. debug/release-käännösvalikko ottaa käyttöön tässä ohjeessa kuvatulla tavalla.
Ulkoisen konsoli-ikkunan käyttäminen: En itse tätä käytä, mutta jos haluat konsoliohjelman aukeavan ulkoiseen konsoliin katso How to launch console app in external window?
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.
Minulla on Ubuntun kanssa isoja ongelmia ComTestissä. 15 erroria ja testejä ei saada läpi, vaikka kaikki on tehty kuten esimerkissä.
VL: Vielä ehtisit pääteohjauksiin. Näkemättä on mahdotonta sanoa.
Tein perinteiset ja asensin Ubuntun uudelleen. Alussa tuli erilaisia, mutta lupaavia virheitä. ComTest näyttäisi toimivan nyt :)
VL: En oikein usko siihen että Ubuntun asennus tuota muuttaa. Joku muu asennusken vaihe tuli tehtyä "oikein" kun kaiken teki alusta.
—1.5.1 Pluginin asentaminen
Uusinta pluginia ei ole vielä kokeiltu muuta kuin Win11. Kuittaa kommentilla jos kokeilet muussa käyttiksessä.
- Avaa Rider ja luo
ConsoleMain
projekti - Mene File | Settings | Plugins:
- Valitse Marketplace-välilehti ja hae hakusanalla
ComTest
- Valitse Comtest Runner -pluginin kohdalta Install.
- Paina Save
- Käynnistä Rider uudelleen.
Jatkossa päivittäminen onnistuu samasta valikosta, mutta Install
-painikkeen sijaan näkyy Update
.
1.5.2 ComTest-testipohjan lisääminen koodiin
TODO: Tämä ei ole asennus- vaan käyttöohje
—Plugin lisää uuden comt
-pohjan, jolla voi generoida valmiin pohjan yksikkötestien kirjoittamiselle.
Käyttö:
Kirjoita testattavalle funktiolle runko, esimerkiksi
Siirrä kursori rungon yläpuolelle ja kirjoita
///
, jolloin Rider generoi valmiin rungon funktion dokumentaatiolle:Lisää uusi rivi dokumentaation alapuolelle:
Kirjoita
comt
ja varmista, että ehdotuksissa näkyy vastaava pohja:Paina Enter. Dokumentaation loppuun ilmestyy valmis pohja ComTest-testille:
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ä
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ä.
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
.
- Mikäli joku vanha solution on jo auki, niin sama onnistuu yläpalkista
Valitse vasemmalta templates-listasta
FysiikkaPeli
.Anna solutionin nimeksi
demoX
, esimerkiksidemo1
Anna projektin nimi, esimerkiksi
Lumiukko
taiTeht3Lumiukko
(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.- oma Windows kone:
Jätä
Put solution and project in the same directory
-boksi tyhjäksi.Framework
-kohtaannet8.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ä:
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 tilalleKäynnistä ohjelma uudestaan ja tarkista että ohjelma muuttui.
- Kirjoita luokan dokumentaatiokommentti näppäilemällä luokan esittelyrivin (eli
public class...
) yläpuolelle kolme kauttaviivaa///
. Kirjoita<summary>
-tagien väliin selvitys luokan toiminnasta (eli että piirretään lumiukko) - Kirjoita vastaavasti
Begin
-metodin dokumentaatiokommentit.
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 valitseRun 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.
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
- Lisää tiedosto klikkaamalla kansiota hiiren oikealla napilla -> Add -> Add Existing Item
- Valitse tiedosto(t) jonka haluat lisätä ja paina ok.
- Valitse Copy.
- Klikkaa tuomaasi tiedostoa Content-kansiossa hiiren oikealla ja valitse Properties
- Vaihda Copy to output directory -kohtaan "Copy if newer"
3. Muita ohjeita ja vinkkejä
3.1 Pikanäppäimet
- jos valittu Visual Studion näppäinasettelu
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ösWindow
, 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
Tässä esitellään lyhyesti debuggauksen tarkoitus ja Riderin tärkeimmät debuggaustoiminnot. Vaikka jokaisessa kehitysympäristössä on omat debuggaustapansa, ovat periaatteet hyvin pitkälti yhteisiä eri ympäristöjen välillä.
Tämä sivu sisältää täydennyksiä monisteen lukuun 10.2 Debuggaus.
Tämä sivu kuuluu myös Ohjelmointi 1 -kurssin debuggausnäytteen esitietoihin. Lue tämä sivu huolellisesti ennen debuggausnäytteeseen tulemista. Syksyn kurssilla debuggausta on harjoiteltu myös pääteohjauksessa 5.
4.1 Miksi pitää debugata?
Jos ohjelmassa on jotakin vikaa (ohjelmointivirhe eli bug), debuggeri on usein helpoin vaihtoehto vian löytämiseksi (virheenjäljitys eli debug). Ohjelmaa voi debugata myös lisäämällä sinne tänne ylimääräisiä tulostuslauseita, mutta debuggerin avulla ohjelmakoodiin ei tarvitse tehdä muutoksia. Debuggerin avulla ohjelma voidaan myös pysäyttää haluttuun kohtaan ja tutkia muuttujien senhetkisiä arvoja, mahdollisesti jopa muuttaa niitä ennen kuin ohjelman suorittamista taas jatketaan. Tämä ei ole mahdollista tulostuslause-tyylisessä debuggauksessa.
Ohjelmointia opetellessa debuggeri on myös oiva väline askeltaa silmukoita, ehtoja ja aliohjelmia ja näin havainnollistaa ohjelman kulkua itselleen.
4.2 Debuggaustila Riderissa
MacOS-käyttäjät! Näppäinoikotiet ovat oletuksena erilaiset, ne näkee Run
-menun alta. Opettele oman järjestelmäsi pikanäppäimet tai vaihda näppäinoikotiet alla olevan ohjeen mukaisesti.
[9.3.2023] Jos olet ottanut käyttöön Riderin uuden UI:n niin debuggaustila ei välttämättä toimi. Vaihda siis takaisin vanhaan UI:hin tai kokeile ehdotettuja korjauksia täältä.
Rider työkalupalkki:
Alla olevat näppäinkomennot ovat Visual Studiolle. Jos Riderissa valitsit näppäinoikoteiden (hot key, keyboard shortcut) asetuksiksi Visual Studion, niin silloin nämä toimivat myös Riderissa. Riderin näppäinoikotiet saa muutettua Configure -> Settings -> Keymap
tai File -> Settings -> Keymap
. HUOM! Vaikka tässä kohtaa puhutaan Visual Studiosta, tehtävä tehdään Riderilla, ei Visual Studiolla eikä varsinkaan Visual Studio Codella.
Toiminto | Näppäin Win | Näppäin Mac |
---|---|---|
Debug | F5 | ⌥ F5 |
Step Into | F11 | ⌘ F11 |
Step Over | F10 | F10 |
Resume | F5 | F5 |
Stop debugging | Shift+F5 | ⇧ F5 |
Macin painikkeet:
- ⌘ = cmd
- ⏎ = enter
- ⌥ = alt
- ⇧ = vaihto (shift)
Huomaa, että toiminnot voi myös ohjelmoida itse melkein mihin tahansa painikkeisiin.
Debuggaustila käynnistetään painamalla F5. Tällöin ohjelma voidaan milloin tahansa pysäyttää, tai lisätä ohjelmakoodiin keskeytyskohta (breakpoint) ja näin pysäyttää ohjelma haluttuun kohtaan. Jos ohjelmassa ei ole yhtään breakpointtia, vaikuttaa debugtilassa ajo samanlaiselta kuin "normaalissa" (release-tila, ei-debuggaus) suoritustilassa. Release-ajo saadaan käyntiin painamalla Ctrl-F5.
Tarkasti ottaen debug- (F5) ja release-käännökset (Ctrl-F5) tehdään hieman eri tavalla, ja release-käännetty koodi optimoidaan käytännössä hieman nopeammaksi. Tämän kurssin kannalta nopeuserolla ei kuitenkaan ole merkitystä.
Debug-tila on kätevä myös pelien ongelmia selvitettäessä. Laita peli käyntiin debuggaustilassa (F5), ja kun pelioliot ovat tulleet näytölle käydään lisäämässä epäiltyyn ongelmapaikkaan koodiin breakpoint.
Samoin jos ohjelma tuntuu olevan totaalisen jumissa, voidaan sen ajo pysäyttää ja katsoa, missä kohti ohjelmaa ollaan menossa ja näin ehkä voidaan ratkaista, mistä ohjelman "jumi" johtuu.
4.3 Keskeytyskohta, breakpoint
Voit laittaa ohjelmaan keskeytyskohdan eli ''breakpointin'', jonka tarkoituksena on keskeyttää ohjelman suoritus haluttuun kohtaan. Toisin sanoen, ohjelma suoritetaan alusta siihen saakka, kunnes tullaan keskeytyskohtaan, johon suoritus sitten pysähtyy.
Riderissa vie hiiri ikkunan vasempaan reunaan rivinumeroiden ja koodin väliin. Jos käytät New UI -käyttöliittymää, klikkaa rivinumeron kohdalle.
Keskeytyskohtaa EI voi asettaa Riderissä tyhjille riveille, kommenttiriveille eikä esittelyriveille. Toisin sanoen keskeytyskohdan voi asettaa vain suoritettaville riveille.
Paina hiirellä keskeytyskohta haluamaasi kohtaan.
4.4 Debuggaustilan käynnistäminen
Ohjelma käynnistyy debuggaustilaan painamalla joko F5, klikkaamalla oikean ylälaidassa olevaa Debug painiketta tai valitsemalla valikosta Run -> Debug. Tällöin ohjelman suoritus "pysähtyy" ensimmäiseen asettamaasi keskeytyskohtaan.
Huomaa, että keskeytyskohdan osoittaman punaisen pallon vieressä on nyt myös keltainen nuoli, joka näyttää seuraavaksi suoritettavan rivin. Toisin sanoen, ohjelman alkuosa on suoritettu rivi riviltä normaaliin tapaan, ja suoritus pysähtyy keskeytyskohtaan siten, että seuraavaksi suoritusvuorossa on tutkittava rivi, jolle keskeytyskohta on asetettu. Korostan: tätä keltaisen nuolen osoittamaa asiaa ei ole vielä suoritettu.
On mahdollista suorittaa ohjelma myös ilman debuggausta (Ctrl + F5 tai valitsemalla Run). Tällöin keskeytyskohdat jätetään huomiotta. Toisaalta myös esimerkiksi poikkeuksia (exceptions) ei käsitellä Riderin avulla, vaan ohjelmat voivat kaatua hallitsemattomasti.
4.5 Askellus (Step into, Step over)
Koodia voidaan askeltaa rivi kerrallaan. Tällöin ohjelman suoritus etenee debuggaustilassa rivi kerrallaan eteenpäin. Askellukseen on kaksi erilaista tapaa
- Step into (F11), askelletaan myös kutsuttavien aliohjelmien koodi riveittäin
- Step over (F10), aliohjelmakutsujen koodi suoritetaan kerralla ilman askellusta, eli tavallaan hypätään aliohjelman yli
Step over -toimintoa kannattaa käyttää sellaisen aliohjelmakutsun kohdalla, jonka sisäistä logiikka ei ole tarkoitus tarkastella. Esimerkiksi Console.WriteLine
- aliohjelmakutsun kohdalla kannattaa mieluummin valita Step over kuin Step into, sillä meitä ei oikeastaan kiinnosta tuon aliohjelman toiminta.
4.6 Resume
Resume-toiminto jatkaa ohjelman suorittamista normaaliin tapaan. Mikäli ohjelmassa on myöhemmin keskeytyskohta, ohjelman suoritus keskeytyy siihen.
4.7 Debuggaustilan lopettaminen (ohjelman ajon lopettaminen)
Debuggauksen voi lopettaa painamalla Shift + F5 tai valikosta Run -> Stop debugging.
4.8 Muuttuja-arvot (locals)
Debuggaus‐näkymän Threads & Variables-paneelissa (tai välilehdellä) näkyy tällä hetkellä näkyvissä olevat muuttujat ja niiden arvot.
Locals-paneelissa voi myös muokata muuttujien arvoja ajonaikaisesti. Esimerkiksi muuttujan "luku"-arvoa voi muokata kaksoisklikkaamalla Value-sarakkeen kohdalta numeroa ja kirjoittamalla uuden luvun vanhan tilalle. Tämän jälkeen kannattaa painaa Enteriä, jotta editori ottaa muutoksen. Riderissa muuttujan arvoa voi locals-ikkunassa muokata painamalla F2 tai klikkaamalla hiiren oikealla ja valistemalla Set Value.
Huomautus double-tyyppisen arvon muuttamisesta: Double-tyyppisen muuttujan arvoa muutettaessa on arvoksi asetettava desimaaliluku, esimerkiksi 3.0. Mikäli asetat arvoksi kokonaisluvun, esimerkiksi 3, debuggeri antaa virheilmoituksen "Error: Size of source and of dest differ".
4.9 Call stack, kutsupino
Jos saa ison ohjelman tutkittavakseen ja pitää korjata jotakin kohtaa eikä tiedä mistä ko. kohtaan tullaan, niin jälleen debuggeri on avuksi. Laita keskeytyskohta (breakpoint) tutkittavaan kohtaan, sitten ohjelma käyntiin (paina F5
) ja kun ohjelma pysähtyy laittamaasi keskeytyskohtaan, niin kutsupinosta (Call Stack) voidaan katsoa reitti, mistä pysäytyskohtaan on päädytty.
Jos kutsupinoa ei näy Debug-näkymässä, saa sen esille valitsemalla klikkaamalla paneelin oikeassa yläreunassa olevaa ikkunan näköistä kuvaketta: Layout settings -> Threads Frames -> Side by side.
Riderin kutsupinossa ei valitettavasti näy lähdekoodin rivinumeroita siitä, miltä riviltä kutsuun on lähdetty. Mutta klikkaamalla kutsupinossa hiiren oikealla, voidaan ottaa pinon sisältä leikepöydälle ja sitten tarkastella sitä rivinumeroineen jossakin editorissa.
4.10 Watch
Paikallisten muuttujien lisäksi voidaan suorituksen aikana seurata itse valittuja muuttujia Add to Watches toiminnolla. Yksittäisten muuttujien lisäksi voidaan tarkastella lausekkeita, esimerkiksi taulukko[i] > suurin
(tuottaisi true
tai false
).
- Aseta keskeytyskohta haluamaasi paikkaan ja aloita debuggaus.
- Etsi koodista se muuttuja (tai lauseke), jonka tilaa haluat tarkkailla ajon aikana. Valitse se (maalaamalla esimerkiksi hiirellä), klikkaa sitten hiiren oikealla ja valitse Add to Watches. Alla olevassa kuvassa lisätään
suurin
-muuttuja locals/watch-paneeliin.
- Voit lisätä eri "watcheja" haluamasi määrän. Alla lisätään myös
i
,taulukko[i]
jataulukko[i] > suurin
watch-paneeliin.
Huomaa, että watch-paneeliin lisäämäsi muuttuja (tai lauseke) ei välttämättä ole olemassa (ts. ei ole luotu tai ei "näy" sillä hetkellä), joten luonnollisestikaan tilaa ei voida tällöin tutkia. Alla olevassa kuvassa suoritus on menossa vasta rivillä 10.
Tässä esimerkissä i
, taulukko[i]
ja taulukko[i] > suurin
ovat paikallisia muuttujia (lausekkeita) EtsiSuurin
-lohkossa ja tulevat näkyviin kun ohjelman suoritus etenee sinne saakka.
Nyt watch-ikkunasta on helppo tarkastella esimerkiksi taulukon arvoja sitä mukaa kun silmukka etenee.
4.11 Muuttujan arvon muuttaminen
Tarvittaessa muuttujan arvoa voi muuttaa esim Locals-ikkunassa klikkaamalla arvoa ja sitten antamalla sille uuden arvon.
4.12 Ehdollinen keskeytyskohta
Debuggerin avulla voidaan lisätä myös keskeytyskohdalle keskeytymisen ehto. Tällaista keskeytyskohtaa kutsutaan nimellä ehdollinen keskeytyskohta. Sen avulla debuggeri keskeyttää ohjelman suorittamisen vain, kun keskeytyskohtaan annettu ehto toteutuu. Ehto voi olla mikä tahansa totuusarvoinen lauseke, esimerkiksi muuttujan tietty arvo.
Tämä on hyödyllistä etenkin ohjelmassa jossa on esimerkiksi pitkä silmukka, joka halutaan pysäyttää jossain tietyssä kohdassa. Jos ohjelma pysähtyisi jokaisella kierroksella, olisi hyvin työlästä ajaa ohjelmaa haluttuun pisteeseen. Ehdon voi lisätä seuraavasti:
Siirry haluamallesi riville koodissa
Siirry rivinumeron koodiin väliin ja klikkaa siihen breakpoint (näkyy punaisena täplänä)
Paina breakpointin kohdalla hiiren oikeaa näppäintä saadaksesi esiin valikon
Lisää Condition tekstikenttään lauseke, joka saa ajon aikana arvon true tai false, esimerkiksi
luku == 4
Sen sijaan
int luku = 4
ei ole ehto, eikä kenttään voi myöskään laittaa
if
-sanaa. Kun lauseke saa arvon true debuggeri keskeyttää ohjelman suorittamisen. Muutamia muita esimerkkejä ehdoista:i > 3 luvut[i+2] != 3 pallot[i] == null
Debuggaa (F5)
Kun pysähtyy, tarkastele Locals- ja Watch-ikkunoista muuttujien arvoja ja jatka tarvittaessa Step into (F11), Step over (F10) tai Resume (F5).
4.13 Hit Count
Hit Countilla voit laittaa ehdon niin, että kun näin monennen kerran tullaan keskeytyskohtaan, niin silloin pysähdytään.
4.14 Ongelmia debuggaustilan käynnistymisessä?
4.14.1 class com.intellij.util.ui.components cannot be cast
Mikäli saat debuggauksen aikana Riderissa poikkeuksen, esim.
class com.intellij.util.ui.components.BorderLayoutPanel
cannot be cast to class com.intellij.ui.OnePixelSplitter
kokeile asetusten resetointia seuraavien ohjeiden mukaisesti
HUOM! Näin tekemällä menetät kaikki asetuksesi, kuten näppäinoikotiet sekä teemat. Ota asetuksistasi halutessasi varmuuskopiot File -> Manage IDE Settings -> Export Settings.
- Paina Shift+Shift (eli kaksi kertaa Shift-painiketta) tai Ctrl+T,
- kirjoita Restore Default settings ja valitse ko. toiminto
- Rider käynnistyy uudestaan, valitse haluamasi asetukset.
4.14.2 Rider clr load callback is already in error state. A debug component is not installed
Jos saat yllä mainitun virheilmoituksen kun yrität käynnistää debuggerin niin ongelmana on todennäköisesti, että Mac-koneelle on asennettu väärä versio Riderista.
Joudut siis asentamaan Riderin uudestaan:
- Mene sivulle: https://www.jetbrains.com/rider/
- Klikkaa Download
- Valitse omalle koneellesi sopiva versio ja lataa se
- Asenna Rider uudelleen
5. Ongelmia
5.1 Rider-lisenssin uudelleenaktivointi
Opiskelukäyttöön tarkoitettu lisenssi täytyy aika ajoin uudelleenaktivoida kohdasta Help -> Manage licenses. Seuraa alla olevan videon ohjeita.
5.2 dotnet not found / command not found: dotnet
Katso .NET-asennusohjeet
5.3 Linux
Jos komentoriviltä tulee:
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
.
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.
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.
Itellä oli juuri tämä ongelma ja sain fixattua. Kyseessä oli läppärin integroitu Intel näytönohjain ja löysin netistä automaattisen drivereiden tarkastusohjelman(?). Tällä löyty pari driveria, joiden latauksen jälkeen virhekoodi ei enää ilmestynyt.
VL: voisitko lisätä linkin siihen löytämääsi ohjelmaan?
—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.
5.9 Ongelmia Riderin tai Jypelin kanssa
Kirjoita alle jos sinulla on jotakin ongelmia Riderin kanssa:
These are the current permissions for this document; please modify if needed. You can always modify these permissions from the manage page.