はぅ君プロジェクト > 管理人近況 > 未分類 > オブジェクト指向的カード 記述【考】
この記事は、旧システム用に書かれたものです。
本システムでは正常に表示されない可能性があります。ご了承ください。
しばらくは先週の倒れている間に思いついたものでも。
カードゲームを作成する際、重要なのは世界観の広がり。
つまり、発売の回を重ねるにつれて、ルールが拡張されていくことが大事。(そうでも無いなら、新しいブースターを発売する意義があまり無いと考えている。)
そこで、出てくるのが、ルールの改変の蓄積。
特にカードゲームの場合は、後半になるにつれて、新しい概念がたくさん出てくる。
というわけで、カードゲームの記述をオブジェクト指向化したらいいのでは無いだろうかという考察。
例えば、ユニットみたいなカードは以下のようなクラスを準備して、これをextendsして生成すればよい。
abstract class unit{
String name;
int level;
int life;
int attack;
int defence;
int position;
unit(){
}
void getDamage(int val){
life-=val;
}
void dead(){
life=0;
}
void assault(unit target){
target.getDamage(attack - target.getDefence());
}
boolean isLive(){
return life>0;
}
void destruction(){
position = PLACE_TRASH;
}
}
ユニットというものは、単に数値だけではなく、特殊能力みたいなものを持つから、それは以下のように追記すればよい。
void special_attack(unit target){
target.getDamage(2);
}
ルール部分も例えばこのように記述できる。
class rule{
void judge_card_existence(card[] target){
foreach(target as obj){
if(!obj.isLive()){
obj.destruction();
}
}
}
}
ルールの拡張も簡単である。
新しいパラメータを実装する場合は、コンストラクタ時に書いておけばよい。
public class mage extends unit{
int magic;
}
あと日本語のぶれも存在しないし(多くのテキストでは、同じ意味でもカードによって違う言い回しをしてたりする)、あいまいな定義はまず無いし(プログラムの基本)、フレーバーテキストはコメントで入れれば良いし。
なかなか面白そうかもしれない(・-・)
巷で話題の狂戦士の魂はこう書けるかもしれない。
class berserker_soul extends instantly_magic(){
void execute(){
my.deleteCard(-1);
while(my.getCard().getClass()=="class unit"){
my.deleteCard(-1);
unit tmp = my.chooseUnit();
if(tmp.getAttack()<=1500){
tmp.assault(my.chooseEnemyUnit);
}
}
}
}
コメント無し
2013年もよろしくお願いいたします!
合計 | 228095 |
12/12 | 20 |
12/11 | 99 |
12/10 | 80 |
12/09 | 93 |
12/08 | 78 |
12/07 | 93 |
12/06 | 98 |
1,721,983 | 秒 |
478 | 時間 |
19 | 日 |
5.4603 | % |