Delphi-PRAXiS
Seite 4 von 5   « Erste     234 5      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Spiel programmieren, Hilfe benötigt. (https://www.delphipraxis.net/157611-spiel-programmieren-hilfe-benoetigt.html)

haentschman 1. Feb 2011 07:48

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.

DeddyH 1. Feb 2011 07:50

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.

Connor Temple 1. Feb 2011 07:59

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:

Zitat von haentschman (Beitrag 1078697)
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.

Du meinst, ich soll die Bilder vor Programmstart den Zahlen zuweisen und dann die Zahlen mit den Bildern verteilen?
Warum bin ich da nicht selbst drauf gekommen?

haentschman 1. Feb 2011 08:06

AW: Spiel programmieren, Hilfe benötigt.
 
...*seufz*...

Delphi-Quellcode:
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;
fertsch...

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.

DeddyH 1. Feb 2011 08:09

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.

Deep-Sea 1. Feb 2011 08:09

AW: Spiel programmieren, Hilfe benötigt.
 
... sry, schwachsinniges Post von mir ... ich sollte erst denken, dann schreiben *gg*

DeddyH 1. Feb 2011 08:22

AW: Spiel programmieren, Hilfe benötigt.
 
Gibt es unter Delphi 3 bereits TStrings.AddObject?

Connor Temple 1. Feb 2011 08:24

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...

DeddyH 1. Feb 2011 08:26

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.

Deep-Sea 1. Feb 2011 08:26

AW: Spiel programmieren, Hilfe benötigt.
 
Zitat:

Zitat von DeddyH (Beitrag 1078707)
Gibt es unter Delphi 3 bereits TStrings.AddObject?

Und selbst wenn nicht: Es reicht, wenn man die Zahlen in der Liste speichert anstatt die kompletten Dateinamen. Dann kann man diese direkt dem Tag zuweisen und den Dateinamen kann man sich zusammensetzen.

DeddyH 1. Feb 2011 08:28

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:
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));
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]

Connor Temple 1. Feb 2011 08:49

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...

DeddyH 1. Feb 2011 08:59

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;

Deep-Sea 1. Feb 2011 09:03

AW: Spiel programmieren, Hilfe benötigt.
 
Zitat:

Zitat von DeddyH (Beitrag 1078720)
Delphi-Quellcode:
for i := 1 to 24 do
  TImage(FindComponent('Image' + IntToStr(i))).Visible := true;
[...]
Delphi-Quellcode:
for i:=0 to ComponentCount-1 do
  if Components[i] is TImage then

Wieso einmal mit FindComponent und einmal anders? Das könnte man doch auch gleich halten :-D

DeddyH 1. Feb 2011 09:05

AW: Spiel programmieren, Hilfe benötigt.
 
Ich hab' s doch nur kopiert ;)

Deep-Sea 1. Feb 2011 09:07

AW: Spiel programmieren, Hilfe benötigt.
 
Zitat:

Zitat von DeddyH (Beitrag 1078725)
Ich hab' s doch nur kopiert ;)

Ich weiß. War auch kein Vorwurf an dich. Aber eben allgemein als Tipp gemeint :-D

Connor Temple 1. Feb 2011 09:09

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 -.-

DeddyH 1. Feb 2011 09:13

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.

Connor Temple 1. Feb 2011 09:15

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?

Sherlock 1. Feb 2011 09:59

AW: Spiel programmieren, Hilfe benötigt.
 
Ach? Immer noch am Bilder verstehen?

*Pfeif*
*Auf KISS-Prinzip verweis*

*Weitergeh*

Sherlock

Connor Temple 1. Feb 2011 10:10

AW: Spiel programmieren, Hilfe benötigt.
 
Was ist das Kiss-Prinzip jetzt schon wieder?

Deep-Sea 1. Feb 2011 10:11

AW: Spiel programmieren, Hilfe benötigt.
 
KISS-Prinzip @ Wikipedia.
Sonst kopieren Schüler doch auch alles aus der Wikipedia?! :roll:

Connor Temple 1. Feb 2011 10:15

AW: Spiel programmieren, Hilfe benötigt.
 
Ich bin nicht so ein Wikipedia-Typi...

DeddyH 1. Feb 2011 10:16

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?

Connor Temple 1. Feb 2011 10:33

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...

DeddyH 1. Feb 2011 10:39

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.

Connor Temple 1. Feb 2011 10:57

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.

DeddyH 1. Feb 2011 10:59

AW: Spiel programmieren, Hilfe benötigt.
 
Ohne Worte :roll:

Bummi 1. Feb 2011 11:11

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;

Connor Temple 2. Feb 2011 11:05

AW: Spiel programmieren, Hilfe benötigt.
 
Und wie bekomme ich die Bilder dann in Zahlen umgewandelt und ausgegeben?

Bummi 2. Feb 2011 11:16

AW: Spiel programmieren, Hilfe benötigt.
 
Steht doch jetzt im Tag ...

Connor Temple 2. Feb 2011 11:18

AW: Spiel programmieren, Hilfe benötigt.
 
Aber was muss ich dann machen um den Tag zum Ergebnis hinzuaddiert zu bekommen.

Bummi 2. Feb 2011 11:24

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;

Connor Temple 2. Feb 2011 16:10

AW: Spiel programmieren, Hilfe benötigt.
 
Kann man das dann auch noch in den unterschiedlichen Textboxen ausgeben, großer Meister?^^

DeddyH 2. Feb 2011 16:38

AW: Spiel programmieren, Hilfe benötigt.
 
Natürlich, wo ist das Problem?

Connor Temple 2. Feb 2011 19:23

AW: Spiel programmieren, Hilfe benötigt.
 
Dass ich nicht weiß, wie der Befehl für Tags in Strings umwandeln ist...

Die Muhkuh 2. Feb 2011 19:32

AW: Spiel programmieren, Hilfe benötigt.
 
Mit IntToStr bekommst eine Zahl in Text, den Du ausgeben kannst,

haentschman 2. Feb 2011 19:52

AW: Spiel programmieren, Hilfe benötigt.
 
Zitat:

Dass ich nicht weiß, wie der Befehl für Tags in Strings umwandeln ist...
...aber die Hose zum Pinkeln kriegst du noch allein auf ? :roll:

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:

Wolfgang Mix 2. Feb 2011 20:38

AW: Spiel programmieren, Hilfe benötigt.
 
:-)

Luckie 2. Feb 2011 22:04

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.
Seite 4 von 5   « Erste     234 5      

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