Huom! Nämä wikisivut ovat osittain vielä työn alla, osa sisällöstä saattaa olla puutteellista. Ongelmakohtien viereen voit jättää kommentin, yliopiston käyttäjät myös pystyvät (ja saavat) muokata sivuja.

Jypelin käyttöohjeet » Parhaat pisteet

Jypeli sisältää valmiit luokat EasyHighScore ja ScoreList parhaiden pisteiden kirjaamiseen.

Näistä EasyHighScore on helppokäyttöisempi ja nopeampi toteuttaa.

ScoreList tarjoaa enemmän mahdollisuusksia muokata parhaiden pisteiden listaa, mutta samalla sen käyttö vaatii myös hieman enemmän työtä

1. EasyHighScore - parhaiden pisteiden lista nopeasti

EasyHighScoren käyttäminen on nopea tapa tehdä omaan peliin parhaiden pisteiden lista. EasyHighScore osaa automaattisesti tallentaa pisteet tiedostoon, jossa ne säilyvät vaikka pelin sulkee välillä.

Miten listan saa nollattua? Jos haluaa työvaiheen kokeilut pois näkyvistä? :D

topLista.Clear() poistaa pisteet. Muistaakseni myös käännöskansiosta löytyy data-niminen kansio, joka pitää itse pistelistatiedoston sisällään. Tästäkin pitäisi tänne kirjoitella ohjeet. -MR

08 Dec 21 (edited 08 Dec 21)

1.1 EasyHighScore-listan luominen

Lista kannattaa asettaa attribuutiksi, jolloin sitä voidaan käyttää vapaasti mistä tahansa aliohjelmasta:

public class Peli : Game
{
    private EasyHighScore topLista = new EasyHighScore();
   
