1.ダウンロード
Stars & Circles は重力付きの4目並べです。
コンピュータと対戦できます。
レベルはかなり弱いです・・・。
思考ルーチンは、まだまだ改良の余地有りです。
Stars & Circles Ver1.0
2.Tick-Tack-Toe
TICK−TACK−TOEという単語を知っていますか?
日本語でいうと○×(マルバツ)です。
3目並べっていう、無味乾燥な呼び名もあります。
紙と鉛筆で遊べる簡単なゲームです。
ちょっと大きめな『井』の字を書いて、交互に○と×を埋めていくやつです。
このゲームは先手・後手とも最善手を打てば不敗と言うことが知られています。
3目並べが、Tick-Tack-Toeなら、
4目並べはTick-Tack-Toe-Teeかなって思って調べたけど
こんな言い方はしないみたい。。。
3.Tick-Tack-Toe-Tee
重力付き4目並べで有名なのは、MiltonBradlrey社制のConnect-Fourという、ボードを垂直にたてたタイプのものです。

6×7個の丸い穴がのぞいているものです。かなり特徴的です。
プラスチック感も、変な魅力を醸し出しています。。。
コマの置き方も、上から落とすというものなので視覚的にも面白いですね。
このほかにビーズのような木の実を串に刺していくタイプのものを思い浮かべる方もいるでしょう。

このタイプものは縦×横に、奥行きを加えて3次元の4目並べとなっています。

3次元版は状況の把握が難しく、気がつかないうちに4目並んでいたなんてことがおきます。
いずれのバリエーションでもルールは簡単です。
交互にコマを並べていき、縦、横、斜めに4目並べると勝ちというものです。
5目以上並ぶのは無効というルールもあるそうです。
Stars&Circlesでは、隣接ルールを設けてより単純化しています。
4目並べも、Hit&Blowと同様にコンピュータゲームの習作として、
題材にとりあげられています。
javaなどのネット公開版もいろいろありますね。
4.エクセル版デザイン
イメージは宇宙。
黒い闇に浮かぶ★と○の陣取りゲームです。
コマの形からゲームの名前を取りした。
ちょっとだけStars&Stripesを意識しながら。。。

見た目にはエクセルの面影がまったくありません。ホント真っ黒です。
宇宙をイメージしただけあって、ゲームボードの大きさは無限大です。
無限大の仕掛けは簡単です。スペースがなくなりかけたらずらすのです。
ゴーウエスト理論かな。「古い社会が停滞したら西へ行け!」です。
そう空いているところを使えばいいのです。
具体的には、コマが上に伸びてくると、全体を下にずらします。
同様に左に来たときには、右にずらします。
右側はエクセルの許す範囲なら配置可能です。
下の方には限度があります。それは、グレイの基準線で表されます。
コマをこれより下に置くことはできません。
このグレイの基準線を密かに”大地”と呼んでいます。
コマは、他のコマと接している場所しか置けません。
更に、中空に浮かぶこともできません。
すなわち、自分の下に”大地”か他のコマがなければならないのです。
このルールはとても重要です。
思考ルーチンの説明でもでてきますので、覚えておいてください。
5.マン−マシンインタフェイス
コマを置くには、置きたい場所をダブルクリックすればOKです。
本当はシングルクリックにしたかったんですが、エクセルのワークシートはダブルクリックか右クリックしかトラップしてくれません。
選択範囲の変更というイベントもありますが、マウス以外にも検知してしまいます。
マウス以外というのは、単に人間が矢印キー等でアクティブセルを変更する場合はもちろん
VBAのソースコードによる選択範囲の変更も含んでいます。
けっこうなんでもトラップされてしまう感じです。
ダブルクリックというちょっと煩雑な?操作をしますがまあ違和感なく操作できると思います。
例によってツールバーを作成しました。

VER1.1では、画面左端に日本語で表示するようにしています。
ツールバー上のTurn(VER1.1からは”手番”)とうい空のボタンがあります。
これは現在どちらの順番かをあらわすためのものです。
ツールバーから実行できる機能は、新規のゲーム、次の1手、プレイモード切替、画面切替の4機能です。
ただしこの値は、コンピュータの手番の場合の評価です。
コンピュータと対戦する対戦モードと、先手後手とも人間が行う研究モードです。
研究モードといってもなんの機能もありません。
プレイモードは画面左上に緑の文字で表示されます。
シンプル画面とは、ゲームに関係のないエクセルのツールバーや、列番号を消した画面のことです。
消してしまったツールバーはゲーム終了時に復元するようにしています。
6.エフェクト
これはHit&Blowに使用したのと同じ手法を使っています。
VER1.0ではグリーンですがVER1.1では黄色に光ります。
なんか考えているんだなって感じを演出してみました。
前回のゲームをクリアするためにグレイの大地がせりあがってきます。
特に意味はありませんが、気持ちの問題です。
どこが勝ちなのか解らせるためです。
実際やってみると、ちょっとひつこい感じがしますが。。。
VER1.1では以下の変更を行いました。
光る色を緑から黄色に変更
コンピュータの選択した場所がわかるように、黄色く光らせる
新規ゲームの際にセル1,1を選択し、スクロールを戻す
7.配置可能な場所
思考ルーチンを作る前段階として、配置可能な場所がいくつあるのか考えてみましょう。
布石のルールを思い出してください。
ということは、配置可能位置は、コマの並んでいる各列の1番高い部分と、コマの並んでいる部分の両脇の大地の上となります。
では問題です。こんな場合では★の配置可能な場所はいくつになるでしょうか?

