Lekce 12 - Šibenice pro Android - Dokončení
Java Android Šibenice pro Android - Dokončení


V minulém tutoriálu o programování aplikací pro Android jsme dokončili hlavní aktivitu hry. V dnešním dílu dodáme aktivity pro konec hry a zobrazení skóre, čímž aplikace dokončíme.
EndGameActivity
Přesuňme se k aktivitě konce hry a rovnou připravme několik instančních proměnných. Budou to proměnné pro Score, informace o tom, zda v předchozí aktivitě hráč vyhrál nebo prohrál, hádané slovo a pro uložení score proměnná JmenoHrace.
public class EndGameActivity extends Activity {
int ZaverecneScore;
int VyhraNeboProhra;
String JmenoHrace="";
String UhadnuteSlovo="";
}
Tradičně dodejme jako první událost onCreate(). Hned po vykreslené layoutu a nastavení zákazu změn orientace se načtou hodnoty z buněk po přechodu za pomocí getIntent(). Zavolají se metody 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 chtít zobrazit závěrečnou animaci. Podle toho, zda hráč vyhrál nebo prohrál se do AnimationDrawable načtou určité snímky pro animaci a spustí se určitá hudba pomocí Objektu MediaPlayer.
V případě, že se z nějakého důvodu nepodaří získat hodnotu výhry nebo prohry (0,1) se zobrazí toast s textem „error“.
private void NactiAnimaci(){
AnimationDrawable Anim = new AnimationDrawable();
ImageView obr = (ImageView) 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 metodě ZobrazScore() zobrazíme uhádnuté slovo a hráčovo skóre:
public void ZobrazScore(){
TextView PHs=(TextView) findViewById(R.id.Slovo);
PHs.setText(UhadnuteSlovo);
TextView TWs = (TextView) findViewById(R.id.Score);
TWs.setText(String.valueOf(ZaverecneScore));
}
Přidáme uložení výsledků. Metoda UlozDoPameti() vytvoří/otevře SharedPreferences "VYSLEDKY", uloží současné výsledky a přidá k nim nový. Aby se vše uložilo, je třeba vytvořit SharedPreferences.Editor (preeditor). Pomocí preeditoru složíme staré a nové score, následně potvrdíme preeditor metodou commit(), aby došlo ke změná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.commit();
finish();
}
Obslužme tlačítko Uložit. Po kliknutí na něj se zobrazí dialog. Po odkliknutí "ano" se volá metoda UlozDoPameti(). Parametr View v je opět proto, aby metoda byla viditelná z xml souboru.
public void UlozScore(View v){
EditText ET = (EditText) findViewById(R.id.ETl);
JmenoHrace = ET.getText().toString();
if (JmenoHrace.contains("\n")==false && 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("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();
}
}
Nakonec přidáme ukončení aktivity:
public void Ukonci (View v){
finish();
}
ShowScoreActivity
Nakonec přidejme aktivitu pro zobrazení skóre. V onCreate() po klasických úkonech jako vykreslení layoutu a zakázání změn orientace načteme obsah SharedPreferences "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 = (TextView) findViewById(R.id.VypisHracu);
SharedPreferences preferences = getSharedPreferences("VYSLEDKY", MODE_PRIVATE);
String Vysl = preferences.getString("VYSLEDKY", "");
textview.setText(Vysl);
}
}
Obslužme tlačítka. Nejprve metodu na tlačítku pro smazání obsahu SharedPreferences. Po potvrzení AlertDialogu se nastaví obsah SharedPreferences "VYSLEDKY" na prázdný obsah.
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.commit();
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čítka návratu do hlavního menu.
public void VratSe(View v){
finish();
}
Hru šibenice máme hotovou, projekt naleznete níže ke stažení s kompletními zdrojovými kódy. V sérii byly použity zdroje z http://soundbible.com a http://developer.android.com/. Příště započneme tvorbu další aplikaci pro Android, bude to poznámkový blok, ve kterém budeme mimo jiné pracovat i s databází, fragmenty a uživatelským oprávněním.
Stáhnout
Staženo 282x (27.24 MB)
Aplikace je včetně zdrojových kódů v jazyce Android Java
Komentáře
Zobrazeno 3 zpráv z 3.