AW: Spiel programmieren, Hilfe benötigt.
klar kannst du das nicht vor dem Programmstart wissen, aber während der Ausführung. Du mußt auch ein wenig Quelltext schreiben, damit der Computer weiß, was er tun soll. :roll:
z.B. 1. Zufallszahl ermitteln 2. z.B. 5 ermittelt 3. Bild Nr. 5 laden 4. in Bild.Tag die 5 eintragen ...jetzt hat das Bild eine eindeutige "Eigenschaft". Der Wert in Tag ist in jedem Bild dann eindeutig. |
AW: Spiel programmieren, Hilfe benötigt.
Eben, und dazu muss man ja nur wissen, welche Zahl sich hinter der jeweiligen Grafik verbirgt. Dazu fallen mir mehrere Möglichkeiten ein, von elegant und OOP-konform bis leicht verständlich, aber fehleranfällig.
|
AW: Spiel programmieren, Hilfe benötigt.
Meinst du die ListevonDateinamen?
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var ListeVonDateinamen:TStringlist; DateinameIndex:Integer; i:Integer; begin begin for i := 1 to 24 do TImage(FindComponent('Image' + IntToStr(i))).Visible := true; end; Randomize; ListeVonDateinamen:=TStringList.Create; try ListeVonDateinamen.add('H:\Informatik-Bilder\+1.bmp'); ListeVonDateinamen.add('H:\Informatik-Bilder\+1.bmp'); ListeVonDateinamen.add('H:\Informatik-Bilder\+1.bmp'); ListeVonDateinamen.add('H:\Informatik-Bilder\+1.bmp'); ListeVonDateinamen.add('H:\Informatik-Bilder\+2.bmp'); ListeVonDateinamen.add('H:\Informatik-Bilder\+2.bmp'); ListeVonDateinamen.add('H:\Informatik-Bilder\+2.bmp'); ListeVonDateinamen.add('H:\Informatik-Bilder\+2.bmp'); ListeVonDateinamen.add('H:\Informatik-Bilder\+3.bmp'); ListeVonDateinamen.add('H:\Informatik-Bilder\+3.bmp'); ListeVonDateinamen.add('H:\Informatik-Bilder\+3.bmp'); ListeVonDateinamen.add('H:\Informatik-Bilder\+3.bmp'); ListeVonDateinamen.add('H:\Informatik-Bilder\+4.bmp'); ListeVonDateinamen.add('H:\Informatik-Bilder\+4.bmp'); ListeVonDateinamen.add('H:\Informatik-Bilder\+4.bmp'); ListeVonDateinamen.add('H:\Informatik-Bilder\+4.bmp'); ListeVonDateinamen.add('H:\Informatik-Bilder\-1.bmp'); ListeVonDateinamen.add('H:\Informatik-Bilder\-1.bmp'); ListeVonDateinamen.add('H:\Informatik-Bilder\-1.bmp'); ListeVonDateinamen.add('H:\Informatik-Bilder\-1.bmp'); ListeVonDateinamen.add('H:\Informatik-Bilder\-2.bmp'); ListeVonDateinamen.add('H:\Informatik-Bilder\-2.bmp'); ListeVonDateinamen.add('H:\Informatik-Bilder\-2.bmp'); ListeVonDateinamen.add('H:\Informatik-Bilder\-2.bmp'); ListeVonDateinamen.add('H:\Informatik-Bilder\-3.bmp'); ListeVonDateinamen.add('H:\Informatik-Bilder\-3.bmp'); ListeVonDateinamen.add('H:\Informatik-Bilder\-3.bmp'); ListeVonDateinamen.add('H:\Informatik-Bilder\-3.bmp'); ListeVonDateinamen.add('H:\Informatik-Bilder\-4.bmp'); ListeVonDateinamen.add('H:\Informatik-Bilder\-4.bmp'); ListeVonDateinamen.add('H:\Informatik-Bilder\-4.bmp'); ListeVonDateinamen.add('H:\Informatik-Bilder\-4.bmp'); for i:=0 to Form1.ComponentCount-1 do if Components[i] is TImage then begin DateinameIndex:=Random(ListeVonDateinamen.count); TImage(Components[i]).Picture.LoadFromFile(ListeVonDateinamen[DateinameIndex]); ListeVonDateinamen.Delete(DateinameIndex); end; finally ListeVonDateinamen.Free; end; end; procedure TForm1.Label19Click(Sender: TObject); begin Image16.Visible := False; end; procedure TForm1.Label18Click(Sender: TObject); begin Image15.Visible := False; end; procedure TForm1.Label20Click(Sender: TObject); begin Image17.Visible := False; end; procedure TForm1.Label3Click(Sender: TObject); begin Image1.Visible := False; end; procedure TForm1.Label4Click(Sender: TObject); begin Image2.Visible := False; end; procedure TForm1.Label5Click(Sender: TObject); begin Image3.Visible := False; end; procedure TForm1.Label6Click(Sender: TObject); begin Image4.Visible := False; end; procedure TForm1.Label7Click(Sender: TObject); begin Image5.Visible := False; end; procedure TForm1.Label8Click(Sender: TObject); begin Image6.Visible := False; end; procedure TForm1.Label9Click(Sender: TObject); begin Image7.Visible := False; end; procedure TForm1.Label10Click(Sender: TObject); begin Image8.Visible := False; end; procedure TForm1.Label11Click(Sender: TObject); begin Image9.Visible := False; end; procedure TForm1.Label12Click(Sender: TObject); begin Image10.Visible := False; end; procedure TForm1.Label13Click(Sender: TObject); begin Image11.Visible := False; end; procedure TForm1.Label14Click(Sender: TObject); begin Image12.Visible := False; end; procedure TForm1.Label16Click(Sender: TObject); begin Image13.Visible := False; end; procedure TForm1.Label17Click(Sender: TObject); begin Image14.Visible := False; end; procedure TForm1.Label21Click(Sender: TObject); begin Image18.Visible := False; end; procedure TForm1.Label22Click(Sender: TObject); begin Image19.Visible := False; end; procedure TForm1.Label23Click(Sender: TObject); begin Image20.Visible := False; end; procedure TForm1.Label24Click(Sender: TObject); begin Image21.Visible := False; end; procedure TForm1.Label25Click(Sender: TObject); begin Image22.Visible := False; end; procedure TForm1.Label26Click(Sender: TObject); begin Image23.Visible := False; end; procedure TForm1.Label27Click(Sender: TObject); begin Image24.Visible := False; end; end. Das ist mein kompletter momentaner Text, nochmal etwas überarbeitet... Gibts hier eigentlich ne Spoiler-Funktion, dass die Antwort nicht so lang wird? Zitat:
Warum bin ich da nicht selbst drauf gekommen? |
AW: Spiel programmieren, Hilfe benötigt.
...*seufz*...
Delphi-Quellcode:
fertsch...
if Components[i] is TImage then
begin DateinameIndex:=Random(ListeVonDateinamen.count); TImage(Components[i]).Picture.LoadFromFile(ListeVonDateinamen[DateinameIndex]); TImage(Components[i]).Tag:= DateinameIndex; ListeVonDateinamen.Delete(DateinameIndex); end; Quatsch. Eben hab ich gesehen, daß du keine fortlaufenden Bilder hast. Damit kannst du den Index nicht verwenden. Du mußt dir was einfallen lassen, den "Wert" des Bildes zu ermitteln. |
AW: Spiel programmieren, Hilfe benötigt.
Da Befüllen der Stringliste kannst Du übrigens mit 2 Schleifen eleganter und weniger fehleranfällig machen.
@haentschman: mit dem Index kommst Du so aber nicht zum Ziel. |
AW: Spiel programmieren, Hilfe benötigt.
... sry, schwachsinniges Post von mir ... ich sollte erst denken, dann schreiben *gg*
|
AW: Spiel programmieren, Hilfe benötigt.
Gibt es unter Delphi 3 bereits TStrings.AddObject?
|
AW: Spiel programmieren, Hilfe benötigt.
Ich weiß nicht, wo ich das finde, momentan bin ich sowas von verwirrt, vom Lehrer und von allem.
Ich bin echt kurz vorm Aufgeben... |
AW: Spiel programmieren, Hilfe benötigt.
Schau doch einfach in die mitgelieferte Hilfe. Ggf. musst Du allerdings erst ein MS-Tool installieren, damit *.hlp-Dateien auch angezeigt werden.
|
AW: Spiel programmieren, Hilfe benötigt.
Zitat:
|
AW: Spiel programmieren, Hilfe benötigt.
Solange die Dateinamen mit der Zahl übereinstimmen hast Du Recht (zumindest, solange man bei TStringlist bleibt, was ich empfehlen würde, um nicht noch mehr Verwirrung zu stiften). Dafür muss man dann halt sorgen.
[edit] Also müsste das dann so funktionieren:
Delphi-Quellcode:
Nun sollte jede Zahl von -4 bis 4 (exklusive der 0) 4 mal als String in der Liste stehen. Den String selbst kann man nun für den Dateinamen verwenden, mittels Rückumwandlung in die Zahl dann für den Tag des TImage.[/edit]
const AnzahlProBild = 4; //ursprünglich waren das mal 3, aber was solls
for i := -4 to 4 do if i <> 0 then for j := 1 to AnzahlProBild do DateinamenListe.Add(IntToStr(i)); |
AW: Spiel programmieren, Hilfe benötigt.
Ich kann meine Gedanken momentan echt nicht mehr ordnen...
Ich weiß nicht, wo dieser Text jetzt in das Programm soll... |
AW: Spiel programmieren, Hilfe benötigt.
Mal alles zusammengefasst (aus dem Kopf, daher ungetestet):
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
const AnzahlProBild = 4; Dateipfad = 'H:\Informatik-Bilder\'; var ListeVonDateinamen:TStringlist; DateinameIndex:Integer; i, j:Integer; begin for i := 1 to 24 do TImage(FindComponent('Image' + IntToStr(i))).Visible := true; Randomize; //das gehört ins FormCreate oder so, jedenfalls nur einmal im Programm aufrufen ListeVonDateinamen:=TStringList.Create; try //Stringliste füllen for i := -4 to 4 do if i <> 0 then for j := 1 to AnzahlProBild do ListeVonDateinamen.Add(IntToStr(i)); //Images mit Bildern belegen for i:=0 to ComponentCount-1 do if Components[i] is TImage then begin DateinameIndex:=Random(ListeVonDateinamen.count); TImage(Components[i]).Picture.LoadFromFile(Dateipfad + ListeVonDateinamen[DateinameIndex] + '.bmp'); //Tag setzen TImage(Components[i]).Tag := StrToInt(ListeVonDateinamen[DateinameIndex]); ListeVonDateinamen.Delete(DateinameIndex); end; finally ListeVonDateinamen.Free; end; end; |
AW: Spiel programmieren, Hilfe benötigt.
Zitat:
|
AW: Spiel programmieren, Hilfe benötigt.
Ich hab' s doch nur kopiert ;)
|
AW: Spiel programmieren, Hilfe benötigt.
Zitat:
|
AW: Spiel programmieren, Hilfe benötigt.
Liste der Anhänge anzeigen (Anzahl: 1)
Ich lad einfach mal mein Programm hoch, weil... ach, weil ich einfach keine Ahnung mehr hab -.-
|
AW: Spiel programmieren, Hilfe benötigt.
Wenn Du die Bilder +1 bis +4 in 1 bis 4 umbenennst, sollte mein Code eigentlich funktionieren. Wenn Du Fragen dazu hast, frag einfach.
|
AW: Spiel programmieren, Hilfe benötigt.
Mein Lehrer meinte nämlich eben, ich soll die Bilder in +1 - +4 umbenennen -.-
Mannoman, ich bin verwirrt. Hab ihn jetzt eingefügt, vielen Dank, aber was bringt mir der neue Code für Vorteile? |
AW: Spiel programmieren, Hilfe benötigt.
Ach? Immer noch am Bilder verstehen?
*Pfeif* *Auf KISS-Prinzip verweis* *Weitergeh* Sherlock |
AW: Spiel programmieren, Hilfe benötigt.
Was ist das Kiss-Prinzip jetzt schon wieder?
|
AW: Spiel programmieren, Hilfe benötigt.
KISS-Prinzip @ Wikipedia.
Sonst kopieren Schüler doch auch alles aus der Wikipedia?! :roll: |
AW: Spiel programmieren, Hilfe benötigt.
Ich bin nicht so ein Wikipedia-Typi...
|
AW: Spiel programmieren, Hilfe benötigt.
Kann denn Dein Lehrer jetzt damit leben, oder sollst Du die Dateien immer noch umbenennen, damit es wieder komplizierter wird?
|
AW: Spiel programmieren, Hilfe benötigt.
Ich lass sie jetzt einfach so...
Ist mir egal was er sagt, er meinte nur, damit es einfacher wird wenn man das mit length ausliest... |
AW: Spiel programmieren, Hilfe benötigt.
Was will er denn jetzt mit Length? In der momentanen Lösung ist es doch so: je Zahl wird ein String, der den Wert dieser Zahl darstellt, 4 Mal in der Stringliste hinterlegt. Anschließend wird ein zufällig gewähltes Element dieser Liste ermittelt. Der String wird dann als Dateiname herangezogen, die entsprechende Grafik in das aktuelle TImage geladen, die ursprüngliche Zahl in der Tag-Eigenschaft hinterlegt und das Element dann aus der Liste gelöscht. Somit sollte sichergestellt sein, dass z.B. im 3. TImage die Grafik mit der -1 erscheint und -1 als Tag eingetragen ist. Du kannst also Tag analog zur dargestellten Grafik auswerten. Das ist zwar nicht die Königslösung, sollte aber m.E.n. recht zuverlässig funktionieren.
|
AW: Spiel programmieren, Hilfe benötigt.
Er kann mit Tag nicht umgehen -.-
Er weiß absolut nichts über Tag gewusst, bis ich ihm das eben mal gezeigt hab. |
AW: Spiel programmieren, Hilfe benötigt.
Ohne Worte :roll:
|
AW: Spiel programmieren, Hilfe benötigt.
So, jetzt kannst Du Dich um die Logik bzgl. der tags kümmern.....
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var ListeVonDateinamen:TStringlist; DateinameIndex:Integer; i,j:Integer; Path:String; begin begin Path := ExtractFilePath(paramstr(0)) + 'Informatik-Bilder\'; for i := 1 to 24 do TImage(FindComponent('Image' + IntToStr(i))).Visible := true; end; Randomize; ListeVonDateinamen:=TStringList.Create; try for I := 1 to 4 do begin For j := 1 to 4 do begin ListeVonDateinamen.Add(Path + '+' + IntToStr(i) + '.bmp'); ListeVonDateinamen.Add(Path + '-' + IntToStr(i) + '.bmp'); end; end; for i:=0 to Form1.ComponentCount-1 do if Components[i] is TImage then begin DateinameIndex:=Random(ListeVonDateinamen.count); TImage(Components[i]).Picture.LoadFromFile(ListeVonDateinamen[DateinameIndex]); TImage(Components[i]).Tag := StrToInt(ChangeFileExt(ExtractFileName(ListeVonDateinamen[DateinameIndex]),'')); ListeVonDateinamen.Delete(DateinameIndex); end; finally ListeVonDateinamen.Free; end; end; |
AW: Spiel programmieren, Hilfe benötigt.
Und wie bekomme ich die Bilder dann in Zahlen umgewandelt und ausgegeben?
|
AW: Spiel programmieren, Hilfe benötigt.
Steht doch jetzt im Tag ...
|
AW: Spiel programmieren, Hilfe benötigt.
Aber was muss ich dann machen um den Tag zum Ergebnis hinzuaddiert zu bekommen.
|
AW: Spiel programmieren, Hilfe benötigt.
Ich habe den Thread nicht komplett verfolgt und werde jetzt sicher nicht alles nachlesen. Etwas in der Art vermute ich:
Delphi-Quellcode:
Procedure TForm1.AllImagesOnClick(Sender:TObject);
begin FErgebnis := FErgebnis + TImage(Sender).Tag; end; |
AW: Spiel programmieren, Hilfe benötigt.
Kann man das dann auch noch in den unterschiedlichen Textboxen ausgeben, großer Meister?^^
|
AW: Spiel programmieren, Hilfe benötigt.
Natürlich, wo ist das Problem?
|
AW: Spiel programmieren, Hilfe benötigt.
Dass ich nicht weiß, wie der Befehl für Tags in Strings umwandeln ist...
|
AW: Spiel programmieren, Hilfe benötigt.
Mit IntToStr bekommst eine Zahl in Text, den Du ausgeben kannst,
|
AW: Spiel programmieren, Hilfe benötigt.
Zitat:
wie schon oft erwähnt... Grundlagentutorials durcharbeiten ! Jetzt und nicht irgendwann. ...weil wenn das so weiter geht, sollen wir dir beim Pinkeln dein Dingens noch halten... Ohne mich :shock: |
AW: Spiel programmieren, Hilfe benötigt.
:-)
|
AW: Spiel programmieren, Hilfe benötigt.
OK, ich glaube der Hinweis ist angekommen. Und ich denke, es gibt keinen Grund so drastisch und fast beleidigend zu werden.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:31 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