AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Memory Spiel -> Computer ziehen

Ein Thema von KleineAerztin · begonnen am 18. Jun 2009 · letzter Beitrag vom 25. Jun 2009
Antwort Antwort
Seite 1 von 2  1 2      
KleineAerztin

Registriert seit: 29. Dez 2008
17 Beiträge
 
#1

Memory Spiel -> Computer ziehen

  Alt 18. Jun 2009, 15:15
Hallo, wir haben jetze seit einem Jahr ungefähr Informatikunterrricht, aber leider etwas zu wenig, um wirklich mitzukommen. Wir haben jetzt eine letzte Aufgabe bekommen. Wir haben ein fertiges Programm bekommen, ein Memory-Spiel. Und wir sollen es jetzt so einstellen, dass wenn man alleine spielt, der Computer mitspielen soll. Ame besten wäre es sogar, wenn es verschiedene Schwierigkeitsgrade gibt. Und ich wollte nun einmal fragen, ob ihr mir vlt dabei helfen könntet... ?
MfG Mandy


Hier ncoh das Programm...
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ExtCtrls, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Image1: TImage;
    Image2: TImage;
    Image3: TImage;
    Image4: TImage;
    Weiter: TButton;
    Image5: TImage;
    Image6: TImage;
    Image7: TImage;
    Image8: TImage;
    Image9: TImage;
    Image10: TImage;
    Image11: TImage;
    Image12: TImage;
    Image13: TImage;
    Image14: TImage;
    Image15: TImage;
    Image16: TImage;
    Image17: TImage;
    Image18: TImage;
    Image19: TImage;
    Image20: TImage;
    Image21: TImage;
    Image22: TImage;
    Image23: TImage;
    Image24: TImage;
    Image25: TImage;
    Image26: TImage;
    Image27: TImage;
    Image28: TImage;
    Image29: TImage;
    Image30: TImage;
    Image31: TImage;
    Image32: TImage;
    Image33: TImage;
    Image34: TImage;
    Image35: TImage;
    Image36: TImage;
    Button5: TButton;
    Button6: TButton;
    Button8: TButton;
    Button9: TButton;
    Button10: TButton;
    Button11: TButton;
    Button12: TButton;
    Button13: TButton;
    Button14: TButton;
    Button15: TButton;
    Button16: TButton;
    Button17: TButton;
    Button18: TButton;
    Button19: TButton;
    Button20: TButton;
    Button21: TButton;
    Button22: TButton;
    Button23: TButton;
    Button24: TButton;
    Button25: TButton;
    Button26: TButton;
    Button27: TButton;
    Button28: TButton;
    Button29: TButton;
    Button30: TButton;
    Button31: TButton;
    Button32: TButton;
    Button33: TButton;
    Button34: TButton;
    Button35: TButton;
    Button36: TButton;
    Button7: TButton;
    Label5: TLabel;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Start: TButton;
    Label6: TLabel;
    ComboBox1: TComboBox;
    Label7: TLabel;
    Label8: TLabel;
    ComboBox2: TComboBox;
    Ende: TButton;
    procedure WeiterClick(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure Button6Click(Sender: TObject);
    procedure Button7Click(Sender: TObject);
    procedure Button8Click(Sender: TObject);
    procedure Button9Click(Sender: TObject);
    procedure Button10Click(Sender: TObject);
    procedure Button11Click(Sender: TObject);
    procedure Button12Click(Sender: TObject);
    procedure Button13Click(Sender: TObject);
    procedure Button14Click(Sender: TObject);
    procedure Button15Click(Sender: TObject);
    procedure Button16Click(Sender: TObject);
    procedure Button17Click(Sender: TObject);
    procedure Button18Click(Sender: TObject);
    procedure Button19Click(Sender: TObject);
    procedure Button20Click(Sender: TObject);
    procedure Button21Click(Sender: TObject);
    procedure Button22Click(Sender: TObject);
    procedure Button23Click(Sender: TObject);
    procedure Button30Click(Sender: TObject);
    procedure Button24Click(Sender: TObject);
    procedure Button25Click(Sender: TObject);
    procedure Button26Click(Sender: TObject);
    procedure Button27Click(Sender: TObject);
    procedure Button28Click(Sender: TObject);
    procedure Button29Click(Sender: TObject);
    procedure Button31Click(Sender: TObject);
    procedure Button32Click(Sender: TObject);
    procedure Button33Click(Sender: TObject);
    procedure Button34Click(Sender: TObject);
    procedure Button35Click(Sender: TObject);
    procedure Button36Click(Sender: TObject);
    procedure FormActivate(Sender: TObject);
    procedure StartClick(Sender: TObject);
    procedure ComboBox2Change(Sender: TObject);
    procedure EndeClick(Sender: TObject);
  private
    { Private-Deklarationen}
  public
    { Public-Deklarationen}
  end;

var
  Form1 : TForm1;
  karte1,karte2 : TImage;
  butt1,butt2 : TButton;
  bu : array[1..36] of TButton;
  bild : array[1..36] of integer;
  anzk : integer = 0;
  Spielerzahl : integer = 1;
  SpNr : integer = 1;
  Punkte : array[1..4] of integer;
  gefunden : integer = 0;
  compu : boolean = false;
  sgrad : integer = 1;

implementation

{$R *.DFM}


function imageunter(B : TButton) : TImage;
var i : integer;
     imag : TImage;
begin
  i:=1;
  repeat
    imag:=Form1.findcomponent('Image'+inttostr(i)) as TImage;
    i:=i+1;
  until (imag.top = B.top) and (imag.left = b.left);
  result:=imag;
end;


procedure mischen;
var helpt,helpl,i,z1,z2 : integer;
    k1,k2 : TImage;
begin
  randomize;
  for i:=1 to 100 do
  begin
    z1:=random(36)+1;
    z2:=random(36)+1;
    k1:=Form1.findcomponent('Image'+inttostr(z1)) as TImage;
    k2:=Form1.findcomponent('Image'+inttostr(z2)) as TImage;
    helpt:=k1.top; helpl:=k1.left;
    k1.top:=k2.top; k1.left:=k2.left;
    k2.top:=helpt; k2.left:=helpl;
  end;
end;


procedure spielstandaktualisieren;
var i : integer;
    E : TEdit;
begin
  for i:=1 to 4 do
  begin
    E:=Form1.findcomponent('Edit'+inttostr(i)) as TEdit;
    E.text:=inttostr(Punkte[i]);
  end;
end;


procedure neu;
var i : integer;
    image : TImage;
begin
  for i:= 1 to 36 do
  begin
    bu[i]:=Form1.findcomponent('Button'+inttostr(i)) as TButton;
    bu[i].enabled:=true;
    bu[i].visible:=true;
    bild[i]:=0;
    image:=Form1.findcomponent('Image'+inttostr(i)) as TImage;
    image.visible:=true;
  end;
  for i:=1 to 4 do Punkte[i]:=0;
  SpNr:=1;
  spielstandaktualisieren;
  gefunden:=0;
  mischen;
end;


procedure aufdecken(buttonx : TButton);
var i,j : integer;
     B : TButton;
begin
  j:=1;
  repeat
    B:=Form1.findcomponent('Button'+inttostr(j)) as TButton;
    j:=j+1;
  until (B.top = buttonx.top) and (B.left = buttonx.left);
  Bild[j-1]:=imageunter(buttonx).tag;
  i:=1;
  anzk:=anzk+1;
  buttonx.visible:=false;
  case anzk of
  1 : begin
        butt1:=buttonx;
        repeat
          karte1:=Form1.findcomponent('Image'+inttostr(i)) as TImage;
          i:=i+1;
        until (karte1.top = buttonx.top) and (karte1.left = buttonx.left);
      end;
  2 : begin
        butt2:=buttonx;
        repeat
          karte2:=Form1.findcomponent('Image'+inttostr(i)) as TImage;
          i:=i+1;
        until (karte2.top = buttonx.top) and (karte2.left = buttonx.left);
      end;
  end;
end;


procedure computerzug1;
begin
end;

procedure computerzug2;
begin
end;

procedure computerzug3;
begin
end;



procedure TForm1.StartClick(Sender: TObject);
var L1 : TLabel;
    E1 : TEdit;
    i : integer;
begin
  weiter.visible:=true;
  start.visible:=false;
  combobox1.visible:=false;
  label6.visible:=false;
  spielerzahl:=strtoint(combobox1.text);
  for i:=1 to 4 do Punkte[i]:=0;
  if spielerzahl = 1 then
  begin
    label2.caption:='Total Recall:';
    compu:=true;
    label8.visible:=true;
    combobox2.visible:=true;
    spielerzahl:=2;
  end;
  for i:=1 to spielerzahl do
  begin
    L1:=Form1.findcomponent('label'+inttostr(i)) as Tlabel;
    E1:=Form1.findcomponent('edit'+inttostr(i)) as TEdit;
    L1.visible:=true;
    E1.visible:=true;
  end;
end;

procedure TForm1.WeiterClick(Sender: TObject);
var lab : TLabel;
    B : TButton;
    i : integer;
begin
  if gefunden =18 then neu
  else
    begin
      if anzk=2 then
      begin
        if karte1.tag=karte2.tag then
        begin
          karte1.visible:=false;
          karte2.visible:=false;
          gefunden:=gefunden+1;
          Punkte[SpNr]:=Punkte[SpNr]+1;
          spielstandaktualisieren;
          anzk:=0;
          i:=1;
          repeat
            B:=Form1.findcomponent('Button'+inttostr(i)) as TButton;
            i:=i+1;
          until (B.top = karte1.top) and (B.left = karte1.left);
          bild[i-1]:=-1;
          i:=1;
          repeat
            B:=Form1.findcomponent('Button'+inttostr(i)) as TButton;
            i:=i+1;
          until (B.top = karte2.top) and (B.left = karte2.left);
          bild[i-1]:=-1;
        end
        else
        begin
          butt1.visible:=true;
          butt2.visible:=true;
          lab:=Form1.findcomponent('label'+inttostr(SpNr)) as TLabel;
          lab.color:=clbackground;
          SpNr:=(SpNr+1) mod (Spielerzahl+1); if SpNr = 0 then SpNr:=1;
          lab:=Form1.findcomponent('label'+inttostr(SpNr)) as TLabel;
          lab.color:=clred;
          anzk:=0;
        end;
        if compu and (SpNr = 2) and (gefunden<18) then
        begin
          case sgrad of
            1 : computerzug1;
            2 : computerzug2;
            3 : computerzug3;
          end;
        end;
      end;
    end;
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
  if anzk<2 then aufdecken(Button1);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  if anzk<2 then aufdecken(Button2);
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  if anzk<2 then aufdecken(Button3);
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
  if anzk<2 then aufdecken(Button4);
end;

procedure TForm1.Button5Click(Sender: TObject);
begin
  if anzk<2 then aufdecken(Button5);
end;

procedure TForm1.Button6Click(Sender: TObject);
begin
  if anzk<2 then aufdecken(Button6);
end;

procedure TForm1.Button7Click(Sender: TObject);
begin
  if anzk<2 then aufdecken(Button7);
end;

procedure TForm1.Button8Click(Sender: TObject);
begin
  if anzk<2 then aufdecken(Button8);
end;

procedure TForm1.Button9Click(Sender: TObject);
begin
  if anzk<2 then aufdecken(Button9);
end;

procedure TForm1.Button10Click(Sender: TObject);
begin
  if anzk<2 then aufdecken(Button10);
end;

procedure TForm1.Button11Click(Sender: TObject);
begin
  if anzk<2 then aufdecken(Button11);
end;

procedure TForm1.Button12Click(Sender: TObject);
begin
  if anzk<2 then aufdecken(Button12);
end;

procedure TForm1.Button13Click(Sender: TObject);
begin
  if anzk<2 then aufdecken(Button13);
end;

procedure TForm1.Button14Click(Sender: TObject);
begin
  if anzk<2 then aufdecken(Button14);
end;

procedure TForm1.Button15Click(Sender: TObject);
begin
  if anzk<2 then aufdecken(Button15);
end;

procedure TForm1.Button16Click(Sender: TObject);
begin
  if anzk<2 then aufdecken(Button16);
end;

procedure TForm1.Button17Click(Sender: TObject);
begin
  if anzk<2 then aufdecken(Button17);
end;

procedure TForm1.Button18Click(Sender: TObject);
begin
  if anzk<2 then aufdecken(Button18);
end;

procedure TForm1.Button19Click(Sender: TObject);
begin
  if anzk<2 then aufdecken(Button19);
end;

procedure TForm1.Button20Click(Sender: TObject);
begin
  if anzk<2 then aufdecken(Button20);
end;

procedure TForm1.Button21Click(Sender: TObject);
begin
  if anzk<2 then aufdecken(Button21);
end;

procedure TForm1.Button22Click(Sender: TObject);
begin
  if anzk<2 then aufdecken(Button22);
end;

procedure TForm1.Button23Click(Sender: TObject);
begin
  if anzk<2 then aufdecken(Button23);
end;

procedure TForm1.Button30Click(Sender: TObject);
begin
  if anzk<2 then aufdecken(Button30);
end;

procedure TForm1.Button24Click(Sender: TObject);
begin
  if anzk<2 then aufdecken(Button24);
end;

procedure TForm1.Button25Click(Sender: TObject);
begin
  if anzk<2 then aufdecken(Button25);
end;

procedure TForm1.Button26Click(Sender: TObject);
begin
  if anzk<2 then aufdecken(Button26);
end;

procedure TForm1.Button27Click(Sender: TObject);
begin
  if anzk<2 then aufdecken(Button27);
end;

procedure TForm1.Button28Click(Sender: TObject);
begin
if anzk<2 then aufdecken(Button28);
end;

procedure TForm1.Button29Click(Sender: TObject);
begin
  if anzk<2 then aufdecken(Button29);
end;

procedure TForm1.Button31Click(Sender: TObject);
begin
  if anzk<2 then aufdecken(Button31);
end;

procedure TForm1.Button32Click(Sender: TObject);
begin
  if anzk<2 then aufdecken(Button32);
end;

procedure TForm1.Button33Click(Sender: TObject);
begin
  if anzk<2 then aufdecken(Button33);
end;

procedure TForm1.Button34Click(Sender: TObject);
begin
  if anzk<2 then aufdecken(Button34);
end;

procedure TForm1.Button35Click(Sender: TObject);
begin
  if anzk<2 then aufdecken(Button35);
end;

procedure TForm1.Button36Click(Sender: TObject);
begin
  if anzk<2 then aufdecken(Button36);
end;

procedure TForm1.FormActivate(Sender: TObject);
begin
  neu;
end;

procedure TForm1.ComboBox2Change(Sender: TObject);
begin
  sgrad:=strtoint(combobox2.text);
end;

procedure TForm1.EndeClick(Sender: TObject);
begin
  Application.terminate;
end;

end.
[edit=Phoenix] Code in Delphi-Tags gepackt. Das nächste mal bitte selber machen. Mfg, Phoenix[/edit]
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.641 Beiträge
 
#2

Re: Memory Spiel -> Computer ziehen

  Alt 18. Jun 2009, 15:20
Zitat von KleineAerztin:
Und ich wollte nun einmal fragen, ob ihr mir vlt dabei helfen könntet... ?
Sicher. Gerne. Aber was ist Dein konkretes Problem bei dem wir Dir helfen können?
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
quendolineDD

Registriert seit: 19. Apr 2007
Ort: Dresden
781 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Memory Spiel -> Computer ziehen

  Alt 18. Jun 2009, 15:22
Das in der DP keine Hausaufgaben gemacht werden, dürfte dir klar sein. Aber gerne helfen wir dir bei spezifischen Fragen weiter. Zu allererst solltest du dir Gedanken machen, wie du logisch an die Sache rangehen willst. Um schließlich ein bisschen künstliche Intelligenz vorzuweisen, könntest du es so machen, das anfänglich zufällig gezogen wird. Die Position der Karte und das dahinter liegende Bild/Symbol wird gespeichert und bei Findung des Bildpartners erneut aufgerufen - so wie du auch spielen würdest.

Und bitte editier deinen Ausgangspost nocheinmal und setze den Quelltext in die dafür vorgesehenen Delphi-Code-Tags.
Lars S.
Wer nicht mit der Zeit geht, geht mit der Zeit.
  Mit Zitat antworten Zitat
Benutzerbild von Forlan
Forlan

Registriert seit: 17. Feb 2008
Ort: Herford
265 Beiträge
 
Delphi 2007 Architect
 
#4

Re: Memory Spiel -> Computer ziehen

  Alt 18. Jun 2009, 16:03
Man kann den Code außerdem noch um knapp die Hälfte verkürzen. Es ist alles imho sehr unübersichtlich geschrieben.
Z.B.:
- Die globalen Variablen
- Die Namen deiner Komponenten
- Die ganzen Prozeduren mit ButtonXY.Click (Versuchs mal mit FindComponent und einer Schleife an dieser Stelle )
Marcel
マルセル
www.youtube.com/beethoven1990
  Mit Zitat antworten Zitat
Benutzerbild von wicht
wicht

Registriert seit: 15. Jan 2006
Ort: Das schöne Enger nahe Bielefeld
809 Beiträge
 
Delphi XE Professional
 
#5

Re: Memory Spiel -> Computer ziehen

  Alt 18. Jun 2009, 16:11
Zitat:
Wir haben jetzt eine letzte Aufgabe bekommen. Wir haben ein fertiges Programm bekommen,...
Der hässliche Code ist wohl nicht die Schuld des OPs. Mehr von einer Lehrkraft, dann wohl
http://streamwriter.org

"I make hits. Not the public. I tell the DJ’s what to play. Understand?"
  Mit Zitat antworten Zitat
Benutzerbild von Forlan
Forlan

Registriert seit: 17. Feb 2008
Ort: Herford
265 Beiträge
 
Delphi 2007 Architect
 
#6

Re: Memory Spiel -> Computer ziehen

  Alt 18. Jun 2009, 16:13
Zitat von wicht:
Wir haben jetzt eine letzte Aufgabe bekommen. Wir haben ein [b]fertiges Programm bekommen,...[/b] Der hässliche Code ist wohl nicht die Schuld des OPs. Mehr von einer Lehrkraft, dann wohl
[OT] Dann sollte man diesen Lehrer verklagen [/OT]
Marcel
マルセル
www.youtube.com/beethoven1990
  Mit Zitat antworten Zitat
Benutzerbild von Aphton
Aphton

Registriert seit: 31. Mai 2009
1.198 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: Memory Spiel -> Computer ziehen

  Alt 18. Jun 2009, 16:56
Zitat von Forlan:
[OT] Dann sollte man diesen Lehrer verklagen [/OT]
[OT]Man sollte sie auf die Straße schmeißen; nur Rumpfuscherrei; PFUI ... [/OT]
das Erkennen beginnt, wenn der Erkennende vom zu Erkennenden Abstand nimmt
MfG
  Mit Zitat antworten Zitat
KleineAerztin

Registriert seit: 29. Dez 2008
17 Beiträge
 
#8

Re: Memory Spiel -> Computer ziehen

  Alt 19. Jun 2009, 11:35
Also, ich habe jetzt eine Möglichkeit gefunden, wie man den Computer ziehen lassen kann. Aber er kann sich ncoh nicht merken, wo welvche karete gelegen hat und er zieht auch Karten, die eigentlich schon gezogen wurden. Also welche, die schon aus dem Spiel entfernt wurden. Wisst ihr da vclt weiter ?



Die Przedur sieht so aus :


Delphi-Quellcode:
procedure computerzug1;
var X,y : integer;
ButtonK, ButtonL : TButton;
begin
x:=random(36)+1;
ButtonK := Form1.findcomponent('Button'+inttostr(x)) as TButton;
aufdecken(buttonk);
y:=random(36)+1;
ButtonL := Form1.findcomponent('Button'+inttostr ( y )) as TButton;
aufdecken(buttonL);
end;
[edit=mkinzler]Delphi-Tag eingefügt Mfg, mkinzler[/edit]
  Mit Zitat antworten Zitat
hadschi92

Registriert seit: 25. Okt 2006
83 Beiträge
 
Delphi XE3 Professional
 
#9

Re: Memory Spiel -> Computer ziehen

  Alt 19. Jun 2009, 14:32
Vielleicht kann man das mit einem zweidimensionalen Array lösen, in diesen kann der Computer dann auch immer reinschreiben, was bisher aufgedeckt wurde und dann kann er diesen Array jedesmal durchsuchen. Dort kannst du auch reinschreiben, was bereits aufgedeckt wurde, oder er kann es aus den Eigenschaften des Buttons herauslesen, ob an der Stelle etwas aufgedeckt wurde, oder man schreibt es in einen extra Array.
  Mit Zitat antworten Zitat
KleineAerztin

Registriert seit: 29. Dez 2008
17 Beiträge
 
#10

Re: Memory Spiel -> Computer ziehen

  Alt 25. Jun 2009, 08:11
Ok, das hab ich jetzt, aber das Spiel stürzt mitten im Spiel immer einfach ab...
Habt ihr vlt Verbesserungsvorschläge ?




Hier die Prozedur:

procedure computerzug1;
var i : integer;
button1 : integer;
button2 : integer;
begin
randomize;
repeat button1:=random(36)+1;
until bild[button1]=0;
repeat
button2:=random(36)+1
until
(button1 <> button2) and (bild[button2]=0);
if anzk<2 then aufdecken(bu[button1]);
if anzk<2 then aufdecken(bu[button2]);
end;
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:09 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