    public override void Begin()
    {
      // alustuksia jne.

Onko mahdollista ottaa EasyHighScoresta tuloksia ja laskea niistä esim keskiarvo ohjelman sisällä?

15 Nov 23

1.2 EasyHighScore - pisteiden syöttäminen listalle

Kun halutaan syöttää pisteitä listalle, kutsutaan metodia EnterAndShow, jolle annetaan parametrina se pistemäärä, jolla listalle pyritään, esimerkiksi pistelaskurin arvo.

Parhaiden pisteiden listalle voi lisäksi kertoa, mikä aliohjelma suoritetaan kun parhaat pisteet näyttävä ikkuna suljetaan.

private void PelaajaKuoli()
{
    pelaaja.Destroy();
    topLista.EnterAndShow(pistelaskuri.Value);
    topLista.HighScoreWindow.Closed += AloitaPeli;
}

Jos pisteet riittävät listalle, pelaajalta kysytään automaattisesti nimi ja näytetään parhaiden pisteiden lista.

Kun ikkuna suljetaan, suoritetaan tässä esimerkissä aliohjelma AloitaPeli.

public void AloitaPeli(Window sender)
{
    // ...
}

1.3 EasyHighScore-listan näyttäminen ilman lisäämistä

Jos halutaan pelkästään näyttää lista ilman uuden pistemäärän lisäämisen mahdollisuutta, voidaan kirjoittaa:

topLista.Show();

2. ScoreList - muokattavamman pistelistan tekeminen

Jos EasyHighScore on riittämätön, voi parhaiden pisteiden tekemiseen käyttää vapaammin muokattavaa ScoreListiä. ScoreListissä joutuu itse huolehtimaan mm. milloin pisteet tallennetaan tiedostoon, mutta vastineeksi saa muokattavamman parhaiden pisteiden listan.

2.1 ScoreList-listan luominen

Lista kannattaa asettaa attribuutiksi, jolloin sitä voidaan käyttää vapaasti mistä tahansa aliohjelmasta.

public class Peli : Game
{
   private ScoreList topLista = new ScoreList(10, false, 0);
   // muut attribuutit

   public override void Begin()
   {
      // alustuksia jne.

ScoreList-olion rakentajan parametrit ovat järjestyksessä:

  • 10 - kuinka monta nimeä listalle mahtuu
  • false - onko järjestys takaperoinen (vähemmän pisteitä parempi), tässä tapauksessa ei.
  • 0 - raja listalle pääsemiseen. Raja on eksklusiivinen, ts. pistemäärällä nolla ei pääse vielä listalle.

On syytä huomioida, että jos järjestyksen asettaa käänteiseksi, myös raja muuttuu käänteiseksi, eli ainoastaan rajaa pienemmät pisteet hyväksytään.

Listan lataaminen tiedostosta voidaan tehdä esimerkiksi Begin-aliohjelmass pelin alustuksen yhteydessä. Tässä tapauksessa tiedoston nimi on pisteet.xml.

public override void Begin()
{
   topLista = DataStorage.TryLoad<ScoreList>(topLista, "pisteet.xml");
   // ...
}

TryLoad yrittää ladata listan tiedostosta, jos sellainen on olemassa ja se on oikeaa muotoa. Muuten käytetään aiemmin luotua tyhjää listaa.

2.2 ScoreList-listan näyttäminen ruudulla

Listan näyttämiseen ruudulla on olemassa luokka HighScoreWindow.

HighScoreWindow topIkkuna = new HighScoreWindow(
                             "Parhaat pisteet",
                             "Onneksi olkoon, pääsit listalle pisteillä %p! Syötä nimesi:",
                             topLista, pisteet);
topIkkuna.Closed += TallennaPisteet;
Add(topIkkuna);

HighScoreWindow-olion rakentajan parametrit ovat järjestyksessä:

  • "Parhaat pisteet" - ennen tuloksia näytettävä viesti
  • "Onneksi olkoon, pääsit listalle pisteillä %p! Syötä nimesi:" - viesti joka näytetään, jos pisteet oikeuttavat listasijoitukseen
  • topLista - lista jonka sisältö näytetään, ja jolle uusi nimi lisätään tarvittaessa
  • pisteet - edellisessä pelissä saavutettu pistemäärä

Jos pistemäärä oikeuttaa sijoitukseen listalla, kysytään pelaajan nimeä ennen listan näyttämistä.

Jos halutaan pelkästään näyttää lista ilman lisäämisen mahdollisuutta, voidaan nimensyöttöviesti ja pistemäärä jättää pois.

HighScoreWindow topIkkuna = new HighScoreWindow(
                              "Parhaat pisteet",
                              topLista);
topIkkuna.Closed += TallennaPisteet;
Add(topIkkuna);

Ensimmäinen rivi luo pisteikkunan ja kiinnittää topListan siihen. Toinen rivi lisää tapahtuman TallennaPisteet suoritettavaksi, kun ikkuna suljetaan. Tapahtuman nimi TallennaPisteet vastaa saman nimistä aliohjelmaa pelissä, ja siihen pisteiden tallennuksen yhteydessä. Kolmas rivi lisää ikkunan ruudulle.

2.3 ScoreList-listan tallentaminen tiedostoon

Jotta nimet pysyisivät listalla, se on tallennettava tiedostoon. Edellisessä kohdassa kiinnitimme tapahtuman TallennaPisteet laukaistavaksi, kun ikkuna suljetaan. Tehdään sitä vastaava aliohjelma:

private void TallennaPisteet(Window sender)
{
   DataStorage.Save<ScoreList>(topLista, "pisteet.xml");
}

Näin pisteet tallentuvat samaan pisteet.xml-tiedostoon, josta ne ladattiinkin.

3. Pisteiden esitystavan muuttaminen

Oletuksena pisteet näytetään niin monen desimaalin tarkkuudella kuin ne on annettu, mutta aina näin ei haluta. Pisteiden esitystapaa voidaan muuttaa EasyHighScoren tapauksessa seuraavasti:

helppoLista.HighScoreWindow.NameInputWindow.Message.Text = "Onneksi olkoon! Sait {0:0.00} pistettä!";
helppoLista.HighScoreWindow.List.ScoreFormat = "{0:0.00}";

Vastaavasti HighScoreListille

hsLista.NameInputWindow.Message.Text = "Onneksi olkoon! Sait {0:0.00} pistettä. Anna nimesi";
hsLista.List.ScoreFormat = "{0:0.00}";

Ensimmäinen rivi määrää tekstin ikkunassa joka kysyy pelaajan nimeä, ja toinen pisteiden esitystavan itse listassa. Lisätietoja C#:n muotoilumerkkijonoista löydät esimerkiksi ​täältä.

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