シェフィの実装を始めた俺達だが、既にルールの実装は終えたしある程度の盤面の表示の調整も終えたところ。
しかし今の実装では快適にゲームをプレイできるとは言えない状態。
まだまだやるべき事は多い……
(※ソースコードはGitHubで公開されておりすぐに遊ぶこともできます)
これまでに個々のカードをそれっぽく表示から変わっていないので快適とは言えない状態のままです。
一先ず、ゲームを快適にプレイするにあたっての改善点を列挙してみましょう:
と言う訳で順番に片付けていきましょう。
流石に一度に全部やるには分量が多いので、
今回は一つ目の「イベントカードの詳細をその場で確認できる機能」を追加する事にします。
カード名から詳細を返す helpTextFromCard
という関数があるものだとしましょう。
大方実装は以下のような感じです:
var ruleTextFromCardNameTable = {
'All-purpose Sheep': 'Choose a card in your hand.\nPlay this card in place of the card you chose.',
'Be Fruitful': 'Duplicate one of your Sheep cards.',
'Crowding': 'Release all but two Sheep cards.',
// ...
};
function helpTextFromCard(card) {
return card.name + '\n\n' + ruleTextFromCardNameTable[card.name];
}
makeEventCard
で作るイベントカードの中身に含めても構わないのですが、
ゲーム進行上は本質的な情報ではありませんし、
盤面の一部になると毎度毎度コピーされるので、
必要になったら適宜参照する形にします。
さて問題は表示方法です。
色々と方法は考えられますが、
ここは最も簡単な title
属性を利用する形にします。
今後、選択肢の決定はカードをクリックする形に変更するので、
これなら自然に参照できます。
カードの可視化は visualizeCard
で行っていました。
ここで作るDOMに title
属性の形でカードの詳細を埋め込むだけです。
function visualizeCard(card) {
var $body = $('<span>');
$body.addClass('body');
$body.text(card.name);
var $border = $('<span>');
$border.addClass('border');
$border.append($body);
var $card = $('<span>');
$card.addClass('card');
$card.addClass(cardType(card));
$card.addClass('rank' + card.rank);
$card.attr('title', helpTextFromCard(card)); // ***
$card.append($border);
return $card;
}
と言う訳で実際に実行してみましょう:
おお……これでうっかりカードの効果をど忘れした時も安心です。やりましたね。
という訳で次回はUI本格化編/雑務自動化の巻です。