Tämä on vuoden 2018 hakemistossa.

The referenced paragraph does not exist.
The referenced paragraph does not exist.

Ohjelmointi 1, syksy 2018, luento 17

# L17

17. luento: ma 5.11.2018 klo 12:15-14:00: Pelin tekeminen

Versionhallinnassa

- lähtötilanne: svn export -r 1577 https://svn.cc.jyu.fi/srv/svn/ohj1/esimerkit/2018s/luennot/live17
- lopputilanne: svn export https://svn.cc.jyu.fi/srv/svn/ohj1/esimerkit/2018s/luennot/luento17
- Mäciin myös:  svn export https://svn.cc.jyu.fi/srv/svn/ohj1/esimerkit/2018s/luennot/luento17mac/

Otin versionhallinnasta tuon lopputilanteen ja avasin sen Visual Studiolla, mutta en saa käynnistettyä peliä, ensimmäisenä valittaa ettei PhysicsGame sisällä LoadFont ja jos sen fontti muuttujan arvoksi antaa vaikka Font.DefaultBold ja uudestaan yrittää käynnistää peliä niin tulee pitkä virhelista joka alkaa “The”Jypeli.MSBuildExtensions.MGCBTask" task failed unexpectedly.System.InvalidOperationException: No process is associated with this object." Olisiko tähän joku selkeä syy tiedossa?

VL: en osaa sanoa! Windows? Mac/Linux ei toimi suoraan. Mutta mun Windows koneessa tuon exportin jälkeen voi suoraan klikata tuota .sln tiedostoa ja käynnistää.

smkheiku: Joo minulla on Windows. Nyt en kyllä itse saa ratkaistua tätä ongelmaa, ja minulla on muutenkin pöytäkone johon kaikki asennettu niin en voi oikein ottaa mukaan ja tulla yliopistolle näyttämään. Tosiaan avaan tuon luento17 solutionin niin eka virhe tulee siitä että ‘PhysicsGame’ does not contain a definition for ‘LoadFont’. Onko jypeliin tullut muutoksia, jotka vaatisi sen päivittämistä tai muuta? Harjoitustyöni peli kyllä toimii. Ja vaikka tuon LoadFont ottaa pois käytöstä ja vaihtaa tilalle default fontin niin peli ei silti käynnisty.



vl: kurssin työkalujen vs asennussivulla on muuten ohjeet tuon virheen käsittelyyn

06 Nov 18 (edited 10 Nov 18)

Kertausta

Määrät

# PLUGINNAMEHERE

Kysymyksiä

Kutsujärjestys

# jarjestys

Kysymyksiä

Hirsipuupeli

Tekojärjestys:

Begin-metodiin:

        PhysicsObject k = new PhysicsObject(100, 100);
        Add(k);
        Level.Background.CreateGradient(Color.Brown, Color.Black);
        Label label = new Label("A");
        Add(label);
        k.Position = new Vector(100, -100);
        k.Add(label);
        label.Font = Font.DefaultLarge;

Miten muutan fonttia?

  • tee uusi fontti:
    • Contentiin Add/New Item/Sprite Font
    • nimeksi PisteFontti. spritefont
    • avaa tiedosto
    • FontNameksi Tahoma
    • kooksi 50
        Font fontti = PhysicsGame.LoadFont("PisteFontti");
        label.Font = fontti;
        Kirjain k = new Kirjain(this, 'A', new Vector(100, -100), new Vector(100, 100));
public class Kirjain: PhysicsObject
{
    public Kirjain(Hirsipuu peli, char k, Vector p, Vector koko) : base(koko.X, koko.Y)
    {

    }
}
        peli.Add(this);
        Label label = new Label("A");
        Add(label);
        Position = p;
        // label.Font = Font.DefaultLarge;
        Font fontti = PhysicsGame.LoadFont("PisteFontti");
        label.Font = fontti;
        Image = Game.LoadImage("puupalikka");
  • kokeile lisätä Begin -metodiin toinen kirjain, vaikkapa B
    private string[] kirjaimet =
    {
        "QWERTYUIOPÅ",
        "ASDFGHJKLÖÄ",
        "ZXCVBNM -"
    };
        Aakkoset aakkoset = new Aakkoset(this, kirjaimet, new Vector(-200, 0), 800);
public class Aakkoset
{
    public Aakkoset(PhysicsGame peli, string[] kirjaimet, Vector p, double w)
    {
        if (kirjaimet.Length == 0) return;
        int n = kirjaimet[0].Length; // TODO: etsi pisin rivi
        if (n == 0) return;
        double d = w / n;
        Vector koko = new Vector(d, d);
        Vector sarekesiirtyma = new Vector(d, 0);
        string jono = kirjaimet[0];
        for (int sarake = 0; sarake < jono.Length; sarake++)
        {
            Vector paikka = p + sarake * sarekesiirtyma;
            char kirjain = jono[sarake];
            Kirjain palikka = new Kirjain(peli, kirjain, paikka, koko);
        }
    }
}
  • aja F5 ja tulee poikkeus
  • vaihda pistefontissa loppu 255
  • katso rivi
        Vector rivisiirtyma = new Vector(d*0.2, -d*1.1);
        Vector sarekesiirtyma = new Vector(d*1.1, 0);
        for (int rivi = 0; rivi < kirjaimet.Length; rivi++ )
        {
            Vector paikka = p + rivi * rivisiirtyma;
            string jono = kirjaimet[rivi];
            for (int sarake = 0; sarake < jono.Length; sarake++)
            {
                char kirjain = jono[sarake];
                Kirjain palikka = new Kirjain(peli, kirjain, paikka, koko);
                paikka += sarekesiirtyma;
            }
        }
  • siirrä kirjaimessa kuva staattiseksi vakioksi:
    private static Image kuva = Game.LoadImage("puupalikka"); // vakio
#if WINDOWS
    private static Font fontti = Game.LoadFont("PisteFontti");
#endif    
        // if (luetutRivit != null) teksti = RandomGen.SelectOne(luetutRivit);
        teksti = "LUMIUKKO";
        Sana sana = new Sana(this, new Vector(-200, 300), teksti, 100);
  • lisää sanaluokka
public class Sana
{
    private string teksti;
    private Vector position;
    public Vector Position { get { return position; } }
    private List<Kirjain> kirjaimet = new List<Kirjain>();
    private PhysicsGame peli;

    public Sana(PhysicsGame peli, Vector p, string teksti, double d)
    {
        this.teksti = teksti;
        this.position = p;
        Vector sarakesiirtyma = new Vector(d * 1.1, 0);
        Vector paikka = p;
        this.peli = peli;
        Vector koko = new Vector(d, d);
        for (int sarake = 0; sarake < teksti.Length; sarake++)
        {
            char kirjain = teksti[sarake];
            Kirjain palikka = new Kirjain(peli, kirjain, paikka, koko);
            this.kirjaimet.Add(palikka);
            paikka += sarakesiirtyma;
        }
    }

}
  • lisää Kirjain-luokan muodostajaan

      bool nakyy = true
  • lisää myös:

       label.IsVisible = nakyy;

Selitä loput toiminnasta...

  • huomaa mm liitokset:

      peli.Add(new AxleJoint(torso, paa));

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