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é 405x (3.56 MB)
Aplikácia je vrátane zdrojových kódov v jazyku Android Java