Autor Beitrag
WormHole
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 145



BeitragVerfasst: So 28.08.05 12:02 
Hallo,

ein neues Problem was ich einfach nicht verstehe.

magieheilung ----> Radiobutton (Spieler 1 ---> er heilt mit Magie)
magieangriff2 ---> Radiobutton (Spieler 2 ---> er greift mit Magie an)
magieheilungangriff ----> procedure (lässt Spieler 1 sich heilen und Spieler 2 angreifen)

magieangriff ----> Radiobutton (Spieler 1 ---> er greift mit Magie an)
magieheilung2 ---> Radiobutton (Spieler 2 ---> er heilt mit Magie)
magieangriffheilung ----> procedure (lässt Spieler 1 angreifen und Spieler 2 sich heilen)

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
// Beide Magie?

  if magieheilung.Checked=true and magieangriff2.Checked=true then
    begin
      magieheilungangriff;
    end;
  if magieangriff.Checked=true and magieheilung2.Checked=true then
     begin
       magieangriffheilung;
     end;


Das Problem dabei ist, dass er immer magieangriffheilung ausführen lässt. Ich kann die Radiobutton beliebig verändern... Ich habe wirklich kein Plan warum. Hier nochmal die Magieangriffheilung procedure:

ausblenden 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:
procedure TKampfscript.magieangriffheilung;
begin
showmessage('angriffheilung .... Dialya macht schaden!');
ini_sp1:=random(20)+1;
ini_sp2:=random(20)+1;
// Logbuch Eintrag!
      Logbuch.Lines.Add('');
      Logbuch.Lines.Add('Runde '+inttostr(runde));
// Runde erhöhen!
      runde:=runde+1;
// Das eigentliche Zaubern!

           mana_sp1:=mana_sp1-manakosten_sp1;
           Leben_Sp2:=leben_sp2-schaden_sp1_zauber;
           Logbuch.Lines.Add(held1.Text+' schafft den Zauber und macht '+(Inttostr(schaden_sp1_zauber))+' Schaden!');
           gewonnen;
           werte_anzeigen;
           mana_sp2:=mana_sp2-manakosten_sp2;
           Leben_Sp2:=leben_sp2+schaden_sp2_zauber;
           Logbuch.Lines.Add(held2.Text+' schafft den Zauber und heilt '+(Inttostr(schaden_sp2_zauber))+' LP!');
           gewonnen;
           werte_anzeigen;
end;


Ich möchte jetzt bitte nicht hören. "Oh du programmierst aber komisch... blabla". Nur das Problem lösen bitte :P Magieheilungangriff sieht ungefähr genauso aus nur halt umgekehrt...

Danke greetz WormHole

EDIT: Ich merke grade, selbst wenn ich die Radiobutton GARNICHT ausgewählt habe. Keinen davon kommt die procedure.... ??? ICh rall garnichts...


Moderiert von user profile iconGausi: Topic aus Sonstiges verschoben am So 28.08.2005 um 13:26
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8554
Erhaltene Danke: 481

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: So 28.08.05 12:07 
Bin mir nicht sicher, aber evtl. ist die fehlende Klammerung in der if-Abfrage schuld. Probier mal so (das '=true' kann man sich ja sparen ;-))
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
if magieheilung.Checked and magieangriff2.Checked then   
    begin   
      magieheilungangriff;   
    end;   
  if magieangriff.Checked and magieheilung2.Checked then   
     begin   
       magieangriffheilung;   
     end;

_________________
We are, we were and will not be.
WormHole Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 145



BeitragVerfasst: So 28.08.05 12:17 
Ich seh den Unterschied zwischen deinem und meinem immer noch nicht aber es klappt ;)

Danke ^^
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8554
Erhaltene Danke: 481

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: So 28.08.05 12:25 
Guck mal in die Hilfe unter "Regeln für die Rangfolge von Operatoren"
"=" hat die niedrigste Priorität, "and" eine höhere. Daher wird dein Ausdruck
 if magieheilung.Checked=true and magieangriff2.Checked=true then so ausgewertet:
ausblenden Delphi-Quelltext
1:
 if magieheilung.Checked = (true and magieangriff2.Checked) = true then					

Alternativ zu meiner Lösung, wo nur ein Operator auftritt, geht auch das:
ausblenden Delphi-Quelltext
1:
 if (magieheilung.Checked=true) and (magieangriff2.Checked=true) then					


Und da das die Fehlerquelle war, kommt das nach CLX ;-)

_________________
We are, we were and will not be.
WormHole Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 145



BeitragVerfasst: So 28.08.05 13:53 
Okay, jetzt hab ichs :)

Ich muss immer wieder betonen was für ein geiles Forum das ist ^^
LigH
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 239

Win98SE, Win2000SP4
D7
BeitragVerfasst: So 28.08.05 19:24 
Dieses umständliche if Wahrheitswert = True ist sowieso eine verdammt blöde Anfänger-Angewohnheit: Ein Wahrheitswert ist schon wahr oder falsch, da braucht es nicht noch einen überflüssigen Vergleich!

Anstatt
if Wahrheitswert = Truebesser
ausblenden Delphi-Quelltext
1:
if Wahrheitswert					


Anstatt
if Wahrheitswert = Falsebesser
ausblenden Delphi-Quelltext
1:
if not Wahrheitswert					
WormHole Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 145



BeitragVerfasst: So 28.08.05 20:34 
Jo, dann gehöre ich zu den Anfängern die diese Anfängerfehler mache... Werd aber in Zukunft darauf achten!