Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Schulprojekt -> Memory Spiel ... wie 'aufgedeckt lassen'? (https://www.delphipraxis.net/136385-schulprojekt-memory-spiel-wie-aufgedeckt-lassen.html)

Katho 29. Jun 2009 18:25

Re: Schulprojekt -> Memory Spiel
 
ja, das war schon klar ;)

habs jetzt so drinstehn:


Delphi-Quellcode:
randomize;

for lauf := 1 to 16 do
  begin
  zufall := random(15)+1;
    while karte[zufall] > 0 do
    zufall := random(15)+1;
  karte[zufall] := lauf;
end;
das problem das jetzt da ist, ist das er sich immer aufhängt wenn ich es starten will.
ich muss dann das programm immer zurücksetzen...
weis einer woran das liegen könnte? es sieht irgendwie so aus als ob er in ner endlosschleife wäre, aber das kann doch eigtl nicht sein, oder?

fui-tak 29. Jun 2009 18:38

Re: Schulprojekt -> Memory Spiel
 
Das Problem ist jetzt wohl, das er bei Random nicht so schnell an jede der 16 Zahlen rankommt. Und so entsteht eine sehr lange Schleife

Katho 29. Jun 2009 18:42

Re: Schulprojekt -> Memory Spiel
 
hab es gerade nochmal probiert, jetzt funktioniert es *lol*
es lag einfach daran, weil ich vorhin random(15)+1 hatte^^ das sind ja nur 15 zahlen, er brauchte aber 16 verschiedene xD

jaja...es sind immer die banalsten fehler^^



edit:

bis jetzt funktioniert schon alles
nur hab ich noch eine eher allgemeinere Frage:

Gibt es eine Anweisung, mit der man einen Button in den Hintergrund verschieben kann?
(bzw. ein Panel in den Vordergrund ;))

DeddyH 29. Jun 2009 20:00

Re: Schulprojekt -> Memory Spiel ... Button in Hintergrun
 
Schau mal in der Hilfe nach BringToFront bzw. SendToBack (oder ggf. einfach Visible umstellen).

Katho 29. Jun 2009 20:15

Re: Schulprojekt -> Memory Spiel ... Button in Hintergrun
 
Danke =) sowas wie sendtoback hab ich gesucht =) weil google hat mit 'in den hintergrund' nicht wirklich was richtiges gefunden xD

(visible hab ich schon anders verplant ;))


edit - fehler gelöst (man sollte halt auch das label dann aktualisieren xD)


Neue frage ;)

das ist jetzt der vollständige Code.
Hat irgendwer einen Vorschlag, wie es ginge, das bei den gefundenen Pärchen die buttons dann im Hintergrund sind?
Den 2. button der aufgedeckt ist kann ich leicht in den Hintergrund machen, aber wie finde ich den 1. heraus? wieder alle durchgehen?

Delphi-Quellcode:
var
  Form1: TForm1;
  Karte: Array[1..16] of byte;
  versuche, richtig: integer;
  buttonklick, zahl1, zahl2, summe: byte;

implementation

{$R *.DFM}


procedure TForm1.FormCreate(Sender: TObject);
var
lauf: byte;
zufall: byte;
begin

Label5.caption := '';
Label6.caption := '';
versuche := 0;
richtig := 0;
buttonklick := 0;

Button1.Visible := true;
Button2.Visible := true;
Button3.Visible := true;
Button4.Visible := true;
Button5.Visible := true;
Button6.Visible := true;
Button7.Visible := true;
Button8.Visible := true;
Button9.Visible := true;
Button10.Visible := true;
Button11.Visible := true;
Button12.Visible := true;
Button13.Visible := true;
Button14.Visible := true;
Button15.Visible := true;
Button16.Visible := true;

karte[1] := 0;
karte[2] := 0;
karte[3] := 0;
karte[4] := 0;
karte[5] := 0;
karte[6] := 0;
karte[7] := 0;
karte[8] := 0;
karte[9] := 0;
karte[10] := 0;
karte[11] := 0;
karte[12] := 0;
karte[13] := 0;
karte[14] := 0;
karte[15] := 0;
karte[16] := 0;

randomize;

for lauf := 1 to 16 do
  begin
  zufall := random(16)+1;
    while karte[zufall] > 0 do
    zufall := random(16)+1;
  karte[zufall] := lauf;
end;

panel1.caption := inttostr(karte[1]);
panel2.caption := inttostr(karte[2]);
panel3.caption := inttostr(karte[3]);
panel4.caption := inttostr(karte[4]);
panel5.caption := inttostr(karte[5]);
panel6.caption := inttostr(karte[6]);
panel7.caption := inttostr(karte[7]);
panel8.caption := inttostr(karte[8]);
panel9.caption := inttostr(karte[9]);
panel10.caption := inttostr(karte[10]);
panel11.caption := inttostr(karte[11]);
panel12.caption := inttostr(karte[12]);
panel13.caption := inttostr(karte[13]);
panel14.caption := inttostr(karte[14]);
panel15.caption := inttostr(karte[15]);
panel16.caption := inttostr(karte[16]);


end;

