作者jpopaholic (日音スキ)
看板C_Chat
標題Re: [閒聊] 寫這卡牌說明的一定是理組 = =
時間Tue Feb 24 18:10:59 2026
※ 引述《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://www.ptt.cc/bbs/C_Chat/M.1771927861.A.257.html
推 symphoeuni: 因為有人看不懂 更有人覺得自己能解釋得更好.. 02/24 18:12
※ 編輯: jpopaholic (1.164.127.73 臺灣), 02/24/2026 18:13:57
推 nahsnib: 因為那個X的寫法很沒必要,如果變數很多或其他原因 02/24 18:15
→ nahsnib: 這樣寫確實有好處,可是這個情況直接寫: 02/24 18:15
→ nahsnib: 「所有手牌洗入牌堆後抽取等量手牌,之後如果手牌...」 02/24 18:15
→ nahsnib: 用等量兩個字就能完全取代那整串文字 02/24 18:16
用等量跟相同手牌還是一樣會有一樣的爭議
試想想,若對方有牌/怪獸/魔法 有以下效果
"當對方有怪獸發動效果,雙方把手上兩張牌返回牌組"
假設我目前手上有六張,那發動完雙方效果後,我是要重抽六章還是四張
→ symphoeuni: 寫X的擴充性比較好 可以玩組合效果 雖然要國中學過的 02/24 18:18
→ symphoeuni: 代數(?! 02/24 18:18
→ nahsnib: 你是說什麼「所有有X的牌都能讓X+1」這樣嗎,那乾脆 02/24 18:19
→ nahsnib: 發動N次以下效果「......如果有Y張一樣費用的卡,造成Z點 02/24 18:20
→ nahsnib: 傷害」,N初始為2,Y初始為4,Z初始為4 02/24 18:20
→ nahsnib: 全部都是變數,自由度高到不行 02/24 18:20
那個反而不是啥代數變數
反倒像是英文的指示名詞: which或是that
推 supersusu: 可是你是先設X再動作,原文是先動作再設X 02/24 18:20
這是程式邏輯,換做一般邏輯
當你事先沒確認好手上有幾張牌
當你把全部手牌返回重洗
你能知道你接下來要拿幾張嗎?
※ 編輯: jpopaholic (1.164.127.73 臺灣), 02/24/2026 18:59:25
→ a12073311: 特別有X就代表可能會出 但本來就可以每個效果都出 02/24 18:56
→ a12073311: 遊戲也有明說一張洗回去 重抽一張的 02/24 18:56
→ a12073311: 照你寫 你要怎麼區分那個要X+1那個不要 02/24 18:56
→ a12073311: #本來就不用每個效果都出 02/24 19:01
→ a12073311: 想打‘’不用‘’結果變‘’可以‘’ 02/24 19:01
推 qd6590: 你是說有一個卡牌遊戲會希望你能解二元一次聯立方程式成功 02/24 21:02
→ qd6590: 才能發動效果嗎? 不可能吧(棒讀 02/24 21:02
推 supersusu: 那非常精準的點在哪?感覺一般般 02/24 23:51