avoin/avoin23

# avoin

Huom! TÄMÄ ON AVOIMEN YLIOPISTON SIVU.

Et voi suorittaa kurssia, ellet ole ilmoittautunut täällä.

Tämä on ohje XNA:lle, joka ei toimi vuodesta 2018 eteenpäin, eli saatat olla väärässä dokumentissa. Oikea on ehkä: Lumiukkko mono

  • Tästä dokumentista on myös versio tehtävän tekemisestä MonoGame pohjaisella Jypelillä, jota käytetään pääasiallisena kirjastona vuodesta 2018 eteenpäin.

Lumiukko komentoriviltä XNA

(Tämä tehtävä liittyy Demo 1 -viikkotehtävään.)

Luo tiedosto Lumiukko.cs ja avaa se tekstieditoriin. Kopioi siihen mallin mukainen sisältö.

// 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>
    /// Pääohjelmassa laitetaan "peli" käyntiin Jypeli-kirjastolle 
    /// tyypilliseen tapaan
    /// </summary>
    public static void Main()
    {
        using (Lumiukko peli = new Lumiukko())
        {
            peli.Run();
        }
    }

    /// <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);
    }
}

Mac/Linux-käyttäjät:

  1. tehkää joko TIMissä:
  2. tai ennemmin tai myöhemmin asenna työkalut ja tee Mac/Linux-ohjeilla

Windows käyttäjät:

Lataa jypeli.zip-tiedosto ja pura siitä x86-kansiosta tiedosto Jypeli.dll samaan kansioon Lumiukko.cs-tiedoston kanssa. Purkamisesta: Windowsin tiedostonäkymässä voit tuplaklikata tiedostoa, jolloin voit copy-pastettaa oikeat tiedostot Lumiukon kanssa samaan paikkaan.

HUOM! Varmista, että olet purkanut oikean Jypeli.dll-tiedoston. Oikea löytyy edellä mainitun zip-tiedoston x86-hakemistosta. Muussa tapauksessa peli kaatuu.

Kirjoita PowerShellillä (voit copy-pasteta tuon pitkän rimpsun)

csc Lumiukko.cs /reference:Jypeli.dll`;`"$env:XNAGSv4\References\Windows\x86\Microsoft.Xna.Framework.Game.dll`" /platform:x86

HUOM! Jos ylempi ei toimi, varmista että olet noudattanut ohjeita täältä.

Komentorivillä (cmd.exe) vastaava komento olisi

csc Lumiukko.cs /reference:Jypeli.dll;"%XNAGSv4%References\Windows\x86\Microsoft.Xna.Framework.Game.dll"  /platform:x86

Käännetyn ohjelman voi ajaa kirjoittamalla komentoriville allaolevan tekstin. Syntynyt "peli-ikkuna" saadaan pois painamalla Alt-F4.

.\Lumiukko.exe

Jos tulee virhe

error CS0006: Metadata file
        '%XNAGSv4%References\Windows\x86\Microsoft.Xna.Framework.Game.dll' could
        not be found

niin kokeile kääntämistä PowerShell-komennolla

csc Lumiukko.cs /reference:Jypeli.dll`;`"$env:WINDIR\Microsoft.NET\assembly\GAC_32\Microsoft.Xna.Framework.Game\v4.0_4.0.0.0__842cf8be1de50553\Microsoft.Xna.Framework.Game.dll`"  /platform:x86

Komentorivillä (cmd.exe) vastaava komento olisi

csc Lumiukko.cs /reference:Jypeli.dll;"C:\Windows\Microsoft.NET\assembly\GAC_32\Microsoft.Xna.Framework.Game\v4.0_4.0.0.0__842cf8be1de50553\Microsoft.Xna.Framework.Game.dll" /platform:x86

csk.bat

Yllä esitelty kääntämiskomento on varsin pitkä ja asioiden helpottamiseksi voikin kirjoittaa kotona tiedoston csk.bat, jonka kopioi jonnekin hakemistoon joka on polussa (esimerkin tiedostolla ei tarvitse edes alkuosan polkujuttuja määritellä):

