Delphi-PRAXiS
Seite 6 von 13   « Erste     456 78     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Memory-Spiel: Ideen (https://www.delphipraxis.net/187916-memory-spiel-ideen.html)

XardasLP 27. Jan 2016 22:26

AW: Memory-Spiel: Ideen
 
Zitat:

Schieb doch erstmal alle Gedanken an Klassen, Panels , Images etc. zur Seite und überlege Dir, was so ein Spiel ausmacht, was man dazu braucht und wie man das generell umsetzen könnte. Z.B. muss man ja 2 Karten irgendwie als zusammengehörig kennzeichnen. Erst nach dieser Grobskizzierung kann man dann ins Detail gehen.
Man kann es auch mit festen Positionen machen und den Zufall weglassen. Dann kann man das auch alles mit if then Anweisungen lösen. Was natürlich viel Quelltext ist, aber das beherrsche ich wenigstens :D

Zitat:

öHm. Was ist jetzt an deiner Unit2 prinzipielle anders als bei meinen Units/Klassen?
Mit Klassen arbeiten war noch nie so meins, vor allem weil unsere Beispiele halt so sind das man sie locker auch ohne eine einzige Klasse lösen kann.
Klar ist die Klasse von Vorteil wenn es dann um bei dem Beispiel evtl. 10 vorhandene Darlehen geht.

DeddyH 27. Jan 2016 22:35

AW: Memory-Spiel: Ideen
 
Was ich eigentlich meinte: unterteile Dein Projekt erst einmal in kleine Teilprobleme. Diese Teilprobleme unterteilst Du wieder in noch kleinere Teilprobleme. Das Ganze wiederholst Du so lange, bis eine weitere Unterteilung keinen Sinn mehr macht. Das alles aber nicht am Computer, sondern ganz antiquiert mit einem Blatt Papier und einem Stift. Diese zig Teilprobleme sollten nun so übersichtlich sein, dass sie sich relativ leicht in Code formulieren lassen. Ob Du das nun mit Klassen löst oder lieber vorwiegend prozedural, bleibt Dir überlassen.

XardasLP 27. Jan 2016 22:42

AW: Memory-Spiel: Ideen
 
Ja das ist schon mal eine gute Idee :)^^

Wir sollen alles machen was wir können. Also einfach da ich ja YT mache ist es kein Problem ein Intro zu gestalten. Oder das man bei der Form die Hintergrundfarben ändern kann. Schriftgrößen, Positionen, Hilfen usw.
solche Mini Verbesserungen machen dann höhere Punktzahlen aus.

Es gab einen der hat 3D Snake gemacht, also in Delphi eine 3D Engine eingebunden und so :D
Naja jedenfalls wusste der Lehrer auch nicht wie sowas geht und hat nur dumm in den Projekten rumgeklickt. Und dann erlaubt der sich am Ende noch Noten zu vergeben. Frechheit.!

XardasLP 30. Jan 2016 23:00

AW: Memory-Spiel: Ideen
 
Hi, also ich will das ja ohne Klassen machen...

Zwei gleiche Karten aufgedeckt geht schon mal.

Delphi-Quellcode:
procedure TFormSpiel.Image1Click(Sender: TObject);
begin
  Image1.Picture.LoadFromFile('\MEMORY\Memory Spiel_Version 2\Spielkarten\Spielkarte_1.jpg');
  B1_Gefunden := 1;
  showmessage('B1_Gefunden ist ' + inttostr(b1_Gefunden));
    if (B1_Gefunden = 1) and (B1_1_Gefunden = 1) then
      begin
      Image1.Picture.LoadFromFile('\MEMORY\Memory Spiel_Version 2\Spielkarten\Spielkarte_1A.jpg');
      Image1_1.Picture.LoadFromFile('\MEMORY\Memory Spiel_Version 2\Spielkarten\Spielkarte_1A.jpg');
      end;
end;
Delphi-Quellcode:
procedure TFormSpiel.Image1_1Click(Sender: TObject);
begin
  Image1_1.Picture.LoadFromFile('\MEMORY\Memory Spiel_Version 2\Spielkarten\Spielkarte_1.jpg');
  B1_1_Gefunden := 1;
    if (B1_1_Gefunden = 1) and (B1_Gefunden = 1) then
    begin
    Image1.Picture.LoadFromFile('\MEMORY\Memory Spiel_Version 2\Spielkarten\Spielkarte_1A.jpg');
    Image1_1.Picture.LoadFromFile('\MEMORY\Memory Spiel_Version 2\Spielkarten\Spielkarte_1A.jpg');
    end
end;
Sieht dann so aus:
https://gyazo.com/d537210bc75f975bf06e68f0d8d9c79a

_________________

Wenn zwei Karten nicht gleich sind erkennt er das auch.
Nun will ich aber, dass er dann trz. 2 Sekunden die Karten offen hält, damit man sich diese merken kann.

