2023 春节集卡活动,指举办于 2023 年(癸卯兔年)春节期间的围绕「珍奇系列」卡片收集的限时活动。该活动开始于 2023 年 1 月 25 日,为期一个月。
活动内容
在活动期间,玩家击杀任意生物(包括动物、中立生物、一般怪物以及 BOSS 级怪物)有一定概率获得「珍奇系列」[1]卡片。玩家收集齐「珍奇系列」的所有卡片后即可获得丰富奖励。玩家也可以在码头处自行购买卡包抽卡。
卡片介绍
「珍奇系列」卡片包含 126 枚名称不同的卡片,且除了「白色羊驼」以外,每个卡片都对应有一版闪卡。因而本次活动的全部卡片包括 126 枚不同的一般卡片和 125 枚不同的闪亮卡片。
卡片分为不同的稀有度,从低到高依次是:
- 普通(包含 55 枚卡片)
- 精良(包含 31 枚卡片)
- 稀有(包含 19 枚卡片)
- 神话(包含 12 枚卡片)
- 传说(包含 9 枚卡片)
每张卡片上都标有以下信息:
- 类型(例如:友好生物/物品、中立生物、敌对生物与 Boss)
- 稀有度
- 系列(本次活动为珍奇系列卡片)
- 闪光版(如果是)
接下来,我们将通过表格罗列出全部的卡片,并按照稀有度与卡片类型进行分类展示。
击杀任何生物都有可能掉落任意卡片。卡片的名称与击杀的生物无关。
普通级卡片
卡片类型 | 卡片名称 | ||||||
---|---|---|---|---|---|---|---|
友好生物/物品 | 雪块 | 蝙蝠 | 村民 | 红狐 | 雪狐 | 鸡 | 驴 |
黑色马 | 褐色马 | 深枣红色马 | 深褐色马 | 淡栗色马 | 灰色马 | 白色马 | |
骡 | 黑猫 | 英国短毛猫 | 花猫 | 异色瞳猫 | 波斯猫 | 布偶猫 | |
红虎斑猫 | 暹罗猫 | 虎斑猫 | 双色猫 | 白猫 | 牛 | 白色青蛙 | |
黑色兔子 | 棕色兔子 | 金黄色兔子 | 椒盐色兔子 | 斑点色兔子 | 吐司色兔子 | 白色兔子 | |
绵羊 | 红色鹦鹉 | 蓝色鹦鹉 | 鳕鱼 | 鱿鱼 | 猪 | ||
中立生物 | 熊猫 | 体弱的熊猫 | 山羊 | 棕色羊驼 | 奶油色羊驼 | 灰色羊驼 | 白色羊驼 |
敌对生物 | 僵尸 | 溺尸 | 骷髅 | 苦力怕 | 掠夺者 | 末影人 | 蜘蛛 |
精良级卡片
卡片类型 | 卡片名称 | ||||||
---|---|---|---|---|---|---|---|
友好生物/物品 | 山羊角 | 炽足兽 | 豹猫 | 蝌蚪 | 橙色青蛙 | 绿色青蛙 | 绿色鹦鹉 |
青色鹦鹉 | 鲑鱼 | ||||||
中立生物 | 北极熊 | 海豚 | 狼 | 蜜蜂 | 懒惰的熊猫 | 忧郁的熊猫 | 顽皮的熊猫 |
好斗的熊猫 | 猪灵 | 僵尸猪灵 | |||||
敌对生物 | 蠹虫 | 恶魂 | 尸壳 | 僵尸村民 | 骷髅骑士 | 流浪者 | 烈焰人 |
卫道士 | 岩浆怪 | 疣猪兽 | 洞穴蜘蛛 | 猪灵蛮兵 |
稀有级卡片
卡片类型 | 卡片名称 | ||||||
---|---|---|---|---|---|---|---|
友好生物/物品 | 流浪商人 | 红色哞菇 | 灰色鹦鹉 | 热带鱼 | 河豚 | 发光鱿鱼 | |
中立生物 | 圣诞节箱子 | 铁傀儡 | 棕色熊猫 | 雪傀儡 | 行商羊驼 | ||
敌对生物 | 凋灵骷髅 | 唤魔者 | 末影螨 | 潜影贝 | 史莱姆 | 守卫者 | 鸡骑士 |
蜘蛛骑士 |
神话级卡片
卡片类型 | 卡片名称 | ||||||
---|---|---|---|---|---|---|---|
友好生物/物品 | 海龟 | 骷髅马 | 僵尸马 | 悦灵 | |||
中立生物 | 青色美西螈 | 金色美西螈 | 粉色美西螈 | 棕色美西螈 | 大型圣诞节箱子 | ||
敌对生物 | 杀手兔 | 恼鬼 | 劫掠兽 |
传说级卡片
卡片类型 | 卡片名称 | ||||||
---|---|---|---|---|---|---|---|
友好生物/物品 | 棕色哞菇 | 烟花 | |||||
中立生物 | 蓝色美西螈 | ||||||
敌对生物 | 幻术师 | 巨型僵尸 | 远古守卫者 | ||||
Boss | 监守者 | 末影龙 | 凋零 |
掉卡机制详解
当玩家击杀[2]生物后,有一定概率掉落卡片。其中击杀中立生物与怪物掉落概率为 5%,击杀动物掉落概率为 1%,击杀 BOSS 级怪物掉落概率为 2.5%。
当生物被判定为玩家击杀死亡后,系统根据概率首先决定是否掉落卡片。若判定掉落卡片,则接下来判定掉落卡片的稀有度。
普通 | 精良 | 稀有 | 神话 | 传奇 | |
---|---|---|---|---|---|
敌对生物 | 10000 | 1000 | 250 | 50 | 1 |
中立生物 | 10000 | 1000 | 100 | 0 | 0 |
友好生物 | 5000 | 250 | 0 | 0 | 0 |
Boss | 0 | 0 | 0 | 5000 | 100 |
普通 | 精良 | 稀有 | 神话 | 传奇 | |
---|---|---|---|---|---|
敌对生物 | 88.5% | 8.85% | 2.21% | 0.442% | 0.00885% |
中立生物 | 90.1% | 9.01% | 0.901% | 0 | 0 |
友好生物 | 95.2% | 4.76% | 0 | 0 | 0 |
Boss | 0 | 0 | 0 | 98.0% | 1.96% |
完成稀有度判定后,将从对应稀有度卡池中随机[3]抽取一张卡片进行掉落。
若最终抽取的卡片有对应闪卡版本,则额外进行一次是否为闪卡的判定。每次掉落卡片,有20%概率为闪卡。
蒙特卡洛模拟
本模拟根据已有概率信息,并基于 C++ 与 std::mt19937
随机数生成器进行。
对于抽取 100000(105)张卡片模拟 10000 次,结果表明集齐普通卡片 48 次,集齐闪卡 0 次,全部集齐 0 次。
对于抽取 1000000(106)张卡片模拟 1000 次,结果表明集齐普通卡片 997 次,集齐闪卡 257 次,全部集齐 256 次。
基于堆叠袭击塔每秒 20 个敌对生物的处死效率,要达到 25% 集齐概率,预期挂机时长 106s,约为 278 小时,即 11.57 天。
对于神话以及传奇卡片,袭击塔的掉落期望是每分钟 0.271 张卡。若通过 Boss 刷取,要达到相同的效率,受限于 Boss 2.5% 的掉落概率,击杀效率需要达到每秒 0.181 只 Boss,即每分钟 10.8 只 Boss,这需要每分钟 32.5 个头的凋灵骷髅塔。
一些额外参考数据:
抽取卡片数 | 全部集齐概率 |
---|---|
1M | 0.25 |
1.5M | 0.55 |
2M | 0.83 |
2.5M | 0.94 |
3M | 0.99 |
代码
#include <iostream> #include <vector> #include <chrono> #include <random> using namespace std; int main() { vector<int> card_arr; vector<int> card_arr_enchant; unsigned seed1 = std::chrono::system_clock::now().time_since_epoch().count(); unsigned random_num; mt19937 rnd(seed1); card_arr.clear(); card_arr_enchant.clear(); for (int i = 0; i < 126; ++i) { card_arr.push_back(0); card_arr_enchant.push_back(0); } vector<double> prob_dist_arr; prob_dist_arr.clear(); prob_dist_arr.push_back(10000./11301.); prob_dist_arr.push_back((10000.+1000.)/11301.); prob_dist_arr.push_back((10000.+1000+250)/11301.); prob_dist_arr.push_back((10000.+1000+250+50)/11301.); prob_dist_arr.push_back(1.); double enchant_prob = 0.2; double index = 0; int N = 100; int card_draw = 3000000; int common_coll_count = 0; int enchant_coll_count = 0; int all_coll_count = 0; int pos = 0; auto max_range = (double)rnd.max(); for (int i = 0; i < N; ++i) { for (int l = 0; l < 126; ++l) { card_arr.at(l) = 0; card_arr_enchant.at(l) = 0; } bool all_collected = true; bool all_enchant_collected = true; for (int j = 0; j < card_draw; ++j) { index = (double)rnd()/max_range; if (index < prob_dist_arr.at(0)){ pos = (int)((double)rnd()/max_range*55); } else if (index < prob_dist_arr.at(1)) { pos = 55+(int)(double(rnd())/max_range*31); } else if (index < prob_dist_arr.at(2)) { pos = 55+31+(int)(double(rnd())/max_range*19); } else if (index < prob_dist_arr.at(3)) { pos = 55+31+19+(int)(double(rnd())/max_range*12); } else { pos = 55+31+19+12+(int)(double(rnd())/max_range*9); } index = (double)rnd()/max_range; if (index < enchant_prob) { card_arr_enchant.at(pos) = card_arr_enchant.at(pos) + 1; } else { card_arr.at(pos) = card_arr.at(pos) + 1; } } for (int k = 0; k < 126; ++k) { if (card_arr.at(k) < 1) { all_collected = false; } if (card_arr_enchant.at(k) < 1) { all_enchant_collected = false; } } if (all_collected) { common_coll_count++; } if (all_enchant_collected) { enchant_coll_count++; } if (all_collected and all_enchant_collected) { all_coll_count ++; } if (i%1 == 0) { cout << i << endl; } } cout << "after " << N << " times of drawing " << card_draw << " cards" << endl; cout << "common_all = " << common_coll_count << endl; cout << "enchant_all = " << enchant_coll_count << endl; cout << "all = " << all_coll_count << endl; return 0; }