字裡牌間——禁止された言葉①
Bénjī / 2019-03-22 /
《遊戲王》這部作品已經存在了超過20年,從此延伸出的集換式紙牌遊戲在全世界各地傳播著,隨著每一季推出新的卡牌,這個遊戲至少依然保有許多熱愛它的玩家。做為一款競爭型的紙牌遊戲,玩家可以搭配各個時期所發行的遊戲王卡片,組合出千變萬化的戰術來贏得決鬥。
然而,世間萬物皆不盡完美,無論是玩家或是遊戲公司。有的玩家會利用規則、規則以外或卡牌敘述上的漏洞贏得所謂不風光的勝利;遊戲公司也可能做出強度超出平衡、使得決鬥變得可能不需要戰術、靠猜拳的運氣就能贏得決鬥的卡牌。玩家的不完美,或許可以依靠比賽中執法的裁判從中監督,來得到比賽的公平性,而遊戲公司的疏忽,正是本次分析的主角——禁止/制限卡表(卡表)所要負責的事。
1999年,第一個版本的卡表出現了。早期規範及配套措施尚未完善,經過頻繁地更改,在2004年之後,以半年一次的頻率更新一次卡表。2013年9月,分屬於亞洲地區的「遊☆戱☆王オフィシャルカードゲーム デュエルモンスターズ」(OCG),以及歐美地區的「YU-GI-OH! TRADING CARD GAME」(TCG)兩個系統,因為玩家使用習慣、卡片發行不同步等因素,開始各自發布不同的卡表,造成玩家大致上依照所在地區不同,遵循著不同的卡表來交流或比賽。之後,遊戲王進入了決鬥步調更加快速的時期,為了因應更快的賽場環境變化,卡表改以大致每三個月更新一次的頻率。
這次的分析,主要是希望能藉由卡片中效果文的敘述,試圖找到OCG與TCG的卡表中的差異,討論這樣的差異和兩方玩家的習慣之間的關係。
材料收集:
這次分析的卡表,將採用OCG在2019年1月1日生效的卡表,以及TCG同期在2019年1月28日生效的卡表,卡表中每一張卡片的效果文文本進行比對。從Yugioh Fandom中的OCG以及TCG卡表的網頁原始碼中,取得每一張卡片所對應到的連結,並做簡單的分類。
import csv
# set lists
list_OCG_nomi = []
list_TCG_nomi = []
list_onaji = []
# read .csv file
with open('banlist1901.csv', newline='') as csvfile:
rows = csv.reader(csvfile)
for row in rows:
if row[0] == 'OCG':
list_OCG_nomi.append([row[3],row[2],row[1],row[4]])
elif row[0] == 'TCG':
list_TCG_nomi.append([row[3],row[2],row[1],row[4]])
# classify
for card in list_OCG_nomi:
if card in list_TCG_nomi:
list_onaji.append(card)
for card in list_onaji:
list_OCG_nomi.remove(card)
list_TCG_nomi.remove(card)
在遊戲王的世界中,各個語言下的效果文,在功用上是一樣的,為了分析上的便利性,在此全部以英文版的效果文來分析。
接著,利用request取得每一張卡的效果文文本。
import requests
from bs4 import BeautifulSoup as bs
link_front = "https://yugioh.fandom.com"
def get_card_text(url):
request = requests.get(url)
html = request.text
soup = bs(html)
# get the card text
card_text = soup.select('table.collapsible.expanded.navbox-inner td:nth-of-type(2)')[0].text
card_text = card_text.strip()
return card_text
for j in range(len(list_OCG_nomi)):
list_OCG_nomi[j].append(get_card_text(link_front + list_OCG_nomi[j][3]))
for j in range(len(list_TCG_nomi)):
list_TCG_nomi[j].append(get_card_text(link_front + list_TCG_nomi[j][3]))
# fix data manually
list_TCG_nomi[8][0] = 'Maxx "C"'
材料分析:
首先,我們先觀察,屬於「禁止卡」(不可以該卡片來構築牌組)的項目中,兩種卡表的差異:
import pandas
forb_cmp = [] #matrix
forb_cmp_num = [] #y-axis
for card in list_OCG_nomi:
if card[2] == 'Forbidden':
status_cmp = 'Unlimited'
for card_cmp in list_TCG_nomi:
if card_cmp[0] == card[0]:
status_cmp = card_cmp[2]
forb_cmp.append(card[0:3]+[status_cmp])
forb_cmp_num.append('')
for card in list_TCG_nomi:
if card[2] == 'Forbidden':
status_cmp = 'Unlimited'
for card_cmp in list_OCG_nomi:
if card_cmp[0] == card[0]:
status_cmp = card_cmp[2]
forb_cmp.append(card[0:2]+[status_cmp]+[card[2]])
forb_cmp_num.append('')
#make table
x_axis = ['Card name', 'Type', 'Status in OCG', 'Status in TCG']
pandas.DataFrame(forb_cmp, forb_cmp_num, x_axis)
Card name | Type | Status in OCG | Status in TCG | |
---|---|---|---|---|
Amazoness Archer | Monster | Forbidden | Unlimited | |
Blackwing - Steam the Cloak | Monster | Forbidden | Unlimited | |
Cannon Soldier | Monster | Forbidden | Unlimited | |
Cannon Soldier MK-2 | Monster | Forbidden | Unlimited | |
Glow-Up Bulb | Monster | Forbidden | Unlimited | |
Number 95: Galaxy-Eyes Dark Matter Dragon | Monster | Forbidden | Unlimited | |
Summon Sorceress | Monster | Forbidden | Unlimited | |
Toon Cannon Soldier | Monster | Forbidden | Unlimited | |
Wind-Up Hunter | Monster | Forbidden | Unlimited | |
Divine Sword - Phoenix Blade | Spell | Forbidden | Unlimited | |
Dragonic Diagram | Spell | Forbidden | Unlimited | |
Raigeki | Spell | Forbidden | Limited | |
Zoodiac Barrage | Spell | Forbidden | Unlimited | |
Life Equalizer | Trap | Forbidden | Unlimited | |
Magical Explosion | Trap | Forbidden | Limited | |
Astrograph Sorcerer | Monster | Limited | Forbidden | |
Blaster, Dragon Ruler of Infernos | Monster | Unlimited | Forbidden | |
Daigusto Emeral | Monster | Unlimited | Forbidden | |
Denglong, First of the Yang Zing | Monster | Semi-Limited | Forbidden | |
Djinn Releaser of Rituals | Monster | Unlimited | Forbidden | |
Double Iris Magician | Monster | Limited | Forbidden | |
Fairy Tail - Snow | Monster | Semi-Limited | Forbidden | |
Grinder Golem | Monster | Limited | Forbidden | |
Maxx "C" | Monster | Unlimited | Forbidden | |
Morphing Jar 2 | Monster | Unlimited | Forbidden | |
Number 42: Galaxy Tomahawk | Monster | Unlimited | Forbidden | |
Number 86: Heroic Champion - Rhongomyniad | Monster | Unlimited | Forbidden | |
Performapal Skullcrobat Joker | Monster | Limited | Forbidden | |
Samsara Lotus | Monster | Unlimited | Forbidden | |
Supreme King Dragon Starving Venom | Monster | Unlimited | Forbidden | |
Tempest, Dragon Ruler of Storms | Monster | Limited | Forbidden | |
Topologic Gumblar Dragon | Monster | Unlimited | Forbidden | |
Tribe-Infecting Virus | Monster | Unlimited | Forbidden | |
True King Lithosagym, the Disaster | Monster | Unlimited | Forbidden | |
Wind-Up Carrier Zenmaity | Monster | Unlimited | Forbidden | |
Chicken Game | Spell | Unlimited | Forbidden | |
Harpie's Feather Duster | Spell | Limited | Forbidden | |
Kaiser Colosseum | Spell | Unlimited | Forbidden | |
Pot of Avarice | Spell | Unlimited | Forbidden | |
Rank-Up-Magic Argent Chaos Force | Spell | Unlimited | Forbidden | |
Soul Charge | Spell | Limited | Forbidden | |
Super Rejuvenation | Spell | Unlimited | Forbidden | |
That Grass Looks Greener | Spell | Semi-Limited | Forbidden | |
Self-Destruct Button | Trap | Unlimited | Forbidden | |
Vanity's Emptiness | Trap | Limited | Forbidden |