Ohjelmointi 1, syksy 2024, luento17

# L17

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

# git

Luentoesimerkkien haku versionhallinnasta

  • siirry hakemistoon johon haluat esimerkit

  • ekalla kertaa

    git clone https://gitlab.jyu.fi/tie/ohj1/2024s/esimerkit.git .

    jatkossa samassa hakemistossa

    git pull
  • kopsi tuo hakemisto tai ainakin sinua kiinnostava alihakemisto toiseen paikkaan

  • periaatteessa tuonne syntyneen solutionin voi avata sellaisenaankin, mutta jos siihen tekee muutoksia, niin seuraavalla pull-komennolla tulee helposti konflikti

Kertausta

# GLO_DemoN2

Määrät

# maaratcs

Kysymyksiä

Kutsujärjestys

# jarjestys

Kysymyksiä

Hirsipuupeli

# hirsi1

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.RelativePosition = Vector.Zero;
        Font fontti = new Font(70, true);
        label.Font = fontti;
        Kirjain k = new Kirjain(this, 'A', new Vector(100, -100), new Vector(100, 100));
public class Kirjain: PhysicsObject // IS-A sääntö vs HAS-A sääntö.  Kissa on Elain!
{
    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.RelativePosition = new Vector(0, 5);
        // label.Font = Font.DefaultLarge;
        Font fontti = new Font(70, true);
        label.Font = fontti;
        Image = Game.LoadImage("puupalikka");
    private static readonly 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);
        }
    }
}
        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 ja fontti staattiseksi vakioksi:
    private static readonly Image kuva = Game.LoadImage("puupalikka"); // vakio
    private static readonly Font fontti = new Font(70, true);
    private static readonly Vector siirto = new Vector(0, 5);
        // 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));
# hirsipuupeli

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