マインスイーパ TypeA Ver.1.0

TypeA-自動化機能強化版 概要

基本的な説明はType0に記述されているので、そちらを参照。

TypeA - Autoでは、マスを開く作業の一部が自動化されている。強化は次の2段階。

第1段階では、マスに書かれた個数の爆弾が周囲8マスから既に全て見つかっている場合、手動で周囲をマスを開かなくとも、最初から勝手に開くようになる。判明済みのマスを除去する手間を省くことが可能。このモードでは、間違ったマスに旗を立てた瞬間、オートオープンによりゲームオーバーとなる。

第2段階では、更に旗を立てることが確定した場所、つまり、マスに書かれた爆弾の個数が、周囲8マスの開かれていないセルの数と一致した場合、それらのセルの旗まで自動的に設置される。この段階では、人間が行うのは爆弾のないセルを開くことだけになる。

あまりやり込んでいない人には面白くない機能だが、やり込んだ人なら、マインスイーパで実際に頭を働かせたり、どうにもならない部分だけを抜き出したものであることが理解できるはず。例えば初心者には難しい上級編でも、実際に頭を働かせて爆弾を見つける局面は驚くほど少ない。

デフォルトでは機能はOFFになっており、下の設定から有効に出来る。

Game

ゲーム
設定
Level
任意指定
Height:CELL
Width_:CELL
Mine__:CELL
自動化機能ON/OFF
ログ

Log

Version
TypeA-Ver.1.0.0
Date
2008/04/13
Logs

TypeA-自動化機能強化版。

細部の修正は多いが、実質的に追加したコードは以下の一関数のみ。

/*********************************************/
/*           MineSweeper.AutoMode            */
/*********************************************/
/* 
 * 自動化機能強化用。
*/
MineSweeper.AutoMode = function()
{
        if(!MineSweeper._isStart||MineSweeper._isEnd)return;
        var i,j,k,c,list,countF,countM,flag,point;
        var s = MineSweeper.vars.Size;
        flag = false;
        for(i=0; i<s[0]; i++)
                for(j=0; j<s[1]; j++)
                {
                        c = MineSweeper.vars.FieldCondition[i][j]-2;
                        if(c<=0||c>8)continue;
                        countF = 0;
                        countM = 0;
                        list = MineSweeper.getSurroundCell(i,j);
                        for(k=0;k<list.length;k++)
                        {
                                point = MineSweeper.vars.FieldCondition[list[k][0]][list[k][1]];
                                if(point==11)countF++;
                                if(point==2)countM++;
                        }
                        if( countF==c&&countM>0 )
                        {
                                MineSweeper.GameXOpen(i,j);
                                flag = true;
                                MineSweeper.output.Logs("AutoMode:Open実行["+i+","+j+"]");
                        }else
                                if(countF+countM==c&&MineSweeper._isAuto==2&&countM)
                                {
                                        for(k=0;k<list.length;k++)
                                        {
                                                point = MineSweeper.vars.FieldCondition[list[k][0]][list[k][1]];
                                                if(point==2)MineSweeper.GameOnFlag(list[k][0],list[k][1]);
                                        }
                                        flag = true;
                                        MineSweeper.output.Logs("AutoMode:Flag実行["+i+","+j+"]");
                                }
                }
        if( flag )setTimeout("MineSweeper.AutoMode()",100);
        else MineSweeper._parClick = true;
}

マインスイーパ