Autor |
Beitrag |
Janine
Hält's aus hier
Beiträge: 11
|
Verfasst: Mo 22.01.07 19:22
Hallo! Ich haoffe das mein eintrag hier einbisschen reinpasst,ich habe das nämlich noch nicht so ganz verstanden wo was hin muss.
Muss für die schule Memory programmieren (was mir extrem schwer fällt, da ich eingentlich gar nicht programmieren kann)
Könntet ihr mir zu beginn vielleicht dabei helfen wie ich Bilder in Panels einfügt?Das wäre mir schon einmal eine große hilfe.
Danke schon mal Moderiert von Christian S.: Topic aus Dateizugriff verschoben am Mo 22.01.2007 um 18:40
|
|
Blackheart666
      
Beiträge: 2195
XP
D3Prof, D6Pers.
|
Verfasst: Mo 22.01.07 19:36
Um Bilder Anzuzeigen benutzte ein Image dem kannst Du dann im Objektinspektor unter Picture ein Bild zuweisen,
oder auch zur Laufzeit laden.
Delphi-Quelltext 1: 2: 3: 4:
| procedure TForm1.Button1Click(Sender: TObject); begin Image1.Picture.LoadFromFile('C:\MeinBild.bmp'); end; |
_________________ Blackheart666
Der Irrsinn ist bei Einzelnen etwas Seltenes, - aber bei Gruppen, Parteien, Völkern, Zeiten die Regel. (Friedrich Nietzsche)
|
|
Janine 
Hält's aus hier
Beiträge: 11
|
Verfasst: Mo 22.01.07 19:43
das problem ist,dass ich mir das ganze so gedacht habe,dass ich auf das panel draufklicken kann,damit es sich umdreht,wie bei einem richtigen Memory die karten (auch wenn ich keine ahnung habe wie ich das machen soll). wenn ich das ganze in ein image feld mache dann kann ich es ja nicht anklicken,damit es sich umdreht,oder?
|
|
Blackheart666
      
Beiträge: 2195
XP
D3Prof, D6Pers.
|
Verfasst: Mo 22.01.07 19:47
Du kannst zb. die Rückseite im OI zuweisen, und bei Klick aufs Image das entsprechende zweite Bild laden.
_________________ Blackheart666
Der Irrsinn ist bei Einzelnen etwas Seltenes, - aber bei Gruppen, Parteien, Völkern, Zeiten die Regel. (Friedrich Nietzsche)
|
|
Janine 
Hält's aus hier
Beiträge: 11
|
Verfasst: Mo 22.01.07 19:51
schon mal danke.
Hättest du aber vielleicht auch einen tipp für mich wie ich die Bilder durch einen Zufallsgenerator den Feldern dann zuweisen kann?Also das jedes Feld ein anderes Bild bekommt?
|
|
Janine 
Hält's aus hier
Beiträge: 11
|
Verfasst: Mo 22.01.07 20:02
ich befürchte du müsstest mir deinen Vorschlag doch noch mal genauer erklären.hab grad bei genauerem überlegen festgestellt,dass ich nichts weiß wie ich das machen muss.Sorry aber ich brauch da echt länger um so was dann auch umsetzten zu können.meine Programme funktionieren eher aus Glück
|
|
Blackheart666
      
Beiträge: 2195
XP
D3Prof, D6Pers.
|
Verfasst: Mo 22.01.07 20:26
Schau Dir mal das an, vieleicht kommst du damit weiter.
www.bildung.hessen.d...phi/memory/index.htm
_________________ Blackheart666
Der Irrsinn ist bei Einzelnen etwas Seltenes, - aber bei Gruppen, Parteien, Völkern, Zeiten die Regel. (Friedrich Nietzsche)
|
|
Roadrunner116
      