procedure TForm1.Button17Click(Sender: TObject);
begin

Form1.FormCreate(Sender);

end;



procedure TForm1.Button18Click(Sender: TObject);
begin

Button1.Visible := true;
Button2.Visible := true;
Button3.Visible := true;
Button4.Visible := true;
Button5.Visible := true;
Button6.Visible := true;
Button7.Visible := true;
Button8.Visible := true;
Button9.Visible := true;
Button10.Visible := true;
Button11.Visible := true;
Button12.Visible := true;
Button13.Visible := true;
Button14.Visible := true;
Button15.Visible := true;
Button16.Visible := true;

inc(versuche);
Label5.Caption := inttostr(versuche);

buttonklick := 0;
label9.visible := false;

end;

procedure TForm1.Button1Click(Sender: TObject);
begin
label9.visible := false;
if buttonklick = 0 then
  begin
  button1.visible := false;
  inc(buttonklick);
  zahl1 := karte[1];
  end
  else
    if buttonklick = 1 then
      begin
      button1.visible := false;
      inc(buttonklick);
      zahl2 := karte[1];
      summe := zahl1 + zahl2;
      if summe = 17 then
        inc(richtig);
        label6.caption := inttostr(richtig);
      end
      else
        label9.visible := true;

end;

procedure TForm1.Button2Click(Sender: TObject);
begin
label9.visible := false;
if buttonklick = 0 then
  begin
  button2.visible := false;
  inc(buttonklick);
  zahl1 := karte[2];
  end
  else
    if buttonklick = 1 then
      begin
      button2.visible := false;
      inc(buttonklick);
      zahl2 := karte[2];
      summe := zahl1 + zahl2;
      if summe = 17 then
        inc(richtig);
        label6.caption := inttostr(richtig);
      end
      else
       label9.visible := true;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
label9.visible := false;
if buttonklick = 0 then
  begin
  button3.visible := false;
  inc(buttonklick);
  zahl1 := karte[3];
  end
  else
    if buttonklick = 1 then
      begin
      button3.visible := false;
      inc(buttonklick);
      zahl2 := karte[3];
      summe := zahl1 + zahl2;
      if summe = 17 then
        inc(richtig);
        label6.caption := inttostr(richtig);
      end
      else
       label9.visible := true;
end;

procedure TForm1.Button4Click(Sender: TObject);
begin  
label9.visible := false;
if buttonklick = 0 then
  begin
  button4.visible := false;
  inc(buttonklick);
  zahl1 := karte[4];
  end
  else
    if buttonklick = 1 then
      begin
      button4.visible := false;
      inc(buttonklick);
      zahl2 := karte[4];
      summe := zahl1 + zahl2;
      if summe = 17 then
        inc(richtig);
        label6.caption := inttostr(richtig);
      end
      else
       label9.visible := true;
end;

procedure TForm1.Button5Click(Sender: TObject);
begin    
label9.visible := false;
if buttonklick = 0 then
  begin
  button5.visible := false;
  inc(buttonklick);
  zahl1 := karte[5];
  end
  else
    if buttonklick = 1 then
      begin
      button5.visible := false;
      inc(buttonklick);
      zahl2 := karte[5];
      summe := zahl1 + zahl2;
      if summe = 17 then
        inc(richtig);  
        label6.caption := inttostr(richtig);
      end
      else
       label9.visible := true;
end;

procedure TForm1.Button6Click(Sender: TObject);
begin  
label9.visible := false;
if buttonklick = 0 then
  begin
  button6.visible := false;
  inc(buttonklick);
  zahl1 := karte[6];
  end
  else
    if buttonklick = 1 then
      begin
      button6.visible := false;
      inc(buttonklick);
      zahl2 := karte[6];
      summe := zahl1 + zahl2;
      if summe = 17 then
        inc(richtig);  
        label6.caption := inttostr(richtig);
      end
      else
       label9.visible := true;
end;

procedure TForm1.Button7Click(Sender: TObject);
begin  
label9.visible := false;
if buttonklick = 0 then
  begin
  button7.visible := false;
  inc(buttonklick);
  zahl1 := karte[7];
  end
  else
    if buttonklick = 1 then
      begin
      button7.visible := false;
      inc(buttonklick);
      zahl2 := karte[7];
      summe := zahl1 + zahl2;
      if summe = 17 then
        inc(richtig);  
        label6.caption := inttostr(richtig);
      end
      else
       label9.visible := true;
end;

procedure TForm1.Button8Click(Sender: TObject);
begin    
label9.visible := false;
if buttonklick = 0 then
  begin
  button8.visible := false;
  inc(buttonklick);
  zahl1 := karte[8];
  end
  else
    if buttonklick = 1 then
      begin
      button8.visible := false;
      inc(buttonklick);
      zahl2 := karte[8];
      summe := zahl1 + zahl2;
      if summe = 17 then
        inc(richtig);
        label6.caption := inttostr(richtig);
      end
      else
       label9.visible := true;
end;