Delphi-Quellcode:
procedure TFormSpiel.Image2Click(Sender: TObject);
begin
  Image2.Picture.LoadFromFile('\MEMORY\Memory Spiel_Version 2\Spielkarten\Spielkarte_2.jpg');
  showmessage('B1_Gefunden ist ' + inttostr(B1_Gefunden));
showmessage('B1_1_Gefunden ist ' + inttostr(B1_1_Gefunden));
  showmessage(inttostr(b2_1_Gefunden));
    if (B1_Gefunden = 0) and (B1_1_Gefunden = 0) or (B2_1_Gefunden = 0) then
      begin
         Timer1.Enabled := True;
    {    showmessage('NEW B1_Gefunden ist ' + inttostr(B1_Gefunden));
        showmessage('NEW B1_1_Gefunden ist ' + inttostr(B1_1_Gefunden));
        B1_NichtGefunden := 1;
          showmessage('2x NEW B1_NichtGefunden ist ' + inttostr(B1_NichtGefunden));
        B1_1_NichtGefunden := 1;
        showmessage('2x NEW B1_NichtGefunden ist ' + inttostr(B1_1_NichtGefunden));
        if (B1_NichtGefunden = 1) and (B1_1_NichtGefunden = 1) then
         begin }
                Image1.Picture.LoadFromFile('\MEMORY\Memory Spiel_Version 2\Spielkarten\Rueckseite.jpg');
                Image1_1.Picture.LoadFromFile('\MEMORY\Memory Spiel_Version 2\Spielkarten\Rueckseite.jpg');
                Image2.Picture.LoadFromFile('\MEMORY\Memory Spiel_Version 2\Spielkarten\Rueckseite.jpg');
               end
               else
             begin
      //       showmessage(inttostr(B2_1_Gefunden));
             B2_Gefunden := 2;
     //      showmessage(inttostr(B2_Gefunden));
           if (B2_Gefunden = 2) and (B2_1_Gefunden = 2) then begin
            Image2.Picture.LoadFromFile('\MEMORY\Memory Spiel_Version 2\Spielkarten\Spielkarte_2A.jpg');
            Image2_1.Picture.LoadFromFile('\MEMORY\Memory Spiel_Version 2\Spielkarten\Spielkarte_2A.jpg');
            end
{  Image2.Picture.LoadFromFile('\MEMORY\Memory Spiel_Version 2\Spielkarten\Spielkarte_2.jpg');
  B2 := 2;
  B1 := 0;
 showmessage(inttostr(b1));
    if (B1 = 0) then
     begin Image1.Picture.LoadFromFile('\MEMORY\Memory Spiel_Version 2\Spielkarten\Rueckseite.jpg');
     Image1_1.Picture.LoadFromFile('\MEMORY\Memory Spiel_Version 2\Spielkarten\Rueckseite.jpg');
     end
    else
     begin
      showmessage('B2_1 ist ' + inttostr(b2_1));
      end }
   end;
   end;
Was stimmt am Timer nicht?
Delphi-Quellcode:
procedure TFormSpiel.Timer1Timer(Sender: TObject);
var i, a: integer;
begin
  if (Timer1.Enabled = True) then
    begin
      i := 0;
        for i := 1000 to 5000 do begin
          a := i + 1000;
        end;
          showmessage(inttostr(a));
          if (a = 5000) then
            begin
            Image2.Picture.LoadFromFile('\MEMORY\Memory Spiel_Version 2\Spielkarten\Rueckseite.jpg');
            end
            else
              Timer1.Enabled := False;
              if (Timer1.Enabled = False) then showmessage('Zu');
    end;
end;

Ich frage euch, weil ich sonst meist lange vor dem Quelltext hocke und mehr ausprobiere bis es geht. Versuche Fehler mit (showmessage)'s einzuschränken, aber denke mal das ihr ihn schnell findet. :)

