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/Linux mcs-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
# color

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:

PhysicsObject silma1 = new PhysicsObject(2 * 10.0, 2 * 10.0, Shape.Circle);
silma1.Y = p3.Y + 0;
silma1.Color = Color.Black;
p3.Add(silma1);

Nyt siis silma1 on liitetty kiinteästi kappaleeseen p3 sen keskipisteeseen (koska Y:hyn lisätään 0).

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ä:

  1. Mene hakemistoon jonka alle haluat ohjelman

  2. Anna komento

    dotnet new ConsoleMain -n HelloWorld
  3. Siirry ohjelman hakemistoon

    cd HelloWorld
  4. Muokkaa tiedostoa HelloWorld.cs

  5. 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.