Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

12. diel - Šibenice pre Android - Dokončenie

V minulej lekcii, Šibenice pre Android - MainGameActivity , sme dokončili hlavné aktivitu hry. V dnešnej Java Android tutoriálu dodáme aktivity pre koniec hry a zobrazenie skóre, čím aplikácie dokončíme.

EndGameActivity

Presuňme sa k aktivite konca hry a rovno pripravme niekoľko inštančných premenných. Budú to premenné pre skóre, informácie o tom, či v predchádzajúcej aktivite hráč vyhral alebo prehral, hádanie slovo a pre uloženie skóre aj premenná jmenoHrace:

public class EndGameActivity extends Activity {
    int zaverecneScore;
    int vyhraNeboProhra;
    String jmenoHrace = "";
    String uhadnuteSlovo = "";
}

Tradične dodajme ako prvá udalosť onCreate(). Hneď po vykreslené layoutu a nastavenie zákazu zmien orientácie sa načítajú hodnoty z buniek po prechode za pomocou getIntent(). Zavolajú sa metódy zobrazScore() a nactiAnimaci():

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_end_game);
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR);

    zaverecneScore = getIntent().getIntExtra("ID_PROMENNE", 0);
    uhadnuteSlovo = getIntent().getStringExtra("SLOVO").toUpperCase();
    vyhraNeboProhra = getIntent().getIntExtra("VYHRA_PROHRA", 2);

    zobrazScore();
    nactiAnimaci();
}

Na konci hry budeme chcieť zobraziť záverečnú animáciu. Podľa toho, či hráč vyhral alebo prehral, sa do AnimationDrawable načítajú určitej snímky pre animáciu a spustí sa určitá hudba pomocou objektu MediaPlayer.

V prípade, že sa z nejakého dôvodu nepodarí získať hodnotu výhry alebo prehry (0, 1) sa zobrazí toast s chybovým textom:

private void nactiAnimaci() {
    AnimationDrawable anim = new AnimationDrawable();
    ImageView obr = findViewById(R.id.zaverecnaPlocha);
    if (vyhraNeboProhra == 0) {
        MediaPlayer mp = MediaPlayer.create(this, R.raw.loosegame);
        mp.start();

        anim.addFrame(getResources().getDrawable(R.drawable.end1), 1500);
        anim.addFrame(getResources().getDrawable(R.drawable.end2), 1500);
        anim.addFrame(getResources().getDrawable(R.drawable.end3), 1500);
        obr.setBackgroundDrawable(anim);
        anim.start();
    } else if (vyhraNeboProhra == 1) {
        MediaPlayer mp = MediaPlayer.create(this, R.raw.wingame);
        mp.start();

        anim.addFrame(getResources().getDrawable(R.drawable.v1), 1000);
        anim.addFrame(getResources().getDrawable(R.drawable.v2), 1000);
        anim.addFrame(getResources().getDrawable(R.drawable.v3), 1000);
        anim.addFrame(getResources().getDrawable(R.drawable.v4), 1000);
        anim.addFrame(getResources().getDrawable(R.drawable.v5), 1000);
        anim.addFrame(getResources().getDrawable(R.drawable.v6), 1000);
        anim.addFrame(getResources().getDrawable(R.drawable.v7), 1000);
        obr.setBackgroundDrawable(anim);
        anim.start();
    } else {
        Toast.makeText(getApplicationContext(), "Někde je chyba", Toast.LENGTH_LONG).show();
    }
}

V metóde zobrazScore() zobrazíme uhádnuté slovo a hráčovo skóre:

private void zobrazScore() {
    TextView phs = findViewById(R.id.slovo);
    phs.setText(uhadnuteSlovo);

    TextView tws = findViewById(R.id.score);
    tws.setText(String.valueOf(zaverecneScore));
}

Pridáme uloženie výsledkov. Metóda ulozDoPameti() vytvorí / otvorí SharedPreferences s kľúčom "VYSLEDKY", uloží súčasné výsledky a pridá k nim nový. Aby sa všetko uložilo, je potrebné vytvoriť SharedPreferences.Editor, ktorý si uložíme ako preeditor. Pomocou neho spojíme staré a nové skóre a následne potvrdíme metódou apply(), aby došlo k zmenám:

private void ulozdopameti() {
    SharedPreferences preferences = getSharedPreferences("VYSLEDKY", MODE_PRIVATE);
    String soucasneskore = preferences.getString("VYSLEDKY", "");

    SharedPreferences.Editor preeditor = preferences.edit();

    preeditor.putString("VYSLEDKY", soucasneskore + jmenoHrace + ": " + zaverecneScore + "\n");
    preeditor.apply();
    finish();
}

