2018年09月20日

ひまつぶしをする

会社で何もすることがないとき、待機時は暇つぶしが必要だ
でもセキュリティ(笑)がめちゃくちゃ厳しくてソフトウェアをインストールできない・・・

そんなときはExcelでゲームを自分で作ってしまえばいい

ゲームのコンセプト



・簡潔な処理で終わらせる、いつでもどこでも少しの手間で作れるもの
・原則、最初の初期化のみ、動的なものを作ろうとすると複雑化するため
・とにかく手軽に作るため、何の処理が早いかなどは一切考えない。

イメージとしてはテーブルゲームのシャッフル、初期配置のみを行うもの。
ゲームルールを定めて操作の厳格化などは複雑化するのでしない。

したがって、動的な要素を自分の運用で解決できる、もしくは必要としないゲームは原則作成可能。
逆に、対戦型は不可能。

ツール



Excelを用いる。
昨今、業務では必ず用いられるため、社内のシステムを管理する課としては、Excelはどうやったって禁止できない。

更に Undoができるメリットがつく。パズルゲームには必須の要素。
何の実装もなくできるので、非常に手軽。

何らかの資料のテンプレートにコードを実装すれば、資料作成に見せかけることも可能。
ただ、過信は禁物。


1. 四川省



8x17に麻雀牌を並べ、あるルールに基づいて牌を二枚ずつ取っていく。

・ルール
- 牌と牌が、2回曲がるまでに直線で結べる場合、それを除去できる
- すべての牌を取ったらクリア

Excelでやることは、牌を並べるまで。
「牌を除去する」はセルの値を削除することで、「2回曲がる」については自分の運用で行う。

・処理概要
- 4x9の配列を Integer で定義、4で初期化する。
 ⇒ただし、4,8 と4,9 については0にする (用いる字牌は7種のため)
- 8と17を最大とした2重ループの中で、4と9を最大にしたランダム変数を生成、先の配列で 0でなければ、該当セルに牌を置く。配列の値は -1 する。

セルに書き込む値は、記号化したほうが良い。安易に「四筒」など書くと、パット見られたときに気づかれやすくなる。かもしれない。
例えば、4pなど。
この置き換えについては、ランダム変数を select case にかけ、置き換えする手が良い。

色付けすると判別しやすくなり、プレイしやすくなるが、反面派手度が上がり、これもまた疑われやすくなってしまう。かもしれない。
ほどほどにカスタマイズすること。

2. ソリティア(クロンダイク 3セルルール)



先の四川省と同じ要領で作成する。
今回はトランプなので、配列は 4x13になる。
また除外はない。

・処理概要(共通)
- 4x13 の配列を Integer で定義、1で初期化する。

・処理概要
- 変数 A を最大値としたfor ループを開始する。このAはループのたびに 1 増加する
- 4と13を最大値としたランダム変数を生成、先の配列で 1ならば該当セルにカードを置く。配列の値は0にする。
- 現在値 B が Aでない場合、文字色は白にする

- ループ終了後、更に8回のループを開始する。
- 3の度に改行する。(1列にして、「3枚ごとにしか置けない」と自分で運用するようにしても良い。)置くカードの判定は上記同様。
- すべて文字色は白にする。(どうせ見るので、変更しなくても良い)

以後、「カードの移動」「山の詰め」などは自分で操作して行う。

同じようにして、フリーセル、トライピークなどほかルールも実装できる。

3. シグマーの庭園 (Opus Magnum)





私が個人的に好きなゲーム。
詳細は Steam の Opus Magnum をプレイしてほしい。

「配置がヘックスセルである」「配置する箇所が決まっている」という要素がやや難易度が高い。
しかし、これも運用次第でどうにでもなる。
手軽にやるというコンセプトのもの、「とにかく運用でどうにかする」というふうに実装する。

・実装概要
- 種類は「13」、数は「4が1」「8が4」「4が2」「5が1」「1が5」。配列をこのように初期化する。(以後マーブルと記載)
* 「4が1」⇒「塩」
* 「8が4」⇒「火」「水」「空気」「土」
* 「4が2」⇒「生命」「死」
* 「5が1」⇒「水銀」
* 「1が5」⇒「鉛」「錫」「鉄」「銅」「銀」
* 書き込む文字はこれ以外の、自分でわかる名称にしたほうが良い。資料に「死」とか書いてあったら上司が何事かと思うだろう。

- 13を最大値としたランダム変数を生成、上記の配列にて値が 0でなければセルに書き込み。(位置は問わない、上から順に列挙するだけで良い)

実装するのはこれだけである。
Opus Magnumを知っている人ならば「種類が13」に違和感を感じるかもしれないが、下記運用のためである。

・運用
- セルに書き込んだ値を上から順に使って、自分で配置する。
⇒配置は、最大幅11の正六角形の盤をイメージする
⇒マーブルは必ず隣接していること
- 中央に「14種目」を1つ置く

14種目(金)は必ず中央であるため、ランダムにする必要がない。なので、13種でランダムにした。

・ルール
- 六角形で考え、3面が開いているマーブル同士はいくら離れていても取ることができる。
- 取るときは必ず下記の組み合わせに従う。

1. 「8が4」としたマーブルは、同じ値同士で取ることができる。
2. しかし、「4が1」としたマーブルはワイルドカードであり、「4が1」としたマーブルとの組み合わせの他、「8が4」としたマーブルの組み合わせも有効。
3. 「5が1」としたマーブル(水銀)は「1が5」としたマーブルとの組み合わせが有効。ただし、「鉛」「錫」「鉄」「銅」「銀」の順で取る必要がある。水銀同士は取れない。
4. 金は1つだけで取ることができる。ただし、「銀」を取っており、また三面が開いていること。
5.「4が2」としたマーブル(生命、死)は、お互い同士(生命と死)で取ることができる。自分同士では取れない。

配置はどのようにしても良い。
なお、クリアが不可能なケースも多々ある。多くは「鉛」が中央に寄りすぎてしまうケース。
その場合は素直に再配置をする。

配置も運用でと記載したが、暇有り余る場合は、別に実装しても良い。
配置については、考えうる限り「すべてが隣接している」ならば、線対称でなくても点対称でなくても、偏っていても良い。自分がやりたい盤面を作っていい。




この他にも、先に書いたように「初期化だけすれば、後は運用でプレイできる」ものは作ることができる。
一応テトリス、ぷよぷよなども可。長考可能なので、難易度は下がるが・・・
そしてこれも書いたが、「派手すぎると上司に気づかれやすくなる」ので、カスタマイズはほどほどに・・・
posted by Extrose at 06:23 | Comment(0) | 日記
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント: