Temporary_spy_manager.adb
with game_globals; use game_globals;
with Text_Io; use Text_Io;
with Basic_Num_Io; use Basic_Num_Io;
with Sequential_Io;
with spelare1; with spelare2; with spelare3; with spelare4; with spelare5;
with spelare6; with spelare7; with spelare8; with spelare9; with spelare11;
with spelare12; with spelare13; with spelare15; with spelare16; with spelare17;
with spelare20; with spelare21; with spelare22; with spelare23; with spelare24;
with spelare25; with spelare26; with spelare27; with spelare28; with spelare29;
with spelare30; with spelare31; with spelare32; with spelare34; with spelare35;
with spelare36; with spelare40; with spelare41; with spelare42; with spelare43;
with spelare44; with spelare45; with spelare46; with spelare49; with spelare50;
with spelare51; with spelare52; with spelare53; with spelare55; with spelare57;
with spelare59; with spelare60; with spelare62; with spelare63; with spelare64;
with spelare65; with spelare68; with spelare69; with spelare71; with spelare72;
with spelare74; with spelare75; with spelare76; with spelare81; with spelare81;
with spelare47X;
procedure Temporary_Spy_Manager is
type Playernumber is range 1 .. 90;
type DoMatchesTable is array(1 .. 5000,1 .. 2) of Playernumber;
type MoveHistory is array (1 .. 999) of Game_Globals.Move;
DoMatches : DoMatchesTable;
ForceMethod : Integer;
NumMatches : Integer := 0;
-----------------------------------------------------------
procedure Initialize is
package FilePack is new Sequential_Io (Integer);
Handle : FilePack.File_Type;
Cnt : Integer := 1;
Tmp : Integer;
begin
FilePack.Open (Handle,FilePack.IN_FILE,"temp_spy_manager.conversation");
FilePack.Read(Handle,ForceMethod);
while not FilePack.End_Of_File(Handle) loop
FilePack.Read(Handle,Tmp);
DoMatches(Cnt,1) := PlayerNumber (Tmp);
FilePack.Read(Handle,Tmp);
DoMatches(Cnt,2) := PlayerNumber (Tmp);
Cnt := Cnt + 1;
end loop;
NumMatches := Cnt - 1;
FilePack.Close (Handle);
end Initialize;
-----------------------------------------------------------
procedure GetName (Text : out Game_Globals.Playernametype;Player : in PlayerNumber) is
begin
Text := " ";
case Player is
when 1 => Text(1..Spelare1.PlayerName'Last) := Spelare1.PlayerName;
when 2 => Text(1..Spelare2.PlayerName'Last) := Spelare2.PlayerName;
when 3 => Text(1..Spelare3.PlayerName'Last) := Spelare3.PlayerName;
when 4 => Text(1..Spelare4.PlayerName'Last) := Spelare4.PlayerName;
when 5 => Text(1..Spelare5.PlayerName'Last) := Spelare5.PlayerName;
when 6 => Text(1..Spelare6.PlayerName'Last) := Spelare6.PlayerName;
when 7 => Text(1..Spelare7.PlayerName'Last) := Spelare7.PlayerName;
when 8 => Text(1..Spelare8.PlayerName'Last) := Spelare8.PlayerName;
when 9 => Text(1..Spelare9.PlayerName'Last) := Spelare9.PlayerName;
when 11 => Text(1..Spelare11.PlayerName'Last) := Spelare11.PlayerName;
when 12 => Text(1..Spelare12.PlayerName'Last) := Spelare12.PlayerName;
when 13 => Text(1..Spelare13.PlayerName'Last) := Spelare13.PlayerName;
when 15 => Text(1..Spelare15.PlayerName'Last) := Spelare15.PlayerName;
when 16 => Text(1..Spelare16.PlayerName'Last) := Spelare16.PlayerName;
when 17 => Text(1..Spelare17.PlayerName'Last) := Spelare17.PlayerName;
when 20 => Text(1..Spelare20.PlayerName'Last) := Spelare20.PlayerName;
when 21 => Text(1..Spelare21.PlayerName'Last) := Spelare21.PlayerName;
when 22 => Text(1..Spelare22.PlayerName'Last) := Spelare22.PlayerName;
when 23 => Text(1..Spelare23.PlayerName'Last) := Spelare23.PlayerName;
when 24 => Text(1..Spelare24.PlayerName'Last) := Spelare24.PlayerName;
when 25 => Text(1..Spelare25.PlayerName'Last) := Spelare25.PlayerName;
when 26 => Text(1..Spelare26.PlayerName'Last) := Spelare26.PlayerName;
when 27 => Text(1..Spelare27.PlayerName'Last) := Spelare27.PlayerName;
when 28 => Text(1..Spelare28.PlayerName'Last) := Spelare28.PlayerName;
when 29 => Text(1..Spelare29.PlayerName'Last) := Spelare29.PlayerName;
when 30 => Text(1..Spelare30.PlayerName'Last) := Spelare30.PlayerName;
when 31 => Text(1..Spelare31.PlayerName'Last) := Spelare31.PlayerName;
when 32 => Text(1..Spelare32.PlayerName'Last) := Spelare32.PlayerName;
when 34 => Text(1..Spelare34.PlayerName'Last) := Spelare34.PlayerName;
when 35 => Text(1..Spelare35.PlayerName'Last) := Spelare35.PlayerName;
when 36 => Text(1..Spelare36.PlayerName'Last) := Spelare36.PlayerName;
when 40 => Text(1..Spelare40.PlayerName'Last) := Spelare40.PlayerName;
when 41 => Text(1..Spelare41.PlayerName'Last) := Spelare41.PlayerName;
when 42 => Text(1..Spelare42.PlayerName'Last) := Spelare42.PlayerName;
when 43 => Text(1..Spelare43.PlayerName'Last) := Spelare43.PlayerName;
when 44 => Text(1..Spelare44.PlayerName'Last) := Spelare44.PlayerName;
when 45 => Text(1..Spelare45.PlayerName'Last) := Spelare45.PlayerName;
when 46 => Text(1..Spelare46.PlayerName'Last) := Spelare46.PlayerName;
when 49 => Text(1..Spelare49.PlayerName'Last) := Spelare49.PlayerName;
when 50 => Text(1..Spelare50.PlayerName'Last) := Spelare50.PlayerName;
when 51 => Text(1..Spelare51.PlayerName'Last) := Spelare51.PlayerName;
when 52 => Text(1..Spelare52.PlayerName'Last) := Spelare52.PlayerName;
when 53 => Text(1..Spelare53.PlayerName'Last) := Spelare53.PlayerName;
when 55 => Text(1..Spelare55.PlayerName'Last) := Spelare55.PlayerName;
when 57 => Text(1..Spelare57.PlayerName'Last) := Spelare57.PlayerName;
when 59 => Text(1..Spelare59.PlayerName'Last) := Spelare59.PlayerName;
when 60 => Text(1..Spelare60.PlayerName'Last) := Spelare60.PlayerName;
when 62 => Text(1..Spelare62.PlayerName'Last) := Spelare62.PlayerName;
when 63 => Text(1..Spelare63.PlayerName'Last) := Spelare63.PlayerName;
when 64 => Text(1..Spelare64.PlayerName'Last) := Spelare64.PlayerName;
when 65 => Text(1..Spelare65.PlayerName'Last) := Spelare65.PlayerName;
when 68 => Text(1..Spelare68.PlayerName'Last) := Spelare68.PlayerName;
when 69 => Text(1..Spelare69.PlayerName'Last) := Spelare69.PlayerName;
when 71 => Text(1..Spelare71.PlayerName'Last) := Spelare71.PlayerName;
when 72 => Text(1..Spelare72.PlayerName'Last) := Spelare72.PlayerName;
when 74 => Text(1..Spelare74.PlayerName'Last) := Spelare74.PlayerName;
when 75 => Text(1..Spelare75.PlayerName'Last) := Spelare75.PlayerName;
when 76 => Text(1..Spelare76.PlayerName'Last) := Spelare76.PlayerName;
when 81 => Text(1..Spelare81.PlayerName'Last) := Spelare81.PlayerName;
when 47 => Text(1..Spelare47X.PlayerName'Last) := Spelare47X.PlayerName;
when others => NULL;
end case;
end GetName;
-----------------------------------------------------------
function CallPlayFunc (Player : PlayerNumber;
MoveNum : Integer;
OppName : Game_Globals.Playernametype;
Opplast : Game_Globals.Move;
OppScore, MyScore :Integer) return Game_Globals.Move is
TheMove : Game_Globals.Move;
begin
case Player is
when 1 => TheMove := Spelare1.Player1(MoveNum,OppName,Opplast,OppScore,MyScore);
when 2 => TheMove := Spelare2.Player2(MoveNum,OppName,Opplast,OppScore,MyScore);
when 3 => TheMove := Spelare3.Player3(MoveNum,OppName,Opplast,OppScore,MyScore);
when 4 => TheMove := Spelare4.Player4(MoveNum,OppName,Opplast,OppScore,MyScore);
when 5 => TheMove := Spelare5.Player5(MoveNum,OppName,Opplast,OppScore,MyScore);
when 6 => TheMove := Spelare6.Player6(MoveNum,OppName,Opplast,OppScore,MyScore);
when 7 => TheMove := Spelare7.Player7(MoveNum,OppName,Opplast,OppScore,MyScore);
when 8 => TheMove := Spelare8.Player8(MoveNum,OppName,Opplast,OppScore,MyScore);
when 9 => TheMove := Spelare9.Player9(MoveNum,OppName,Opplast,OppScore,MyScore);
when 11 => TheMove := Spelare11.Player11(MoveNum,OppName,Opplast,OppScore,MyScore);
when 12 => TheMove := Spelare12.Player12(MoveNum,OppName,Opplast,OppScore,MyScore);
when 13 => TheMove := Spelare13.Player13(MoveNum,OppName,Opplast,OppScore,MyScore);
when 15 => TheMove := Spelare15.Player15(MoveNum,OppName,Opplast,OppScore,MyScore);
when 16 => TheMove := Spelare16.Player16(MoveNum,OppName,Opplast,OppScore,MyScore);
when 17 => TheMove := Spelare17.Player17(MoveNum,OppName,Opplast,OppScore,MyScore);
when 20 => TheMove := Spelare20.Player20(MoveNum,OppName,Opplast,OppScore,MyScore);
when 21 => TheMove := Spelare21.Player21(MoveNum,OppName,Opplast,OppScore,MyScore);
when 22 => TheMove := Spelare22.Player22(MoveNum,OppName,Opplast,OppScore,MyScore);
when 23 => TheMove := Spelare23.Player23(MoveNum,OppName,Opplast,OppScore,MyScore);
when 24 => TheMove := Spelare24.Player24(MoveNum,OppName,Opplast,OppScore,MyScore);
when 25 => TheMove := Spelare25.Player25(MoveNum,OppName,Opplast,OppScore,MyScore);
when 26 => TheMove := Spelare26.Player26(MoveNum,OppName,Opplast,OppScore,MyScore);
when 27 => TheMove := Spelare27.Player27(MoveNum,OppName,Opplast,OppScore,MyScore);
when 28 => TheMove := Spelare28.Player28(MoveNum,OppName,Opplast,OppScore,MyScore);
when 29 => TheMove := Spelare29.Player29(MoveNum,OppName,Opplast,OppScore,MyScore);
when 30 => TheMove := Spelare30.Player30(MoveNum,OppName,Opplast,OppScore,MyScore);
when 31 => TheMove := Spelare31.Player31(MoveNum,OppName,Opplast,OppScore,MyScore);
when 32 => TheMove := Spelare32.Player32(MoveNum,OppName,Opplast,OppScore,MyScore);
when 34 => TheMove := Spelare34.Player34(MoveNum,OppName,Opplast,OppScore,MyScore);
when 35 => TheMove := Spelare35.Player35(MoveNum,OppName,Opplast,OppScore,MyScore);
when 36 => TheMove := Spelare36.Player36(MoveNum,OppName,Opplast,OppScore,MyScore);
when 40 => TheMove := Spelare40.Player40(MoveNum,OppName,Opplast,OppScore,MyScore);
when 41 => TheMove := Spelare41.Player41(MoveNum,OppName,Opplast,OppScore,MyScore);
when 42 => TheMove := Spelare42.Player42(MoveNum,OppName,Opplast,OppScore,MyScore);
when 43 => TheMove := Spelare43.Player43(MoveNum,OppName,Opplast,OppScore,MyScore);
when 44 => TheMove := Spelare44.Player44(MoveNum,OppName,Opplast,OppScore,MyScore);
when 45 => TheMove := Spelare45.Player45(MoveNum,OppName,Opplast,OppScore,MyScore);
when 46 => TheMove := Spelare46.Player46(MoveNum,OppName,Opplast,OppScore,MyScore);
when 49 => TheMove := Spelare49.Player49(MoveNum,OppName,Opplast,OppScore,MyScore);
when 50 => TheMove := Spelare50.Player50(MoveNum,OppName,Opplast,OppScore,MyScore);
when 51 => TheMove := Spelare51.Player51(MoveNum,OppName,Opplast,OppScore,MyScore);
when 52 => TheMove := Spelare52.Player52(MoveNum,OppName,Opplast,OppScore,MyScore);
when 53 => TheMove := Spelare53.Player53(MoveNum,OppName,Opplast,OppScore,MyScore);
when 55 => TheMove := Spelare55.Player55(MoveNum,OppName,Opplast,OppScore,MyScore);
when 57 => TheMove := Spelare57.Player57(MoveNum,OppName,Opplast,OppScore,MyScore);
when 59 => TheMove := Spelare59.Player59(MoveNum,OppName,Opplast,OppScore,MyScore);
when 60 => TheMove := Spelare60.Player60(MoveNum,OppName,Opplast,OppScore,MyScore);
when 62 => TheMove := Spelare62.Player62(MoveNum,OppName,Opplast,OppScore,MyScore);
when 63 => TheMove := Spelare63.Player63(MoveNum,OppName,Opplast,OppScore,MyScore);
when 64 => TheMove := Spelare64.Player64(MoveNum,OppName,Opplast,OppScore,MyScore);
when 65 => TheMove := Spelare65.Player65(MoveNum,OppName,Opplast,OppScore,MyScore);
when 68 => TheMove := Spelare68.Player68(MoveNum,OppName,Opplast,OppScore,MyScore);
when 69 => TheMove := Spelare69.Player69(MoveNum,OppName,Opplast,OppScore,MyScore);
when 71 => TheMove := Spelare71.Player71(MoveNum,OppName,Opplast,OppScore,MyScore);
when 72 => TheMove := Spelare72.Player72(MoveNum,OppName,Opplast,OppScore,MyScore);
when 74 => TheMove := Spelare74.Player74(MoveNum,OppName,Opplast,OppScore,MyScore);
when 75 => TheMove := Spelare75.Player75(MoveNum,OppName,Opplast,OppScore,MyScore);
when 76 => TheMove := Spelare76.Player76(MoveNum,OppName,Opplast,OppScore,MyScore);
when 81 => TheMove := Spelare81.Player81(MoveNum,OppName,Opplast,OppScore,MyScore);
when 47 => TheMove := Spelare47X.Player47(MoveNum,OppName,Opplast,OppScore,MyScore,ForceMethod);
when others => put_line ("Error in CPF...");return game_globals.defect;
end case;
if not (TheMove in Game_Globals.Move) then raise CONSTRAINT_ERROR; end if;
return TheMove;
exception
when CONSTRAINT_ERROR =>
Put ("--==--==--==--==--==--");
Put (Integer (Player),4);
Put (" ");
raise;
when PROGRAM_ERROR =>
Put ("--==--==--==--==--==--");
Put (Integer (Player),4);
Put (" ");
raise;
end CallPlayFunc;
-----------------------------------------------------------
procedure PlayOneGame (Player1, Player2 : PlayerNumber; Points1, Points2 : in out Integer; Points1Part, Points2Part : in out Integer) is
LastMove1, LastMove2 : Game_Globals.Move;
Move1, Move2 : Game_Globals.Move;
Name1 : Game_Globals.Playernametype;
Name2 : Game_Globals.Playernametype;
Failer : PlayerNumber;
begin
GetName (Name1,Player1);
GetName (Name2,Player2);
Points1 := 0;
Points2 := 0;
Points1Part := 0;
Points2Part := 0;
for Cnt in 1 .. 100 -- Game_Globals.Totalnofmoves
loop
Failer := Player1;
Move1 := CallplayFunc (Player1,Cnt,Name2,LastMove2,Points2,Points1);
Failer := Player2;
Move2 := CallplayFunc (Player2,Cnt,Name1,LastMove1,Points1,Points2);
Points1 := Points1 + Game_Globals.Payoffs(Move1,Move2).player1;
Points2 := Points2 + Game_Globals.Payoffs(Move1,Move2).player2;
if Cnt <= 20 then
Points1Part := Points1Part + Game_Globals.Payoffs(Move1,Move2).player1;
Points2Part := Points2Part + Game_Globals.Payoffs(Move1,Move2).player2;
end if;
LastMove1 := Move1;
LastMove2 := Move2;
end loop;
exception
when CONSTRAINT_ERROR =>
Put ("--==--==--==--==--==--");
Put (Integer (Failer),4);
Put (" ");
raise;
when PROGRAM_ERROR =>
Put ("--==--==--==--==--==--");
Put (Integer (Failer),4);
Put (" ");
raise;
end PlayOneGame;
-----------------------------------------------------------
procedure PlayOneGameFull (Player1, Player2 : PlayerNumber; P1 : in out Integer;Points1, Points2 : in out Integer; Points1Part, Points2Part : in out Integer;MHist : in out MoveHistory) is
LastMove1, LastMove2 : Game_Globals.Move;
Move1, Move2 : Game_Globals.Move;
Name1 : Game_Globals.Playernametype;
Name2 : Game_Globals.Playernametype;
P2 : Integer;
Failer : PlayerNumber;
begin
GetName (Name1,Player1);
GetName (Name2,Player2);
Points1 := 0;
Points2 := 0;
P1 := 0;
P2 := 0;
Points1Part := 0;
Points2Part := 0;
for Cnt in 1 .. 999 -- Game_Globals.Totalnofmoves
loop
Failer := Player1;
if Player1 /= 47 then
Move1 := CallplayFunc (Player1,Cnt,Name2,LastMove2,P2,P1);
else
Move1 := MHist(Cnt);
end if;
Failer := Player2;
Move2 := CallplayFunc (Player2,Cnt,Name1,LastMove1,P1,P2);
if Player1 /= 47 then MHist(Cnt) := Move1; end if;
P1 := P1 + Game_Globals.Payoffs(Move1,Move2).player1;
P2 := P2 + Game_Globals.Payoffs(Move1,Move2).player2;
if Cnt <= 100 then
Points1 := Points1 + Game_Globals.Payoffs(Move1,Move2).player1;
Points2 := Points2 + Game_Globals.Payoffs(Move1,Move2).player2;
end if;
if Cnt <= 20 then
Points1Part := Points1Part + Game_Globals.Payoffs(Move1,Move2).player1;
Points2Part := Points2Part + Game_Globals.Payoffs(Move1,Move2).player2;
end if;
LastMove1 := Move1;
LastMove2 := Move2;
end loop;
exception
when CONSTRAINT_ERROR =>
Put ("--==--==--==--==--==--");
Put (Integer (Failer),4);
Put (" ");
raise;
when PROGRAM_ERROR =>
Put ("--==--==--==--==--==--");
Put (Integer (Failer),4);
Put (" ");
raise;
end PlayOneGameFull;
-----------------------------------------------------------
procedure PlayOneGameOutput (Player1, Player2 : PlayerNumber; Delimiter : Character) is
Points1, Points2 : Integer;
Points1Part, Points2Part : Integer;
begin
Put (Integer (Player1),2);
Put (Integer (Player2),3);
PlayOneGame (Player1,Player2,Points1,Points2,Points1Part,Points2Part);
Put ("->+.");
Put (Integer (Player1),2);
Put (Integer (Player2),3);
if Player2 = 47 then
Put(ForceMethod,3);
else
Put(Integer(0),3);
end if;
Put (" ");
Put (" =");
Put (Delimiter);
Put (" ");
Put(Points1,5);Put(" ");Put(Points2,5);Put(" ");
Put(Points1Part,5);Put(" ");Put(Points2Part ,5);Put(" ");
New_Line;
end PlayOneGameOutput;
-----------------------------------------------------------
procedure PlayOneGameFullOutput (Player1, Player2 : PlayerNumber) is
TotPoints1, TotPoints2 : Integer;
Points11, Points21 : Integer;
Points11Part, Points21Part : Integer;
Points12, Points22 : Integer;
Points12Part, Points22Part : Integer;
Points11x, Points21x : Integer;
Points11Partx, Points21Partx : Integer;
Points12x, Points22x : Integer;
Points12Partx, Points22Partx : Integer;
MHist1, MHist2 : MoveHistory;
begin
Put (Integer (Player1),2);
Put (Integer (Player2),3);
PlayOneGame (81,Player2,Points11,Points21,Points11Part,Points21Part);
PlayOneGame (81,Player1,Points11,Points21,Points11Part,Points21Part);
PlayOneGameFull (Player1,Player2,TotPoints1,Points11x,Points21x,Points11Partx,Points21Partx,MHist1);
PlayOneGameFull (47,Player2,TotPoints1,Points11,Points21,Points11Part,Points21Part,MHist1);
PlayOneGameFull (Player1,Player2,TotPoints2,Points12x,Points22x,Points12Partx,Points22Partx,MHist2);
PlayOneGameFull (47,Player2,TotPoints2,Points12,Points22,Points12Part,Points22Part,MHist2);
Put (">;->");
Put (Integer (Player2),2);
Put (" ");
Put(Points11x,5);Put(" ");Put(Points21x,5);Put(" ");
Put(Points11Partx,5);Put(" ");Put(Points21Partx ,5);Put(" ");
Put(Points12x,5);Put(" ");Put(Points22x,5);Put(" ");
Put(Points12Partx,5);Put(" ");Put(Points22Partx ,5);Put(" ");
New_Line;
Put ("--.;");
Put (Integer (Player2),2);
Put (" ");
Put(Points11,5);Put(" ");Put(Points21,5);Put(" ");
Put(Points11Part,5);Put(" ");Put(Points21Part ,5);Put(" ");
Put(Points12,5);Put(" ");Put(Points22,5);Put(" ");
Put(Points12Part,5);Put(" ");Put(Points22Part ,5);Put(" ");
Put(TotPoints1,5);Put(" ");Put(TotPoints2,5);Put(" ");
Put("|");
for Cnt in MHist1'Range loop
if MHist1(Cnt) = Game_Globals.Cooperate then
Put ("1");
else
Put ("0");
end if;
end loop;
Put("|");
for Cnt in MHist2'Range loop
if MHist2(Cnt) = Game_Globals.Cooperate then
Put ("1");
else
Put ("0");
end if;
end loop;
New_Line;
Put("|");
end PlayOneGameFullOutput;
-----------------------------------------------------------
procedure PlayTheGame is
Player1, Player2 : PlayerNumber;
begin
if ForceMethod = -1 then
for Cnt in 1 .. NumMatches
loop
Player1 := DoMatches(Cnt,1);
Player2 := DoMatches(Cnt,2);
PlayOneGameFullOutput (Player1,Player2);
end loop;
else
for Cnt in 1 .. NumMatches
loop
Player1 := DoMatches(Cnt,1);
Player2 := DoMatches(Cnt,2);
PlayOneGameOutput (Player1,Player2,'>');
end loop;
for Cnt in reverse 1 .. NumMatches
loop
Player1 := DoMatches(Cnt,1);
Player2 := DoMatches(Cnt,2);
PlayOneGameOutput (Player1,Player2,'<');
end loop;
end if;
Put (".+<-");
end PlayTheGame;
-----------------------------------------------------------
begin
Initialize;
PlayTheGame;
end;
Tillbaka till huvudsidan