|
|
|
|
@ -5,6 +5,63 @@
|
|
|
|
|
#include <print>
|
|
|
|
|
#include <conio.h>
|
|
|
|
|
using namespace UNO;
|
|
|
|
|
void CreateDeck_CrazyFestival(std::vector<Card>& deck) {
|
|
|
|
|
using std::print, std::println;
|
|
|
|
|
deck.reserve(400);
|
|
|
|
|
std::vector<CardColor> colors({ CardColor::Red,CardColor::Yellow, CardColor::Green, CardColor::Blue });
|
|
|
|
|
for (auto c : colors) {
|
|
|
|
|
deck.emplace_back(c, CardType::Normal, 0);
|
|
|
|
|
for (int pt = 1; pt <= 9; pt++) {
|
|
|
|
|
deck.emplace_back(c, CardType::Normal, pt);
|
|
|
|
|
deck.emplace_back(c, CardType::Normal, pt);
|
|
|
|
|
}
|
|
|
|
|
for (int i = 0; i < 4; i++) {
|
|
|
|
|
deck.emplace_back(c, CardType::Draw, 1);
|
|
|
|
|
deck.emplace_back(c, CardType::Draw, 1);
|
|
|
|
|
deck.emplace_back(c, CardType::Draw, 1);
|
|
|
|
|
deck.emplace_back(c, CardType::Draw, 2);
|
|
|
|
|
deck.emplace_back(c, CardType::Draw, 2);
|
|
|
|
|
deck.emplace_back(c, CardType::Draw, 2);
|
|
|
|
|
deck.emplace_back(c, CardType::Draw, 3);
|
|
|
|
|
deck.emplace_back(c, CardType::Draw, 3);
|
|
|
|
|
deck.emplace_back(c, CardType::Draw, 3);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
deck.emplace_back(c, CardType::Ban, 0);
|
|
|
|
|
deck.emplace_back(c, CardType::Ban, 0);
|
|
|
|
|
deck.emplace_back(c, CardType::Reverse, 0);
|
|
|
|
|
deck.emplace_back(c, CardType::Reverse, 0);
|
|
|
|
|
deck.emplace_back(c, CardType::Reverse, 0);
|
|
|
|
|
deck.emplace_back(c, CardType::Reverse, 0);
|
|
|
|
|
deck.emplace_back(c, CardType::Reverse, 0);
|
|
|
|
|
deck.emplace_back(c, CardType::Reverse, 0);
|
|
|
|
|
deck.emplace_back(c, CardType::Reverse, 0);
|
|
|
|
|
deck.emplace_back(c, CardType::Reverse, 0);
|
|
|
|
|
deck.emplace_back(c, CardType::Reverse, 0);
|
|
|
|
|
deck.emplace_back(c, CardType::Reverse, 0);
|
|
|
|
|
}
|
|
|
|
|
for (int i = 0; i < 8; i++) {
|
|
|
|
|
deck.emplace_back(CardColor::Black, CardType::Draw, 2);
|
|
|
|
|
deck.emplace_back(CardColor::Black, CardType::Draw, 2);
|
|
|
|
|
deck.emplace_back(CardColor::Black, CardType::Draw, 2);
|
|
|
|
|
}
|
|
|
|
|
for (int i = 0; i < 8; i++) {
|
|
|
|
|
deck.emplace_back(CardColor::Black, CardType::Draw, 4);
|
|
|
|
|
deck.emplace_back(CardColor::Black, CardType::Draw, 4);
|
|
|
|
|
deck.emplace_back(CardColor::Black, CardType::Draw, 4);
|
|
|
|
|
}
|
|
|
|
|
for (int i = 0; i < 8; i++) {
|
|
|
|
|
deck.emplace_back(CardColor::Black, CardType::Normal, 15);
|
|
|
|
|
}
|
|
|
|
|
for (int i = 0; i < 40; i++) {
|
|
|
|
|
deck.emplace_back(CardColor::Black, CardType::Reverse, 0);
|
|
|
|
|
}
|
|
|
|
|
for (int i = 0; i < 4; i++) {
|
|
|
|
|
deck.emplace_back(CardColor::Black, CardType::Draw, 5);
|
|
|
|
|
deck.emplace_back(CardColor::Black, CardType::Draw, 5);
|
|
|
|
|
deck.emplace_back(CardColor::Black, CardType::Draw, 5);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
void CreateDeck_SuperFestival(std::vector<Card>& deck) {
|
|
|
|
|
using std::print, std::println;
|
|
|
|
|
deck.reserve(1000);
|
|
|
|
|
@ -134,12 +191,12 @@ void Arena() {
|
|
|
|
|
}
|
|
|
|
|
void Play() {
|
|
|
|
|
Game game(Rules::CanMatchCard_Festival);
|
|
|
|
|
game.AddPlayer<CopyCat>("龙智博");
|
|
|
|
|
game.AddPlayer<CopyCat>("徐梓焯");
|
|
|
|
|
game.AddPlayer<CopyCat>("田浩宗");
|
|
|
|
|
game.AddPlayer<UserPlayer>("程奕铭");
|
|
|
|
|
game.AddPlayer<SmartCat1>("入机A");
|
|
|
|
|
game.AddPlayer<SmartCat1>("入机B");
|
|
|
|
|
game.AddPlayer<SmartCat1>("入机C");
|
|
|
|
|
game.AddPlayer<UserPlayer>("入");
|
|
|
|
|
std::vector<Card> deck{};
|
|
|
|
|
CreateDeck_Festival(deck);
|
|
|
|
|
CreateDeck_CrazyFestival(deck);
|
|
|
|
|
std::println("{:=^40}", "牌堆构成");
|
|
|
|
|
std::println("总牌数:{}", deck.size());
|
|
|
|
|
for (auto& i : deck) {
|
|
|
|
|
@ -148,7 +205,7 @@ void Play() {
|
|
|
|
|
std::println("\n按任意键开始!");
|
|
|
|
|
_getch();
|
|
|
|
|
game.ReadDeck(std::move(deck));
|
|
|
|
|
game.Launch();
|
|
|
|
|
game.Launch(true);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
int main(int argc, char* argv[]) {
|
|
|
|
|
|