Ohjelmointi 1, syksy 2019, luento 17

# L17

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

Versionhallinnassa

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

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.