<?
/*
###############################################
Auteur : Joël Verheyen
Laatste wijziging : 29 Oktober 2006 - 17:24
###############################################
*/
#include <iostream>
#include <time.h> //random functie
using namespace std;
//static variabelen zodat deze in andere functies kunnen gebruikt en gereset worden.
static int aaron_gewonnen
= 0; static int charlie_gewonnen
= 0;
void shoot(bool& targetAlive, double accuracy);
/*
Precondition: (boolean) targetalive -> true of false
(double) accuracy -> getal tussen 0.00 en 1.00
Postcondition: (boolean) targetAlive -> verandert in true of false
*/
void startDuel(int taktiek);
/*
Precondition: (int) taktiek -> 1 of 2
Postcondition: (void) aaron_gewonnen -> één van de drie wordt met 1 vermeerderd
bob_gewonnen
charlie_gewonnen
*/
int main(void)
{
//random
int i;
//we doen het duel 1000 keer, zodat we een juist resultaat krijgen.
//Taktiek1 wordt toegepast!
for (i=0;i<=1000;i++)
{
startDuel(1);
}
cout << "> Taktiek 1: iedereen vecht tegen de sterkste.\n\n";
cout << "Aaron heeft " << aaron_gewonnen << " keer gewonnen.\n";
cout << "Bob heeft " << bob_gewonnen << " keer gewonnen.\n";
cout << "Charlie heeft " << charlie_gewonnen << " keer gewonnen.\n\n";
//reset de score, en pas taktiek2 toe.
aaron_gewonnen = 0;
bob_gewonnen = 0;
charlie_gewonnen = 0;
//Taktiek2 wordt toegepast!
for (i=0;i<=1000;i++)
{
startDuel(2);
}
cout << "> Taktiek 2: Aaron mist de eerste ronde met opzet.\n\n";
cout << "Aaron heeft " << aaron_gewonnen << " keer gewonnen.\n";
cout << "Bob heeft " << bob_gewonnen << " keer gewonnen.\n";
cout << "Charlie heeft " << charlie_gewonnen << " keer gewonnen.\n\n";
return 0;
}
void shoot(bool& targetAlive, double accuracy)
{
//random getal tussen 0.00 en 1.00 aanmaken.
double random
= 0.1*(rand()%11);
//als accuracy kleiner is dan het random getal, verliest de tegenstander.
if (random <= accuracy)
{
targetAlive = false;
}
else
{
targetAlive = true;
}
}
void startDuel(int taktiek)
{
//iedereen start al levend.
bool aaronAlive = true;
bool bobAlive = true;
bool charlieAlive = true;
//starten met ronde1
int ronde = 1;
//blijf dueleren tot dat er maar één iemand overblijft.
do
{
//aaron vecht als hij nog leeft
if (aaronAlive)
{
//bij taktiek2 mist aaron met opzet!
if (!(taktiek == 2 && ronde == 1))
{
if (charlieAlive)
{
shoot(charlieAlive, 0.33);
}
else
{
shoot(bobAlive, 0.33);
}
}
}
//bob vecht als hij nog leeft
if (bobAlive)
{
if (charlieAlive)
{
shoot(charlieAlive, 0.50);
}
else
{
shoot(aaronAlive, 0.50);
}
}
//charlie vecht als hij nog leeft
if (charlieAlive)
{
if (bobAlive)
{
shoot(bobAlive, 1.00);
}
else
{
shoot(aaronAlive, 1.00);
}
}
//volgende ronde
ronde++;
}
while ( (aaronAlive && bobAlive) || (aaronAlive && charlieAlive) || (bobAlive && charlieAlive));
//wie wint krijgt +1
if (aaronAlive)
{
aaron_gewonnen += 1;
}
else if (bobAlive)
{
bob_gewonnen += 1;
}
else if (charlieAlive)
{
charlie_gewonnen += 1;
}
}