Memo Master

Das Memory – Projekt

DANKE ALEX und CHARLENE!

MemoMaster

Dieses Progammier-Projekt entstand als Monatsprojekt in der BBS I Kaiserslautern. Es ist geistiges Eigentum von Alexander Husner, Charlene Beavers und Heike Debold (geb. Ulrich). Zunächst möchte ich das Projekt vorstellen.

Aufgabe war in einer Kleingruppe mit 3 Personen ein spielbares Memory zu entwickeln. Die Aufgabenstellung wurde frei formuliert, um uns freien Handlungsraum zu lassen. Heraus kam ein, wenn ich das mal so sagen darf, ein super Spiel auf das wir sehr stolz sind.

Aufgabenstellung:

Programmieren Sie mit dem Borland Builder ein spielbares Memory-Spiel mit 64 “Karten”. Das “Aufdecken”der Karten soll mit der Maus erfolgen. Ihr Programm soll auch nach dem Verdecken wieder den vorigen Spielstand speichern, was sagen soll eine Highscore soll es haben…

Nun die Frage, was hat das mit HdR zu tun? Eine ganze Menge kann ich da nur sagen. Es ist ein Memory mit mehreren Kartendecks, darunter eines für “Der Herr der Ringe”, “StarWars” (Deckblatt 1, Spielkarten 1), “Animals” und “Die Simpson”. Das Beispiel zeigt das Deck für HdR (Deckblatt 3, Spielkarten 3).

sp_memoryhdr

Das Formular dieses Projektes sieht wie folgt aus:

sp_memoryfrm

Die Highscore für das Herr der Ringe Deck liegt bei 80 Versuchen. Ich kann nur sagen, dass war ein Meisterwerk von mir, denn einfach ist dieses Memory ganz sicher nicht. Dazu kann ich nur sagen: VERSUCHT ES SELBST. Falls es jemand geben soll der es besser hinbekommt, soll sich melden. Hier auf der Site wird eine Highscore eingerichtet.

Ablauf des Projektes (Zeitraum: 23.04.2002 bis 25.05.2002)

1. bestehende Probleme zur Erstellung des Programms

  • Arbeitseinteilung / Klärung der einzelnen Punkte
    – Heike: Highscore-Bereich, Imagebesorgung;
    – Charlene: Imageeinbindung, ImageListen verwalten;
    – Alex: Elementzugriff, Shuffle;
  • Arbeitsplan
    – Maske erstellen;
    – Variablen erstellen / deklarieren;
    – Image- Listen mit Bilder einbinden;
    – OnCreate- Funktion erstellen;
    – OnNew- Funktion erstellen;
    – Elementzugriff ermöglichen;
    – High-score einrichten;
    – Zeitrahmen einhalten;
    ” Step by Step Erstellung
    – einzelne Bereichskomponenten, des jeweiligen Gruppenmitgliedes erzeugen
    – erstellte Komponenten zusammenfließen lassen und Programm testen

2. Probleme, Lösungen und Ergebnisse während der Erstellung

  • ImageList:
    – Problem: arbeiten mit ImageList- Komponente unter Nutzung der Compilerfunktionen;
    – Lösung: intensive Hilfenutzung mit dem Einbezug von Beispielen und deren Anpassung an unser Programm;
    – Ergebnis: optimale Nutzung von Images (Bildern) durch einfachen Indexzugriff über die ImageList;
  • Elementzugriff:
    – Problem: übersichtliche und programmierfreundliche Zugriffssteuerung der Image- Elemente;
    – Lösung: einzelne Images in eine virtuelle Liste ablegen;
    – Ergebnis: anstelle von 64 OnClick- Ereignissen hat man somit die Möglichkeit eine einzige Funktion zu nutzen die alle OnClick- Ereignisse, betreffend der   einzelnen   Images verwaltet; Einzelzugriffe müssen nicht über den Image- Variablennamen laufen, sondern können direkt über den jeweiligen Index der Bilder   in der Liste   angesprochen werden; Zuweisungen und abrufe können über Schleifen laufen, was im Quellcode einen beträchtlichen Unterschied darstellt   (Beispielcode   gegenüberstellen Ò vorher / nachher);
  • Karten mischen:
    – Problem: schnelle und einfache Nutzung einer Shuffle- Funktion;
    – Lösung: Integer-Array mit 64 Zeichen erstellen;
    – Ergebnis: jeder Arrayeintrag entspricht einem Index der aktiven Deckliste (ImageList), mit den Indexziffern 0 bis 31, in dem jede Ziffer zwei mal vorkommt; mit der   Nutzung von random() ließen wir uns zwei Zufallszahlen im Bereich 0 bis 63 geben über die wir auf den Index de Array zugreifen und den jeweiligen Inhalt der   beiden Indexe miteinander vertauschen Ò bei mehrfachen durchlaufen diese Prozessen wird somit letztlich ein effizientes Mischen gewährleistet;
  • Highscore:
    – Problem: Ablegen von Daten, welche nach Beenden des Programms bestehen bleiben sollen;
    – Lösung: intensive Hilfenutzung mit dem Einbezug von Beispielen und deren Anpassung an unser Programm:
    – Ergebnis: aktive High- score, welche sich schnell anpasst und auf welche schnell zugegriffen werden kann;
  • Zeit:
    – Problem: lauffähige Version mit Berichtsheft und Präsentation in vorgegebener Zeit (neun Schulstunden!);
    – Lösung: Treffen der Gruppe neben der Schule um eine Realisierung des eigentlich utopischen Zeitplans bei momentan herrschendem Wissenstand und Können der   gesamten Gruppe zu gewährleisten;
    – Ergebnis: viel Stress neben Schule und Arbeit, Freizeitminimierung, lauffähige und zufriedenstellende Version des MemoryMasters 1.0;

3. wichtigste verwendete Elemente (Funktionen)

  • OnCreate: wird einmalig bei jedem Programmstart aufgerufen; Initialisiert die virtuelle Liste und startet automatisch ein neues Game;
  • DeckBlatt: stellt alle (restlichen) Karten mit ihrem Deckblatt dar; das Deckblatt wird über die Funktion: SetImage gesetzt;
  • OnNew: erstellt ein neues Spiel, in dem alle nicht gebrauchten Elemente versteckt werden und alle anderen Elemente neu Initialisiert bzw. neu füllt; hier geschieht auch das Mischen; die Highscore wird hier jedes mal aktualisiert;
  • Deckwahl: füllt die FakeList (leere ImageList) mit den Images, des ausgewählten Decks (ImageList);
  • OnClick: hier werden Aktionen ausgeführt, wenn auf eine existierende Karte geklickt wurde; es wird überprüft, wie viele Karten auf gedeckt sind (maximal 2), ob die aufgedeckten Karten identisch sind, und der Versuchscounter wird bei jeder zweiten aufgedeckten Karte erhöht;
    ShowImage: zeigt das angeklickte Bild an, welches unter sich, im übertragenen Sinne unter dem Deckplatt befindet; das angezeigte Bild wird hier über die Funktion: GetImage geholt;
  • IsOver: prüft, ob das Spiel zu ende ist und ob ein Highscoreeintrag erlaubt ist;
  • SaveClick: wird durch das Betätigen den Buttons Save, für den Namen, welcher in die Highscore darf aufgerufen; hier werden die Daten, die Highscore betreffend in die Registry geschrieben;

DANKE ALEX und CHARLENE!