Autor Beitrag
Ezreal
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Mi 10.11.10 19:48 
Hallo alle zusammen :)
Ich bin gerade dabei ein Memoy zu programmieren, bin noch kein Profi, allerdings auch kein völliger Anfänger mehr (bisher 3,5 Jahre Delphi in der Schule gehabt).
Es läuft soweit auch ganz gut, allerdings gibt es einige Kleinigkeiten die optimiert werden könnten, bei denen ich allerdings Hilfe benötige.

(Und bevor jetzt Sachen kommen wie "Suchfunktion bitte nächstes mal nutzen, Thema gabs schon 237892378x mal" etc etc... - Ich hab schon etwas rumgeguckt, halt nur nicht Antworten auf die Probleme gefunden die ich brauche.)

Mein Programm funktioniert im Großen und Ganzen so:

Es wird eine bestimmte Anzahl von Karten festgelegt.
Nun werden eine bestimmte Anzahl von Images erstellt, diesen werden Werte zugewiesen wie Parent, Height, Width, Name, Top, Left usw...
Nachdem auch jedes Image ein Bild hat, werden erneut Images erstellt und darüber gelegt (die Rückseiten).

Dann werden alle Karten durchgemischt (Top und Left verändern sich).

Klickt man ein Bild an, verschwindet die Rückseite (hide) und man sieht das eigentliche Bild. Ein zweites Bild kann angeklickt werden. Stimmt die ID (gespeichert in der Hint Eigenschaft des Images) überein, bleiben beide Karten offen und man erhält einen Punkt. Wenn nicht, werden beide wieder zugedeckt.


1. Problem:
Ich habe insgesamt ~132 Bilder. Es wird ausgelost welches geladen wird, der Pfad wird erneut ausgelost nachdem das jeweilige Bild zweimal benutzt wurde. In einem Array of boolean wird dieses Bild nun als false gesetzt damit es nicht erneut ausgelost werden kann.
Ich habe das bisher so gelöst, dass die Bilder die Namen "1" - "132" haben, was natürlich irgendwie gemogelt ist... Wie kann ich unabhängig vom Namen den Bildpfad auslosen? Ich habe da keinen Ansatz gefunden wie ich das machen könnte...

2. Problem:
Bisher werden die Bilder noch sehr dicht nebeneinander gelegt, es klappt aber einfach nicht dass ein Rand dazwischen kommt...

3. Problem:
Erstelle ich öfter ein Memory, gebe auf, erstelle ein neues usw. ... kommt irgendwann eine Zugriffsverletzung. Das dies an den Images liegen wird ist mir klar, aber wie kann ich das unterbinden? Bevor man ein neues Memory erstellen kann, werden zuerst alle Images gelöscht... Wo liegt der Fehler?

Und allgemein ist mein Programm sehr langsam/'laggy'. Gibt es da noch Optimierungsvorschläge? Ich denke meine Algorithmen mit den ganzen Schleifen sind zu umfangreich geworden... :P


Und ja, ich weiß dass mein 2-Spieler Modus sowie einige weiter 'addons' noch nicht funktionieren... :)

Mit freundlichen Grüßen!
Einloggen, um Attachments anzusehen!
Georg08
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 155
Erhaltene Danke: 6

Win XP
Delphi 7.0 Personal
BeitragVerfasst: Mi 10.11.10 20:00 
Zu Problem 1:
Wie wäre es mit einer eigenen Komponente für die Karten, denen dann eine Zahl und ein dazugehöriger Pfad zugewiesen wird?
Oder in eine Datei auslagern in der sowas steht oder beides kombiniert (Komponente die auch noch eine LoadFromFile aktion hat)

Die Datei könnte so aussehen:
ausblenden Quelltext
1:
2:
3:
4:
1|C:\Bild.bmp
2|C:\TollesPic.bmp
3|C:\Bilder\Urlaub\Urlaubsbild3.bmp
...


Außerdem ist mir aufgefallen, dass man "nicht gewinnen" kann, nur aufgeben :D
Ezreal Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Mi 10.11.10 20:09 
Ah, das ist natürlich eine Idee :)
Hab mich nur leider noch nie mit Komponenten oder extra Dateien befasst die ich dann mit in das Programm integrieren kann...
Egal, wenn Zeit bleibt werde ich das mal tun und den LoadFromFile Algorithmus erneuern.

