Kolejnym krokiem w rozwoju naszej aplikacji jest napisanie następnej logiki 😉 Ta jednak będzie nieco bardziej będzie opierała się o zasady grywalizacji.
Przypomnę dla porządku czym jest grywalizacja, chodzi o zastosowanie zdobywania punktów, odznak, poziomów w (naszym przypadku) procesie uczenia. Pomysł jest taki, aby użytkownicy mogli sobie wybrać zestaw zadań do rozwiązania na 3 poziomach. Najwyższy poziom daje najmniej czasu na odpowiedź, oraz nie pozwala na pomyłki. Wyższe pozwalają na dwie lub jedną pomyłkę. Pokażę może teraz jak to działa:
public interface Operation {
boolean nextPoint(boolean b);
}
Następnie stworzyłem klasę która dziedziczyła z klasy głównej i którą będą rozszerzały wszystkie zadania. Klasa ta zawiera np taki fragment:
Intent intent = getIntent();
setPractice(intent.getBooleanExtra(Const.PRACTICE, false));
setTest(intent.getBooleanExtra(Const.TEST, false));
if (isPractice())
operation = new CounterOperation(this);
else if (isTest())
operation = new CounterOperation(this, getIntent());
else
operation = new StarsOperation(this);
Jak widzimy nadklasa decyduje której implementacji użyć, W klasie właściwej używam tylko:
@Override
@OnClick(R.id.successView)
public void onClickSuccessView() {
if(operation.nextPoint(true))
nextActivity(true, ChoiceCheckActivity.this);
else {
onClickCommon();
unFillScreen(true, true);
}
}
@Override
@OnClick(R.id.failureView)
public void onClickFailureView() {
if(operation.nextPoint(false))
nextActivity(false, ChoiceCheckActivity.this);
else {
onClickCommon();
unFillScreen(false, true);
}
}
Sprawdzam co zwraca implementacja i decyduję, czy startuję z aktywnością, czy czyszczę ekran i użytkownik ma następną szansę. Ta nadklasa decyduje również o wystartowaniu animacji (konstruktor przyjmujący obiekt Intent ją implementuje). Ma też metody start i stop time:
public void startTime() {
if(isTest()) {
filledScreen= false;
counterOperation.startTime().setAnimationListener
(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) { }
@Override
public void onAnimationEnd(Animation animation) {
if(!filledScreen)
fillScreen(false, true);
}
@Override
public void onAnimationRepeat(Animation animation) { }
});
}
}
public void stopTime() {
if(isTest())
counterOperation.stopTime();
filledScreen = true;
}
Niestety listener obiektu Animation wymusza na mnie implementację 3 metod, chociaż korzystam tylko z jednej.
To by było chyba na tyle jeśli chodzi o postępy w projekcie. Wkrótce następne wpisy, stay tuned! 😉
Pozdrawiam!
