/// <summary> /// AI浅层思考 不需要推理能确定是雷的点 /// </summary> /// <param name="cnt"></param> public void _Think(int cnt) { for (int i = 0; i < cnt; i++) { mp[i].around = _Unopen(mp[i]); } for (int i = 0; i < cnt; i++) { for (int j = 0; j < cnt; j++) { Pane pane1 = (Pane)this.Controls[Map[mp[i].x, mp[i].y]]; Pane pane2 = (Pane)this.Controls[Map[mp[j].x, mp[j].y]]; int ui = mp[i].around; int uj = mp[j].around; if (ui == uj) { if (pane1._Around < pane2._Around) { point t = mp[i]; mp[i] = mp[j]; mp[j] = t; } } if (ui < uj) { point t = mp[i]; mp[i] = mp[j]; mp[j] = t; } } } for (int i = 0; i < this.row; i++) { for (int j = 0; j < this.col; j++) { if (_is_mine_rate[i, j] == 0 || _is_mine_rate[i, j] == 1) { continue; } _is_mine_rate[i, j] = -1; } } Queue <point> rec = new Queue <point>(); rec.Clear(); for (int i = 0; i < cnt; i++) { for (int j = 0; j < 8; j++) { int xx = nx[j] + mp[i].x; int yy = ny[j] + mp[i].y; point pos = new point(); pos.x = xx; pos.y = yy; if (Canset(xx, yy)) { Pane pane = (Pane)this.Controls[Map[xx, yy]]; Pane pane2 = (Pane)this.Controls[Map[mp[i].x, mp[i].y]]; if (pane._Stat == 0) { double a = (double)((double)pane2._Around - _Possible_mine(pane2)) / ((double)_Unopen(mp[i])); _is_mine_rate[xx, yy] = (a == 0)?0:this.max(a, (double)(_is_mine_rate[xx, yy])); if (_is_mine_rate[xx, yy] == 1) { _is_mine[xx, yy] = 1; pane._Mark(); } else { if (_is_mine_rate[xx, yy] == 0 && _vis[xx, yy] == 0) { point tmp = new point(); tmp.x = xx; tmp.y = yy; rec.Enqueue(tmp); } } } if (pane._Stat == 2) { _is_mine_rate[pane._x, pane._y] = 1; _is_mine[xx, yy] = 1; } } } } for (int i = 0; i < this.row; i++) { for (int j = 0; j < this.col; j++) { if (_is_mine_rate[i, j] == 0) { point tmp = new point(); tmp.x = i; tmp.y = j; if (_vis[i, j] == 0) { _vis[i, j] = 1; } } // Console.Write(Math.Round(_is_mine_rate[i, j], 3) + " "); } // Console.WriteLine(); } //Console.WriteLine(); if (rec.Count == 0) { int flag = 1; for (int i = 0; i < this.row; i++) { for (int j = 0; j < this.col; j++) { Pane pane = (Pane)this.Controls[Map[i, j]]; if (vis[i, j] == 0 && pane._Stat != 2) { flag = 0; } } } if (flag == 1) { Form1._instance.led2.timer.Close(); Form1._instance.led2.t.Abort(); switch (Form1.status) { case 20: MessageBox.Show("Defeat."); Form1.status = 23; break; case 21: MessageBox.Show("Defeat."); Form1.status = 23; break; case 22: MessageBox.Show("You win."); break; } //MessageBox.Show("win"); gameStat = 1; return; } Console.WriteLine("Can't Solve Now!"); return; } while (rec.Count != 0) { Thread.Sleep(Delay); point fr = rec.Dequeue(); AI_think(fr); } }