Beiträge: 89
Win XP Home, Ubuntu Linux 6.06
Delphi 7, Java, PHP
|
Verfasst: Mo 22.01.07 21:22
Nimm eine normale Picture Komponente (und benenn sie Karte1 oder ähnlich)!
Mach mehrere Karten (Karte1, Karte2, ....Karte10), halt so viele wie benötigt!
Dieser weist du ein BIld für eine verdeckte Karte zu!
Wenn du darauf klickst sagst du dem Programm:
Delphi-Quelltext 1:
| Karte1.Picture.LoadFromFile('Pfad'); |
Zu dem Problem mit dem zufälligen Bildern....
Ich hab jetzt keie 100%ige Lösung, aber ich würde jedem bild eine Nummer zuweisen (1,2,3,...,10), soviele wie auch karten da sind!
Würde dann ne Schleife bauen, in der die Zahlen von 1-10 (nur ein Beispiel, kannst auch mehr oder weniger nehmen) zufällig anngeordnet und in eine Variable gespeichert werden (KartenBild, oder so -> Integer)!
Danach weist du nacheinander jeder Karte ein bild zu, das ginge dann vielleicht so:
Delphi-Quelltext 1:
| Karte1.Picture.LoadFromFile('C:\Programme\Memmory\Bilder\' + KartenBild + '.jpg'); |
und nicht vergessen! wenn du ein jpeg bild laden willst:
JPEG in der Uses-Liste mit anführen!!!
Ich hoffe ich verwirre dich net, frag einfach nochmal, wenn du etwas nicht verstehst...!
Oder hat jemand eine bessere Idee?
|
|
Janine 
Hält's aus hier
Beiträge: 11
|
Verfasst: Sa 27.01.07 15:56
Ich hab mir gedacht das ich das auch mit einem Feld machen könnte. dort kann ich ja dann am einfachsten Zahlen vertauschen.Jedoch weiß ich noch nicht so genau wie ich dann wenn ich auf die Buttons drücke (die dann verschwinden und mein image Felde zum vorschein kommt) den Zahlen die bilder zuordne. Bis jetzt wird beim form create das Feld erzeugt und mein Start Button sieht so aus procedure
TForm1.Button23Click(Sender: TObject);
var i:integer ;
begin
timer1.enabled:=true;
for i= 0 to 19 do
begin
meinFeld[i]:=(i+2)mod19;
end;
end;
Jedoch weiß ich jetzt nicht wie ich das ganze ausgebe.
Ich hoffe ihr versteht mein Problem irgendwie
|
|
jaenicke
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Sa 27.01.07 16:20
Ich würde folgendes vorschlagen:
Du nimmst dir ein Array mit sovielen Einträgen wie du Bilder hast. Darein packst du immer der Reihe nach per Schleife die Zahlen zu den Bildern. Du hast z.B. img01.jpg, img02.jpg, ...
Und in das Array packst du also (1, 1, 2, 2, 3, 3, ...). Jede Karte kommt ja zweimal vor. Mit mod geht das ja ganz gut.
Dann nimmst du Miller-Yates um die zu mischen:
www.delphi-forum.de/...c.php?t=58154#348095
Und schließlich lädst du die Bilder entsprechend des Arrray-Inhalts, so sieht das also grob aus:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| var i: Integer; Cards: array of Integer; begin SetLength(Cards, 10); for... Cards[i] :=
for i := 0 to High(Cards) do if Cards[i] < 10 then TImage(FindComponent('imgCard0' + IntToStr(Cards[i]))).Picture.LoadFromFile( 'img0' + IntToStr(Cards[i]) + '.jpg') else TImage(FindComponent('imgCard' + IntToStr(Cards[i]))).Picture.LoadFromFile( 'img' + IntToStr(Cards[i]) + '.jpg'); end; |
Hiermit würden jetzt alle angezeigt, das ist nur ein Beispiel. In Wirklichkeit muss dein Array global deklariert werden (also nicht lokal in der Funktion selbst) und du musst bei einem Klick genau die Karte "umdrehen", d.h. das entsprechende Bild laden.
Dafür noch ein paar Tipps:
1. könntest du die Bilder in FormCreate zur Laufzeit erzeugen
2. gibt es die Eigenschaft Tag bei jedem Bild, womit du eine Klick-Routine für alle Bilder nehmen kannst, wenn du da den Array-Index reintust:
Delphi-Quelltext 1:
| Cards[TImage(Sender).Tag] |
wäre dann der Eintrag im Array, der zu dem TImage gehört auf das gerade geklickt wurde.
Ja, und jetzt lasse ich dir mal erstmal Zeit für Fragen...
// EDIT Picture. im Quelltext vergessen... ergänzt.
Zuletzt bearbeitet von jaenicke am Sa 27.01.07 16:53, insgesamt 1-mal bearbeitet
|
|
Janine 
Hält's aus hier
Beiträge: 11
|
Verfasst: Sa 27.01.07 16:37
ok noch mal von vorne,so viel hab ich nit wirklich verstanden.
also mein ganzes Programm sieht im moment grad mal so aus
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145: 146: 147: 148: 149: 150: 151: 152: 153: 154: 155: 156: 157: 158: 159: 160: 161: 162: 163: 164: 165: 166: 167: 168: 169: 170: 171: 172: 173: 174: 175: 176: 177: 178:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls,Spielleiter,Konto,Stoppuhr,karten, jpeg;
type
TForm1 = class(TForm) Label1: TLabel; Label2: TLabel; Label3: TLabel; Panel26: TPanel; Timer1: TTimer; Panel25: TPanel; Panel27: TPanel; Panel28: TPanel; Image1: TImage; Image2: TImage; Image3: TImage; Image4: TImage; Image5: TImage; Image6: TImage; Image7: TImage; Image8: TImage; Image9: TImage; Image10: TImage; Image11: TImage; Image12: TImage; Image13: TImage; Image14: TImage; Image15: TImage; Image16: TImage; Image17: TImage; Image18: TImage; Image19: TImage; Image20: TImage; Button1: TButton; Button2: TButton; Button3: TButton; Button4: TButton; Button5: TButton; Button6: TButton; Button7: TButton; Button8: TButton; Button9: TButton; Button10: TButton; Button11: TButton; Button12: TButton; Button13: TButton; Button14: TButton; Button15: TButton; Button16: TButton; Button17: TButton; Button18: TButton; Button19: TButton; Button20: TButton; Button21: TButton; Button22: TButton; Label4: TLabel; Panel1: TPanel; Button23: TButton; procedure Button1Click(Sender: TObject); procedure Button21Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure Button22Click(Sender: TObject); procedure Button23Click(Sender: TObject); procedure Timer1Timer(Sender: TObject);
private public end; TFeld=Array[0..19] of integer;
var Form1: TForm1; K:TKonto; uhr:Tstoppuhr; ka:Tkarte; meinFeld:TFeld ; implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject); var betrag:integer; Schritte,i:integer; begin (Sender as TButton).Visible:=false; image1.picture:= (i) ; image2.picture:=picturea[2]; image3.picture:=picture a[3] ; image4.picture:=picture a[4]; image15icture:=picture a[5] ; image6.picture:=picture a[6]; image7.picture:=picture a[7] ; image8.picture:=picture a[8]; image9.picture:=picture a[9] ; image10.picture:=picture a[10]; image11.picture:=picture a[1] ; image12.picture:=picture a[2]; image13.picture:=picture a[3] ; image14.picture:=picture a[4]; image15.picture:=picture a[5] ; image16.picture:=picture a[6]; image17.picture:=picture a[7] ; image18.picture:=picture a[8]; image19.picture:=picture a[9] ; image20.picture:=picture a[10];
k.abheben (betrag); ka.bestimmen (schritte); panel1.caption:=inttostr (ka.getzug); panel26.caption:=inttostr(k.getPunkte);
end;
procedure TForm1.Button21Click(Sender: TObject); begin close; end;
procedure TForm1.FormCreate(Sender: TObject); var i:integer; begin for i:=0 to 19 do meinFeld[i]:=i ; uhr:=TStoppuhr.create; K:=Tkonto.create (50); ka:=Tkarte.create (0);
panel26.caption:=inttostr(k.getPunkte); panel1.caption:=inttostr(ka.getzug);
end;
procedure TForm1.Button22Click(Sender: TObject); begin uhr.stop; timer1.enabled:= false; panel25.caption:=inttostr(uhr.getmin); panel27.caption:=inttostr(uhr.getsec); panel28.caption:=inttostr(uhr.getzsec); end;
procedure TForm1.Button23Click(Sender: TObject); var i:integer ; begin timer1.enabled:=true; for i:=0 to 19 do begin meinFeld[i]:=(i+2); end; end;
procedure TForm1.Timer1Timer(Sender: TObject); begin uhr.start; panel25.caption:=inttostr(uhr.getmin); panel27.caption:=inttostr(uhr.getsec); panel28.caption:=inttostr(uhr.getzsec); end;
end. |
erst einmal müsstest du mir sagen wo ich das genau hinschreiben soll,ins form create oder in meinen start button.dann muss ich zugeben versteh ich das mit den karten füllen und der for schleife nicht. dort wird doch überprüft ob i kleiner 10 ist,wird dann für jedes i kleiner 10 das gleiche bild eingesetze?
Moderiert von raziel: Delphi-Tags hinzugefügt
|
|
jaenicke
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Sa 27.01.07 16:47
Janine hat folgendes geschrieben: | erst einmal müsstest du mir sagen wo ich das genau hinschreiben soll,ins form create oder in meinen start button.dann muss ich zugeben versteh ich das mit den karten füllen und der for schleife nicht. dort wird doch überprüft ob i kleiner 10 ist,wird dann für jedes i kleiner 10 das gleiche bild eingesetze? |
Ich schreib mal ein kleines Beispiel mit ein paar Erklärungen. Dann siehst du wo was hinkommt und kannst dann anhand der Kommentare die fehlenden Teile weiterschreiben.
Was die Frage angeht: i läuft ja von 0 bis zur Größe des Arrays. Wenn es kleiner als 10 ist, also 0 bis 9, dann wird imgCards01 bis imgCards09 benutzt, danach imgCards10 bis ..., weil so die führende 0 genutzt werden kann, was das übersichtlicher macht.
Aber da i ja nicht immer denselben Wert hat wird auch nicht immer das gleiche Bild benutzt.
|
|
jaenicke
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Sa 27.01.07 17:15
So, hier ein kleines Beispiel. Es funktioniert insoweit als die Karten auf- und zugedeckt werden...
Einloggen, um Attachments anzusehen!
|
|
|