Ich hab ein wenig rumprobiert aber es will noch net so recht klappen
Er lässt den Gegner nicht angreifen. Der Spieler greigt die ganze Zeit den Gegner an. Wenn ich in der Schleife nur die GegnerZieht Prozedur drinnen habe verliere ich, wenn ich beide verschiedene Prozeduren drinnen habe gewinne ich immer, egal wie ich es drehe.
Alle Variablen hab ich mal der Einfachheit halber Global gesetzt, bis auf die Flag und die Abbruchbedingung in der SChleife.
Delphi-Quellcode:
procedure SpielerZieht(var Ende : Boolean);
begin
GegnerLP := GegnerLP - SpielerAP; // Kampf
Rundenzahl := Rundenzahl + 1;
if GegnerLP <= 0 then
begin
Ende := True; // Abbruchbedingung auf True setzen
Gold := Gold + ((Stufe * 30) * GoldMultiplikator); // Goldbelohnung
SpielerLP := Lebenspunkte; // Lebenspunktevariable mit dem Wert der SpielerLP Variable überschreiben
Form1.Pnl_Lebenspunkte.Caption := IntToStr(Lebenspunkte); // LP-Anzeige aktualisieren
Aktionspunkte := Aktionspunkte - 20; // AP abziehen
Form1.Pnl_Aktionspunkte.Caption := IntToStr(Aktionspunkte); // AP-Anzeige aktualisieren
Form1.Memo_Textausgabe.Text := Form1.Memo_Textausgabe.Text + // Informationen über Kampf ausgeben
'Du hast den Kampf nach ' +
IntToStr(Rundenzahl) +
' Runden gewonnen. :) Nach dem Kampf hast Du noch ' +
IntToStr(SpielerLP) + ' Lebenspunkte und ' +
IntToStr(Aktionspunkte) + ' Aktionspunkte übrig.';
end;
end;
procedure GegnerZieht(var Ende : Boolean);
begin
SpielerLP := SpielerLP - GegnerAP; // Kampf
Rundenzahl := Rundenzahl +1;
if SpielerLP <= 0 then // Was passiert wenn SpielerLP <= Null sind
begin
Ende := True; // Abbruchbedingung auf True setzen
Lebenspunkte := 1; // LP auf 1 setzen
Form1.Pnl_Lebenspunkte.Caption := IntToStr(Lebenspunkte); // LP-Anzeige aktualisieren
Aktionspunkte := Aktionspunkte - 20; // AP abziehen
Form1.Pnl_Aktionspunkte.Caption := IntToStr(Aktionspunkte); // AP-ANzeige aktualisieren
Form1.Memo_Textausgabe.Text := Form1.Memo_Textausgabe.Text + // Informationen über Kampf ausgeben
'Du hast den Kampf nach ' +
IntToStr(Rundenzahl) +
' Runden verloren. :( Der Gegner hatte noch ' +
FloatToStr(GegnerLP) + ' Lebenspunkte übrig.';
end;
end;
procedure TForm1.BitBtn_AngriffClick(Sender: TObject);
var Ende, SpielerIstAmZug : Boolean;
begin
if Aktionspunkte > 20 then
begin
Ende := False; // Abbruchbedingung noch nicht gegeben
SpielerIstAmZug := True; // Flag auf True setzen
GegnerLP := 20*Stufe*GegnerLP_Multiplikator+20; // LP des Gegners berechnen
GegnerAP := random(Stufe*10)+ (Stufe*5); // Angriffspunkte des Gegners erechnen
SpielerLP := Lebenspunkte; // Variable für SpielerLP zuweisen
SpielerAP := random(Max_Schaden) + Min_Schaden; // Zufallswert zwischen max Schaden und min Schaden des Spielers
showmessage(FloatToStr(GegnerLP)); // Nur Information, ANzeige der GegnerLP
repeat // Schleife initiieren
if SpielerIstAmZug then // Wenn Flag auf True steht dann...
begin
GegnerZieht(Ende);
end
else // Wenn Flag nicht auf True steht dann...
begin
SpielerZieht(Ende);
end;
SpielerIstAmZug := not SpielerIstAmZug; // Flag auf False setzen
until Ende;
Rundenzahl := 0; // Rundenzahl auf 0 setzen
end;
end;