Ich weiß dass man noch nicht gewinnen kann, bin halt wie gesagt noch nicht ganz fertig :D

Danke dafür schonmal :)
bole
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 107
Erhaltene Danke: 15

win 10

BeitragVerfasst: Mi 10.11.10 21:33 
Hallo

Die Verteilung der Bilder ist es wie mit einem Lotto Programm... Man sollte nicht ein Bild auswählen, kontrollieren ob es schon gewählt worden ist. Wenn ja - neue Auswahl, wenn nein - Bild nehmen. Ich werde nie verstehen wie man auf so einen Ansatz kommt :?

Real ist es ja auch nicht so. Du hast einen Stapel mit Bildern und mischst diesen, danach nimmst du die Karten der Reihe nach.

Ich würde es auch so Programmieren.

Du hast ein Array mit allen Bildern (bzw. Referenzen zu den Bildern)
Mischst diese mit Fisher Yates www.delphi-library.d...&highlight=yates
Verteilst diese der Reihe nach auf dem Spielfeld.


Gruss
Bole

_________________
ein programm macht nicht das was du willst sondern was du schreibst!
delphi10
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 447
Erhaltene Danke: 2

W2K, XP, Vista64, Win7 64
RAD-Studio 2010
BeitragVerfasst: Mi 10.11.10 22:18 
user profile iconEzreal hat folgendes geschrieben Zum zitierten Posting springen:
Hallo alle zusammen :)

2. Problem:
Bisher werden die Bilder noch sehr dicht nebeneinander gelegt, es klappt aber einfach nicht dass ein Rand dazwischen kommt...

Mit freundlichen Grüßen!


Setz mal folgend Zeilem ein nach laden und positionieren der Bilder:
ausblenden Delphi-Quelltext
1:
2:
Spielkarte[n].Stretch :=   false;
Spielkarte[n].proportional :=   true;

Damit bekommst du die Abstände in den Griff
Gruß delphi10

_________________
Salus populi suprema lex esto
Ezreal Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Mi 10.11.10 22:39 
das mit den abständen hab ich jetzt hingekriegt, wenn auch nicht so, aber trotzdem danke :)

jedoch stört mich immernoch problem 3, das ist wirklich das schwerwiegendste... halte ich da irgendwelche "regeln" nicht ein? ich zerstöre die images doch immer schön wieder.. :/
Martok
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 3661
Erhaltene Danke: 604

Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
BeitragVerfasst: Mi 10.11.10 22:54 
Hallo user profile iconEzreal,

erstmal möchte ich dich darauf hinweisen, dass mehrere Fragen in einem Thema hier nicht erlaubt sind. Führt zu einigem an Verwirrung, wenn jeder ein anderes Thema behandelt.

Da ich aber vermute, dass sich das hier auf ein grundlegendes Konzeptproblem zurückzuführen ist (nur gefühlt, aber die Problembeschreibung klingt so) lasse ich hier erstmal offen.

Sollte sich doch als mehrere getrennte Probleme erweisen, bitte ich dich getrennte Threads zu erstellen.

Viele Grüße,
Martok

_________________
"The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."


Zuletzt bearbeitet von Martok am Mi 10.11.10 23:00, insgesamt 3-mal bearbeitet
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: Mi 10.11.10 22:55 
So schlecht läuft es doch gar nicht.

Ich würde die Bilder in einer Imagelist vorhalten.

wenn Du keine Komponente schreiben willst, in eine Paintbox im OnPaint die Imagelist die entsprechenden Bilder malen lassen. Und bei programmgesteuerten Änderungen ein PaintBox.Invalidate aufrufen.

_________________
Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS
delphi10
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 447
Erhaltene Danke: 2

W2K, XP, Vista64, Win7 64
RAD-Studio 2010
BeitragVerfasst: Do 11.11.10 13:24 
user profile iconEzreal hat folgendes geschrieben Zum zitierten Posting springen:
das mit den abständen hab ich jetzt hingekriegt, wenn auch nicht so, aber trotzdem danke :)

Der Danke-Button ist rechts unten :D

_________________
Salus populi suprema lex esto
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: Do 11.11.10 13:28 
@delphi10
;-) nur wenn Ajax aktiviert ist 8)

_________________
Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS