※ 引述《MiCy (米賽)》之銘言:
: https://l.urusai.cc/sZzWb.png
: 【入場曲】發動2次「使自己手牌中全部的卡片返回牌堆中。由自己的牌堆中抽取X張卡片
: 。X為「因這張卡片而返回牌堆的卡片張數」。隨後,如果自己手牌中有4張以上相同消費
: 的卡片,則會給予敵方戰場上全部的從者卡與敵方的主戰者4點傷害」。
我覺得的確是理組寫的
因為這段話能夠完全轉換任一種程式語言
而且是非常精準的沒有爭議的
void 入場曲() {
for(int i=1;i<=2;i++) //發動兩次
{ //上引號
int x=my_hand.cards.size();
/* 要先寫 X為"..."敘述,因為傳統式程式語言需要先有變數才能使用
"因這張卡片而返回卡片數量" 則是能限定只須看自己手牌數量
不用理會返回牌堆其他卡片效果
也不用理會場上其他怪獸/魔法....等等效果
更不須理會對方的所有效果
以上這些都有可能影響到目前手上手牌張數
所以可以直接大膽的只看自己手牌數量即可
*/
discard_my_hand_to_deck(x);
//使自己手牌中全部的卡片返回牌堆中
draw_card(x);
//由自己的牌堆中抽取X張卡
std::map<int,int> my_hand_cost_count;
//開始計算同消費張數
for(int i=0;i<my_hand.cards.size();i++) {
if(my_hand_cost_count.find(my_hand.cards[i].cost)) {
my_hand_cost_count.insert(my_hand.cards[i].cost,
my_hand_cost_count[my_hand.cards[i].cost]+1);
}
else
my_hand_cost_count.insert(my_hand.cards[i].cost,1);
}
//計算最大相同cost張數
int max_count = 0;
for (auto& [key, value] : my_hand_cost_count)
if(max_count < value) max_count = value;
if(max_count >= 4) {
//如果自己手牌中有4張以上相同消費數
for (monster &m : enemy_monsters)
m.blood -= 4;
enemy_player -= 4;
//則會給予敵方戰場上全部的從者卡與敵方的主戰者4點傷害
}
} // 最後的那個下引號
X 因為很精確地表示,所以基本上不會變,目前手上有幾張就重抽幾張
: 這段話其實可以一句就寫完了吧?
: 「重新抽取等同手牌張數的卡片」
: 不就好了 = =?
: 要寫到阿肥第一眼還要想一下的說明不簡單捏…
反倒是上面那簡短的概約很不精確
因為有各種效果會影響手牌張數,所以寫這樣反而可能有一堆爭議
而且我覺得原文敘述非常精確只會有一種結果,不知為何需要討論效果?
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.164.127.73 (臺灣)
※ 文章網址: https://webptt.cc/bbs/C_Chat/M.1771927861.A.257.html
※ 編輯: jpopaholic (1.164.127.73 臺灣), 02/24/2026 18:13:57
用等量跟相同手牌還是一樣會有一樣的爭議
試想想,若對方有牌/怪獸/魔法 有以下效果
"當對方有怪獸發動效果,雙方把手上兩張牌返回牌組"
假設我目前手上有六張,那發動完雙方效果後,我是要重抽六章還是四張
那個反而不是啥代數變數
反倒像是英文的指示名詞: which或是that
這是程式邏輯,換做一般邏輯
當你事先沒確認好手上有幾張牌
當你把全部手牌返回重洗
你能知道你接下來要拿幾張嗎?
※ 編輯: jpopaholic (1.164.127.73 臺灣), 02/24/2026 18:59:25
