Tämä on vuoden 2018 hakemistossa.
Ohjelmointi 1, syksy 2018, luento 17
- Vuoden 2015 esimerkki: Hirsipuu
- Vuoden 2013 esimerkki: AmebaDanceWars refaktorointi, if-lauseiden vähentäminen olioita käyttämällä
- AmebaDanceWars: ks: s2013 luennot
- Vuoden 2012 esimerkki: Lumiukot oliolla:
- ks: s2012 luennot
- Luennolle tehdyt koodit versionhallinnassa
- Luennon koodit versionhallinnassa
- 17. luento videona: Osa 1 ja 2 MP4 alkuperäinen, MP4 kännykkäversio
- luentoseinä
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
Kertausta
Määrät
Kysymyksiä
Kutsujärjestys
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
- Contentiin
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, vaikkapaB
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 muodostajaanbool 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.