Lumiukko komentoriviltä MonoGame + Jypeli
Tämä tehtävä liittyy Demo 1 -viikkotehtävään.
Tässä tehtävässä oletetaan että olet asentanut kurssin työkaluista ainakin tekstieditorin ja Visual Studion tai Riderin.
Tässä syksyn 2021 harjoituksessa käyteään
dotnet
-komentoa. Jos haluat kääntääcsc
-komennolla (tai Mac/Linuxmcs
-komennolla), niin katso syksyn 2020 tehtäviä.
Tämä harjoitus toimii samalla tavalla kaikissa järjestelmissä Win/Mac/Linux.
1. Jypeli projektimallien asentaminen
Mikäli et ole vielä antanut seuraavaa komentoa komentoriviltä, niin anna se nyt, niin Jypelin projektimallit asentuvat:
dotnet new -i Jypeli.Templates
Tämä pitää tehdä, vaikka olisit asentanut ne Visual Studioon työkalusivun ohjeiden mukaisesti.
2. Projektin luominen
Siirry aluksi esimerkiksi hakemistoon /c/kurssit/ohj1/paate/paate1
(tehty HelloWorld -tehtävässä, Mac/Linux mene siihen hakemistoon, missä teit HelloWorld-tehtävän)
cd /c/kurssit/ohj1/paate/paate1
Luo uusi Lumiukko
-projekti:
dotnet new fysiikkapeli -n Lumiukko
Siirry lumiukon hakemistoon
cd Lumiukko
Katso mitä tiedostoja syntyi
ls -la
3. Muokkaa tiedostoa
Muokkaa tiedostoa Lumiukko.cs
tekstieditorilla.
Esimerkiksi
win: npp Lumiukko.cs
Mac: open -e Lumiukko.cs
Linux: gedit
Kopioi siihen mallin mukainen sisältö. Huomaa että korvaat pohjana olevan koodin kokonaan alla olevalla koodilla.
// Otetaan käyttöön Jyväskylän yliopiston Jypeli-kirjasto
using Jypeli;
/// @author Antti-Jussi Lakanen, Vesa Lappalainen
/// @version 12.1.2012
///
/// <summary>
/// Luokka, jossa harjoitellaan piirtämistä lisäämällä ympyröitä ruudulle
/// </summary>
public class Lumiukko : PhysicsGame
{
/// <summary>
/// Aliohjelmassa piirretään ja zoomataan kamera siten että
/// kenttä näkyy hyvin ruudulla.
/// </summary>
public override void Begin()
{
Camera.ZoomToLevel();
Level.Background.Color = Color.Black;
PhysicsObject p1 = new PhysicsObject(2 * 100.0, 2 * 100.0, Shape.Circle);
p1.Y = Level.Bottom + 200.0;
Add(p1);
PhysicsObject p2 = new PhysicsObject(2 * 50.0, 2 * 50.0, Shape.Circle);
p2.Y = p1.Y + 100 + 50;
Add(p2);
PhysicsObject p3 = new PhysicsObject(2 * 30.0, 2 * 30.0, Shape.Circle);
p3.Y = p2.Y + 50 + 30;
Add(p3);
}
}
4. Käännä ja aja ohjelma
Ohjelman kääntämiseksi ja ajamiseksi anna komento
dotnet run
Katso mitä tiedostoja (ja kansioita) syntyi kääntämisen yhteydessä
ls -la
5. Ukon värin ja ulkonäön muuttaminen
HUOM! Seuraavat koodinpätkät kirjoitetaan tekstieditorissa ohjelmakoodiin (eli tiedostoon Lumiukko.cs
)! Kokeile palloille erilaisia värejä. Esimerkiksi
p2.Color = Color.HotPink;
Rivin voit lisätä mille tahansa uudelle riville sen jälkeen kun muuttuja p2
on esitelty. Kuitenkin ennen aliohjelman lopettavaa aaltosulkua }
. Paras paikka on siellä, missä muutenkin käsitellään p2
muuttujaa (siis ennen kuin p3
on esitelty).
Käännä ja aja ohjelma edellisissä osuuksissa opetetulla tavalla, ja ihastele aikaansaamaasi muutosta.
Käytössä olevat valmiit värien nimet näet esimerkiksi Jypelin ohjeista.
Minkä tahansa värin voit itse tehdä kutsulla tyyliin:
p3.Color = new Color(173, 255, 47, 50);
missä parametrit ovat järjestyksessä Red
, Green
, Blue
, Alpha
. Kukin arvo voi vaihdella välillä 0-255. Alpha tarkoittaa läpinäkyvyysarvoa, 0 täysin läpinäkyvä, 255 täysin läpinäkymätön.
Luonnollisesti voit vaihtaa myös taustan värin sellaiseksi kuin haluat -- kokeile.
Kokeile kirjaston ohjeiden mukaan vaihtaa alin pallo kaksi kertaa leveämmäksi. Älä muuta "pallon" korkeutta.
Piirrä ukolle silmät.
Huomaa edellä p3.Add(silma1)
, eli silma1
lisätään p3
-olion lapseksi (eli p3
:n sisälle).
Nyt siis silma1
on liitetty kiinteästi kappaleeseen p3
sen keskipisteeseen (koska Y:hyn lisätään 0). Mieti itse miten muutetaan X-koordinaattia.
Jos yrität lisätä fysiikkakappaleita toisten fysiikkakappaleiden sisälle, huomaat että ne automaattisesti liikkuvat erilleen.
Saat liitettyä kappaleita yhteen niin että ne käyttäytyvät kuin yksi ja sama kappale asettamalla toisen lapsiolioksi seuraavalla tavalla:
6. Lisätehtävä: Voimia peliin
Lisää Begin
-aliohjelman loppuun rivi (muistathan, että Begin
-metodi alkaa Begin
-rivin jälkeisestä aaltosulusta, ja päättyy vastaavasti metodin sulkevaan aaltosulkuun, eli "aliohjelman loppuun" tarkoittaa ennen sen lopettavaa aaltosulkua):
Gravity = new Vector(0, -400);
- käännä ja aja
- kokeile muita lukuja -400:n paikalle
7. Ei-graafiset ohjelmat
Käyttäen dotnet
-komentoa voit tehdä myös ei-graafisia ohjelmia, esim HelloWorld-voisit tehdä:
Mene hakemistoon jonka alle haluat ohjelman
Anna komento
dotnet new ConsoleMain -n HelloWorld
Siirry ohjelman hakemistoon
cd HelloWorld
Muokkaa tiedostoa
HelloWorld.cs
Käännä ja aja:
dotnet run
These are the current permissions for this document; please modify if needed. You can always modify these permissions from the manage page.