Delphi-PRAXiS
Seite 1 von 5  1 23     Letzte »    

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)

Connor Temple 18. Jan 2011 11:02

Spiel programmieren, Hilfe benötigt.
 
Ich versuche, ein Spiel gegen den Computer zu programmieren, allerdings treten gleich am Anfang ein paar Probleme auf:
Ich habe mir Bilder als BitMap erstellt, die später vom Programm zufällig auf 24 Labels verteilt werden sollen.
Wie lade ich die Bilder im Programmtext ins Programm?

DeddyH 18. Jan 2011 11:03

AW: Spiel programmieren, Hilfe benötigt.
 
Entweder im OnPaint direkt auf das Formular zeichnen oder 24 TImage-Komponenten auf dem Form verteilen und die Bilder dann dort hinein laden.

Connor Temple 18. Jan 2011 11:06

AW: Spiel programmieren, Hilfe benötigt.
 
Aber immer in zufälliger Verteilung, sonst würde ichs ja wissen.

DeddyH 18. Jan 2011 11:11

AW: Spiel programmieren, Hilfe benötigt.
 
Dann erstell Dir ein Array oder eine Liste und "mische" die Einträge. Wie man das macht, steht mehrfach im Forum. Anschließend gehst Du diese Liste durch und verteilst die Bilder auf die Images.

Connor Temple 21. Jan 2011 16:03

AW: Spiel programmieren, Hilfe benötigt.
 
Und wie lade ich die Bilder im Programmtext?
Da wusste sogar mein Lehrer nicht weiter >.<

lbccaleb 21. Jan 2011 16:06

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

Zitat von Connor Temple (Beitrag 1076410)
Und wie lade ich die Bilder im Programmtext?
Da wusste sogar mein Lehrer nicht weiter >.<

Dann sag mal deinem Lehrer, er solle lieber was anderes Unterrichten!

Memnarch 21. Jan 2011 16:23

AW: Spiel programmieren, Hilfe benötigt.
 
@Caleb: Du glaubst garnicht, wievielen Lehrern mand ass dan sagen müsste ;)

@Topic:
Code:
ImageName.Picture.LoadFromFile('Dateiname');
Alternativ machst du dir soviele TBitmaps wie du verschiedene Bilder hast, lädst dan jedes bild in ein anderes TBitmap und machst dann bei den Images nurnoch

Code:
ImageName.picture.assign(Bitmap);
MFG
Memnarch

p80286 21. Jan 2011 17:27

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

Zitat von Connor Temple (Beitrag 1076410)
Und wie lade ich die Bilder im Programmtext?
Da wusste sogar mein Lehrer nicht weiter >.<

Man muß nicht alles Wissen.
Man muß nur wissen wo es steht!

Gruß
K-H

WM_CLOSE 21. Jan 2011 20:31

AW: Spiel programmieren, Hilfe benötigt.
 
Was DeddyH meinte (so hab ich das vestanden):
Delphi-Quellcode:
var
  ListeVonDateinamen:TStringlist;
  DatenameIndex:Integer;
  i:Integer;
