program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils,
classes;
var a: tstringlist;
rodadas: integer = 40;
tatica: integer;
input,input2,input3: string;
procedure bobo;
begin
a.Add('ingenuo');
while rodadas > 0 do begin
dec(rodadas, 1);
write('voce - ');
readln(input2);
writeln('comp - 1');
a.Add(input2+'-1');
end;
end;
procedure egoista;
begin
a.Add('egoista');
while rodadas > 0 do begin
dec(rodadas, 1);
write('voce - ');
readln(input2);
writeln('comp - 0');
a.Add(input2+'-0');
end;
end;
procedure maluco_random;
begin
a.Add('bobo - random');
while rodadas > 0 do begin
dec(rodadas, 1);
write('voce - ');
readln(input2);
randomize;
input3 := inttostr(random(2));
writeln('comp - '+input3);
a.Add(input2+'-'+input3);
end;
end;
procedure tft;
begin
a.Add('tft');
while rodadas > 0 do begin
dec(rodadas, 1);
write('voce - ');
readln(input2);
if rodadas = 39 then input3 := '1';
writeln('comp - '+input3);
a.Add(input2+'-'+input3);
end;
end;
procedure traira_10;
begin
a.Add('traira - 10');
while rodadas > 0 do begin
dec(rodadas, 1);
write('voce - ');
readln(input2);
if rodadas < 30 then input3 := '0' else input3 := '1';
writeln('comp - '+input2);
a.Add(input2+'-');
end;
end;
begin
writeln('o teste dura em media de 1 a 3 minutos');
writeln('[dilema do prisioneiro]');
writeln('2 opções, 3 resultados diferentes');
writeln('sao em média 20 rodadas');
writeln('* 1 - manter segredo');
writeln('* 0 - trair');
writeln('1. voce mantem segredo e a maquina tambem mantem (1-1), voce e o adversario ficam 6 meses na cadeia');
writeln('2. voce trai e a maquina mantem segredo (0-1), o adversario passara 10 anos na cadeia');
writeln('3. voce trai e a maquina trai (0-0), voce e o adversario passariam 5 anos na cadeia');
writeln('4. voce mantem segredo e a maquina trai (1-0), voce passaria 10 anos na prisao');
writeln('');
writeln('para começar informe seu nome, para ajuda digite "mais"');
readln(input);
if lowercase(input) = 'mais' then begin
writeln('O dilema do prisioneiro é um problema da teoria dos jogos. Neste problema, cada jogador, de modo independente, quer aumentar ao máximo a sua vantagem sem importar o resultado do outro.');
writeln('informe seu nome');
readln(input);
end;
a := tstringlist.Create;
Randomize;
tatica := random(4);
case tatica of
0: bobo;
1: egoista;
2: maluco_random;
3: tft;
4: traira_10;
end;
a.SaveToFile(extractfilepath(paramstr(0))+input+'.txt');
writeln('');
writeln('concluido.');
end.