Project OO-AD: Color Crazy Domien Nowicki, Bjorn Schobben
Inleiding Aanpak Datastructuren en Algoritmen −Map −Highscores −Graph −Backtracking Demo Vragen? Overzicht
Inleiding Color Crazy Kleurspel op basis van 4 kleuren probleem Qt
Aanpak Model-View principe Onderliggende datastructuren afschermen −Basis klasse Klasse overerving en polymorfisme −Specifieke implementatie −Overloading Voorbeeld: Highscore - HighscoreDialog −Highscore: basis klasse −HighscoreDialog: QDialog + Highscore
Aanpak Kleine klassen eerst Grotere klassen opbouwen Enkele klassen per teamlid Bespreking
Aanpak UML
Aanpak UML
Aanpak UML
Aanpak UML
Aanpak Extras: Interactieve muis cursor (penseeltje) −Realtime hertekent met geselecteerde kleur −Enkel actief over “kleurbare” gebieden Tooltips −Naam van provincie verschijnt Zoom −‘+’ of ‘-’ knop −Muis scroll Meerdere landen −Provincies uit andere land mogelijk ook buren −Geen dikkere rand
Datastructuren en Algoritmen: Map Provincie: lijst van punten Land: lijst van provincies Map: lijst van landen Onbekend aantal elementen Altijd hele lijst doorlopen −Willekeurige toegang niet nodig Dubbele gelinkte lijst (STL list) −Invoegen en verwijderen: constante tijd −Voorwaarts en achterwaarts doorlopen
Datastructuren en Algoritmen: Highscores Score: naam, tijd, kleuren, stappen Highscore: lijst met scores Dubbele gelinkte lijst? −Maximum scores bekend, redelijk klein, preallocatie? −STL sort verwacht willekeurige toegang Dynamische array (STL vector) −Achter invoegen en verwijderen: constante tijd −Willekeurige toegang Sorteren (STL sort) −Complexiteit: O(n log n)
Datastructuren en Algoritmen: Graph Graaf met kleur van provincies Dunne graaf: −Provincie is waarschijnlijk niet buur van elke andere provincie Adjacency-list implementatie (STL list) −Pointers naar andere provincies (buren) −Provincie: eigen lijst van buren
Datastructuren en Algoritmen: Backtracking Vervolledigen van een kaart Geschiedenis bijhouden van geplaatste stappen −Bitmask: lijst van geprobeerde kleuren (index) = Rood en Groen geprobeerd −Volgende te proberen kleur Blauw −Pointer naar provincie/land Bij terug gaan, enkel de laatste geplaatste stap inspecteren Stack (STL stack): push en pop −Deque: Achter invoegen en verwijderen: constante tijd
Datastructuren en Algoritmen: Backtracking 1. Initialisatie 2. “Dubbels” ongedaan maken en opnieuw initialisatie 3. Kijk naar vorige stap, naar “volgende-te-proberen kleur”: −Provincie wit kleuren? Kleur provincie wit, pop laatste stap, zet nieuwe kleur voor vorige provincie. −Laatste stap komt niet overeen met kaart? Provincie gewoon inkleuren, indien nodig eerst wit kleuren. 4. Als kaart niet “vast” zit: −Kleur provincie met buren met de meest verschillende kleuren −Push nieuwe stap 5. Anders: −Laatste provincie wit kleuren −Andere kleur gereed zetten −Indien er geen andere kleur mogelijk is, kleur provincie wit, pop laatste stap, en zet nieuwe kleur voor vorige provincie Provincie 1 Provincie 2 Provincie 3 Provincie 4 Provincie 7 Provincie 6 Provincie 5 Initialisatie Stack
Datastructuren en Algoritmen: Backtracking Vragen van hint: 1. Maak kopie van kaart en vervolledig = “oplossing” 2. Zoek “mismatch” waar originele provincie gekleurd is: −Maak die provincie wit 3. Anders: −Kleur een witte provincie met zijn overeenkomstige kleur van oplossing
Demo
Vragen ?