Home

Delphi Programmierpraktikum Continuo

image

Contents

1. erwartetes Ergebnis Die Karte wird abgelegt zun chst erzieltes Ergebnis Es tritt ein Bereichspr fungsfehler auf Ursache Die Funktion FindNeighbor erzeugte virtuelle Nachbarn mit Indizes die au erhalb des Wertebereiches des Feldes lagen Schummeln Testfall Im laufenden Spiel wird die Schummelfunktion aufgerufen erwartetes Ergebnis Die Karte welche geschickt angelegt die gr te Punktzahl im n chsten Zug bringt wird gedreht Die Karte und ihre ideale Position auf dem Feld wird markiert zun chst erzieltes Ergebnis Die Schummelfunktion schl gt das Ablegen an scheinbar unm glichen Positionen vor Ursache Die Kartenzeichenfunktion DrawCard arbeitete fehlerhaft sodass sich das sichtbare Spielfeld vom tats chlichen logischen unterschied Drehen Testfall Im laufenden Spiel wird eine Karte ausgew hlt und abgelegt Der Spieler verwendet anschlie end das Mausrad oder die Tastatur um die Karte zu drehen erwartetes Ergebnis Nichts geschieht zun chst erzieltes Ergebnis In der Anzeige wird die bereits liegende Karte wird gedreht Ursache Es wurde vor dem Drehen nicht gepr ft ob die Karte bereits abgelegt wurde Laden und Speichern alle Dateisorten Testfall Eine nicht existierende Datei soll gelesen werden eine schreibgesch tzte Datei soll berschrieben werden eine Datei hat ung ltige L nge eine Datei enth lt ung ltige Daten nur Karten oder der Handle zu einer Datei wird w hrend der Operatio
2. Die Funktionen zum Zeichnen von sechseckigen Karten werden selbst geschrieben und bekommen eine eigene Unit Das Zeichnen eines Sechsecks an eine beliebige Position auf einer graphischen Ausgabeeinheit ist eine allgemein verwendbare Funktion Beim Zeichnen an sich ist es egal ob es sich um eine Karte auf der Hand oder auf dem Feld handelt Beim Zeichnen werden die sechs Teildreiecke des Sechseckes gemalt Die F llfarbe wird durch die Karteninformation bestimmt Der Zeichenort des Sechsecks wird durch die Position seines Mittelpunktes bestimmt Das Aufzeichnen der sechs Werte wird aufgrund des semantischen Zusammenhangs in derselben Unit implementiert Die Gr e einer Karte wird durch die Angabe des vertikalen Durchmessers des Sechsecks in Pixeln definiert Die H he Abbildung 1 Der der Teildreiecke wird dementsprechend berechnet Kartenzeichner in einem fr hen Programmtest Das tats chliche Zeichnen eines farbigen Dreiecks wird mit der Prozedur Polygon welche in TCanvas definiert ist realisiert Zur Anzeige der Nummern auf einem Kreis werden TextOut und Ellipse derselben von Borland mitgelieferten Klasse verwendet Bei Programmtests wurde festgestellt dass die Kanten der Karten auf dem Feld bei bestimmten Kartengr en au einanderlaufen Die Eckpunkte liegen also nicht exakt aufeinander Dies wird durch Rundungsfehler bei der Berechnung der Eckpunkte der Teildreiecke verursacht Erst bei einem Test der Schummelfunktion fiel au
3. SEET Ee 17 Bewegen von Karten am Rand un see 17 Legenieiner Karte am Rand ea a E EERE AEE E E 18 1 Benutzerhandbuch 1 1 Continuo Continuo ist ein Solospiel zum Probieren und Rechnen Es werden sechseckige Karten aneinandergelegt Jedes Sechstel einer L Karte ist mit einer Farbe und einem Wert versehen Der Wert 6 kommt auf jeder Karte genau einmal vor F r jeden Spielzug gibt es Punkte Mehr je besser die Karten zusammenpassen Bei Spielbeginn liegen nur zwei Karten auf dem Spielfeld Der Spieler erh lt die restlichen 30 Spielkarten Vier davon werden offen hingelegt und k nnen f r den n chsten Spielzug verwendet werden Nach einem Spielzug wird erneut eine der verbliebenen Karten aufgedeckt Die Punkte eines Zuges ergeben sich durch folgende Regeln e Stimmen Farbe ODER Wert zweier Kanten berein so werden die Werte der Kanten addiert s Stimmen Farbe UND Wert der Kanten berein so werden die Werte addiert und verdoppelt e Legt man die Karte an mehrere Kanten an so werden die Punkte aus den jeweiligen Kanten bereinstimmungen addiert und mit der Anzahl der Kanten mit bereinstimmung multipliziert Die Punkte eines Spieles ergeben sich aus der Addition der Punkte der Z ge 1 2 Ablaufbedingungen Ihr Rechner ben tigt Hardware e Bildschirm e Maus am besten mit Rad e Tastatur optional e 12 MB freier Arbeitsspeicher e Graphikadapter der mindestens 265 Farben anzeigt e x68 kompatiblen Prozessor Software
4. Typ zu gruppieren DER Stellenweise wird auch der vordefinierte Punkttyp TPoint als Positionsangabe verwendet Dieser kommt entweder bei Bitmappositionen zum Einstatz oder dann wenn nicht klar ist ob eine errechnete Position berhaupt eine g ltige Spielfeldposition ist Karte Typ TEdg edNE edE edSE edSW edW edNW TValue 1 cMaxValue TValues array TEdge of TValue TColors array TEdge of TColor TCardProp packed record Values TValues Colors TColors end Implementation des vorgegebenen Spielkartentyps Jedes Sechstel der sechseckigen Karte kann durch die Angabe ihrer Kante adressiert werden Jedes Sechstel kann eine individuelle Farbe und einen Wert beinhalten type TCardListNodePointer TCardListNode TCardListNode record card TCardProp next TCardListNodePointer end Typdefinition f r eine einfach verkettete Liste zum festhalten von Karten Anzeige type THexPoints array 0 6 of TPoint Triangle array 0 3 of Tpoint H Der Rahmen eines Sechsecks oder Dreiecks kann durch seine Eckpunkte beschrieben werden Der zus tzliche Punkt des Arrays sorgt daf r dass der Rahmen durch Polyline geschlossen gezeichnet wird H chststand type TScore packed record name shortstring date TDateTime score integer end Einfacher record zum Speichern von H chstst nden type TScoreListNodePointer TScore
5. mit Dateien arbeiten Beim Kartenstapel und bei den H chstst nden Vor dem einlesen einer Datei wird als sehr einfacher Dateityptest ihre L nge gepr ft Bei Karten kann die Funktion zur G ltigkeitspr fung welche zur Kartengenerierung gebraucht wird als zus tzliche Pr fung geschehen Es k nnen fehlerhafte Karten in das Spiel gelangen wenn die Farben in den Karten nicht zur Palette bzw den Farben in den Konstanten passen H chstst nde k nnten nur durch das Anh ngen von Pr fsummen beim speichern gegen Ver nderung durch den Benutzer gesch tzt werden Bei Fehlern sollen die unteren Datenhaltungsunits Exceptions ausl sen die erst in den Formularunits verarbeitet werden W re eine Lokalisierung des Programmes geplant m ssten dann nur die Formularunits ge ndert werden da in den unteren Units kein benutzerrelevanter Text steht 2 2 2 Realisationsanalyse Feldstruktur Die erste Idee war eine komplett dynamische Struktur Eine sechsfach verkettete Liste in Netzstruktur die sich selbst sofort beim Einf gen eines Datensatzes die Nachbarschaftsbeziehungen durch geschicktes Umbiegen der Zeiger merkt Das Implementieren von Nachbarschaften die entstehen wenn der Spieler Ringe legt schien nur durch Rekursionen m glich zu sein Diese m ssten aber sehr tief laufen k nnen Wegen der daraus m glicherweise entstehenden Probleme Stack Overflow wurde diese Idee verworfen Die zweite und verwendete Idee ist eine halbdynamische L sun
6. Benutzer Eingaben machen kann die Fehlerhaft sein k nnen Aus diesem Grund wird f r die Steuerung der Anzeigegr e der Karten eine TTrackBar verwendet da diese keine fehlerhaften Eingaben zul sst Dateien f r Karten und H chstst nde Bei den H chstst nden ist das kaum anders denn hier ist das Einf gen eines neuen Datensatzes an beliebiger Position einfach Aufgrund der genau begrenzten Anzahl von Eintr gen w re eine statische L sung allerdings auch gut m glich Gruppierung Graphische und logische Funktionen sind strikt getrennt Lediglich in den Formularunits ist diese Trennung aufgehoben da zwangsl ufig die gesamte Funktionalit t zur Verf gung stehen muss Daf r sollen die Funktionen Formularunits so kurz wie m glich gehalten werden und nach M glichkeit nur aus Einzeilern bestehen Alle Funktionen der Datenhaltung die dynamischen Listen sollen in eigenen Units ruhen Eine Kapselung ist w nschenswert bl ht die in der Hierarchie relativ weit oben stehenden Units unangenehm auf Das m glichst lokale Definieren von Hilfsfunktionen f hrt an einigen Stellen fast zur Codeobfuskation Daher werden weil es Pflicht ist die Hilfsfunktionen erst kurz vor dem Projektabschluss in die Deklarationsteile der aufrufenden Funktionen verschoben 3 Das Pseudo Scrollen durch Tastendruck welches beispielsweise auf Smartphones eingesetzt wird wird auf Dauer sehr anstrengend 12 2 2 3 Realisationsbeschreibung Sechsecke
7. Delphi Programmierpraktikum Continuo H hne Hermann technische Informatik tinf6626 zweites Fach und Verwaltungssemester Inhaltsverzeichnis 1 Benutzerhandbuch Au a ne 4 E ont era at ie Bene 4 lee ee anal 4 1 3 Progtamminstallaten EE 5 1 4 Progtammst rt E 5 Eeer ee he Se 5 Kensier sah aa ae ul ii 5 ener DEE 6 K rten legen are a aaa e 6 Spielende are EEN 7 Le EE 7 IR Pehlermelduneen a ea ee a EEN 7 Karten k nnen nicht gelesen werden re een ln 7 Beim Speichern des Kartenstapels ist ein Fehler aufgetreten ee 7 Beim Speichern der H chstst nde ist ein Fehler aufgetreten een 7 1 7 Wiederanlaufbedingunsen rl tun cialis aie seen alasn 8 2 Prosrammiererhandb ch 2 3 Mean near 9 2 1 Entwicklunsskontisutation anal 9 2 2 Problemanalyse und RE EE 9 22A Problemanalyse n uu EE 9 EE H e EE H EE 10 Karten na ae rare lei ee 10 Kartengenerietund u een en a A A AE AE TEA 10 EE 10 Dateien en ses aa Rss san 11 EE EE 11 Feldstruktun ask a eE A EEN TE NE a EEEE AEAEE 11 EH e 11 EE 12 Dateien f r Karten und H ehstst nde uses ea 12 GIE BPIELUND Ne eeh 12 2 2 3 Realisanonsbeschreibunds wussten aaa meer 13 KEE 13 ET 13 Nachbarschaft EE 14 Schummelhmkli on Ehel ege 14 2 3 Beschreibung grundlegender Datenstnikturen ass 15 en EE 15 EE 15 Karen ss ea ee 16 EE 16 H chststand er ee 16 2 4 Programmoarsanisationsplan en een IR IESHIR I en u ee 17
8. ListNode TScoreListNode record score TScore next TScoreListNodePointer end S Typdefinition f r eine einfach verkettete Liste zum festhalten von H chstst nden 16 2 4 Programmorganisationsplan Diese Graphik verdeutlicht das Ineinandergreifen der nach verschiedenen Anwendungsgebieten gruppierten Units Formu lare Laach i Catr Graphik I N Ft Ma Cards Frl KC fex Types Constant Zur Wahrung der bersichtlichkeit sind hier nicht alle Abh ngigkeiten eingetragen Fast alle Units verwenden Typen und Konstanten 2 5 Programmtests Diese Tests zeigten w hrend der Entwicklung Fehler auf Eine Funktion wurde immer direkt nach ihrer Implementierung getestet Alle hier angesprochenen Probleme wurden nach Ermittlung der Ursache gel st Weitere Probleme sind nicht bekannt Bewegen von Karten am Rand Testfall Im laufenden Spiel wird eine Karte ausgew hlt Der Mauszeiger wird zum Rand des Spielfeldes gesteuert erwartetes Ergebnis Die schwebende Karte wird nur an g ltigen Positionen angezeigt zun chst erzieltes Ergebnis Die schwebende Karten wird auch au erhalb des Spielfeldes gezeichnet und ist dort nicht oder nur teilweise zu sehen Ursache In keiner der beteiligten Routinen war dies verboten worden 17 Legen einer Karte am Rand Testfall Im laufenden Spiel wird eine Karte ausgew hlt und durch einen Klick an einer der Spielfeldr nder abgelegt
9. artenlistenindexes gespeichert Hier die Iterationen als Umriss for r low r to high r do for c low c to high c do if not FieldPositionOccupied pos and HasNeighbor pos then for i low i to high i do for d2 N0 Ed de Die ersten beiden Schleifen gehen durch alle Feldpositionen die vorletzte durch alle Karten auf der Hand die letzte dreht die Karte Den genauen Algorithmus finden Sie in UCheater pas 2 3 Beschreibung grundlegender Datenstrukturen Spielfeld Das Spielfeld wird durch ein zweidimensionales statisches Array von Pointern auf Kartendaten repr sentiert type TCardPointer TcardProp Trield array TFieldColumns TFieldRows of TcardPointer ber den Index des Arrays kann auf jede einzelne Positionen des Spielfeldes zugegriffen werden Liegt an einer Position keine Karte ist der Inhalt der Arrayzelle ni1 Dieser Datentyp kommt nur in der einzigen unitglobalen Variable in UField vor ber die Schnittstellen k nnen andere Units Karten auf die Positionen legen schreiben oder Karteninformationen von einer Position lesen UField verhindert dabei dass Karten gestapelt oder leere Felder als Karte gelesen werden Punkt type TFieldPosition record col TFieldColumns row TFieldRows end Eine Position auf dem Spielfeld wird durch die Angabe seiner Zeile und Spalte gegeben Die meisten Funktionen berechnen aber Positionen Es ist daher sinnvoll eine Positionsangabe in einem
10. benutzung Karten Die Verwaltung der verdeckten Karten und der Karten auf der Hand damit sind die vier sichtbaren Karten gemeint ist relativ einfach Liegen die Karten in sortierter Form vor so muss das Programm nur die ersten vier Karten f r den Spieler ziehen und anzeigen Dies ist sich nicht anders wenn die Karten zuf llig gezogen werden sollen Das Programm muss lediglich die Karten vorher mischen und die ersten vier Karten der daraus entstehenden Permutation anzeigen Eine dynamische Liste zum verwalten der Karten ist g nstiger als ein statisches Array da das Entfernen einer beliebigen Karte ohne Umschichten aller folgenden geschehen soll Kartengenerierung Sind keine Spielkarten in einer Datei mitgeliefert muss das Programm selbst welche erzeugen k nnen Die Karten sollen zuf llige Werten und Farben haben m ssen jedoch mit den Continuo Regeln konform sein Das erstellen einer Karte hat somit drei Schritte Im ersten werden Farben und Werte vollkommen zuf llig gew hlt Im zweiten Schritt wird die Karte auf G ltigkeit berpr ft Wird eine Regel gebrochen liegen beispielsweise zwei gleiche Farben nebeneinander muss die Karte an dieser stelle korrigiert werden durch berschreiben mit einer anderen zuf llig gew hlten Farbe Nach dieser Ma nahme kann der gleiche Fehler wieder auftauchen notfalls an anderer stelle auf der Karte Der zweite Schritt l uft daher oft wiederholt Die Wiederholung lie e sich ve
11. e Microsoft Windows ab Windows 95 oder e Linux selbst mit Lazarus Version 0 9 26 2 kompilieren notwendig oder e wine getestet mit Version 1 1 25 1 Getestet auf einem System mit Cyrix M1 Prozessor 96MB RAM und Win98 wine unter Ubuntu Hardy getestet 4 1 3 Programminstallation Es ist keine Installation notwendig Wird Continuo in einem Archiv geliefert entpacken Sie alle Dateien in ein Verzeichnis Continuo kann von jedem Ort ausgef hrt werden Falls Sie Continuo auf die Festplatte Ihres Rechners bertragen kopieren Sie die Datei Continuo cto wenn m glich mit F hren Sie Continuo in einem Verzeichnis aus in dem Sie Schreibrechte haben damit H chstst nde gesichert werden k nnen 1 4 Programmstart F hren Sie einen Doppelklick auf die ausf hrbare Datei Continuo exe aus um das Programm zu starten 1 5 Bedienungsanleitung Fenster Hauptfenster 4A Continuo Men fa Karten auf der Hand offenliegende Karten j auf dem Spielfeld freier Platz auf liegende Karten dem Spielfeld Pan Scrollbalken z Gesamtpunktzahl Tipps zum aktuellen j Spielgeschehen N Y R Punkte 0 SE Punkte f r den momentan angezeigten Spielzug Einstellungen Einstellungen Karten Dateiname des _ Kartenstapel Continuo cto Kartensatz w hlen p AA Rufi Auswahldialog f r aktuellen Kartenstapels J vor dem Geben misc
12. ellen Positionswertes repr sentiert nun effektiv die mittlere Position Nachbarschaft Sehr eng verbunden mit der Wahl der Datenstruktur f r das Spielfeld ist die hier beschriebene Ermittlung von Nachbarn auf dem Feld Wie in Abbildung 4 verdeutlicht liegt an der stlichen Kante einer Karte an Feldposition x y immer die westliche Kante der Karte an Feldposition x 1 y in nord stlicher Richtung liegt Karte x 1 y 1 und so weiter Realisiert wird diese Funktion durch eine Unterscheidung der yppildun g 4 Nachbarschaft in sechs Nachbarn einer Karte mittels case Zeilen mit geradem Index Beim Test der Schummelfunktion fiel auf dass die Nachbarschaftsbeziehungen f r Zeilen gerade und ungeradem Index verschieden sind wie im Vergleich der beiden Abbildungen zu erkennen Schummelfunktion Die Schummelfunktion wird durch einen einfachen Brute Force Algorithmus realisiert Durch Iterationen werden alle Feldpositionen durchlaufen falls der Spieler dort berhaupt eine Karte legen kann probiert der Algorithmus alle Karten auf der Hand aus ohne sie aus der Hand zu entfernen Dabei werden die Punkte die ein Legen von jeweils einer Karte in jeder Abbildung 5 Nachbarschaft in Ausrichtung also insgesamt sechs mal gedreht an eine Position Zeilen mit ungeradem Index 14 mit sich br chte berechnet und zusammen mit der Information der Ausrichtung in Form der Kartendaten und der Position der Karte auf der Hand in Form des K
13. esch tzt ist oder der Pfad nicht g ltig ist Ma nahme Entfernen Sie den Schreibschutz von der Datei Alternativ k nnen Sie einen anderen Kartenstapel w hlen sodass die Datei f r H chstst nde neu angelegt oder berschrieben werden kann 1 7 Wiederanlaufbedingungen Wird das Programm unterbrochen kann der letzte Spielstand nicht wiederhergestellt werden Das Festhalten eines Spielzustandes ist generell nicht m glich 2 Programmiererhandbuch 2 1 Entwicklungskonfiguration Software e Programmierung o Borland Delphi 2007 for Win32 Web Installer vom September 2008 Turbo Delphi Borland Delphi 2006 o Lazarus Version 0 9 26 2 e IrfanView MSPaint und GIMP zum Zeichnen des Anwendungssymbols Hardware e Asus eeePC 1000H Windows XP Home SP 3 Intel Atom CPU 1 GBRAM e Hermanns Desktop Rechner Windows XP Professional 64bit SP 2 AMD Athlon X2 Dual Core 5000 ASRock AliveXFire eSATA2 Mainboard 4 GBRAM 2 2 Problemanalyse und Realisation 2 2 1 Problemanalyse W hrend der Entwicklung wurden die Anforderungen problemorientiert in dieser Reihenfolge analysiert Einstellungen Anzeigegr e laufendes Spiel Positionieren amp Drehen H chstst nde Dateien Einstellungen Karten Kartengenerierung Anzeige Da ein Spieler auch alle 32 Karten in einer Reihe aneinander legen darf muss das Programm die M glichkeit haben nur den wichtigen Teil des Spielfeldes anzeigen zu k nnen und den Rest ausz
14. f dass die in Abbildung 1 zu sehenden Werte in ost west Richtung gespiegelt werden m ssen und die Darstellung der Karte insgesamt auf dem Kopf steht Anzeige Die Anzeige des Spielfeldes soll durch eine A Bitmapgraphik geschehen Da sich die Gr e des hierf r gew hlten TBitmap nicht dynamisch anpasst muss sie vorher berechnet werden Die Berechnung der Breite der Anzeige ist simpel und einfach nachzuvollziehen Es muss genug Platz Abbildung 3 f r alle Spalten des Feldes geben Jede zweite Zeile A Startkarten in ist in der Anzeige um eine halbe Kartenbreite nach Abbildung 2 Startkarten gerader Zeile rechts verschoben dieser Platz muss also auch in ungerader Zeile vorhanden sein bitmapWidth cColumns hexWidth hexWidth DIV 2 L 1 H Die Berechnung der H he gestaltet sich etwas komplizierter Da die Feldgr e von der Anzahl der Maximal in einer Richtung aneinanderlegbaren Karten begrenzt ist ist die Zahl der Feldzeilen immer Ungerade Eine gerade Anzahl von Zeilen l sst hingegen sich durch ein Vielfaches von zwei Zeilen ausdr cken Dadurch dass die sechseckigen Karten aus gleichseitigen Teildreiecke bestehen ist die H he von jeweils zwei Zeilen genau das eineinhalbfache der Kartenh he F r die letzte Zeile 13 muss lediglich noch eine Kartenh he hinzugef gt werden Dies ist am einfachsten nachvollziehbar wenn man von einer oberen Kartenspitze ausgeht und die Anzahl der Seitenl ngen der Teildreiec
15. g Obwohl die Waben zwar ein Sechseckmuster haben so k nnen die Feldpositionen doch von einer einfachen zweidimensionalen Struktur repr sentiert werden wenn man nur einfach jede zweite Zeile in diesem Fall um eine halbe Position verschiebt Es ist jedoch nicht Sinnvoll auf jeder Position des Spielfeldes Karteninformationen abzulegen da das gesamte Feld nie belegt sein wird Dieser Ansatz f hrte zu einem statischen Array von Pointern auf Karten Eine Positionen auf dem Spielfeld wird immer durch die Zeilen und Spaltenangabe f r den Arrayindex des Spielfeldes angegeben Um eine Position einfacher von Funktionen zur ckgeben zu lassen ist es sinnvoll daf r einen eigenen Datentyp zu definieren Kartenstapel Der Kartenstapel sollte durch eine dynamische Liste repr sentiert werden Der Index einer Karte sei durch ihre Position in der Liste gegeben ist also durch Mitz hlen beim Durchlaufen der Liste bestimmbar Ein statisches Array mit 32 Pl tzen ist auch denkbar Allerdings m ssen wenn der Spieler eine u Karte aus der Hand also eines der ersten vier Elemente aus der Liste die folgenden Elemente nachr cken was nicht sehr elegant ist Bedienung Da nie das ganze Spielfeld angezeigt wird muss der sichtbare Bereich kleiner als das Spielfeld sein Hier kommt dem Projekt die Delphi Komponentenbibliothek entgegen Eine TScrollBox bietet genau die ben tigte Funktionalit t Ein Gro er innerer Bereich kann in einem kleineren S
16. hen Kartensatz generieren Kartenstapeldateien auf BE S IN Anzeige 5 Mischf nktion erzeugt neue Kartenstapeldatei Regler f r Kartengr e Regler f r Schriftgr e der Kartenwerte Kartengr envorschau H chstst nde Das H chststandsfenster zeigt Ihnen eine Liste an die Informationen dar ber enth lt welcher Spieler an welchem Tag welchen H chststand mit dem aktuell gew hlten Kartenstapel erreicht hat Nur die zehn besten Endpunktest nde von Spielen mit ungemischten Kartenstapeln werden gespeichert Spielbeginn Starten Sie ein neues Spiel indem Sie mit der Maus den Men punkt Spiel gt Neu anklicken Alternativ k nnen Sie die Taste F2 dr cken Karten legen Im oberen Bereich des Fensters sehen Sie vier offen liegende Spielkarten Alle weiteren nicht auf dem Spielfeld liegenden Karten sind unsichtbar W hlen Sie eine der offen liegenden Karten aus indem Sie die Karte anklicken Bewegen Sie die Maus auf dem Spielfeld An freien Positionen wird die gerade von Ihnen ausgew hlte Karte angezeigt Dr cken Sie die Tasten L oder R oder verwenden Sie das Mausrad um diese Karte zu drehen Klicken Sie auf das Spielfeld um die Karte so abzulegen wie sie gerade dargestellt wird Die Punkte die Ihnen f r diesen Zug gutgeschrieben werden werden Ihrer Gesamtpunktzahl hinzugef gt Auch w hrend des Positionierens einer Karte wird der Pu
17. ichtbereich verschoben werden Scrollen ist im Allgemeinen eine akzeptierte und gern gesehene Programmfunktion Das Spielfeld soll durch eine Bitmapgraphik dargestellt werden Hier bieten sich eine TPaintBox oder auch das TBitmap innerhalb eines TImage an Eine TPaintBox ben tigt weniger Hauptspeicher da diese Komponente ihren Inhalt nicht speichert Dies wird beim Scrollen jedoch zum Nachteil Verschwindet ein bereits gezeichneter Bereich aus dem sichtbaren Bereich so muss er wieder neu gezeichnet werden das Zeichnen ber TCanvas ist aber relativ langsam und kann durch das Speichern des gezeichneten in einem TBitmap sehr einfach gel st werden Nachteil der Bitmap ist allerdings dass ihre Gr e vorher gesetzt werden muss und auch die leeren Bereiche Speicher verbrauchen Daher ist es sinnvoll die Gr e der Bitmap so klein wie m glich zu halten Dazu m ssen nicht nur die Ausdehnung der liegenden Karten gefunden werden sondern auch die ihrer Nachbarfelder damit auch an den Positionen an denen der Benutzer eine Karte legen wollen k nnte das Darstellen einer Karte m glich ist Damit beim Neusetzen der Bitmapgr e beim Legen einer Karte das Spielfeld nicht in der Ansicht umherspringt wird das anzeigende TImage auf ein TPanel mit der immer gleichen maximalen Spielfeldgr e gelegt Auf dem TPanel wird das TImage mittels der Positionseigenschaften Left und Top positioniert Das Einstellungsmen ist die einzige Stelle an welcher der
18. k nnen nicht gelesen werden Ursache Continuo liest Kartenstapel aus Dateien mit der Endung cto Im Normalfall versucht Continuo beim Spielstart die Datei Continuo cto zu ffnen Kann diese Datei oder die Datei welche Sie in den Einstellungen gew hlt haben nicht gelesen werden so erscheint og Fehlermeldung Ma nahme W hlen Sie im Einstellungsmen eine andere Kartenstapeldatei aus Falls Sie ber keine Kartenstapeldatei verf gen k nnen Sie ber den Knopf neuen Kartenstapel erzeugen einen Stapel zuf llig generierter Karten in eine Datei speichern lassen und diese verwenden Beim Speichern des Kartenstapels ist ein Fehler aufgetreten Ursache Die von von Continuo erzeugten Karten k nnen nicht in die von Ihnen gew hlte Datei gespeichert werden Dies ist u a der Fall wenn Ihnen die zum Schreiben der Datei n tigen Rechte fehlen das Laufwerk schreibgesch tzt ist oder der Pfad nicht g ltig ist Ma nahme W hlen Sie in Einstellungsmen einen anderen Ort zum Speichern des Kartenstapels Beim Speichern der H chstst nde ist ein Fehler aufgetreten Ursache Der Punktstand den Sie zuletzt erreicht haben konnte nicht in der Datei f r H chstst nde abgespeichert werden Diese Datei hat den gleichen Namen wie der ausgew hlte Kartenstapel jedoch die Dateiendung cts Dies ist u a der Fall wenn Ihnen die zum Schreiben der Datei n tigen Rechte fehlen das Laufwerk schreibg
19. ke bis zum unteren Feldende z hlt bitmapHeight cRows 1 DIV 2 hexHeight 3 DIV 2 hexHeight bes Aus Gr nden die unbekannt sind ist bei einer derartigen Initialisierung die Bitmap traditionell immer um einen Pixel an jeder Seite zu kurz daher die Erh hung um 1 Bei dieser Berechnung kommt es leider zur Verschwendung von Platz auf der Bitmap Wie in Abbildung 3 anhand des schraffierten Bereiches zu erkennen wird am Rand platz f r die Anzeige von Feldpl tzen reserviert die nie belegt sein k nnen weil die Menge von legbaren Karten nicht ausreicht Diese Platzverschwendung wird ausgeglichen indem die Anzeigegr e auf den tats chlich ben tigten Bereich verringert wird Diese Ma nahme und das Reduzieren der Farbtiefe des Bitmaps spart viel Arbeitsspeicher D Die verwendete Komponente TScrollBox erweist sich als widerspenstig Die Eigenschaft Position eines Scrollbalkens repr sentiert nicht die Position des angezeigten inneren Bereichs sondern tats chlich die Position des Scrollbalkens auf der Scrollleiste Diese Position ist in der normalen Anwendung jedoch scheinbar belanglos Nichtsdestoweniger soll die Anzeige bei Spielbeginn auf die Spielfeldmitte springen damit der Benutzer die beiden Startkarten sieht Zur Bestimmung der Scrollbalkenposition an welcher die Ansicht zentriert ist wird dem Scrollbalken ein unerreichbar gro er Wert zugewiesen sodass er an seine Maximalposition springt Die H lfte des aktu
20. n geschlossen erwartetes Ergebnis Eine entsprechende Fehlermeldung wird ausgegeben erzieltes Ergebnis Eine entsprechende Fehlermeldung wird ausgegeben 18
21. nktestand in der Statusleiste angezeigt Ziel des Spieles ist es einen m glichst hohen Gesamtpunktestand zu erreichen Tipp Wenn Sie keinen guten Zug finden k nnen dr cken Sie die Taste C Die Schummelfunktion schl gt Ihnen den bestm glichen Zug vor Doch Achtung Schummeln kostet Sie jedes mal 20 Punkte Spielende Das Spiel ist zuende wenn Sie keine Karten mehr legen k nnen oder Sie das Programm beenden Haben Sie einen neuen H chststand erzielt ffnet sich das H chststandsfenster automatisch und fragt Sie nach Ihrem Namen Einstellungen Im Einstellungsfenster k nnen Sie Spielverhalten und Anzeigegr en ver ndern ber den Knopf Kartensatz w hlen k nnen Sie einen Kartensatz laden In einem Dialog werden Sie gefragt welche Kartenstapeldatei geladen werden soll ber den Knopf Kartensatz generieren k nnen Sie einen neuen Kartensatz erzeugen lassen In dem erscheinenden Dialog wird gefragt in welche Kartenstapeldatei der neue Kartensatz gespeichert werden soll Ferner k nnen Sie bestimmen ob die Karten vor dem Spielbeginn gemischt werden sollen Alle diese Einstellungen ver ndern das Spielverhalten Daher wird automatisch ein neues Spiel gestartet wenn Sie diese Einstellungen bei einem laufenden Spiel ver ndern Die Gr e der dargestellten Karten k nnen Sie zu jedem Zeitpunkt ndern Die neuen Einstellungen werden sofort auch bei laufenden Spielen bernommen 1 6 Fehlermeldungen Karten
22. rmeiden wenn das Programm den Fehler auf der zuf lligen Karte analysiert und aus den verbleibenden M glichkeiten eine Farbe oder einen Wert an einer g ltigen Position einzuf gen eine ausw hlt Jedoch w re die intelligente Auswahl aufgrund der erh hten Komplexit t vermutlich nicht schneller als das einfache Probieren Im dritten Schritt werden finale Korrekturen vorgenommen wie beispielsweise das Hinzuf gen einer Sechs falls n tig Schummelfunktion Ein Brute Force Algorithmus ist an dieser Stelle sowohl simpel als auch effektiv Das Programm muss lediglich folgende Schritte ausf hren e alle m glichen Z ge ausprobieren e die Punkte dieser Z gen berechnen 2 Auch wenn es in der FH Wedel verboten ist im Rechenzentrum am PC zu essen 10 e Zug mit dem h chsten Punktestand ausw hlen Es ist m glich dass es Ressourcen sparendere vielleicht sogar deterministische Algorithmen hierf r gibt Au erdem kann es sein dass der letztlich gew hlte Ansatz selbst unter den Brute Force Methoden au erordentlich viel Speicher verwendet Zur Effizienzsteigerung ist es sinnvoll im ersten Schritt nicht tats chlich alle Z ge zu betrachten sondern zun chst zu filtern Karten k nnen nicht irgendwo auf das Feld gelegt werden sondern nur an bereits liegende Karten angelegt werden Damit f llt schon ein Gro teil der Z ge weg Au erdem k nnen Karten nicht aufeinander liegen Dateien Das Programm muss nur an zwei stellen
23. ublenden damit die Karten auch bei geringer Bildschirmaufl sung noch akzeptable Gr en haben Eine bei Fenstergr enver nderung skalierende Anzeige wird von kaum einem Benutzer erwartet Fast ohne Ausnahme verschafft sich der Benutzer durch das Maximieren eines Fensters mehr bersicht Dies soll auch in Continuo der Fall sein Die Gr e der Karten soll zwar fest aber vom Benutzer bestimmbar sein Spielfeld Die Aufgabe verlangt eine gute Planung der Datenstruktur des Spielfeldes Ist sie g nstig gew hlt 9 wird die Realisierung des restlichen Programmes um vieles vereinfacht Besonders wichtig f r die Spiellogik sind Nachbarschaftsbeziehungen Das Spielfeld ist ein Wabenmuster Es gibt von einer Position ausgehend also sechs Nachbarfelder Bedienung Das Programm ist ein Spiel es soll also f r jeden Benutzer bedienbar sein Die Oberfl che soll daher m glichst einfach zu verstehen sein Das Positionieren einer Karte mit der Maus und das Ablegen mittels Mausklick ist intuitiv verst ndlich Das Drehen der Karte mit dem Mausrad ist praktisch da der Spieler dann nur die Maus verwenden muss Das Spiel kann also Einh ndig gespielt werden was gerade f r ein Gelegenheitsspiel wie Continuo gut ist Hat die verwendete Maus kein Mausrad muss zum Drehen eine alternative Steuerung ber Tasten oder das Men angeboten werden Hinweistexte in der Statusleiste enthalten w hrend des Spieles n tzliche Hinweise besonders f r die Erst

Download Pdf Manuals

image

Related Search

Related Contents

H6 Soft Care Dove Go Fresh Body Wash  Wilo-Stratos PICO 25/1-6  Tagungsband  HP MSR30 Series Installation Manual  Modèle 95MAX  1. Introduction to NOW • NOW investor terminal is a browser based  Broan-NuTone E66136SS Under Cabinet Range Hood  CAHIER DES CHARGES CONCERNANT XXX  Sony STR-DE875 User's Manual  Dielectric Withstand Voltage Test Procedure For  

Copyright © All rights reserved.
Failed to retrieve file