AW: Memory Programm
Wie soll es denn nun weitergehen?
|
AW: Memory Programm
ich brauch nen Gedankenblitz .. ne erklärung die passt und funktioniert ._.
|
AW: Memory Programm
Davon gab es in diesem Thread aber einige.
|
AW: Memory Programm
ohne erklärung was passiert wo das rein muss oder das jemand sich in uns versetzen kann das wir
leider keine Profis sind. |
AW: Memory Programm
Dann kann ich etwas Lektüre empfehlen:
E-Book vom Delphi-Treff Grundlagen-Tutorials vom Delphi-Treff Delphi-Basics (Englisch) |
AW: Memory Programm
danke.. aber um mir komplett Delphi leküre zu genuss zuführen, fehlt mir leider Zeit.
naja.. dann muss ich eine andere Lösung finden. |
AW: Memory Programm
Grundsätzliche aber wichtige Frage:
Für wieviel Spieler soll das Spiel ausgelegt werden? |
AW: Memory Programm
Das ist egal. Das programm soll auch nicht komplett sein für jedes Thema und jede schwierigkeit.
weil sich das ja dann nur wiederholt. es wurden uns keine Grenzen gesetzt. |
AW: Memory Programm
Zitat:
|
Wieder einer dieser ziel- und hoffnugslosen Hausaufgabenthreads?
Zitat:
|
AW: Memory Programm
Ok. Ich glaube, das war jetzt deutlich und bedarf keiner weiteren Kommentare mehr.
Die Frage ist, ob man mit dem vorhandenen Wissen jetzt was brauchbares bauen kann. Klassen wären zwar schöner, aber es sollte auch mit Records und Arrays gehen. Die Karte als Record definieren und dann alle Karten in ein Array packen. Irgendwie so würde ich das jetzt angehen. |
AW: Memory Programm
Zitat:
Denn: Zitat:
|
AW: Memory Programm
Zitat:
|
AW: Memory Programm
Wer lesen kann ist klar im Vorteil. in #16 steht praktisch die vollständige Logik. Was noch fehlt falls ich es nicht übersehen habe, ist die Markierung der erkannten/gefundenen.
Die Gleichheitsprüfung liegt ja praktisch schon auf dem Tisch. Jetzt noch die Koordinaten der Maus beim Klick auf den Array-Index abbilden, fertig. Den Rest der Zeit kann man dann hingebungsvoll mit der Gestaltung der Oberfläche verbringen. Gruß K-H |
AW: Memory Programm
Zitat:
Schau einmal wo sie den Vorschlag von DeddyH aus #7 zur Erzeugung eines Zählers der umgedrehten Karten eingebaut haben. Was soll der im FormCreate() denn bewirken? |
AW: Memory Programm
Zitat:
Ich hätte mich ja zu mehr (Code) hinreißen lassen, wenn ich so etwas wie ein Konzept (etwas mehr wie in #16) gesehen hätte. Aber hier gab es nichts ausser Jammern wie schlecht der Lehrkörper ist. Das ist mir persönlich zu wenig und da zieht auch kein Welpen- oder Frauen-Bonus. |
AW: Memory Programm
Zitat:
Einen Delphi Entwickler zu finden ist wie die Nadel in einem Heuhaufen... Daher wollte ich mal wissen, wie es mit dem Stand des Informatikunterrichts aussieht. Fazit? Ich kann nicht verstehen, wie man in so langer zeit so wenig und soviel Mist den Schülern beibringen kann... Immer vorausgesetzt das KillMary die Aussagen Ihrer Lehrerin korrekt wieder gegeben hat. Mavarik |
AW: Memory Programm
Zitat:
Ich hatte mir gestern Abend beim Ausführen unseres Hundes überlegt, wie man mit möglichst wenig Vorrausetzungen das Problem erschlagen könnte, leider hatte Sir Rufo da schon längst das wichtigste formuliert. @Mavarik Ob in Delphi oder C oder ... die Sprache ist nicht so wichtig, wenn man sich Programmabläufe vorstellen kann. Aber ohne das, ist jede Sprachkenntnis vollkommen totes Wissen. Gruß K-H |
AW: Memory Programm
Zitat:
"Habt Ihr euch mal mit Bleistift und Papier dem Problem gewidmet..." Aber es fehlt trotzdem das Verständnis für die einfachsten Delphi Umsetzungen. Wenn ich dann ein Projekt sehe welches - für jeden Eventualität ein Formular hat - die Namen von Forms & Variablen gruselig sind - 30 Forms (für Memory) im Autocreate stehen. - Für 3 Schwierigkeitsgrade alles Forms 3x existieren... - Auf allen Forms alle Images statisch draufgeklickt worden sind - Jedes Image (zwei übereinander) ein eigenes OnClick hat - Das umschalten der Forms mit Form.Show passiert. (Alle anderen liegen drunter) - usw. Ist an den Schulen dringender Handlungsbedarf geboten. (Vielleicht aber auch nur ein Einzelbild) Mavarik |
AW: Memory Programm
Ich würde euch bitten zum eigentlichen Problem zurück zu kommen.
|
AW: Memory Programm
Zitat:
Zitat:
Mavarik |
AW: Memory Programm
Ist der TB nicht etwas ganz tolles?
Jeder andere "Löst mir mal die Hausaufgabe"-Thread wäre spätestens auf Seite zwei vorbei gewesen, wenn der Fragende männlich gewesen wäre. Hut ab vor der geballten Ritterlichkeit. ;) Sherlock |
AW: Memory Programm
Zitat:
|
AW: Memory Programm
Zitat:
Sherlock |
AW: Memory Programm
Zitat:
Vielleicht habe ich es überlesen, aber mir war es nicht klar... Erst als ich mit Ihr telefoniert habe... :stupid: |
AW: Memory Programm
Sonst würden ja Andere auch ständig mit Hilfe überschüttet, nur weil sie einen weiblichen Avatar oder einen weiblich klingenden Nickname besitzen.
sakura :stupid: Interessant wäre, ob sie sich wenigstens bedankt haben, wo sie es hier ja noch nicht gemacht haben. (sind nun bestimmt verschreckt und trauen sich nicht mehr oder werden eh nie wieder was mit Delphi zu tun haben) |
AW: Memory Programm
Ich muss euch noch mal zur Ordnung rufen! Bleibt bitte beim Thema.
|
AW: Memory Programm
Zitat:
Zitat:
Das Thema - was war nochmal das Thema... Ach richtig... Memory ist a recht einfach zu programmieren... Drei Sachen werden in der Schule scheinbar nicht beigebracht... 1. Arbeiten mit TImage(Sender) 2. Arbeiten mit dem Tag Feld 3. Programmablauf mit mehreren Fenstern. Danach ist Memory na nur ein paar Zeilen Source... Mavarik |
AW: Memory Programm
Zitat:
|
AW: Memory Programm
So, einmal zur Aufklärung.
Ich kann nichts für die Kompetenz meiner Lehrerin. Dass wir in 2 Jahren Delphi nur das einfache Grundgerüst gelernt haben und nun keine "Profis" und all Wissende sind tut mir auch leid. Das ist ein Gymnasium mit 90 Minuten Informatik in einer Woche. Und im Grunde haben wir nur ein Jahr wirklich mit Delphi programmiert. SO und ich danke Mavarik das er uns geholfen hat und sich die Zeit genommen hat. Ich danke euch allen, aber leider konnte ich durch unser Unwissen nicht viel davon verwenden. Weiter zu sagen ist, dass wir uns das wahrscheinlich wirklich nicht gut überlegt haben, ja das gebe ich zu. Wir haben beide aber nicht gedacht, dass es SO kompliziert ist. Und falls ihr es wissen wollt, es ist für Mavarik etwas in Planung. Meine Freundin und ich setzen uns noch mal mit ihm in Kontakt, leer geht er für seine Hilfe und Zeit nicht aus. Und das wir nicht mehr geschrieben haben liegt einfach daran, dass wir im Vorprüfungsstress waren und nicht weil ich irgendeine Angst haben. Ihr könnt Frauen gegenüber gerne Vorurteile haben, aber leider wisst ihr nicht genau was wir gelernt haben und alles auszuzählen teilt euch unseren Wissensstand auch nicht mit. Aber danke für alle Mühen. |
AW: Memory Programm
Hallo alle zusammen,
ich habe ein ähnliches Problem. Beim Programmieren des Memorys habe ich einige Schwierigkeiten, vor allem mit der DrawGrid-Komponente. Bisher habe ich mit Hilfe von Schleifen jedem meiner 10 Bilder Koordinaten und eine "ID" zugeordnet (das ganze zwei Mal, um Paare zu erzeugen). Nun möchte ich die Bilder in das DrawGrid laden (jede der 20 Zellen soll am Ende ein Bild beinhalten). Allerdings finde ich keine Möglichkeit, die Zellen, ähnlich wie beim StringGrid, einzeln über die Koordinaten anzusprechen. Ich sitze nun schon ziemlich lange daran und verzweifle langsam. Daher wäre ich über einen rettenden Tipp sehr froh! :) Hier mein bisheriger Quelltext:
Code:
var Memory : array [1..4,1..5] of Integer;
Pfad : array [0..9] of String = ('Bild1.bmp', 'Bild2.bmp', 'Bild3.bmp', 'Bild4.bmp', 'Bild5.bmp', 'Bild6.bmp', 'Bild7.bmp', 'Bild8.bmp', 'Bild9.bmp', 'Bild10.bmp'); Bilder : array [0..9] of TImage; procedure BilderLaden; var i : Integer; begin for i := 0 to 9 do begin Bilder[i] := TImage.Create(nil); Bilder[i].Picture.LoadFromFile(Pfad[i]) end end; procedure TForm1.FormCreate(Sender: TObject); begin DrawGrid1.ColCount:=5; DrawGrid1.RowCount:=4; DrawGrid1.FixedCols:=0; DrawGrid1.FixedRows:=0; end; procedure PaareFinden; var i,x,y,Zaehler : Integer; begin i:=1; Randomize; while i<=10 do begin Zaehler:=0; while Zaehler < 3 do begin x:=Random(5)+1; y:=Random(4)+1; if Memory[x,y]=0 then begin Memory[x,y]:=i; Zaehler:=Zaehler+1 end; end; i:=i+1; end; end; procedure KartenZuordnen; // und ab hier wird es problematisch.. var i : Integer; Memory : array [1..4,1..5] of Integer; begin PaareFinden; for i:= 1 to 10 do Memory[i]:=(DrawGrid1.Cells[x,y]); // in Anlehnung an das StringGrid end; end. |
AW: Memory Programm
Zitat:
Die Unterschiede zwischen TImage, TPicture, TGraphic usw. sind verwirrend, nicht nur für Anfänger. Hier eine kurze Erklärung auf Englisch. Da deine Bilder alle Bmp-Dateien sind, nehmen wir am besten TBitmap. Sieht dann ungefähr so aus:
Delphi-Quellcode:
var
Memory: array [1..4,1..5] of Integer; Bilder: array [0..9] of TBitmap; procedure BilderLaden; var i : Integer; begin for i := 0 to 9 do begin Bilder[i] := TBitmap.Create; Bilder[i].LoadFromFile(Pfad[i]); end end; procedure TForm1.DrawGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); var BildNr: Integer; begin // Das DrawGrid hat keine festen Zellen (FixedCols=0, FixedRows=0), sonst müssten // wir das hier bei den Koordinaten berücksichtigen. // Das Bild ermitteln, das zur aktuellen Zelle (ACol, ARow) gehört // Memory-Array hat 1-basierte Koordinaten BildNr := Memory[ARow + 1, ACol + 1]; // Bild auf die Zelle malen (BildNr ist 1-basiert?) DrawGrid1.Canvas.StretchDraw(Rect, Bilder[BildNr - 1]); // oder: DrawGrid1.Canvas.Draw(Rect.Left, Rect.Top, Bilder[BildNr - 1]); end; end; |
AW: Memory Programm
Zitat:
So kompliziert es sich auch anhört, die Lösung ist die eine einzelne Image-Komponente, bzw. die Bitmap drin. Statt sich tagelang mit der DrawGrid zu ärgern, kann man im Bruchteil der Zeit alles die Grid selbst auf der Bitmap erstellen. Es ist einfacher als man denkt, es hört sich nur kompliziert an.
Delphi-Quellcode:
uses
ShellApi; const Breite = 32; var Matrix: array[0..9, 0..9] of Integer; //-------------------- Zufälliges Bild erstellen ------------------------------- function ExpandEnv(const s: string): string; var l: Integer; begin l := ExpandEnvironmentStrings(PChar(s), nil, 0); SetLength(Result, l - 1); ExpandEnvironmentStrings(PChar(s), PChar(Result), l); end; function FileIconPath: string; begin Result := ExpandEnv('%SystemRoot%\system32\SHELL32.dll'); end; function FileIconCount(const FileName: string): Integer; begin Result := 0; if FileExists(FileName) then Result := ExtractIcon(HInstance, PChar(FileName), $FFFFFFFF); end; //Gibt eine Bitmap 32*32 zurück, generiert aus System-Icons procedure TestBmp(Bmp: TBitmap; Index: Integer); var IconCount: Integer; Icon: TIcon; begin Icon := TIcon.Create; try IconCount := FileIconCount(FileIconPath); if FileIconCount(FileIconPath) > 0 then Icon.Handle := ExtractIcon(HInstance, PChar(FileIconPath), Random(IconCount)); Bmp.Canvas.Draw(0, 0, Icon); finally Icon.Free; end; end; //--------------------------------- Ende --------------------------------------- //-------------------------- Eigentliche Prozeduren ---------------------------- procedure TForm1.FormCreate(Sender: TObject); var IconCount: Integer; x, y: Integer; Bmp: TBitmap; begin IconCount := FileIconCount(FileIconPath); with Image1.Picture do begin Bitmap.Width := 10 * Breite; //0..9 -> 10 Bitmap.Height := 10 * Breite; end; for x := 0 to 9 do for y := 0 to 9 do begin Matrix[x, y] := Random(IconCount); Bmp := TBitmap.Create; try Bmp.Width := Breite; Bmp.Height := Breite; //---Platzierung--- TestBmp(Bmp, Matrix[x, y]); Image1.Picture.Bitmap.Canvas.Draw(x * Breite, y * Breite, Bmp); finally Bmp.Free; end; end; end; procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin ShowMessageFmt('Koordinate: x = %d; y = %d', [x div Breite, y div Breite]); end; |
AW: Memory Programm
Hallo!
Vielen Dank für Eure Hilfe! Ich habe Deinen Tipp umgesetzt, SMO. Ich erhalte nun keine Fehlermeldungen mehr, allerdings werden die Bilder immer noch nicht angezeigt. Was meinst Du mit 1-basiert? |
AW: Memory Programm
Beginnt bei 1 und nicht bei 0.
|
AW: Memory Programm
Zitat:
Außerdem sehe ich da gerade noch einen Fehler in der Prozedur "PaareFinden": da kommt zweimal "Memory[x,y]" vor, sollte aber Memory[y,x] sein. Denn dein Grid hat ja 5 Spalten und 4 Zeilen und Memory ist als "array [1..4,1..5]" definiert. |
AW: Memory Programm
Und warum kommt keiner auf die Idee mal die Bereichsprüfung zu aktivieren? :roll:
|
AW: Memory Programm
Vielen Dank für Eure Hilfe! :)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:58 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz