| 最新の追加 : Feb.12.2006 2000/XP対応版をアップロードしました |
MicrosoftのWindowsをインストールする時に、ゲームを指定すると、マインスイーパというゲームがインストールされます。単純なゲームながら、奥が深いというか、上達するためには不断の努力を必要とします。本プログラムは、現在の実力からひとつ上を目指している人のために作った、上達支援プログラムです。このほかに、本ソフトでマインスイーパを自動的に実行する機能が入れてあります。
(ソフトでのマインスイーパ自動実行の記録というものが日本(または世界で)で収集されているかどうか判りませんが、最新のバージョンでも、1秒以内に解けることを目的に作成しました。)
いまのところ、作者が意識している、本プログラムの使用を想定している方の実力は、上級ゲームで200秒程度の方です。
ちなみに、作者の現在の実力は、上級ゲームで161秒です。(多分私よりも実力が上の方は、このプログラムに+αの機能が必要になると思います。)
(1) 動作環境
Feb.12.2006に公開したV1.1.0はWindows2000およびXPに対応しています。(旧版のV1.0.0はME,98,95用です)
ダウンロードしたファイルは 実行形式ファイルが一つきりでそれを適当なディレクトリに入れて使ってください。本プログラムはたったの56Kbyteしかありません。
レジストリは使っていません。削除するには、このexeファイルを削除するだけです。
(2) 基本機能
大きく分けて2つの機能「アシスト機能」、「自動実行機能」があります。
アシスト機能とは、マインスイーパ上に安全にオープンできるところと、地雷であるところを指示する機能です。操作者は指示に従い安全にゲームを進めることができます。
この機能の目的は、自分が今まで判っていなかったパターンがあることを認識することです。「こんなところがオープンできたのか!」「ここに地雷があると特定できるのか!」と言うことがわかっていただければ、本プログラムのアシスト機能は成功です。
自動実行機能とは、操作者に成り代わって、マインスイーパを実行してしまう機能です。
実行速度を4段階で指定することができます。「最高速」を指定した場合、条件がよけれが1秒以内にマインスイーパをとくことができるでしょう。
(3) 操作方法
本プログラムとマインスイーパーを立ち上げておきます。
(起動時の画面42Kbyte)
特にマインスイーパーは、ウインドウ全体が画面に表示されているようにしておいてください。あと、ゲームメニューの中の「?マークの使用」はオフにしておくのがよいでしょう。
アシスト機能か自動実行機能かのどちらを実行するかを指定した後に、起動ボタンを押します。この後、本プログラムは、立ち上がっているマインスイーパプログラムの状態を取り込みつつ、指定された機能を実行していきます。
アシスト機能を起動した場合、本プログラムがマインスイーパー上にアシスト指示を表示します。(起動前のマインスイーパの例65Kbyte、起動後のアシスト表示の例67Kbyte)
この濃い灰色とピンクのブロックはまだオープンおよび旗立てされていないブロックですが、本プログラムによって、安全にオープンできるか地雷があるかを指示しているものです。操作者はこの表示に従って安全に操作することができます。(濃い灰色がオープンできるブロック、ピンクが地雷のあるブロック)
本プログラムウインドウ内の「最大限のアシスト」を選択した場合、できる限りの判定を行います。(が逆に、なぜ特定できるかが判りにくくなると思いまして、デフォルトでは未選択になっています。)最大限のアシストを使った場合と使わなかった場合の違いを比べて見てください。(比較画面139Kbyte)
自動実行機能を起動した場合は、本プログラムがマウスの操作をシミュレートして、マインスイーパプログラムを自動実行します。
実行スピードは4段階で「最高速」以外を選んだ場合は、実際のマウスも動かしてしまいます。これで、どこを開けたかわかります。F4keyで、実行を止められます。
「最高速」はとにかくスピードを重視しています。条件がよければ上級でも1秒以内に解くことができます。(サンプル画面178Kbyte)
(4) ダウンロード
(5) 相互リンク
(6) その後
(B)2006/2/12
5年ぶりの更新です。Windows95系列 とWindowsNT系列で微妙にマインスイーパの画面のレイアウトが異なっていることからうまく情報が取り込めていないことがやっとわかりました。今回は、Microsoft Visual Studio .NET 2003 の C++にて作成されていますが、.NETの機能もまったく利用せず、MFCさえも使わずにWinAPIを直接コールする方法をとっています。プログラムのサイズは、V1.1.0よりも少し小さくなっていますが、これはコンパイラのバージョンの違いによるものがほとんどです。
旧バージョンがWindows2000系列で動作できなかった理由は、画面のグラフィックパターンが微妙に異なっているからでした。なにかセキュリティー上の壁があるのかとも思っていましたが、何もないようです。下の(A)にも書きましたが、もともとこのプログラムは、あるプロセスが、別のプロセスにどこまで介入できるかを見てみたかったところから始まっています。結局、XPになっても、画面情報などを取り込むことはもちろんのこと、別プロセスのウィンドウ表示を書き換えてしまうこができるということが、このプログラムにより実証されています。
本バージョンではタイミングによってitsmineからの介入描画とマインスイーパの描画が競合してオープン済みの場所を灰色表示にしてしまうことがあります。V1.0.0ではそんなことは無かったのでOSのプロセスの切り替えロジックの差によるものと思われます。(A) 2001/6/04
最初のバージョンです。自分でプログラミングしておきながら、結果のアシスト表示に「なるほどここもオープンできたのか!」と自ら使用しております。
このプログラムは既存のプロセスを変えることなく、ほかのプロセスがどこまで介入できるかを試してみたいという個人的な理由からできたものです。
しかしながら、あまりトリッキーな事はしておりません。(マインスイーパのウインドウハンドルを取込んで、デバイスコンテキストを取得して・・・)
ところが、このバージョンでは、Windows2000では動作しませんが、どうして動かないのか、まだ完全に理由がつかめていません。
直接的には、ほかのプロセスのウインドウの画面情報が取込めないので、開いたブロックがなんであるかを判断できません。同じWin32で動作が違うところが難しいところですね。WindowsXPはどうでしょうか?もしテストされたかたがおられましたらご一報いただけるとうれしいです。
このプログラムは、VC++6.0でMFCを使わずにWindowsAPIのみで作られていますので、プログラムサイズは、このV1.0.0で70KByte弱と最近のプログラムとしては、非常に小さく作られています。(このようなプログラムで巨大なサイズだったら誰もダウンロードしないでしょうし)
いかにMFCのライブラリが大きいかがあらためて実感されます。
サイズが小さいとはいいましても、内部的にはワーキングスレッドを作って、ちゃんと画面と実際の動作を分離して処理しています。