Obsluhu tlačidlo uložiť. Po kliknutí naň sa zobrazí dialóg. Po odkliknutí "áno" sa volá metóda ulozDoPameti(). Parameter View v je opäť preto, aby metóda bola viditeľná z XML súboru:

public void ulozscore(View v) {
    EditText et = findViewById(R.id.etl);
    jmenoHrace = et.getText().toString();
    if (!jmenoHrace.contains("\n") && jmenoHrace.length() >= 3) {
        AlertDialog.Builder nasdialog = new AlertDialog.Builder(this);
        // Vytvoření AlertDialog builderu
        nasdialog.setCancelable(true);
        /* setCancelable určuje, zda je možné dialog „zavřít“ zmáčknutím plochy kolem dialogu. Pokud je nastaveno false, uživatel MUSÍ vybrat některou z možností dialogu, jinak se nezavře. */
        nasdialog.setMessage("Chcete uložit výsledky hráče: " + jmenoHrace + " ?");
        /* setMessage nastavuje text, který se v dialogu zobrazí */
        nasdialog.setPositiveButton("Ano",
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int id) {
                        ulozdopameti();
                    }
                });
        nasdialog.setNegativeButton("Ne",
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int id) {
                        Toast.makeText(getApplicationContext(), "Neuloženo", Toast.LENGTH_LONG).show();
                        dialog.cancel();
                    }
                });

        AlertDialog spustenidialogu = nasdialog.create();
        spustenidialogu.show();

    } else {
        Toast.makeText(getApplicationContext(), "Jméno musí mít alespoň 3 znaky !", Toast.LENGTH_LONG).show();
    }
}

Nakoniec pridáme ukončenia aktivity:

public void ukonci(View v) {
    finish();
}

ShowScoreActivity

Nakoniec pridajme aktivitu pre zobrazenie skóre. V onCreate() po klasických úkonoch ako vykreslenie layoutu a zakázanie zmien orientácie načítame obsah SharedPreferences kľúča "VYSLEDKY" a vypíšeme ho do TextView:

public class ShowScoreActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_show_score);
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR);

        TextView textview = findViewById(R.id.vypisHracu);
        SharedPreferences preferences = getSharedPreferences("VYSLEDKY", MODE_PRIVATE);
        String vysl = preferences.getString("VYSLEDKY", "");

        textview.setText(vysl);
    }
}

Obsluhe tlačidla. Najprv metódu na tlačidle pre zmazanie obsahu SharedPreferences. Po potvrdení AlertDialog sa nastaví obsah SharedPreferences kľúča "VYSLEDKY" na prázdny reťazec:

public void smazaniPameti(View v) {
    AlertDialog.Builder nasDialog = new AlertDialog.Builder(this);
    nasDialog.setCancelable(true);
    nasDialog.setMessage("Opravdu chcete smazat veškeré zápisy dosažených bodů?");
    nasDialog.setPositiveButton("Ano",
            new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                    SharedPreferences preferences = getSharedPreferences("VYSLEDKY", MODE_PRIVATE);
                    SharedPreferences.Editor preeditor = preferences.edit();
                    preeditor.putString("VYSLEDKY", "");
                    preeditor.apply();
                    finish();
                }
            });
    nasDialog.setNegativeButton("Ne",
            new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                    dialog.cancel();
                }
            });

    AlertDialog spusteniDialogu = nasDialog.create();
    spusteniDialogu.show();
}

Projekt zakončíme obsluhou tlačidla návratu do hlavného menu:

public void vratSe(View v) {
    finish();
}

Hru šibenice máme hotovú, projekt nájdete nižšie k stiahnutiu s kompletnými zdrojovými kódmi. V sérii boli použité zdroje z http://soundbible.com a http://developer.android.com/. Nabudúce, v lekcii Poznámkový bloček pre Android - Nové technológie , začneme tvorbu ďalšiu aplikáciu pre Android. Bude to poznámkový blok, v ktorom budeme okrem iného pracovať aj s databázou, fragmenty a užívateľským oprávnením.


 

Mal si s čímkoľvek problém? Stiahni si vzorovú aplikáciu nižšie a porovnaj ju so svojím projektom, chybu tak ľahko nájdeš.

Stiahnuť

Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami

Stiahnuté 403x (3.56 MB)
Aplikácia je vrátane zdrojových kódov v jazyku Android Java

 

Predchádzajúci článok
Šibenice pre Android - MainGameActivity
Všetky články v sekcii
Programovanie Android aplikácií v Jave
Preskočiť článok
(neodporúčame)
Poznámkový bloček pre Android - Nové technológie
Článok pre vás napísal Jiří Frank
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
Autor se věnuje programování v C# a vývoji aplikací pro platformu Android a dalším věcem spojeným s Android OS
Aktivity