SparrowBot/app/janken.cpp
2017-09-25 18:10:12 +02:00

83 lines
1.8 KiB
C++

#include "janken.h"
#include <ctime>
Janken::Janken()
{
nb_played = NB_COUPS;
memset(played,1,sizeof(int)*NB_COUPS);
std::srand(std::time(NULL));
}
bool Janken::hasPlayed(QString msg){
if(msg.compare(QString("Pierre")) == 0){
last_move = PIERRE;
return true;
}else if(msg.compare(QString("Feuille")) == 0){
last_move = FEUILLE;
return true;
}else if(msg.compare(QString("Ciseaux")) == 0){
last_move = CISEAUX;
return true;
}
return false;
}
void Janken::updateKnowledge(){
played[last_move] += 1;
nb_played += 1;
}
int Janken::pickMove()
{
if (hasUniqueSolution()){
bot_move = getSolution();
return bot_move;
}else{
bot_move = rand()%Move::NB_COUPS;
return bot_move;
}
}
bool Janken::hasUniqueSolution(){
int nb_solution = 0;
float ratio, solution = 0.f;
for(int i = 0;i < NB_COUPS; i++){
ratio = played[i]/nb_played;
if (ratio > solution){
solution = ratio;
nb_solution = 1;
}else if(ratio == solution){
nb_solution++;
}
}
if (nb_solution == 1)
return true;
else
return false;
}
int Janken::getSolution(){
int solution = 0;
float ratio, best_ratio = 0;
for(int i = 0;i < NB_COUPS; i++){
if ((ratio = played[i]/nb_played) > best_ratio){
best_ratio = ratio;
solution = i;
}
}
return (solution + 1) % NB_COUPS;
}
QString Janken::getWinner()
{
QString winner;
if(bot_move == (last_move+1)%NB_COUPS)
winner = QString("You lose!");
else if (bot_move == last_move)
winner = QString("Tch.. that's a draw.");
else
winner= QString("... ... You win ... ...");
return winner;
}