Und das (https://gyazo.com/ad61c7687ad9dca6f631ea95eec56bda) muss dann auch noch mit einer Sache vermieden werden, entweder es ist auch eine Zeitspanne dazwischen oder die Img. Dateien zerstören sich nach 2 Sekunden. Mal sehen

frankyboy1974 31. Jan 2016 10:24

AW: Memory-Spiel: Ideen
 
hallo,

ich hab mal versucht deinen Timer-Code zu verstehen:

Delphi-Quellcode:
procedure TFormSpiel.Timer1Timer(Sender: TObject);
var i, a: integer;
begin
  if (Timer1.Enabled = True) then //Muss du abfragen ob der Timer.enabled ist? Wenn er nicht enabled wäre, würde das programm hier doch gar nicht hinkommen; Die Diskussion ob es besser wäre, zu schreiben : 'If Timer1.enabled then begin', spar ich mir hier
    begin
      i := 0; //Die Schleifenvariabel vorher auf null zu setzen, macht keinen Sinn!!!
        for i := 1000 to 5000 do begin //Du setzt i hier doch sowieso auf 1000
          a := i + 1000; // Ich zähle für i von 1000 bis 5000 und a ist gleich i+ 1000????Sinnvoll?
        end;
          showmessage(inttostr(a));//Der Wert wird hier wohl immer gleich 6000 sein
          if (a = 5000) then //Wenn a=5000 (also i=4000) dann wird die Rückseite geladen, da a aber nach der Schleife immer 6000 ist, wird die Rückseite wohl nicht geladen
            begin
            Image2.Picture.LoadFromFile('\MEMORY\Memory Spiel_Version 2\Spielkarten\Rueckseite.jpg');
            end
            else //Ansonsten wird der Timer disabled; da nur der Else-Block erreicht wird, wird der Timer disabled aber die Rückseite wurde nicht geladen
              Timer1.Enabled := False;
              if (Timer1.Enabled = False) then showmessage('Zu');
    end;
end;
Wenn du mich jetzt fragst, wie man's besser machen sollte:

Ich würde es komplett anders programmieren.

mfg

p80286 31. Jan 2016 11:14

AW: Memory-Spiel: Ideen
 
Zitat:

Zitat von XardasLP (Beitrag 1328825)
Was stimmt am Timer nicht?

Da ich nicht weiß, sondern nur vermute, was Du erreichen willst: das weiß ich nicht!

Ein Timer "feuert" wenn die voreingestellte Zeit abgelaufen ist. Für Dich könnte das heißen, das Dein Programm eine Karte aufdeckt, den Timer einstellt und dann nichts mehr tut. Wenn der Timer "feuert" wird die Karte wieder verdeckt und das Programm läuft weiter.

Übrigens solltest Du Dich vllt. einmal mit dem Programmablaufplan auseinander setzen. Der könnte recht hilfreich sein, zunächst einmal ein wenig Struktur in Dein Programm zu bringen.

Gruß
K-H

P.S.
Wenn der Timer "enabled" ist
Delphi-Quellcode:
 if Timer1.Enabled then
, dann feuert er nach der eingestellten Zeitspanne. Nach
Delphi-Quellcode:
 Timer1.Enabled:=false;
, tut sich da nichts mehr!

XardasLP 31. Jan 2016 17:18

AW: Memory-Spiel: Ideen
 
Zitat:

Wenn du mich jetzt fragst, wie man's besser machen sollte:

Ich würde es komplett anders programmieren.

mfg
Naja der Timer soll egal ob die Karten zueinander passen oder nicht.
Also Ob Karte 1 und Karte 1 oder Karte 1 und Karte 2 die Image-Datei, in der es aufgedeckt ist 2 Sekunden offen halten.

XardasLP 31. Jan 2016 17:19

AW: Memory-Spiel: Ideen
 
Zitat:

Übrigens solltest Du Dich vllt. einmal mit dem Programmablaufplan auseinander setzen. Der könnte recht hilfreich sein, zunächst einmal ein wenig Struktur in Dein Programm zu bringen.
Struktogramme, ne danke :D

Mavarik 4. Feb 2016 12:52

AW: Memory-Spiel: Ideen
 
Zitat:

Zitat von XardasLP (Beitrag 1328889)
Struktogramme, ne danke :D

Genau besser nix lernen und einfach mal mit Copy&Paste für jedes Image per Doppelklick eine Procedure erzeugen.

Und natürlich immer den coolen langen Pfad mit übernehmen.

Selbstverständlich den Dateinamen Fix vorgeben... Will man ja sowieso nicht ändern.

Arrays sind sowieso schlecht... Genau wie Klassen.

Wenn Du hier Fragen stellst, warum liest Du den nicht die Antworten und befolgst die Empfehlungen?

XardasLP 5. Feb 2016 00:09

AW: Memory-Spiel: Ideen
 
Zitat:

Genau besser nix lernen und einfach mal mit Copy&Paste für jedes Image per Doppelklick eine Procedure erzeugen.

Und natürlich immer den coolen langen Pfad mit übernehmen.

Selbstverständlich den Dateinamen Fix vorgeben... Will man ja sowieso nicht ändern.

Arrays sind sowieso schlecht... Genau wie Klassen.

Wenn Du hier Fragen stellst, warum liest Du den nicht die Antworten und befolgst die Empfehlungen?


Haben bisher nur einmal mit Arrays gearbeitet.
Für eine Person reicht es aus, wenn das Spielfeld sich nicht zufällig gestaltet sondern ich 10 Formen vorgebe von der eine zufällig aufgerufen wird.

Klassen sind nicht schlecht, nur ist es bei mir so das ich nur schlechte Punktzahlen durch diese Klassen bekommen habe, weil ich diese nicht verstehe umzusetzen :P

Meinen Timer habe ich z.B. überarbeitet. Ich passe mich auch nur an alle anderen im Jahrgang an, da zeichnet auch keiner ein Struktogramm. :wink:


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:25 Uhr.
Seite 6 von 13   « Erste     456 78     Letzte »    

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz