Implementacja akcji Undo/Redo

Implementacja akcji Undo/Redo
HE
  • Rejestracja:ponad 11 lat
  • Ostatnio:ponad 2 lata
  • Lokalizacja:Kraków
  • Postów:233
0

Myślałem, że mam proste zadanie w postaci implementacji akcji undo i redo ale trochę mi się to wszystko pomieszało i sam chyba zagmatwałem. Czytałem o wzorcu memento ale nie bardzo wiem jak go mam w moim przypadku użyć więc póki co zrobiłem tak i rozwiązanie nie jest pełne - działa to dobrze dla przypadków typu undo-undo-redo-redo ale sekwencja undo-redo-undo-redo już** nie działa** pewnie jakiś głupi błąd strzeliłem ale go teraz nie widzę po prostu :(

Kopiuj
LinkedList<State> stateCache = new LinkedList<>(); //tutaj przechowuje zmiany stanów
LinkedList<State> movesUndoned = new LinkedList<>(); //tutaj stany cofnięte

   public void stateChanged(State newState){
    stateCache.add(stanObecny); //stanObecny to nowy obiekt na podstawie this.state
    this.state = newState;
   }

   public void undo() {
        movesUndoned.add(stanObecny);
        this.state= stateCache.getLast();
        stateCache.removeLast();
    }

    public void redo()  {
        stateCache.add(stanObecny);
        this.state= movesUndoned.getLast();
        movesUndoned.removeLast();
    }
edytowany 1x, ostatnio: Hepek
BA
  • Rejestracja:około 13 lat
  • Ostatnio:ponad 2 lata
  • Lokalizacja:Wrocław
  • Postów:259
0

A jak się przechodzi na stanobecny?

HE
  • Rejestracja:ponad 11 lat
  • Ostatnio:ponad 2 lata
  • Lokalizacja:Kraków
  • Postów:233
0

Nie bardzo wiem co masz na myśli. Ja to widzę tak, że stan w wyniku działania zmiena się stan i możemy użyć opcji redo i undo. Przykładowo mam stan X wołamy undo i mam X-1 wołam jeszcze raz undo i mam X-2 następnie wołam redo i mamy X-1. itd...

hcubyc
  • Rejestracja:ponad 12 lat
  • Ostatnio:prawie 3 lata
1

Zamiast mieć dwie listy nie lepiej jakbyś miał jedną i poruszał się używając indeksu?


Limitations are limitless > ##### Ola Nordmann napisał(a)
> Moim językiem ojczystym jest C++ i proszę uszanować to, że piszę po polsku.
HE
możesz rozwinąć pomysł? edit: coś w stylu że na indeksie 0 mamy stan bazowy a potem kolejno dodając inkrementować i potem w redo undo modyfikować licznik - o to Ci chodzi ? tak z głowy to piszę zaraz potestuje
hcubyc
Tak mniej więcej o coś takiego chodziło
BA
  • Rejestracja:około 13 lat
  • Ostatnio:ponad 2 lata
  • Lokalizacja:Wrocław
  • Postów:259
0

Chodzi mi o to co to jest stanobecny, stanobecny = ?

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.