答えはこちらです

結局、配置可能な場所は下記の式で表されます
配置可能な場所 = 列数 + 2
コマがたくさん配置されていても、この法則はあてはまります。
この配置可能な場所をすべて評価してコンピュータの着手を決めています。
8.不完全2手読み 第1の評価基準
不完全2手読みをしていますのでその説明をします。
まず配置可能位置をすべて検索して、以下の2点を評価します。
①自分のコマを置いた場合の評価
第1の評価の基準は、その場所に置いたときに縦、横、斜めに最高何目並ぶかという点です。
いわゆる3−3のダブルリーチ状態でも3目と評価します。
また、4コマ以上並ぶ場合でも、4目と評価します。
(実際には4以上の場合は以後の評価を打ち切り、そこへコマを置きます=勝ちです)
②相手のコマを置いた場合の評価
自分の場合と同様に相手が最高何目並ぶかをチェックします。
これは相手のコマが並ぶのを阻止するための評価です。
このとき、人間が4つ並んでしまうような場合は、以下の評価を打ち切り、
その場所にコマを置きます。
次に順位付けです。
自分が4つ並ぶ手と相手が4つ並ぶのを阻止する手ではどちらを優先すべきでしょうか。
答えは簡単ですね。自分の手を優先させます。
このことを式で表すとこんな感じです(不等号の大きな方が優先です)
自分が4つ並ぶ手(以下、自4) > 相手が4つ並ぶのを阻止する手(以下、相4)
同様に3目以下も含めて直線的評価をします。
自4>相4>自3>相3>自2>相2>自1>相1
これが第1の評価基準となります。
ただしこの評価だけだとひとつの候補手に絞るのは難しいでしょう。
そこで次の基準を使用します。
9.不完全2手読み 第2の評価基準
第1基準の直線的評価が同等の場合は、コマがクロスする焦点へ置くようにします。
そう第2の評価基準はコマの密集度合いです。
評価しようとしているコマから放射状に7方向を検索し、自分と同じコマが幾つあるかを数えます。
7方向といったのは、評価しようとしているコマの上にはほかのコマがないので、上の方向の検索の必要がないからです。
このとき、相手のコマで遮断さてれいる場合はそこまでの数を数えます。
また、コマが置かれていない場合はスキップしてその続きのコマも数えます。
数える限度は3マスまでです。このコマの数がそのまま評価になります。
最終的に評価の高いものを選択します。
3目並ぶ場合については、相手が手抜きをした場合に自分が4目並ぶかどうかをチェックをします。
これは”活き3”であるかどうかのチェックです。
チェックの結果、活き3であった場合は、第2の評価基準に重みをつけます。
このチェックはver1.1から付け加えましたが思考のスピードが多少鈍っていしまいました。
最後に自分が置いた後のチェックをします。
次の手で相手が4目を完成することができるような場合は、評価をゼロにしてほかの場所を選択するようにします。
このように限定して2手目を読むので、不完全2手読み方式と名付けました。
ツールバーの次の一手でコンピュータの思考する評価値を確認できます。
でもなんか思ったような評価になっていない場合がありますね。。。バグか!?
10.ゲーム制御プロシージャ
ゲームを制御しているプロシージャは実質1つです。
クリックイベントによってそのプロシージャが呼び出されます。
そのプロシージャの流れはこんな感じです。
人間の手番のクリック処理で、コンピュータの思考まで行っています。
そのため、プロシージャが終了した時点では、人間の手番になっているのです。
プレイモードが研究モードの場合はコンピュータの布石処理をスキップするだけです。
これで先手、後手とも人間が自由にコマをおくことができます。
コンピュータが先手の場合と、ゲームモードの切り替えの場合には、クリックを待たずにコンピュータの思考を行うよう必要があります。
まぁ大した仕掛けではありまんせんが。。
ゲーム基盤がこのような簡単な流れですので、VBAのわかる人なら、独自の思考ルーチンを作成して対戦させることも可能です。
ぜひ強いロジックを作ってみてください。
11.ボード制御プロシージャ
このゲームには基本的にボードの大きさの制限はありません。
コマが隣接していれば、どこにでも置けるようにしています。
ロジックとしては非常に簡単です。
右側はシートの限界までいけます。
左側は、あるところまできたら、ワークシートの列を挿入します。
つまりボードをずらしコマの打てる場所を作りだすのです。
ただ、ずらすときに右端がどうなるかは気にしていません。
上の限界についても同様です。
下は大地が下限ですので、それより下にいくことはありません。
また、新規ゲーム時には大地がせりあがってきて、前回ゲームのクリアします。
この場合はワークシートの列を削除することによって、ゲームボードを初期化しています。
12.シンプル画面プロシージャ
画面上のよけいなツールバーを隠してしまう処理です。
でも、ただ隠してしまうと復元できなくなってしまいます。
なぜなら、もともと非表示としていたツールバーなのか、このプロシージャが消してしまったものなのか判別ができないためです。
そこで、ツールバーを隠すときにワークシートにその情報を書き込んでおきます。
そしてノーマル画面に戻す際にそのワークシートを参考にして、復元すればよいのです。
日時: 2007年03月27日 22:40 | パーマリンク
« 365.24219 | メイン | Macのマウス »