procedure TForm1.Button9Click(Sender: TObject);
begin  
label9.visible := false;
if buttonklick = 0 then
  begin
  button9.visible := false;
  inc(buttonklick);
  zahl1 := karte[9];
  end
  else
    if buttonklick = 1 then
      begin
      button9.visible := false;
      inc(buttonklick);
      zahl2 := karte[9];
      summe := zahl1 + zahl2;
      if summe = 17 then
        inc(richtig);
        label6.caption := inttostr(richtig);
      end
      else
       label9.visible := true;
end;

procedure TForm1.Button10Click(Sender: TObject);
begin  
label9.visible := false;
if buttonklick = 0 then
  begin
  button10.visible := false;
  inc(buttonklick);
  zahl1 := karte[10];
  end
  else
    if buttonklick = 1 then
      begin
      button10.visible := false;
      inc(buttonklick);
      zahl2 := karte[10];
      summe := zahl1 + zahl2;
      if summe = 17 then
        inc(richtig);  
        label6.caption := inttostr(richtig);
      end
      else
       label9.visible := true;
end;

procedure TForm1.Button11Click(Sender: TObject);
begin  
label9.visible := false;
if buttonklick = 0 then
  begin
  button11.visible := false;
  inc(buttonklick);
  zahl1 := karte[11];
  end
  else
    if buttonklick = 1 then
      begin
      button11.visible := false;
      inc(buttonklick);
      zahl2 := karte[11];
      summe := zahl1 + zahl2;
      if summe = 17 then
        inc(richtig);
        label6.caption := inttostr(richtig);
      end
      else
       label9.visible := true;
end;

procedure TForm1.Button12Click(Sender: TObject);
begin  
label9.visible := false;
if buttonklick = 0 then
  begin
  button12.visible := false;
  inc(buttonklick);
  zahl1 := karte[12];
  end
  else
    if buttonklick = 1 then
      begin
      button12.visible := false;
      inc(buttonklick);
      zahl2 := karte[12];
      summe := zahl1 + zahl2;
      if summe = 17 then
        inc(richtig);
        label6.caption := inttostr(richtig);
      end
      else
       label9.visible := true;
end;

procedure TForm1.Button13Click(Sender: TObject);
begin  
label9.visible := false;
if buttonklick = 0 then
  begin
  button13.visible := false;
  inc(buttonklick);
  zahl1 := karte[13];
  end
  else
    if buttonklick = 1 then
      begin
      button13.visible := false;
      inc(buttonklick);
      zahl2 := karte[13];
      summe := zahl1 + zahl2;
      if summe = 17 then
        inc(richtig);
        label6.caption := inttostr(richtig);
      end
      else
       label9.visible := true;
end;

procedure TForm1.Button14Click(Sender: TObject);
begin  
label9.visible := false;
if buttonklick = 0 then
  begin
  button14.visible := false;
  inc(buttonklick);
  zahl1 := karte[14];
  end
  else
    if buttonklick = 1 then
      begin
      button14.visible := false;
      inc(buttonklick);
      zahl2 := karte[14];
      summe := zahl1 + zahl2;
      if summe = 17 then
        inc(richtig);
        label6.caption := inttostr(richtig);
      end
      else
       label9.visible := true;
end;

procedure TForm1.Button15Click(Sender: TObject);
begin  
label9.visible := false;
if buttonklick = 0 then
  begin
  button15.visible := false;
  inc(buttonklick);
  zahl1 := karte[15];
  end
  else
    if buttonklick = 1 then
      begin
      button15.visible := false;
      inc(buttonklick);
      zahl2 := karte[15];
      summe := zahl1 + zahl2;
      if summe = 17 then
        inc(richtig);
        label6.caption := inttostr(richtig);
      end
      else
       label9.visible := true;
end;

procedure TForm1.Button16Click(Sender: TObject);
begin  
label9.visible := false;
if buttonklick = 0 then
  begin
  button16.visible := false;
  inc(buttonklick);
  zahl1 := karte[16];
  end
  else
    if buttonklick = 1 then
      begin
      button16.visible := false;
      inc(buttonklick);
      zahl2 := karte[16];
      summe := zahl1 + zahl2;
      if summe = 17 then
        inc(richtig);
        label6.caption := inttostr(richtig);
      end
      else
       label9.visible := true;
end;

end.

Luckie 29. Jun 2009 22:41

Re: Schulprojekt -> Memory Spiel ... wie 'aufgedeckt lass
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich würde sagen du packst das ganze falsch an. Ich habe auch mal so ein einfaches Memory-Spiel gemacht. Anzahl der Codezeilen: 286 Zeilen reine Programmlogik. Du bist jetzt schon bei über 500.

Desweiteren hast du da ziemlichen Spaghetticode, nutze die Möglichkeiten der OOP um das ganze etwas zu strukturieren. Es bietet sich hier an eine Klasse für das Spielfeld und eine Klasse für eine Karte zu entwerfen. UndWobei die Klasse für das Spielfeld als Container für die Karten dient und die Formularklasse als Schiedsrichter fungiert.

Ich habe das ganze mal angehangen. Das ganze ist Bestandteil meines Container-Klassen Tutorials: http://delphitutorials.michael-puff.de


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:15 Uhr.
Seite 2 von 2     12   

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-2025 by Thomas Breitkreuz