-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathPlayer.cpp
More file actions
41 lines (32 loc) · 1.42 KB
/
Copy pathPlayer.cpp
File metadata and controls
41 lines (32 loc) · 1.42 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include "Player.hpp"
#include <random>
#include <iostream>
Card *Player::playCard(const std::pair<std::vector<std::pair<Card *, int>>, int> ¤tTrick, Card *card) {
if (Card::isPlayable(currentTrick.first, cards, card)) {
cards.erase(std::remove(cards.begin(), cards.end(), card), cards.end());
return card;
}
return nullptr;
}
Card *Player::playCard(const std::pair<std::vector<std::pair<Card *, int>>, int> ¤tTrick) {
return playCard(currentTrick, chooseCard(currentTrick));
}
Card *Player::chooseCard(const std::pair<std::vector<std::pair<Card *, int>>, int> ¤tTrick) {
gameState = MaxNTreeNode(availableCards, cards, {currentTrick, }, allTricks, playerID, playerID, nullptr);
gameState.generateTree(8, 0);
Card* bestMove = gameState.childNodes.front().playedCard;
auto largestElement = gameState.childNodes.front().evaluateState();
for (int i = 1; i < gameState.childNodes.size(); i++) {
auto eval = gameState.childNodes[i].evaluateState();
if (eval[playerID] > largestElement[playerID]) {
largestElement = eval;
bestMove = gameState.childNodes.front().playedCard;
}
}
return bestMove;
}
void Player::addTrick(const std::vector<std::pair<Card *, int>> &trick, int currentPlayer, int trickHolder) {
if (playerID == trickHolder)
tricks.push_back(trick);
allTricks.emplace_back(trick, trickHolder);
}