begin
  Randomize; //EIGENTLICH SOLLTEN WIR DAS IM FORMCREATE ODER SO MACHEN(nur einmal aufrufen)

  ListeVonDateinamen:=TStringList.Create;            //wir erzeugen eine Stringlist (, die wir unten wieder freigeben)
  try
    ListeVonDateinamen.add('C:\pfad\dateiname1.bmp'); //Die Stringlist muss jedes mal befüllt werden
    ListeVonDateinamen.add('C:\pfad\dateiname2.bmp'); //Oder aus einer Anderen kopiert
    ListeVonDateinamen.add('C:\pfad\dateiname3.bmp'); //weil Unten Einträge gelöscht werden (damit sie nicht 2 mal vorkommen)
    ListeVonDateinamen.add('C:\pfad\dateiname4.bmp'); //Übrigens: Dateinamen NIEMALS so hinschreiben, sondern am Besten einen Pfad relativ zu der .exe angeben (s.ParamStr(0))
   
    for i:=0 to Form1.ComponentCount-1 do            //hier laufen wir alle auf dem Formular platzierten Komponenten durch
    begin
      if Form1.Components[i] is TImage then          //und wenn wir ein TImage finden, dann
      begin
        DateinameIndex:=Random(ListeVonDateinamen.count)                  //machen wir erst mal eine Zufallszahl
        ImageName.Picture.LoadFromFile(ListeVonDateinamen[DatenameIndex]; //und laden das Bild mit dem Dateinamen, der in der Stringlist mit dem Index DatenameIndex liegt
        ListeVonDateinamen.Delete(DateinameIndex);                        //dann löschen wir den Eintrag, damit wir nicht 2 mal das gleiche Bild laden
      end;
    end;
  finally                                           //selbst wenn oben seit den try etwas schief läuft kommen wir hier rein
    FreeAndNil(ListeVonDateinamen);                 //und geben unsere stringlist wieder frei
  end;
end;
Wichtig dürfte sein, dass die Anzahl der Elemente in der Stringlist >= der Anzahl der TImages ist (- sonst ist die SL leer)


Ausserdem kopiere nicht einfach den code (den ich übrigens mangels Delphi nicht getestet habe), sondern sieh dir an was er macht und programmiere es dann selbst, sonst lernst du dabei gar nichts (spreche aus Erfahrung)

Connor Temple 25. Jan 2011 07:24

AW: Spiel programmieren, Hilfe benötigt.
 
Jetzt versteh ich gar nichts mehr -.-

Also, das Spiel, soll ein Spiel gegen den Computer werden, mit den Zahlen von -4 - -1 und den Zahlen 1 - 4 befüllt werden, diese Zahlen sind aber auf Bildern, die ich in Images laden will.
Außerdem soll das Spiel in einem 5x5 Feld gespielt werden und man startet immer in der Mitte, die Zahlen in dem Images sollen zufällig auf den restlichen 24 Plätzen verteilt werden.
Wenn man das Spiel dann startet darf man nur in seiner vertikalen Reihe eine Zahl auswählen und der Computer wählt dann in der horizontalen Reihe, von der man selbst die Zahl gewählt hat, die möglichst höchste Zahl, also das beste für sich.
Ziel des Spiels ist es die höhere Punktzahl als der PC zu bekommen.
Die Verteilung der Zahlen ist 3x von jeder Zahl.

Ich hab jetzt 24 Images gemacht, wo zufällig etwas reingeladen werden soll.
Dazu ein Neu-Button, der die Bilder dort zufällig reinladen soll.
Wenn ich das Spiel dann starte will ich auf eins der Images der vertikalen Reihe klicken können, nirgendwo sonst. Dieses Image soll dann verschwinden. Dann soll der PC die für sich beste Zahl wählen. Dort soll dann das X hingesetzt werden und man selbst darf wieder in der vertikalen Reihe wählen, nachdem man einen 2. Weiter-Button drückt und die Punkte zur Zwischenpunktzahl für sich und den PC zusammengezählt werden.
Das Spiel endet, wenn man selbst, oder der PC nicht mehr wählen kann.
Dann soll die Gesamtpunktzahl verglichen werden und eine Ausgabe erscheinen, wer gewonnen hat.

DeddyH 25. Jan 2011 07:25

AW: Spiel programmieren, Hilfe benötigt.
 
Öhmmm ja, und was ist jetzt die Frage?

Connor Temple 25. Jan 2011 07:28

AW: Spiel programmieren, Hilfe benötigt.
 
Wie ich das hinbekomme, weil das Programm schon meine Images nicht laden will.

DeddyH 25. Jan 2011 07:30

AW: Spiel programmieren, Hilfe benötigt.
 
Was heißt "nicht laden will"? Kommt eine Fehlermeldung? Wenn ja, welche?

Connor Temple 25. Jan 2011 07:32

AW: Spiel programmieren, Hilfe benötigt.
 
Okay, ich kenn den Befehl dafür nicht, und die hier funktionieren auch nicht.

DeddyH 25. Jan 2011 07:34

AW: Spiel programmieren, Hilfe benötigt.
 
Der Befehl wurde doch schon genannt:
Delphi-Quellcode:
Image.Picture.LoadFromFile(<kompletter Dateiname samt absolutem Pfad>);

Connor Temple 25. Jan 2011 07:38

AW: Spiel programmieren, Hilfe benötigt.
 
Der Befehl funktioniert bei mir aber komischerweise nicht.
Ich glaub ich bin zu doof für Delphi -.-

DeddyH 25. Jan 2011 07:40

AW: Spiel programmieren, Hilfe benötigt.
 
Zeig doch mal Deinen Code, meine Glaskugel ist gerade zum Polieren :glaskugel:

Connor Temple 25. Jan 2011 07:44

AW: Spiel programmieren, Hilfe benötigt.
 
Ich hab keinen Code, weil ich gar nicht weiß, wie ich starten soll :x
Ich hab auch versucht den Code von hier umzuschreiben, aber das funktioniert auch nicht, weil der meint, das Image kein definierter Bezeichner wäre.

DeddyH 25. Jan 2011 07:58

AW: Spiel programmieren, Hilfe benötigt.
 
Pack Dir ein TImage auf das Formular und drück dann STRG-F9. Dadurch wird die benötigte Unit automatisch eingebunden, sofern sie noch nicht vorhanden ist. Im Anschluss kannst Du den Code noch einmal versuchen, wobei Du statt "Image" dann natürlich den Namen des TImage verwenden musst.

Connor Temple 25. Jan 2011 08:02

AW: Spiel programmieren, Hilfe benötigt.
 
Das funktioniert auch nicht, da kommt derselbe Fehler.
Hier mal das Formular:
http://bildupload.sro.at/p/369593.html

DeddyH 25. Jan 2011 08:05

AW: Spiel programmieren, Hilfe benötigt.
 
Wie soll ich Dir helfen, wenn Du nicht mit dem Code herausrückst?

Connor Temple 25. Jan 2011 08:14

AW: Spiel programmieren, Hilfe benötigt.
 
Der code ist fürn Ar***
Zumindest so, wie ich ihn umgeschrieben habe.
Und irgendwie kann mir auch niemand helfen...
Hier ist der Code, den ich nicht selbst geschrieben habe, sondern nur verändert habe:
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var
  ListeVonDateinamen:TStringlist;
  DateinameIndex:Integer;
  i:Integer;
  Image : Integer;
begin
  Randomize;

  ListeVonDateinamen:=TStringList.Create;
    ListeVonDateinamen.add('H:\Mathematik-Informatik\Delphi\ClickForest\Informatik-Bilder\1.bmp');
    ListeVonDateinamen.add('H:\Mathematik-Informatik\Delphi\ClickForest\Informatik-Bilder\2.bmp');
    ListeVonDateinamen.add('H:\Mathematik-Informatik\Delphi\ClickForest\Informatik-Bilder\3.bmp');
    ListeVonDateinamen.add('H:\Mathematik-Informatik\Delphi\ClickForest\Informatik-Bilder\4.bmp');
    ListeVonDateinamen.add('H:\Mathematik-Informatik\Delphi\ClickForest\Informatik-Bilder\-1.bmp');
    ListeVonDateinamen.add('H:\Mathematik-Informatik\Delphi\ClickForest\Informatik-Bilder\-2.bmp');
    ListeVonDateinamen.add('H:\Mathematik-Informatik\Delphi\ClickForest\Informatik-Bilder\-3.bmp');
    ListeVonDateinamen.add('H:\Mathematik-Informatik\Delphi\ClickForest\Informatik-Bilder\-4.bmp');
    for i:=0 to Form1.ComponentCount-1 do
      if Form1.Components[i] is TImage then
      begin
        DateinameIndex:=Random(ListeVonDateinamen.count);
        Image.Picture.LoadFromFile(ListeVonDateinamen[DateinameIndex];
        ListeVonDateinamen.Delete(DateinameIndex);
      end;
    end;
  finally
    FreeAndNil(ListeVonDateinamen);
  end;
end;

end.

DeddyH 25. Jan 2011 08:17

AW: Spiel programmieren, Hilfe benötigt.
 
Wozu die lokale Image-Variable vom Typ integer? Du musst das Bild in das gerade ermittelte Image laden.
Delphi-Quellcode:
if Components[i] is TImage then
      begin
        DateinameIndex:=Random(ListeVonDateinamen.count);
        TImage(Components[i]).Picture.LoadFromFile(ListeVonDateinamen[DateinameIndex]);
        ListeVonDateinamen.Delete(DateinameIndex);

Connor Temple 25. Jan 2011 08:20

AW: Spiel programmieren, Hilfe benötigt.
 
Jetzt hat er bei dem Finally noch was zu meckern, dass er eine Deklaration erwartet, aber Finally findet.

DeddyH 25. Jan 2011 08:22

AW: Spiel programmieren, Hilfe benötigt.
 
Delphi-Quellcode:
ListeVonDateinamen:=TStringList.Create;
try //das hast Du unterschlagen bzw. nicht mitkopiert

Blup 25. Jan 2011 08:26

AW: Spiel programmieren, Hilfe benötigt.
 
Da fehlt auch noch ein begin:
Delphi-Quellcode:
for i:=0 to Form1.ComponentCount-1 do
begin

DeddyH 25. Jan 2011 08:30

AW: Spiel programmieren, Hilfe benötigt.
 
Wenn schon C&P, dann aber bitte vollständig.

Deep-Sea 25. Jan 2011 08:30

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

Zitat von Blup (Beitrag 1077110)
Da fehlt auch noch ein begin

Oder das end ist zu viel :-D Wie man's sieht ...

Connor Temple 25. Jan 2011 09:03

AW: Spiel programmieren, Hilfe benötigt.
 
Trotzdem hab ich jetzt noch einen undefinierten Bezeichner nach dem Finally, das FreeAndNil.

Deep-Sea 25. Jan 2011 09:06

AW: Spiel programmieren, Hilfe benötigt.
 
FreeAndNil ist in der Unit SysUtils definiert. Aber an dieser Stelle reicht auch ein einfaches .Free :wink:

DeddyH 25. Jan 2011 09:08

AW: Spiel programmieren, Hilfe benötigt.
 
Vielleicht sollte man die Grundlagentutorials einmal durcharbeiten.

Connor Temple 25. Jan 2011 09:20

AW: Spiel programmieren, Hilfe benötigt.
 
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var
  ListeVonDateinamen:TStringlist;
  DateinameIndex:Integer;
  i:Integer;
begin
  Randomize;

  ListeVonDateinamen:=TStringList.Create;
  try
    ListeVonDateinamen.add('H:\Informatik-Bilder\1.bmp');
    ListeVonDateinamen.add('H:\Informatik-Bilder\2.bmp');
    ListeVonDateinamen.add('H:\Informatik-Bilder\3.bmp');
    ListeVonDateinamen.add('H:\Informatik-Bilder\4.bmp');
    ListeVonDateinamen.add('H:\Informatik-Bilder\-1.bmp');
    ListeVonDateinamen.add('H:\Informatik-Bilder\-2.bmp');
    ListeVonDateinamen.add('H:\Informatik-Bilder\-3.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
    Free(ListeVonDateinamen);
  end;
  end;

end.
Jetzt hab ich zu viele Parameter bei dem Free.
Mit .Free hat es nicht geklappt.

DeddyH 25. Jan 2011 09:22

AW: Spiel programmieren, Hilfe benötigt.
 
Delphi-Referenz durchsuchenTObject.Free

Connor Temple 25. Jan 2011 09:28

AW: Spiel programmieren, Hilfe benötigt.
 
Delphi-Quellcode:
finally
    TObject.Free(ListeVonDateinamen);
  end;
So?
Dann sagt er mir, dass diese Form, des Methodenaufrufs nur für Klassenmodelle erlaubt sei.

hoda 25. Jan 2011 09:33

AW: Spiel programmieren, Hilfe benötigt.
 
Versuchs mal mit ListeVonDateinamen.Free;

DeddyH 25. Jan 2011 09:35

AW: Spiel programmieren, Hilfe benötigt.
 
:wall: Hast Du Dir mittlerweile die oben verlinkten Tutorials angesehen? Du sollst die Liste freigeben, welche die Free-Methode von TObject erbt.

Connor Temple 25. Jan 2011 09:43

AW: Spiel programmieren, Hilfe benötigt.
 
Die Tutorials muss ich mir mal in Ruhe angucken.
Neues Problem beim starten des Programms:
http://www.bild-upload.net/bild.php/...ehler5WFP4.jpg

Deep-Sea 25. Jan 2011 09:45

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

Zitat von Connor Temple (Beitrag 1077145)
Die Tutorials muss ich mir mal in Ruhe angucken.

Dann tu das auch!

Zum Problem: Du hast wahrscheinlich mehr Images als Einträge in der Liste :roll:

Connor Temple 25. Jan 2011 09:47

AW: Spiel programmieren, Hilfe benötigt.
 
Momentan hab ich aber keine Ruhe, da ich nur Freistunden habe.
Wie kann ich dieses Problem dann beheben?

Deep-Sea 25. Jan 2011 09:48

AW: Spiel programmieren, Hilfe benötigt.
 
Einige Images löschen oder mehr Einträge in die Liste hinzufügen?! ..........
(Und trotzdem am besten gleich in den Quellcode eine Prüfung einbauen.)


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:58 Uhr.
Seite 1 von 5  1 23     Letzte »    

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