カードデータの持ち方

今日も「なぜ、長きにわたり要望されている機能が実現されていないのか?」という疑問に対しす言い訳をしておきたい(←言い訳なのにえらそうに)。
だいたいどのソフトも最初に考えるべきことはデータをどういう構成で持って、どう管理するかという点である。デュエルオンラインにおけるデータとはもちろんカードデータのことである。
フィールドにどんなカードがどんな状態で出ていて、墓地にはどんなカードがあり、手札、デッキには何が入っていて、除外されたカードは何かというものを正確に管理する必要がある。
一番ややこしいのはフィールド上だ。カードの状態がころころ変わるので、そのデータ管理は面倒だ。でも、逆にその分神経質につくってある。そして、問題となったのは手札とデッキである。
私は大きな勘違いをしていた。ルールや効果にまだ詳しくなかった私は「デッキ、手札、墓地に相手のカードが入ることはない」と勘違いしていた。当時、「相手にコントロール奪われたカードをペンソルで手札に戻すと持ち主の手札に戻る」、「コントロールを奪っている相手カードを破壊すると持ち主である相手の墓地に落ちる」というルールがあることから、墓地や手札に相手のカードが入ることはないし、デッキも同様だと勘違いしたのだ。
そこで、私は手札、デッキ、墓地ではカード名だけ覚えておけばよく、その他の情報は記憶しておく必要はない。そして、手札、デッキ、墓地のカードはすべて自分のカードとして処理すれば良いと考えて設計してしまったのだ。
だから、プログラム的には、カードは手札や墓地からフィールドに出たときにようやく名前だけでなく様々な属性を持ったカードデータになる。攻守の変更もできるし、コントローラの変更もできる。しかし、手札、デッキ、墓地では名前以外ことは記憶していないので、他の属性の操作はできない。
したがって、相手のカードを手札に入れたり、デッキに入れることは今でもできない。これは完全に設計ミスである。私が様々なカードの効果を知らなかったことが原因だ。私は「他人のカードを手札やデッキに入れたら、混ざってしまって後で困ることになる。だからまぜることはないはずだ」と勝手に思っていた。そういう意味では遊戯王のルールは私の理解を越えていた。それがいいことだとはあまり思えないのだが。
というわけで、相手のカードを手札やデッキに入れるのが難しいという状況はどうにもならない。データ構造の変更は変更部分が多過ぎて私もどれくらいの作業になるかわからないのだ。
今の枠組みでうまくやるために、カード名に小細工して区別するようにするというのも検討したのだが、いい案は浮かばなかった。本当に申し訳ないと思っている。私がもっと色々なカードの効果さえ知っていれば…