2011 11 01

スパイダーを作るの1

何となく AppStore を眺めていたら、spider solitaire が置いてあった。 有料無料あわせて5個ぐらい。 Windows に標準で付いているものだからきっと誰かが移植しているとは思っていたが、有料で配布しているとは思わなかったな。 オリジナルとは違う何かの工夫があるんだろうか。 まあ、工夫が無いから只にしろってことでもないのだが。

で、何となく簡単に作れそうな気がするので、JavaScriptで作ってみることにする。 まずは仕様を考えるところから。

カードそのものに必要な機能
裏にする
  • 数字とマークが見えない状態にする。 ただし、カードがそこにあると判る状態であること。
  • カード同士の重ね合わせは変わらない。
表にする
  • 数字とマークが見える状態にする。
  • カード同士の重ね合わせは変わらない。
移動する
  • 平面上のカードの位置を変える。
  • カード同士の重ね合わせの順番を変える。
カードの配置で分類するゲームの構成要素
  • 全10列。
  • 同じ列の中では、カードを少し下にずらして重ねる。 つまり、一番手前のカードが縦位置では一番下になる。 以後、この位置を列の 「先頭」 とする。
  • ゲーム開始時は、左4列に5枚ずつ、残り6列に4枚ずつ、全て裏向き。
  • 未配カード群から1枚ずつ、各列の先頭に表向きに置ける。
未配カード群
  • まだ列に配っていないカードを置く。
  • 全て裏向き。
  • ここから各列に1枚ずつ、表向きにカードを配置する。
完了カード群
  • 同じマークでAからKまで連番で揃ったカードを置く。
  • 全て表向き。
  • ゲーム開始時は空。
カード移動
カード配布
  • 未配カード群からカードを各列の先頭に1枚ずつ表向きに配布する。
  • 空の列があるときは、未配カード群からカードを配れない。
  • 未配カード群にカードが無ければ、カードを配れない。
列移動
  • 条件を満たせば、列の先頭からカードを取り去って、他の列の先頭に追加できる。
  • 取り去るのと追加とはセット。 他の列に移動できない場合は、取り去ることもできない。
  • 取り去ることができるのは、列の先頭から同じマークで数字が連続して増加しているカード群。 当然表向き。
  • 列の先頭は常に取り去る候補とできる。
  • 移動するカードの順番はそのまま。
  • 列に追加できるのは、列の先頭の数字が、追加しようとしているカード群の末尾よりも1大きいとき。 マークは関係無い。
  • 空の列は、常に追加が可能。
  • カードを全て取り去った後、列の先頭が裏向きの場合は表向きにする。
完了
  • 同じマークでAからKまで揃ったら、直ちに完了カード群に移動する。
  • 移動後、列の先頭が裏向きの場合は表向きにする。
ゲームとして必要な機能
リセット
  • ゲームを破棄して、新しく始める。
勝敗
  • 全てのカードを完了カード群に移動できたら勝利。
  • リセットしたら敗北。
記録保持
  • 勝敗の記録を保持する。
  • 勝敗の記録をリセットできる。
実装しない機能
列の圧縮
列のカードが増えたとき、縦にずらす間隔を縮めるやつ。 見難い。
列中の選択カードのポップアップ
列中の選択したカードを手前に表示する機能。 列の圧縮をしないなら、ポップアップしなくても見えるからね。
スコア
偶然の要素が強過ぎなので、個人的にはどうでもいい。 気になる人がいるのか?
難易度変更
上級一択だろう。 これ以外でやってる人がいるのか?

大体こんなところか。 特に難しいところは無さそうだよな。