@echo off
SET ERRORLEVEL=
"%WINDIR%\Microsoft.NET\Framework\v4.0.30319\csc" %* /nologo /reference:Jypeli.dll;"%XNAGSv4%References\Windows\x86\Microsoft.Xna.Framework.Game.dll";"%XNAGSv4%References\Windows\x86\Microsoft.Xna.Framework.dll"  /platform:x86   /define:WINDOWS
if ERRORLEVEL 1 goto loppu
%~n1
:loppu

Tässäkin voi kannattaa tuon %* edellä (Windows 10) käyttää uudempaa kääntäjää:

c:\Program Files (x86)\MSBuild\14.0\Bin\csc.exe

Tämän jälkeen kääntäminen ja samalla ajaminen (jos käännös onnistuu) onnistuu komennolla

csk Lumiukko.cs 

Agoran mikroluokissa csk-komento on valmiina N:\bin hakemistossa ja pitäisi toimia jos sinulla on N-levy mountattuna.

Ukon värin ja ulkonäön muuttaminen

HUOM! Seuraavat koodinpätkät kirjoitetaan tekstieditorissa ohjelmakoodiin! Kokeile palloille erilaisia värejä. Esimerkiksi

p2.Color = Color.HotPink;

Rivin voit lisätä mihin tahansa 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äytössä olevat valmiit värien nimet näet esimerkiksi Jypelin dokumentaatiosta tai ohjeista.

Minkä tahansa värin voit itse tehdä kutsulla tyyliin:

  p3.Color = new Color(173, 255, 47, 10);

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.

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
# linux

Lumiukon kääntäminen ja ajaminen Linuxissa

  1. Oletetaan että Monodevelop ja Jypeli on asennettu ohjeiden mukaan

  2. Luo ja siirry vaikkapa hakemistoon lumiukko omassa hakemistossasi (esimerkissä /home/vesal)

  3. Kirjoita tiedosto Lumiukko.cs jollakin editorilla ja tallenna se

  4. Mono on mulla asentanut kirjastot osoitteeseen (tarkista itseltäsi tarkka osoite)

    /home/vesal/.local/share/MonoDevelop-5.0/LocalInstall/Addins/MonoDevelop.Jypeli.6.5.9/assemblies/Linux/
  5. Tämä on aivan liian pitkä kirjoitettavaksi kääntämiskomentoihin ja siksi tehdään symbolinen linkki:

    ln -s ~/.local/share/MonoDevelop-5.0/LocalInstall/Addins/MonoDevelop.Jypeli.6.5.9/assemblies/Linux/ lib  
  6. Asetetaan vielä Monodevelopin polku:

     export MONO_PATH=lib
  7. Itse kääntäminen komenolla:

     mcs  /r:lib/Jypeli.dll /r:lib/Jypeli.Physics2d.dll /r:lib/MonoGame.Framework.dll /r:lib/OpenTK.dll /r:lib/Tao.Sdl.dll  /r:System.Numerics /r:System.Drawing  Lumiukko.cs 

    Lumiukon tapauksessa tosin riittää vähempikin kirjastoja

     mcs  /r:lib/Jypeli.dll /r:lib/Jypeli.Physics2d.dll /r:lib/MonoGame.Framework.dll   Lumiukko.cs
  8. Ajaminen komennolla:

     mono Lumiukko.exe
  1. Vastaavasti kuin Windowsissa voisi kirjoittaa tälle kaikelle komentojonon vaikkapa nimelle csk.sh jonka sisältö olisi:

    #/bin/bash
    rm -f Lumiukko.exe >/dev/null
    if [ ! -L $mda ]; then
      ln -s ~/.local/share/MonoDevelop-5.0/LocalInstall/Addins/MonoDevelop.Jypeli.6.5.9/assemblies/Linux/ lib
    fi
    
    export MONO_PATH=lib
    mcs  /r:lib/Jypeli.dll /r:lib/Jypeli.Physics2d.dll /r:lib/MonoGame.Framework.dll /r:lib/OpenTK.dll /r:lib/Tao.Sdl.dll  /r:System.Numerics /r:System.Drawing  Lumiukko.cs
    mono Lumiukko.exe
  1. Ja sitten tuolle pitäisi antaa suoritusoikeudet: chdmod 755 csk.sh
  2. Ja tällöin ajaminen: ./csk.sh

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