Da ich öfters danach gefragt wurde, ist so nicht lauffähig und enthält unfertige änderungen, da ich das original nicht mehr habe .. wer sich auskennt kann jedoch alles wichtige extrahieren. Was es genau ist werden betreffende auch merken. Qualität des codes ist mies, weil war nur als erster test gedacht.
</p><div class="quote" style="margin:10px;">unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, OleCtrls, SHDocVw, Grids, xxx, ComCtrls;
const
C_X = -1;
C_Pir = 0;
C_Hai = 1;
C_Tai = 2;
C_Hac = 3;
C_Tsu = 4;
C_Ent = 5;
C_Atl = 6;
C_Qua = 7;
C_Bli = 8;
C_Ber = 9;
C_Hur =10;
C_Kit =11;
S_ShipNames : array[0..11] of string = (
'Piranha','Hai','Taifun','Hackboot','Tsunami','Enterprise ','Atlantis ','Qualle ','Blizzard ','Bermuda ','Hurricane ','Kitty Hawk');
S_ColNames : array[0..3] of string = (
'Anzahl','Verloren','Zerstört','Kampfunfähig');
A_Prio : array[0..11,0..11] of integer =
((C_Tai, C_Hur, C_Bli, C_Hai, C_Hac, C_Pir, C_Qua, C_Tsu, C_Ent, C_Kit, C_Ber, C_Atl),
(C_Hai, C_Hac, C_Tsu, C_Tai, C_Hur, C_Bli, C_Ent, C_Kit, C_Ber, C_Pir, C_Qua, C_Atl),
(C_Pir, C_Qua, C_Hai, C_Hac, C_Tai, C_Hur, C_Bli, C_Tsu, C_Ent, C_Kit, C_Ber, C_Atl),
(C_Pir, C_Hai, C_Tai, C_Hac, C_Tsu, C_Ent, C_Atl, C_Qua, C_Bli, C_Ber, C_Hur, C_Kit),
(C_Atl, C_Ent, C_Kit, C_Ber, C_Tsu, C_Tai, C_Hur, C_Bli, C_Hai, C_Hac, C_Pir, C_Qua),
(C_Tai, C_Hur, C_Bli, C_Hai, C_Hac, C_Tsu, C_Pir, C_Qua, C_Ent, C_Kit, C_Ber, C_Atl),
(C_Pir, C_Qua, C_Hai, C_Hac, C_Tai, C_Hur, C_Bli, C_Tsu, C_Ent, C_Kit, C_Ber, C_Atl),
(C_Pir, C_Hai, C_Hac, C_Tai, C_Hur, C_Tsu, C_Ent, C_Kit, C_Atl, C_X, C_X, C_X),
(C_Hur, C_Tai, C_Tsu, C_Hai, C_Hac, C_Pir, C_Atl, C_Kit, C_Ent, C_X, C_X, C_X),
(C_Atl, C_Kit, C_Ent, C_Tsu, C_Tai, C_Hur, C_Hai, C_Hac, C_Pir, C_X, C_X, C_X),
(C_Hai, C_Hac, C_Pir, C_Qua, C_Tai, C_Hur, C_Bli, C_Tsu, C_Ent, C_Kit, C_Ber, C_Atl),
(C_Ent, C_Tsu, C_Hur, C_Tai, C_Bli, C_Hai, C_Hac, C_Ber, C_Pir, C_Qua, C_Kit, C_Atl));
A_Tcb : array[0..11,0..11] of double =
((55, 72, 85, 72, 72, 22, 5, 55, 85, 22, 85, 22),
(22, 85, 55, 85, 52, 39, 5, 22, 55, 39, 55, 39),
(59, 78, 75, 78, 70, 65, 60, 59, 75, 65, 75, 65),
(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
(5, 22, 39, 22, 55, 72, 85, 5, 39, 72, 39, 72),
(39, 72, 85, 72, 55, 22, 5, 39, 85, 22, 85, 22),
(85, 72, 55, 72, 39, 22, 5, 85, 55, 22, 55, 22),
(52, 27, 4.8, 27, 1.5, 0.8, 0.12, 0, 0, 0, 4.8, 0.6),
(100, 75, 39.5, 75, 22.8, 10, 1.18, 0, 0, 0, 33.6, 8),
(80, 75, 61, 75, 35.2, 22, 11, 0, 0, 0, 48.8, 17),
(59, 78, 75, 78, 70, 65, 60, 59, 75, 65, 75, 65),
(39, 72, 85, 72, 65, 65, 5, 39, 85, 22, 85, 22));
A_Dam : array[0..11,0..11] of double =
((90, 80, 70, 80, 120, 100, 80, 90, 70, 100, 70, 100),
(100, 100, 90, 100, 140, 140, 120, 100, 90, 140, 90, 140),
(96, 86, 76, 86, 132, 112, 92, 96, 76, 112, 76, 112),
(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
(100, 100, 100, 100, 180, 160, 140, 100, 100, 160, 100, 160),
(100, 100, 92, 100, 164, 144, 124, 100, 92, 144, 92, 144),
(90, 80, 70, 80, 120, 100, 80, 90, 70, 100, 70, 100),
(100, 100, 100, 100, 100, 100, 100, 0, 0, 0, 100, 100),
(100, 100, 100, 100, 100, 100, 100, 0, 0, 0, 100, 100),
(100, 100, 100, 100, 100, 100, 100, 0, 0, 0, 100, 100),
(96, 86, 76, 86, 132, 112, 92, 96, 76, 112, 76, 112),
(100, 100, 92, 100, 164, 144, 124, 100, 92, 54, 92, 144));
//Aluminium, Stahl, Bauzeit, Feuerkraft, Kanonen, Lebenspunkte, Reisezeit, Reisekosten, Schussart
A_Data : array[0..11,0..8] of integer =
((1250, 0, 4, 2, 1, 3, 3, 3, 1),
(2000, 500, 8, 7, 1, 10, 4, 5, 2),
(6750, 2000, 9, 4, 6, 52, 5, 6, 2),
(2000, 750, 12, 0, 0, 12, 4, 7, 2),
(12000, 4000, 16, 25, 3, 140, 6, 12, 2),
(24000, 6000, 20, 15, 8, 310, 6, 16, 2),
(70000, 16000, 24, 2, 105, 616, 6, 28, 2),
(0, 1250, 4, 0, 1, 2, 3, 7, 0),
(2000, 8000, 12, 0, 3, 30, 5, 10, 0),
(14000, 12000, 20, 0, 4, 270, 6, 25, 0),
(10125, 3000, 12, 6, 4, 52, 5, 8, 1),
(36000, 9000, 20, 20, 6, 310, 6, 18, 1));
type
TFleet = array[0..11] of int64;
TSupp = array[0..3] of double;
TSupps = array[0..11] of TSupp;
TSide = record
Fleet : TFleet;
Supp : TSupps;
KSEmp : TFleet;
Emped : TFleet;
Killed : TFleet;
Died1st : TFleet;
DiedNorm : TFleet;
end;
TForm1 = class(TForm)
Edit5: TEdit;
Edit6: TEdit;
Edit7: TEdit;
Edit8: TEdit;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
ckDefferESA: TCheckBox;
Edit21: TEdit;
Edit22: TEdit;
Edit23: TEdit;
Edit24: TEdit;
Edit25: TEdit;
Edit26: TEdit;
Edit27: TEdit;
Edit28: TEdit;
Edit29: TEdit;
Edit30: TEdit;
Edit31: TEdit;
Edit32: TEdit;
AtterGrid: TStringGrid;
DefferGrid: TStringGrid;
Button1: TButton;
Edit33: TEdit;
Edit34: TEdit;
Edit35: TEdit;
Edit36: TEdit;
Edit37: TEdit;
Edit38: TEdit;
Edit39: TEdit;
Edit40: TEdit;
Edit41: TEdit;
Edit42: TEdit;
Edit43: TEdit;
Edit44: TEdit;
Label33: TLabel;
TabControl1: TTabControl;
Label21: TLabel;
Label22: TLabel;
Label23: TLabel;
Label24: TLabel;
Label25: TLabel;
Label26: TLabel;
Label27: TLabel;
Label28: TLabel;
Label29: TLabel;
Label30: TLabel;
Label31: TLabel;
Label32: TLabel;
AtterStats: TStringGrid;
DefferStats: TStringGrid;
Label35: TLabel;
Label34: TLabel;
Edit45: TEdit;
Edit46: TEdit;
Edit47: TEdit;
Edit48: TEdit;
Edit49: TEdit;
Edit50: TEdit;
Edit51: TEdit;
Edit52: TEdit;
Edit53: TEdit;
Edit54: TEdit;
Edit55: TEdit;
Edit56: TEdit;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
ckAtterESA: TCheckBox;
AtterNameEdit: TEdit;
Label36: TLabel;
ComboBox1: TComboBox;
Button2: TButton;
Button3: TButton;
Button4: TButton;
Button5: TButton;
CheckBox1: TCheckBox;
CheckBox2: TCheckBox;
CheckBox3: TCheckBox;
CheckBox4: TCheckBox;
CheckBox5: TCheckBox;
CheckBox6: TCheckBox;
CheckBox7: TCheckBox;
CheckBox8: TCheckBox;
PageControl1: TPageControl;
TabSheet5: TTabSheet;
TabSheet1: TTabSheet;
TabSheet2: TTabSheet;
TabSheet3: TTabSheet;
TabSheet4: TTabSheet;
TabSheet6: TTabSheet;
Label9: TLabel;
Label10: TLabel;
Label11: TLabel;
Label12: TLabel;
Label13: TLabel;
Label14: TLabel;
Label15: TLabel;
Label16: TLabel;
Label17: TLabel;
Label18: TLabel;
Label19: TLabel;
Label20: TLabel;
Edit9: TEdit;
Edit10: TEdit;
Edit11: TEdit;
Edit12: TEdit;
Edit13: TEdit;
Edit14: TEdit;
Edit15: TEdit;
Edit16: TEdit;
Edit17: TEdit;
Edit18: TEdit;
Edit19: TEdit;
Edit20: TEdit;
CheckBox9: TCheckBox;
ComboBox2: TComboBox;
Label37: TLabel;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
function GetFleetFromCtrls(tagRoot: integer): TFleet;
function GetSuppFromCtrl(tagRoot: integer): TSupp;
function ExpandSupp(supp: TSupp): TSupps;
function FleetSum(a,b : TFleet): TFleet;
procedure PrintFleet(fleet: TFleet; grid: TStringGrid; col: integer);
procedure CalcEmp(ship: integer; var Atter: TSide; var Deffer: TSide);
procedure CalcNorm(ship: integer; var Atter, Deffer: TSide; do1st: Boolean);
function MyFloor(x: double):int64;
function CountShips(fleet: TFleet): Int64;
function CountRess(fleet: TFleet): Int64;
procedure PrintStats(side: TSide; grid: TSTringGrid);
end;
var
Form1: TForm1;
implementation
uses
MSHTML, Math;
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
var
i : integer;
begin
for i := 0 to 11 do
AtterGrid.Cells[0,i+1] := S_ShipNames[i];
for i := 0 to 3 do
AtterGrid.Cells[i+1,0] := S_ColNames[i];
for i := 0 to 11 do
DefferGrid.Cells[0,i+1] := S_ShipNames[i];
for i := 0 to 3 do
DefferGrid.Cells[i+1,0] := S_ColNames[i];
end;
procedure TForm1.Button1Click(Sender: TObject);
var
Atter, Deffer : TSide;
i : integer;
begin
fillchar(Atter, sizeof(TSide), 0);
fillchar(Deffer, sizeof(TSide), 0);
Atter.Fleet := GetFleetFromCtrls(100);
Deffer.Fleet := GetFleetFromCtrls(200);
Atter.KSEmp := GetFleetFromCtrls(300);
Deffer.KSEmp := GetFleetFromCtrls(400);
PrintFleet(Atter.Fleet,AtterGrid,1);
PrintFleet(Deffer.Fleet,DefferGrid,1);
Atter.Supp := ExpandSupp(GetSuppFromCtrl(1000));
Deffer.Supp := ExpandSupp(GetSuppFromCtrl(2000));
for i := 0 to 11 do
begin
if A_Data[i,8] = 0 then
begin
CalcEmp(i,Atter,Deffer);
CalcEmp(i,Deffer,Atter);
end;
end;
Atter.Emped := FleetSum(Atter.Emped, Atter.KSEmp);
Deffer.Emped := FleetSum(Deffer.Emped, Deffer.KSEmp);
for i := 0 to 11 do
begin
if A_Data[i,8] = 1 then
begin
CalcNorm(i,Atter,Deffer, not ckDefferESA.Checked);
CalcNorm(i,Deffer,Atter, not ckAtterESA.Checked);
end;
end;
for i := 0 to 11 do
begin
if A_Data[i,8] = 2 then
begin
CalcNorm(i,Atter,Deffer, false);
CalcNorm(i,Deffer,Atter, false);
end;
end;
PrintFleet(FleetSum(Atter.Died1st,Atter.DiedNorm),AtterGrid,2);
PrintFleet(FleetSum(Deffer.Died1st,Deffer.DiedNorm),DefferGrid,2);
PrintFleet(Atter.Emped,AtterGrid,4);
PrintFleet(Deffer.Emped,DefferGrid,4);
PrintFleet(Atter.Killed,AtterGrid,3);
PrintFleet(Deffer.Killed,DefferGrid,3);
PrintStats(Atter,AtterStats);
PrintStats(Deffer,DefferStats);
end;
function TForm1.GetFleetFromCtrls(tagRoot: integer): TFleet;
var
i,j: integer;
begin
for i := 0 to 11 do
begin
Result[i] := 0;
for j := 0 to Self.ControlCount-1 do
if Controls[j] is TEdit then
begin
if Controls[j].Tag = tagroot + 1 + i then
begin
Result[i] := StrToIntDef(TEdit(Controls[j]).Text,0);
break;
end;
end;
for j := 0 to TabControl1.ControlCount-1 do
if TabControl1.Controls[j] is TEdit then
begin
if TabControl1.Controls[j].Tag = tagroot + 1 + i then
begin
Result[i] := StrToIntDef(TEdit(TabControl1.Controls[j]).Text,0);
break;
end;
end;
end;
end;
procedure TForm1.PrintFleet(fleet: TFleet; grid: TStringGrid;
col: integer);
var
i : integer;
begin
for i := 0 to 11 do
begin
grid.Cells[col,i+1] := FloatToBeautyStr(fleet[i], 0);
end;
end;
function TForm1.GetSuppFromCtrl(tagRoot: integer): TSupp;
var
i,j: integer;
begin
for i := 0 to 3 do
begin
Result[i] := 0;
for j := 0 to Self.ControlCount-1 do
if Controls[j] is TEdit then
begin
if Controls[j].Tag = tagroot + 1 + i then
begin
Result[i] := StrToFloatDef(TEdit(Controls[j]).Text,0.0) / 100;
break;
end;
end;
end;
end;
function TForm1.ExpandSupp(supp: TSupp): TSupps;
var
i: integer;
begin
for i := 0 to 11 do
begin
Result[i] := supp;
end;
end;
procedure TForm1.CalcEmp(ship: integer; var Atter: TSide; var Deffer: TSide);
var
t,target,shoots : integer;
targetcount : integer;
tcb : double;
a_Needed : integer;
begin
shoots := (Atter.Fleet[ship]- Atter.KSEmp[ship]) * A_Data[ship,4];
for t := 0 to 11 do
begin
if shoots > 0 then
begin
target := A_Prio[ship,t];
if target >= 0 then
begin
targetcount := Deffer.Fleet[target] - Deffer.Emped[target] - Deffer.KSEmp[target];
if targetcount > 0 then
begin
tcb := A_Tcb[Ship,Target] / 100;
tcb := tcb * (1+Atter.Supp[ship][2]) * (1-Deffer.Supp[target][3]);
if tcb > 1 then
tcb := 1;
a_Needed := Ceil(targetcount / tcb);
if a_Needed > shoots then
begin
Deffer.Emped[target] := Deffer.Emped[target] + MyFloor(shoots*tcb);
Atter.Killed[ship] := Atter.Killed[ship] + MyFloor(shoots*tcb);
shoots := 0;
end
else
begin
shoots := shoots - a_Needed;
Deffer.Emped[target] := Deffer.Emped[target] + targetcount;
Atter.Killed[ship] := Atter.Killed[ship] + targetcount;
end;
end;
end;
end;
end;
end;
procedure TForm1.CalcNorm(ship: integer; var Atter, Deffer: TSide; do1st: Boolean);
var
ships : integer;
shoots : double;
t,target : integer;
targetcount : integer;
tcb : double;
aNeeded : integer;
aEffi : double;
aHP, aDam : double;
begin
ships := Atter.Fleet[ship]-Atter.Emped[ship];
if not do1st then
ships := ships - Atter.Died1st[ship];
shoots := (ships) * A_Data[ship,4];
for t := 0 to 11 do
begin
if shoots > 0 then
begin
target := A_Prio[ship,t];
if target >= 0 then
begin
targetcount := Deffer.Fleet[target] - Deffer.Died1st[target] - Deffer.DiedNorm[target];
if targetcount > 0 then
begin
tcb := A_Tcb[Ship,Target] / 100;
tcb := tcb * (1+Atter.Supp[ship][2]);
if tcb > 1.0 then
tcb := 1.0;
aHP := A_Data[target,5]*(1+Deffer.Supp[target][0]);
aDam := A_Data[ship,3]*(1+Atter.Supp[ship][1])*(A_Dam[ship,target]/100);
aEffi := (aDam / aHP);
if aEffi > 1.0 then
aEffi := 1.0;
aEffi := aEffi * tcb;
aNeeded := Ceil(targetcount / aEffi);
if aNeeded > shoots then
begin
if do1st then
Deffer.Died1st[target] := Deffer.Died1st[target] + MyFloor(shoots*aEffi)
else
Deffer.DiedNorm[target] := Deffer.DiedNorm[target] + MyFloor(shoots*aEffi);
Atter.Killed[ship] := Atter.Killed[ship] + MyFloor(shoots*aEffi);
shoots := 0;
end
else
begin
shoots := shoots - aNeeded;
if do1st then
Deffer.Died1st[target] := Deffer.Died1st[target] + targetcount
else
Deffer.DiedNorm[target] := Deffer.DiedNorm[target] + targetcount;
Atter.Killed[ship] := Atter.Killed[ship] + targetcount;
end;
end;
end;
end;
end;
end;
function TForm1.MyFloor(x: double): int64;
begin
Result := Floor(x+pivot);
end;
function TForm1.FleetSum(a, b: TFleet): TFleet;
var
i : integer;
begin
for i := 0 to 11 do
Result[i] := a[i] + b[i];
end;
function TForm1.CountRess(fleet: TFleet): Int64;
var
i : integer;
begin
Result := 0;
for i := 0 to 11 do
begin
Result := Result + (fleet[i]*(A_Data[i,0] + A_Data[i,1]));
end;
end;
function TForm1.CountShips(fleet: TFleet): Int64;
var
i : integer;
begin
Result := 0;
for i := 0 to 11 do
Result := Result + fleet[i];
end;
procedure TForm1.PrintStats(side: TSide; grid: TSTringGrid);
begin
grid.Cells[0,1] := 'Schiffe:';
grid.Cells[0,2] := 'Punkte:';
grid.Cells[1,0] := 'Anwesend';
grid.Cells[2,0] := 'Verloren';
grid.Cells[1,1] := FloatToBeautyStr(CountShips(side.Fleet),0);
grid.Cells[1,2] := FloatToBeautyStr(CountRess(side.Fleet) div 10,0);
grid.Cells[2,1] := FloatToBeautyStr(CountShips(FleetSum(side.Died1st, side.DiedNorm)),0);
grid.Cells[2,2] := FloatToBeautyStr(CountRess(FleetSum(side.Died1st, side.DiedNorm)) div 10,0);
end;
end.
</div><p>