Untitled
unknown
plain_text
5 years ago
8.4 kB
13
Indexable
#include "function.h"
#include <cstdlib>
Player::Player(string name, int m, int ski) : Human(this->name, this->money, this->skill) // checked
{
}
Human::Human(string n, int m, int ski) // checked
{
this->name = n;
this->money = m;
this->skill = ski;
}
void Human::Draw()
{ // checked
this->cards = 0;
string res = "";
while (res.size() <= 0)
getline(cin, res);
stringstream ss(res);
while (ss >> res)
{
int temp = 0;
for (auto i : res)
temp = temp * 10 + i - '0';
this->cards += temp;
}
// cout << cards << endl;
}
Banker::~Banker()
{
}
Human::~Human()
{
}
Casino::Casino() // checked
{
int ind;
this->banker = new Human("Banker", 0, 0);
this->server = new Human("Server", 0, 0);
this->guard = new Human("guard", 0, 0);
this->player_num = 0;
this->blacklist_num = 0;
this->today_income = 0;
this->total_income = 0;
/* for (ind = 0; ind < 1009; ind++)
{
this->player[ind] = NULL;
// this->blacklist[ind] = "\0";
}
for (ind = 0; ind < 100009; ind++)
this->blacklist[ind] = "\0";
*/
}
Casino::~Casino()
{
}
void Casino::Enterance(int f, int u) // checked
{
this->today_income = 0;
this->fee = f;
this->U = u;
}
void Casino::Guest(string s, int m, int ski) // checked
{
int i;
for (i = 0; i < this->player_num; i++)
{
if (this->player[i]->name == s)
return;
}
for (i = 0; i < this->blacklist_num; i++)
{
if (this->blacklist[i] == s)
return;
}
if (m <= this->fee)
{
this->blacklist[this->blacklist_num++] = s;
return;
}
else
{
this->player[this->player_num++] = new Human(s, m, ski);
this->player[this->player_num - 1]->money -= this->fee;
this->today_income += this->fee;
}
}
Guard::Guard(int ski) : Human("Guard", 0, ski)
{
}
Banker::Banker(int ski) : Human("Banker", 0, ski)
{
}
Server::Server(int ski) : Human("Server", 0, ski)
{
}
void Player::Bet()
{
}
void Player::Pay(Human *human)
{
}
void Banker::Pay(Human *human)
{
}
int Banker::Win(Human *human)
{
return 1;
}
void Casino::TwentyOne() // checked
{
int bank_ski, guard_ski, ser_ski;
int num;
int card_tmp;
string name;
Player* eat;
int bet;
int seq[100100];
int ind = 0;
int flag;
int total = 0;
cin >> bank_ski >> guard_ski >> ser_ski;
this->banker = new Human("banker", 0, bank_ski);
this->guard = new Human("guard", 0, guard_ski);
this->server = new Human("server", 0, ser_ski);
cin >> num;
for (int i = 0; i < 100100; i++)
seq[i] = 0;
for (int i = 0; i < num; i++)
{
cin >> name;
cin >> bet;
// std::cout << "Here\n";
eat = new Player(name, 0, 0);
eat->bets = bet;
eat->Draw();
flag = 0;
for (int j = 0; j < this->blacklist_num; j++) // find whether player is blacklisted
{
if (blacklist[j] == name)
{
flag = 1;
break;
}
}
if (flag == 1) {
continue;
}
for (int j = 0; j < this->player_num; j++)
{
if (this->player[j]->name == name) // if player is in casino
{
seq[j] = 1;
this->player[j]->bets = eat->bets;
this->player[j]->cards = eat->cards;
break;
}
}
}
this->banker->Draw();
for (int ind = 0; ind < 100100; ind++)
{
if (seq[ind] == 1)
{
if ((this->player[ind]->cards <= 21 && this->banker->cards > 21) || (this->player[ind]->cards <= 21 && this->banker->cards < player[ind]->cards)) // player wins
{
// std::cout << "player " << this->player[ind]->name << endl;
int bonus = 0;
if (this->player[ind]->skill < this->banker->skill)
{
bonus = 10 * this->player[ind]->cards;
if (this->player[ind]->cards == 21)
{
this->banker->money -= 2 * (bonus + this->player[ind]->bets);
this->player[ind]->money += 2 * (bonus + this->player[ind]->bets);
total = 2 * (bonus + this->player[ind]->bets);
}
else
{
this->banker->money -= bonus;
this->player[ind]->money += bonus;
this->banker->money -= this->player[ind]->bets;
this->player[ind]->money += this->player[ind]->bets;
total = this->player[ind]->bets + bonus;
}
}
else
{
if (this->player[ind]->cards == 21)
{
this->banker->money -= 2 * this->player[ind]->bets;
this->player[ind]->money += 2 * this->player[ind]->bets;
total = 2 * this->player[ind]->bets;
}
else
{
this->banker->money -= this->player[ind]->bets;
this->player[ind]->money += this->player[ind]->bets;
total = this->player[ind]->bets;
}
}
if (this->player[ind]->money > this->server->skill)
{
this->banker->money += 2000;
this->server->money += 1000;
this->player[ind]->money -= 3000;
}
if (3 * this->player[ind]->skill < total)
{
this->blacklist[this->blacklist_num++] = this->player[ind]->name;
this->banker->money -= 100;
this->guard->money += 100;
if (this->guard->skill < this->player[ind]->skill)
{
this->guard->money -= (this->player[ind]->skill - this->guard->skill);
this->player[ind]->money += (this->player[ind]->skill - this->guard->skill);
}
}
}
else if ((this->banker->cards <= 21 && this->player[ind]->cards > 21) || (this->banker->cards <= 21 && this->player[ind]->cards <= this->banker->cards))
{
if (this->player[ind]->money <= this->player[ind]->bets)
{
this->banker->money += this->player[ind]->money;
this->player[ind]->money = 0;
this->banker->money -= 100;
this->guard->money += 100;
this->blacklist[this->blacklist_num++] = this->player[ind]->name;
}
else
{
this->banker->money += this->player[ind]->bets;
this->player[ind]->money -= this->player[ind]->bets;
}
}
}
}
cout << this->banker->money << ' ' << this->guard->money << ' ' << this->server->money << endl;
this->today_income += this->banker->money;
for (int i = 0; i < 100100; i++)
{
if (seq[i] == 1)
cout << this->player[i]->name << ' ' << this->player[i]->money << endl;
}
}
bool Player::Cheat(Human *human)
{
return true;
}
void Casino::EndDay()
{
this->total_income += this->today_income;
if (this->today_income >= this->U)
{
// for (int i = 0; i < blacklist_num; i++)
// this->blacklist[i] = "\0";
this->blacklist_num = 0;
}
/* for (int i = 0; i < this->player_num; i++)
{
if (this->player[i] != NULL)
{
delete(this->player[i]);
this->player[i] = NULL;
}
}
*/
this->player_num = 0;
}
void Casino::Result()
{
cout << this->total_income << endl;
for (int i = 0; i < this->blacklist_num; i++)
{
// if (this->blacklist[i] != "\0")
cout << blacklist[i] << endl;
}
}
void Player::Order(Human *banker, Human *server)
{
}
bool Player::Bankrupt()
{
return true;
}
void Guard::Pay(Human *human)
{
}
Server::~Server()
{
}Editor is loading...