Autor Beitrag
mimi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: Mo 28.07.03 18:52 
Hallo,
ich will für mein memory spiel eine ki bauen und habe jetzt auch schon etwas code, aber es funktioniert leider nicht so wie ich es haben will seit gestern versuche ich es hinzubekekommen, der code:
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
function isDa(Typ:Integer):integer;
var
  i:Integer;
begin
  result:=-1;
  for i:=0 to High(KI.karten1) do begin
    if KI.Karten1[i].typ = Typ then begin
      result:=i;
      Exit;
    end;
  end;
end;

function isDa1(Typ:Integer):Integer;
var
  i:Integer;
begin
  result:=-1;
  for i:=0 to High(KI.karten) do begin
    if KI.Karten[i].typ = Typ then begin
      result:=i;
      Exit;
    end;
  end;
end;

function is_Karte(x,y:Integer):Boolean;
var
  i,index:Integer;
begin
  if KI.zugIndex+1 <= HIGH(KI.Karten) then inc(KI.zugIndex);
  
  if KI.zugIndex <= HIGH(KI.Karten) then begin
    index:=(MapX+1)*(MapY+1)-GetTex2(0);
    if (Index = 1and (ki.Karten[KI.zugIndex].typ = -1then  begin
      ki.Karten[KI.zugIndex].typ:=Map[x,y].Tex2;
      ki.Karten[KI.zugIndex].x:=x;
      ki.Karten[KI.zugIndex].y:=y;
      result:=True;
      Exit;      

    end;
    
    if (Index = 2and (ki.Karten1[KI.zugIndex].typ = -1then  begin
      ki.Karten1[KI.zugIndex].typ:=Map[x,y].Tex2;
      ki.Karten1[KI.zugIndex].x:=x;
      ki.Karten1[KI.zugIndex].y:=y;      
      result:=True;
      Exit;      

    end;
  end
  else
    KI.zugIndex:=0;

  result:=False;
end;

procedure KI_Ebaled(Enabled:Boolean);
begin
  ki.enabled:=Enabled;
end;

procedure CreateKI;
var
  i:Integer;
begin
  KI.ClearMemmoryTime:=30;
  KI.enabled:=True;
  KI.zugIndex:=0;
  KI.lastzugTyp:=0;
  KI.Zuege:=0;
  KI.Paare:=0;
  SetLength(ki.karten,20);
  SetLength(ki.karten1,20);
  for i:=0 to 20 do begin
    ki.Karten[i].typ:=-1;
    ki.Karten1[i].typ:=-1;    
  end;    
end;

procedure KI_Run;
var
  rX,rY,i:Integer;
  test:Boolean;
  pos:TPos;
begin
  test:=False;
  if KI.enabled = True then begin
    Randomize;


    for i:=0 to HIGH(KI.Karten) do begin
     if isDa(KI.Karten1[i].typ) > -1 then ShowMessage(IntToStr(isDa(KI.Karten[i].typ)));

      if (isDa(KI.Karten[i].typ) <> -1 ) and (KI.Karten[i].typ <> -1then begin
        pos:=KI.karten1[isDa(KI.Karten[i].typ)];
        rx:=pos.x;
        ry:=pos.Y;
        test:=True;
        break;
      end;
    end;

    if test = False then begin
      repeat
        rX:=Random(MapX+1);
        rY:=Random(MapY+1);
      until (is_Karte(rX,rY) = False) and (Map[rX,rY].Typ <> None);
    end;

    if (MapX+1)*(MapY+1)-GetTex2(0) < 2 then  begin
      KI.lastzugTyp:=Map[rX,rY].Tex2;
      Map[rX,rY].Tex:=Map[rX,rY].Tex2;
    end
    else begin 
      KI.Enabled:=False;
      inc(ki.Zuege);
      if GetTex2(Map[rX, rY].Tex) = 2 then  begin
        inc(ki.Paare);
        SetKarteVisible( ki.lastzugTyp );
      end;
    end;
  end

end;

die ki soll folgendes machen:
Karte ziehen( erster zug) speichern in KI.karte
dann soll sie wieder ziehen(zweiter zug) und soll es in ki.karte1 feshalten
zwei array deshalb, für jeden zug eines paares in einen eingen array da die ki sonst ja nicht weiß wo die zweite karte ist.
nun soll sie schauen ob ich ich zwei gleiche karten(typ) wenn ja wähle diese karten aus.
aber irgenwie geht das nicht so recht, wenn mir jemmand helfen will wäre ich dankbar:)
bitte mit code antworten danke....

_________________
MFG
Michael Springwald, "kann kein englisch...."
mimi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: Do 31.07.03 18:00 
keine ne idee wie ist fuinktinieren könnte ?

_________________
MFG
Michael Springwald, "kann kein englisch...."
mimi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: Sa 02.08.03 16:21 
irngewo muss da im code ein gedaken fehler sein, naja scheint keiner zu wissen wo.
ich habe ein neues memory angefangen und baue dort eine neue KI also kann man diesen trehd hier löschen....

_________________
MFG
Michael Springwald, "kann kein englisch...."
Keldorn
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 2266
Erhaltene Danke: 4

Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
BeitragVerfasst: Sa 02.08.03 20:49 
Hallo

wie soll denn einer wissen, wo der Fehler ist, wenn du nicht mal schreibst WAS genau nicht geht :roll: ,
der Code alleine nützt da auch nicht viel, wenn man nicht debuggen kann.

trotdem ein paar Anmerkungen, was mir auf den ersten blick aufgefallen ist:

Zitat:

SetLength(ki.karten,20);
SetLength(ki.karten1,20);
for i:=0 to 20 do begin
ki.Karten[i].typ:=-1;
ki.Karten1[i].typ:=-1;
end;

grober Schnitzer, wenn du setlenght(...,20) aufrufst, ist dein letzter eintrag 19, nicht 20. bei aktivierter bereichsprüfung bekommst du eine Exception

Zitat:

if KI.enabled = True then begin
Randomize;

randomize sollte man nur einmal aufrufen. (steht so auch in der Hilfe bzw. Suche mal nach Randomize und als Autor nach Luckie, der hat das kürzlich erklärt)

Mfg Frank

_________________
Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
mimi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: Sa 02.08.03 21:05 
ausblenden Delphi-Quelltext
1:
2:
if KI.enabled = True then begin 
Randomize

dabei habe ich mir was gedacht:)
der fehler ist folgender:
die ki sucht nicht in die zwei array ob sie nicht zwei gleiche karten schon hat.

_________________
MFG
Michael Springwald, "kann kein englisch...."
Keldorn
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 2266
Erhaltene Danke: 4

Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
BeitragVerfasst: Sa 02.08.03 21:29 
mimi hat folgendes geschrieben:

dabei habe ich mir was gedacht:)

nee, haste nicht. randomize reicht zu wenn du es einmal im Programm aufrufst. Erklärung: www.delphi-forum.de/...;highlight=randomize

mit dem Fehler: hmm also nur mit dem Codeschnippsel wirds schwierig, dazu müßte man den kompletten Code haben, wo man mal durchsteppen kann.

Mfg Frank

_________________
Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
mimi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: Sa 02.08.03 21:44 
soll ich dir mal das spiel senden ?
weil das sind eingentlich die wichtigtsten funktionen die ich gepostet habe.

zu randomins:
das rufe ich nur auf wenn die ki dran kommt das heißt drei mal danach kommt der spieler dran auch dreimal, aber dran kann es nicht liegen ist liegt warscheinlich an folgende if abfrage:
if (isDa(KI.Karten[i].typ) <> -1 ) and (KI.Karten[i].typ <> -1) then begin

_________________
MFG
Michael Springwald, "kann kein englisch...."
Keldorn
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 2266
Erhaltene Danke: 4

Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
BeitragVerfasst: Sa 02.08.03 21:51 
kannst du machen,
weiß aber nciht, ob ich gleich dazu komme und bitte packen (hab nur eine 56K Modem :cry: )

mail erhälst du per PN

Mfg Frank

_________________
Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
mimi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: Sa 02.08.03 21:59 
Zitat:

weiß aber nciht, ob ich gleich dazu komme und bitte packen (hab nur eine 56K Modem )

ich packe immer sachen die ich übers internet sende:)
sind 405 KB
als zip file...

_________________
MFG
Michael Springwald, "kann kein englisch...."