本文实例为大家分享了C#实现围棋游戏的具体代码,供大家参考,具体内容如下
之所以选择围棋作为大作业一方面是想挑战一下,另一方面是由于从6岁学围棋到11岁放下,再到今天已将近8年了,也算是回味一下童年吧,毕竟,曾梦想执子走天涯。
这是效果图:
这个程序除了一开始参考了中国象棋,其他的都是自己完成的。
不说了,上代码!!!
这个是主窗口代码:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.IO; using System.Media; ? //该产品归属****大学18级信息工程学院计算机系王**所有,如需转载,请注明原作者及出处:https://blog.csdn.net/Luoriliming namespace AlphaGo { ? ? public partial class FormMain : Form ? ? { ? ? ? ? //加载围棋类 ? ? ? ? private PlayChess playchess = new PlayChess(); ? ? ? ? ? public FormMain() ? ? ? ? { ? ? ? ? ? ? InitializeComponent(); ? ? ? ? ? ? //根据屏幕分辨率调整大小 ? ? ? ? ? ? playchess._rowHeight = Screen.PrimaryScreen.Bounds.Size.Height / 25; ? ? ? ? ? ? playchess._colWidth = playchess._rowHeight; ? ? ? ? ? ? playchess._lefttop.Y = 2* playchess._rowHeight; ? ? ? ? ? ? playchess._lefttop.X = playchess._lefttop.Y; ? ? ? ? } ? ? ? ? //绘制 ? ? ? ? private void FormMain_Paint(object sender, PaintEventArgs e) ? ? ? ? { ? ? ? ? ? ? playchess.Drawboard(e.Graphics); ? ? ? ? ? ? playchess.DrawPiece(e.Graphics); ? ? ? ? } ? ? ? ? //开局 ? ? ? ? private void toolStripMenuItemBegin_Click(object sender, EventArgs e) ? ? ? ? { ? ? ? ? ? ? timer1.Enabled = true; ? ? ? ? ? ? timer2.Enabled = false; ? ? ? ? ? ? playchess. PlaySound("begin.wav"); ? ? ? ? ? ? playchess.Begin(Player.白); ? ? ? ? ? ? Invalidate(); ? ? ? ? } ? ? ? ? //计时器 ? ? ? ? private void timer1_Tick(object sender, EventArgs e) ? ? ? ? { ? ? ? ? ? ? ? if (playchess._time1 <= 0) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? if (playchess._curPlayer == Player.黑) ? ? ? ? ? ? ? ? ? ? playchess._curPlayer = Player.白; ? ? ? ? ? ? ? ? else ? ? ? ? ? ? ? ? ? ? playchess._curPlayer = Player.黑; ? ? ? ? ? ? ? ? if (playchess._pickChess == Piece.黑子) ? ? ? ? ? ? ? ? ? ? playchess._pickChess = Piece.白子; ? ? ? ? ? ? ? ? else ? ? ? ? ? ? ? ? ? ? playchess._pickChess = Piece.黑子; ? ? ? ? ? ? ? ? if (playchess._timeColor == Color.Yellow) ? ? ? ? ? ? ? ? ? ? playchess._timeColor = Color.Red; ? ? ? ? ? ? ? ? else ? ? ? ? ? ? ? ? ? ? playchess._timeColor = Color.Yellow; ? ? ? ? ? ? ? ? playchess._time2 = 60; ? ? ? ? ? ? ? ? playchess._time1 = 60; ? ? ? ? ? ? ? ? timer1.Enabled = !timer1.Enabled; ? ? ? ? ? ? ? ? timer2.Enabled = !timer2.Enabled; ? ? ? ? ? ? } ? ? ? ? ? ? else ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? playchess._time1 = playchess._time1 - 1; ? ? ? ? ? ? ? ? Invalidate(); ? ? ? ? ? ? } ? ? ? ? } ? ? ? ? //鼠标移动 ? ? ? ? private void FormMain_MouseMove(object sender, MouseEventArgs e) ? ? ? ? { ? ? ? ? ? ? playchess._curMousePoint = e.Location; ? ? ? ? ? ? Invalidate(); ? ? ? ? } ? ? ? ? ? private void FormMain_MouseDown(object sender, MouseEventArgs e) ? ? ? ? { ? ? ? ? ? ? //若单击右键 ? ? ? ? ? ? if (e.Button == MouseButtons.Left) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? int row, col; ? ? ? ? ? ? ? ? //输出此时鼠标位置,并判断是否在范围内 ? ? ? ? ? ? ? ? bool valid = playchess.ConvertPointToRowCol(new Point(e.X, e.Y), out row, out col); ? ? ? ? ? ? ? ? ? ? playchess._dropRow = row; ? ? ? ? ? ? ? ? ? ? playchess._dropCol = col; ? ? ? ? ? ? ? ? if (valid == true) ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? if (playchess._chess[playchess._dropRow, playchess._dropCol] == Piece.无子) ? ? ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? ? playchess.PlaySound("drop.wav"); ? ? ? ? ? ? ? ? ? ? ? ? if (timer2.Enabled == false) ? ? ? ? ? ? ? ? ? ? ? ? ? ? timer2.Enabled = true; ? ? ? ? ? ? ? ? ? ? ? ? else ? ? ? ? ? ? ? ? ? ? ? ? ? ? timer2.Enabled = false; ? ? ? ? ? ? ? ? ? ? ? ? if (timer1.Enabled == false) ? ? ? ? ? ? ? ? ? ? ? ? ? ? timer1.Enabled = true; ? ? ? ? ? ? ? ? ? ? ? ? else ? ? ? ? ? ? ? ? ? ? ? ? ? ? timer1.Enabled = false; ? ? ? ? ? ? ? ? ? ? ? ? playchess.DropPiece(playchess._dropRow, playchess._dropCol); ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? Invalidate(); ? ? ? ? ? ? ? ? } ? ? ? ? ? ? } ? ? ? ? } ? ? ? ? //计时器 ? ? ? ? public void timer2_Tick(object sender, EventArgs e) ? ? ? ? { ? ? ? ? ? ?? ? ? ? ? ? ? if (playchess._time2 <= 0) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? if (playchess._curPlayer == Player.黑) ? ? ? ? ? ? ? ? ? ? playchess._curPlayer = Player.白; ? ? ? ? ? ? ? ? else ? ? ? ? ? ? ? ? ? ? playchess._curPlayer = Player.黑; ? ? ? ? ? ? ? ? if (playchess._pickChess == Piece.黑子) ? ? ? ? ? ? ? ? ? ? playchess._pickChess = Piece.白子; ? ? ? ? ? ? ? ? else ? ? ? ? ? ? ? ? ? ? playchess._pickChess = Piece.黑子; ? ? ? ? ? ? ? ? playchess._time2 = 60; ? ? ? ? ? ? ? ? playchess._time1 = 60; ? ? ? ? ? ? ? ? timer1.Enabled = !timer1.Enabled; ? ? ? ? ? ? ? ? timer2.Enabled = !timer2.Enabled; ? ? ? ? ? ? } ? ? ? ? ? ? else ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? playchess._time2 = playchess._time2 - 1; ? ? ? ? ? ? ? ? Invalidate(); ? ? ? ? ? ? } ? ? ? ? } ? ? ? ? //判断胜负 ? ? ? ? private void ToolStripMenuItemEnd_Click(object sender, EventArgs e) ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? ? if (playchess.IsOver() == Player.黑) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? MessageBox.Show("黑棋获胜!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1, MessageBoxOptions.ServiceNotification); ? ? ? ? ? ? ? ? playchess . _black++; ? ? ? ? ? ? } ? ? ? ? ? ? else if (playchess.IsOver() == Player.白) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? MessageBox.Show("白棋获胜!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1, MessageBoxOptions.ServiceNotification); ? ? ? ? ? ? ? ? playchess._white++; ? ? ? ? ? ? } ? ? ? ? ? ? else if (playchess.IsOver() == Player.无) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? MessageBox.Show("和棋!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1, MessageBoxOptions.ServiceNotification); ? ? ? ? ? ? } ? ? ? ? ? ? timer1.Enabled = false; ? ? ? ? ? ? timer2.Enabled = false; ? ? ? ? ? ? playchess._pickChess = Piece.无子; ? ? ? ? ? } ? ? ? ? ? private void ToolStripMenuItemSave_Click(object sender, EventArgs e) ? ? ? ? { ? ? ? ? ? ? //显示保存残局对话框 ? ? ? ? ? ? if (saveFileDialog1.ShowDialog() == DialogResult.OK) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? FileStream fs = new FileStream(saveFileDialog1.FileName, FileMode.Create); ? ? ? ? ? ? ? ? BinaryWriter bw = new BinaryWriter(fs); ? ? ? ? ? ? ? ? playchess.WriteTo(bw); ? ? ? ? ? ? ? ? bw.Close(); ? ? ? ? ? ? ? ? fs.Close(); ? ? ? ? ? ? } ? ? ? ? } ? ? ? ? ? private void ToolStripMenuItemOpen_Click(object sender, EventArgs e) ? ? ? ? { ? ? ? ? ? ? //显示打开残局对话框 ? ? ? ? ? ? if (openFileDialog1.ShowDialog() == DialogResult.OK) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? FileStream fs = new FileStream(openFileDialog1.FileName, FileMode.Open, FileAccess.Read); ? ? ? ? ? ? ? ? BinaryReader br = new BinaryReader(fs); ? ? ? ? ? ? ? ? playchess.ReadFrom(br); ? ? ? ? ? ? ? ? br.Close(); ? ? ? ? ? ? ? ? fs.Close(); ? ? ? ? ? ? ? ? Invalidate(); ? ? ? ? ? ? } ? ? ? ? } ? ? } }
这个是围棋类代码:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.IO; using System.Media; ? //该产品归属****大学18级信息工程学院计算机系王**所有,如需转载,请注明原作者及出处:https://blog.csdn.net/Luoriliming ? namespace AlphaGo { ? ? //枚举类型:棋子 ? ? public enum Piece ? ? { ? ? ? ? 无子 = 0, 黑子 = 1, 白子 = 2 ? ? } ? ? //枚举类型:双方棋手 ? ? public enum Player ? ? { ? ? ? ? 无 = 0, 黑 = 1, 白 = 2 ? ? } ? ? //类:走棋步骤 ? ? public class Step ? ? { ? ? ? ? public Player _player;//走棋方 ? ? ? ? public int _dropRow;//落下棋子行号 ? ? ? ? public int _dropCol;//落下棋子列号 ? ? ? ? public Piece _dropPiece;//落下位置棋子 ? ? } ? ? //类:围棋 ? ? class PlayChess ? ? { ? ? ? ? //类字段:棋子 ? ? ? ? public Piece[,] _chess = new Piece[25, 25]; ? ? ? ? //初始化执子为无子 ? ? ? ? public Piece _pickChess = Piece.无子; ? ? ? ? //落下棋子的位置 ? ? ? ? public int _dropRow = 0; ? ? ? ? public int _dropCol = 0; ? ? ? ? //闪烁 ? ? ? ? public Color _timeColor = Color.Yellow; ? ? ? ? //类字段:走棋方 ? ? ? ? public Player _curPlayer = Player.无; ? ? ? ? //鼠标移动位置 ? ? ? ? public Point _curMousePoint = new Point(0, 0); ? ? ? ? //类字段:设置走棋步骤表 ? ? ? ? public List<Step> _listStep = new List<Step>(); ? ? ? ? //保存棋盘左上角坐标 ? ? ? ? public Point _lefttop = new Point(100, 100); ? ? ? ? //棋子半径 ? ? ? ? public int _pieceR = 10; ? ? ? ? //保存行高和列宽 ? ? ? ? public int _rowHeight = 30; ? ? ? ? public int _colWidth = 30; ? ? ? ? //加载图像 ? ? ? ? //导入各种图片 ? ? ? ? Bitmap deskbmp = new Bitmap("desktop.jpg"); ? ? ? ? public Bitmap _redbmp = new Bitmap("黑方头像.jpg"); ? ? ? ? public Bitmap _bluebmp = new Bitmap("白方头像.jpg"); ? ? ? ? //设置是否遍历数组 ? ? ? ? public bool[,] _bianli = new bool[25, 25]; ? ? ? ? //设置气的数组 ? ? ? ? public int[,] _qi = new int[20, 20]; ? ? ? ? //设置白棋黑棋个数 ? ? ? ? public int _Whitechess; ? ? ? ? public int _Blackchess; ? ? ? ? //计时 ? ? ? ? public int _time1 = 60; ? ? ? ? public int _time2 = 60; ? ? ? ? //黑白子各胜局数 ? ? ? ? public int _black = 0; ? ? ? ? public int _white = 0; ? ? ? ? //劫 ? ? ? ? private bool[,] _jie = new bool[25, 25]; ? ? ? ? public int _lastrow = 0; ? ? ? ? public int _lastcol = 0; ? ? ? ? public int _chessnumber = 0; ? ? ? ? ? //类 最后一次走棋步骤 ? ? ? ? public Step _LastStep ? ? ? ? { ? ? ? ? ? ? get ? ? ? ? ? ? { ? ? ? ? ? ? ? ? int stepCount = _listStep.Count; ? ? ? ? ? ? ? ? if (stepCount > 0) ? ? ? ? ? ? ? ? ? ? return _listStep[stepCount - 1]; ? ? ? ? ? ? ? ? else ? ? ? ? ? ? ? ? ? ? return null; ? ? ? ? ? ? ? } ? ? ? ? } ? ? ? ? //类构造方法 ? ? ? ? public PlayChess() ? ? ? ? { ? ? ? ? ? ? //初始化围棋 ? ? ? ? ? ? Initialize(); ? ? ? ? ? } ? ? ? ? //类:初始化围棋 ? ? ? ? public void Initialize() ? ? ? ? { ? ? ? ? ? ? for (int i = 1; i <= 19; i++) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? for (int j = 1; j <= 19; j++) ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? _chess[j, i] = Piece.无子; ? ? ? ? ? ? ? ? } ? ? ? ? ? ? } ? ? ? ? ? ? ? _listStep.Clear(); ? ? ? ? } ? ? ? ? //类:围棋开局 ? ? ? ? public void Begin(Player FirstPlayer) ? ? ? ? { ? ? ? ? ? ? //初始化围棋 ? ? ? ? ? ? Initialize(); ? ? ? ? ? ? //初始化开局棋子布局 ? ? ? ? ? ? for (int i = 1; i <= 19; i++) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? for (int j = 1; j <= 19; j++) ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? _chess[j, i] = Piece.无子; ? ? ? ? ? ? ? ? } ? ? ? ? ? ? } ? ? ? ? ? ? //初始化时间 ? ? ? ? ? ? _time1 = 60; ? ? ? ? ? ? _time2 = 60; ? ? ? ? ? ? //初始化当前走棋方 ? ? ? ? ? ? _curPlayer = Player.白; ? ? ? ? ? ? _pickChess = Piece.白子; ? ? ? ? ? ? //初始化遍历条件 ? ? ? ? ? ? for (int i = 1; i <= 20; i++) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? for (int j = 1; j <= 20; j++) ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? _bianli[i, j] = false; ? ? ? ? ? ? ? ? } ? ? ? ? ? ? } ? ? ? ? ? ? //初始化劫 ? ? ? ? ? ? for (int i = 1; i <= 20; i++) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? for (int j = 1; j <= 20; j++) ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? _jie[i, j] = false; ? ? ? ? ? ? ? ? } ? ? ? ? ? ? } ? ? ? ? ? ? for (int i = 1; i <= 20; i++) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? for (int j = 1; j <= 20; j++) ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? _jie[i, j] = false; ? ? ? ? ? ? ? ? } ? ? ? ? ? ? } ? ? ? ? ? ? //初始化落子属性 ? ? ? ? ? ? _dropCol = 0; ? ? ? ? ? ? _dropRow = 0; ? ? ? ? ? ? _chessnumber = 0; ? ? ? ? } ? ? ? ? //类:落下棋子 ? ? ? ? public bool DropPiece(int dropRow, int dropCol) ? ? ? ? { ? ? ? ? ? ? if (_curPlayer != Player.无 && MatchRules(_curPlayer, _dropRow, _dropCol) == true&&_jie[dropRow,dropCol]==false) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? //保存走棋步骤到_listStep中 ? ? ? ? ? ? ? ? Step step = new Step(); ? ? ? ? ? ? ? ? step._player = _curPlayer; ? ? ? ? ? ? ? ? step._dropRow = dropRow; ? ? ? ? ? ? ? ? step._dropCol = dropCol; ? ? ? ? ? ? ? ? step._dropPiece = _chess[dropRow, dropCol]; ? ? ? ? ? ? ? ? _listStep.Add(step); ? ? ? ? ? ? ? ? _chess[dropRow, dropCol] = _pickChess; ? ? ? ? ? ? ? ? //播放落子声音 ? ? ? ? ? ? ? ? PlaySound("drop.wav"); ? ? ? ? ? ? ? ? //从左上角开始判断所有棋子,为了避免像虚竹一样自杀的存在 ? ? ? ? ? ? ? ? EatChess(1, 1); ? ? ? ? ? ? ? ? //重置遍历 ? ? ? ? ? ? ? ? for (int i = 1; i <= 19; i++) ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? for (int j = 1; j <= 19; j++) ? ? ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? ? _bianli[i, j] = false; ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? //判断劫 ? ? ? ? ? ? ? ? for (int i = 1; i <= 20; i++) ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? for (int j = 1; j <= 20; j++) ? ? ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? ? ? _jie[i, j] = false; ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? _jie[_lastrow, _lastcol] = true; ? ? ? ? ? ? ? ? //交换走棋方 ? ? ? ? ? ? ? ? if (_pickChess == Piece.黑子) ? ? ? ? ? ? ? ? ? ? _pickChess = Piece.白子; ? ? ? ? ? ? ? ? else if (_pickChess == Piece.白子) ? ? ? ? ? ? ? ? ? ? _pickChess = Piece.黑子; ? ? ? ? ? ? ? ? else ? ? ? ? ? ? ? ? ? ? return false; ? ? ? ? ? ? ? ? if (_curPlayer == Player.黑) ? ? ? ? ? ? ? ? ? ? _curPlayer = Player.白; ? ? ? ? ? ? ? ? else ? ? ? ? ? ? ? ? ? ? _curPlayer = Player.黑; ? ? ? ? ? ? ? ? //重置时间 ? ? ? ? ? ? ? ? _time2 = 60; ? ? ? ? ? ? ? ? _time1 = 60; ? ? ? ? ? ? ? ? //步数加一 ? ? ? ? ? ? ? ? _chessnumber = _chessnumber + 1; ? ? ? ? ? ? ? ? //添加上一步的存入 ? ? ? ? ? ? ? ? _dropCol = dropCol; ? ? ? ? ? ? ? ? _dropRow = dropRow; ? ? ? ? ? ? ? ? _lastcol = _dropCol; ? ? ? ? ? ? ? ? _lastrow = _dropRow; ? ? ? ? ? ? ? ? return true; ? ? ? ? ? ? } ? ? ? ? ? ? else ? ? ? ? ? ? ? ? return false; ? ? ? ? ? } ? ? ? ? //类:判断胜负 ? ? ? ? public Player IsOver() ? ? ? ? { ? ? ? ? ? ? //初始化黑白棋子所围的子 ? ? ? ? ? ? _Blackchess = 0; ? ? ? ? ? ? _Whitechess = 0; ? ? ? ? ? ? for (int i = 1; i <= 20; i++) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? for (int j = 1; j <= 20; j++) ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? for (int l = 1; l <= 20; l++) ? ? ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? ? for (int k = 1; k <= 20; k++) ? ? ? ? ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? ? ? ? _bianli[l, k] = false; ? ? ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? //查找该子属于黑子还是白子 ? ? ? ? ? ? ? ? ? ? int x = SearchChess(i, j); ? ? ? ? ? ? ? ? ? ? if (x == 2) ? ? ? ? ? ? ? ? ? ? ? ? _Whitechess++; ? ? ? ? ? ? ? ? ? ? else if (x == 1) ? ? ? ? ? ? ? ? ? ? ? ? _Blackchess++; ? ? ? ? ? ? ? ? } ? ? ? ? ? ? } ? ? ? ? ? ? //如果黑子多于白子,则黑方获胜;如果白子多于黑子,则白方获胜;如果双方棋子数相同,则平局 ? ? ? ? ? ? if (_Blackchess > _Whitechess) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? return Player.黑; ? ? ? ? ? ? } ? ? ? ? ? ? else if (_Whitechess > _Blackchess) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? return Player.白; ? ? ? ? ? ? } ? ? ? ? ? ? else ? ? ? ? ? ? ? ? return Player.无; ? ? ? ? ? } ? ? ? ? //类:围棋规则 ? ? ? ? public bool MatchRules(Player player, int dropRow, int dropCol) ? ? ? ? { ? ? ? ? ? ? bool matchflag = false; ? ? ? ? ? ? { ? ? ? ? ? ? ? ? //只能下在无子的位置 ? ? ? ? ? ? ? ? if (_chess[dropRow, dropCol] == Piece.无子 ) ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? matchflag = true; ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? return matchflag; ? ? ? ? ? ? } ? ? ? ? } ? ? ? ? //保存残局 ? ? ? ? public void WriteTo(BinaryWriter binaryWriter) ? ? ? ? { ? ? ? ? ? ? binaryWriter.Write(_curPlayer.ToString()); ? ? ? ? ? ? for (int j = 1; j <= 10; j++) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? for (int i = 1; i <= 10; i++) ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? binaryWriter.Write(_chess[i, j].ToString()); ? ? ? ? ? ? ? ? } ? ? ? ? ? ? } ? ? ? ? ? ? binaryWriter.Write(_listStep.Count); ? ? ? ? ? ? for (int i = 0; i <= _listStep.Count - 1; i++) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? binaryWriter.Write(_listStep[i]._player.ToString()); ? ? ? ? ? ? ? ? binaryWriter.Write(_listStep[i]._dropRow); ? ? ? ? ? ? ? ? binaryWriter.Write(_listStep[i]._dropPiece.ToString()); ? ? ? ? ? ? ? ? binaryWriter.Write(_listStep[i]._dropCol); ? ? ? ? ? ? } ? ? ? ? ? } ? ? ? ? //读取残局 ? ? ? ? public void ReadFrom(BinaryReader binaryReader) ? ? ? ? { ? ? ? ? ? ? Initialize(); ? ? ? ? ? ? _curPlayer = (Player)Enum.Parse(typeof(Player), binaryReader.ReadString()); ? ? ? ? ? ? for (int j = 1; j <= 10; j++) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? for (int i = 1; i <= 10; i++) ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? _chess[i, j] = (Piece)Enum.Parse(typeof(Piece), binaryReader.ReadString()); ? ? ? ? ? ? ? ? } ? ? ? ? ? ? } ? ? ? ? ? ? int stepCount = binaryReader.ReadInt32(); ? ? ? ? ? ? for (int i = 0; i <= _listStep.Count - 1; i++) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? Step step = new Step(); ? ? ? ? ? ? ? ? step._player = (Player)binaryReader.ReadInt32(); ? ? ? ? ? ? ? ? step._dropRow = binaryReader.ReadInt32(); ? ? ? ? ? ? ? ? step._dropPiece = (Piece)binaryReader.ReadInt32(); ? ? ? ? ? ? ? ? step._dropCol = binaryReader.ReadInt32(); ? ? ? ? ? ? ? ? _listStep.Add(step); ? ? ? ? ? ? } ? ? ? ? ? ? _pickChess = Piece.无子; ? ? ? ? ? } ? ? ? ? public void Drawboard(Graphics g) ? ? ? ? { ? ? ? ? ? ? //绘制桌面 ? ? ? ? ? ? g.DrawImage(deskbmp, new Point(0, 0)); ? ? ? ? ? ? //创建粗笔和细笔 ? ? ? ? ? ? Pen thickPen = new Pen(Color.Black, 6); ? ? ? ? ? ? Pen thinPen = new Pen(Color.Black, 2); ? ? ? ? ? ? //绘制粗外边框 ? ? ? ? ? ? int gap = (int)(_rowHeight * 0.25); ? ? ? ? ? ? g.DrawRectangle(thickPen, new Rectangle(_lefttop.X - gap, _lefttop.Y - gap, _colWidth * 18 + 2 * gap, _rowHeight * 18 + 2 * gap)); ? ? ? ? ? ? //绘制横轴竖轴 ? ? ? ? ? ? for (int i = 1; i <= 19; i++) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? g.DrawLine(thinPen, new Point(_lefttop.X, _lefttop.Y + (i - 1) * _rowHeight), ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?new Point(_lefttop.X + 18 * _colWidth, _lefttop.Y + (i - 1) * _rowHeight)); ? ? ? ? ? ? } ? ? ? ? ? ? for (int i = 1; i <= 19; i++) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? g.DrawLine(thinPen, new Point(_lefttop.X + _colWidth * (i - 1), _lefttop.Y), ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?new Point(_lefttop.X + (i - 1) * _colWidth, _lefttop.Y + 18 * _rowHeight)); ? ? ? ? ? ? } ? ? ? ? ? ? ? SolidBrush Brush = new SolidBrush(Color.Black); ? ? ? ? ? ? SolidBrush white = new SolidBrush(Color.White); ? ? ? ? ? ? SolidBrush num = new SolidBrush(Color.Blue); ? ? ? ? ? ? //书写坐标 ? ? ? ? ? ? Font font2 = new Font("黑体", (float)(_rowHeight * 0.6), FontStyle.Regular, GraphicsUnit.Pixel); ? ? ? ? ? ? for (int i = 1; i <= 19; i++) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? g.DrawString(i.ToString(), font2, Brush, new Point((int)(_lefttop.X - _colWidth * 1.1), ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?(int)(_lefttop.Y - _rowHeight * 0.4 + _rowHeight * (i - 1)))); ? ? ? ? ? ? } ? ? ? ? ? ? string[] colNumber = new string[19] { "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S" }; ? ? ? ? ? ? Font font3 = new Font("华文行楷", (float)(_rowHeight * 1.5), FontStyle.Regular, GraphicsUnit.Pixel); ? ? ? ? ? ? for (int i = 1; i <= 19; i++) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? g.DrawString(colNumber[i - 1], font2, Brush, new Point((int)(_lefttop.X - _colWidth * 0.3 + _colWidth * (i - 1)), ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?(int)(_lefttop.Y - _rowHeight * 1.1))); ? ? ? ? ? ? } ? ? ? ? ? ? //绘制黑白双方 ? ? ? ? ? ? g.DrawString("黑方", font3, Brush, new Point((int)(_lefttop.X + _colWidth * 19), ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?(int)(_lefttop.Y + _rowHeight * 2.2))); ? ? ? ? ? ? g.DrawString("白方", font3, white, new Point((int)(_lefttop.X + _colWidth * 19), ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?(int)(_lefttop.Y + _rowHeight * 9.4))); ? ? ? ? ? ? SolidBrush fontBrush = new SolidBrush(Color.Black); ? ? ? ? ? ? g.FillEllipse(fontBrush, _lefttop.X + _colWidth * 3 - (int)(_pieceR * 0.7), _lefttop.Y + _rowHeight * 3 - (int)(_pieceR * 0.7), (int)(_pieceR * 1), (int)(_pieceR * 1)); ? ? ? ? ? ? g.FillEllipse(fontBrush, _lefttop.X + _colWidth * 15 - (int)(_pieceR * 0.7), _lefttop.Y + _rowHeight * 3 - (int)(_pieceR * 0.7), (int)(_pieceR * 1), (int)(_pieceR * 1)); ? ? ? ? ? ? g.FillEllipse(fontBrush, _lefttop.X + _colWidth * 9 - (int)(_pieceR * 0.7), _lefttop.Y + _rowHeight * 3 - (int)(_pieceR * 0.7), (int)(_pieceR * 1), (int)(_pieceR * 1)); ? ? ? ? ? ? g.FillEllipse(fontBrush, _lefttop.X + _colWidth * 3 - (int)(_pieceR * 0.7), _lefttop.Y + _rowHeight * 9 - (int)(_pieceR * 0.7), (int)(_pieceR * 1), (int)(_pieceR * 1)); ? ? ? ? ? ? g.FillEllipse(fontBrush, _lefttop.X + _colWidth * 15 - (int)(_pieceR * 0.7), _lefttop.Y + _rowHeight * 9 - (int)(_pieceR * 0.7), (int)(_pieceR * 1), (int)(_pieceR * 1)); ? ? ? ? ? ? g.FillEllipse(fontBrush, _lefttop.X + _colWidth * 9 - (int)(_pieceR * 0.7), _lefttop.Y + _rowHeight * 9 - (int)(_pieceR * 0.7), (int)(_pieceR * 1), (int)(_pieceR * 1)); ? ? ? ? ? ? g.FillEllipse(fontBrush, _lefttop.X + _colWidth * 3 - (int)(_pieceR * 0.7), _lefttop.Y + _rowHeight * 15 - (int)(_pieceR * 0.7), (int)(_pieceR * 1), (int)(_pieceR * 1)); ? ? ? ? ? ? g.FillEllipse(fontBrush, _lefttop.X + _colWidth * 15 - (int)(_pieceR * 0.7), _lefttop.Y + _rowHeight * 15 - (int)(_pieceR * 0.7), (int)(_pieceR * 1), (int)(_pieceR * 1)); ? ? ? ? ? ? g.FillEllipse(fontBrush, _lefttop.X + _colWidth * 9 - (int)(_pieceR * 0.7), _lefttop.Y + _rowHeight * 15 - (int)(_pieceR * 0.7), (int)(_pieceR * 1), (int)(_pieceR * 1)); ? ? ? ? ? ? ? Font font4 = new Font("仿宋", (float)(_rowHeight * 1.5), FontStyle.Regular, GraphicsUnit.Pixel); ? ? ? ? ? ? //步数 ? ? ? ? ? ? g.DrawString("步数:", font3, Brush, new Point((int)((int)(_lefttop.X + _colWidth * 21)), ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?(int)(_lefttop.Y - _rowHeight))); ? ? ? ? ? ? g.DrawString(_chessnumber.ToString(), font4, num, new Point((int)(_lefttop.X + _colWidth * 25), ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?(int)(_lefttop.Y - _rowHeight * 1.1))); ? ? ? ? ? ? //黑白各胜局数 ? ? ? ? ? ? g.DrawString("黑:白 ? :", font2, Brush, new Point((int)((int)(_lefttop.X + _colWidth * 5)), ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?(int)(_lefttop.Y + _rowHeight * 20))); ? ? ? ? ? ? g.DrawString(_black.ToString(), font2, num, new Point((int)(_lefttop.X + _colWidth * 7), ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?(int)(_lefttop.Y + _rowHeight * 20))); ? ? ? ? ? ? g.DrawString(_white.ToString(), font2, num, new Point((int)(_lefttop.X + _colWidth * 8), ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?(int)(_lefttop.Y + _rowHeight * 20))); ? ? ? ? ? ? ? //g.DrawRectangle(thickPen, (int)(_lefttop.X + _colWidth * 25), (int)(_lefttop.Y - _rowHeight), 130, 60); ? ? ? ? ? ? g.DrawString("白方计时器:", font3, white, new Point((int)((int)(_lefttop.X + _colWidth * 19)), ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (int)(_lefttop.Y + _rowHeight * 16))); ? ? ? ? ? ? g.DrawString("黑方计时器:", font3, Brush, new Point((int)((int)(_lefttop.X + _colWidth * 19)), ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (int)(_lefttop.Y + _rowHeight * 6))); ? ? ? ? ? ? g.DrawString(_time2.ToString() + "s", font4, num, new Point((int)(_lefttop.X + _colWidth * 27), ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?(int)(_lefttop.Y + _rowHeight * 6))); ? ? ? ? ? ? g.DrawString(_time1.ToString() + "s", font4, num, new Point((int)(_lefttop.X + _colWidth * 27), ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?(int)(_lefttop.Y + _rowHeight * 16))); ? ? ? ? ? ? //加载黑白方图片 ? ? ? ? ? ? if (_curPlayer == Player.白) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? g.DrawImage(_bluebmp, new Point(_lefttop.X + 8 * _colWidth + 625, _lefttop.Y + 9 * _rowHeight + 10)); ? ? ? ? ? ? } ? ? ? ? ? ? else if (_curPlayer == Player.黑) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? g.DrawImage(_redbmp, new Point(_lefttop.X + 8 * _colWidth + 625, _lefttop.Y + 2 * _rowHeight - 10)); ? ? ? ? ? ? } ? ? ? ? ? ? DrawPickDropMark(g, _dropRow, _dropCol); ? ? ? ? } ? ? ? ? ? public void DrawPiece(Graphics g) ? ? ? ? { ? ? ? ? ? ? for (int j = 1; j <= 19; j++) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? for (int i = 1; i <= 19; i++) ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? if (_chess[i, j] != Piece.无子) ? ? ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? ? //绘制棋子 ? ? ? ? ? ? ? ? ? ? ? ? DrawPieceByCode(g, i, j, _chess[i, j]); ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? } ? ? ? ? ? ? } ? ? ? ? ? ? //绘制跟随鼠标移动的棋子 ? ? ? ? ? ? DrawMousePiece(g, _curMousePoint.X, _curMousePoint.Y, _pickChess); ? ? ? ? } ? ? ? ? //鼠标位置 ? ? ? ? public bool ConvertPointToRowCol(Point p, out int row, out int col) ? ? ? ? { ? ? ? ? ? ? row = (p.Y - _lefttop.Y) / _rowHeight + 1; ? ? ? ? ? ? if ((p.Y - _lefttop.Y) % _rowHeight >= _rowHeight / 2) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? row++; ? ? ? ? ? ? } ? ? ? ? ? ? col = (p.X - _lefttop.X) / _colWidth + 1; ? ? ? ? ? ? if ((p.X - _lefttop.X) % _colWidth >= _colWidth / 2) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? col++; ? ? ? ? ? ? } ? ? ? ? ? ? Point chessP = new Point(); ? ? ? ? ? ? chessP.X = _lefttop.X + _colWidth * (col - 1); ? ? ? ? ? ? chessP.Y = _lefttop.Y + _rowHeight * (row - 1); ? ? ? ? ? ? double dist = Math.Sqrt(Math.Pow(p.X - chessP.X, 2) + Math.Pow(p.Y - chessP.Y, 2)); ? ? ? ? ? ? if (dist <= _pieceR && (row <= 19) && (row >= 1) && (col <= 19) && (col >= 1)) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? return true; ? ? ? ? ? ? } ? ? ? ? ? ? else ? ? ? ? ? ? { ? ? ? ? ? ? ? ? row = 0; ? ? ? ? ? ? ? ? col = 0; ? ? ? ? ? ? ? ? return false; ? ? ? ? ? ? } ? ? ? ? } ? ? ? ? //绘制棋子 ? ? ? ? public void DrawMousePiece(Graphics g, int x, int y, Piece chess) ? ? ? ? { ? ? ? ? ? ? SolidBrush fontBrush; ? ? ? ? ? ? _pieceR = (int)(_rowHeight * 0.3); ? ? ? ? ? ? if (chess != Piece.无子) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? if (chess == Piece.黑子) ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? fontBrush = new SolidBrush(Color.Black); ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? else ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? fontBrush = new SolidBrush(Color.White); ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? g.FillEllipse(fontBrush, x - (int)(_pieceR * 1.0), y - (int)(_pieceR * 1), _pieceR * 2, _pieceR * 2); ? ? ? ? ? ? } ? ? ? ? } ? ? ? ? //绘制手中棋子 ? ? ? ? public void DrawPieceByCode(Graphics g, int row, int col, Piece chess) ? ? ? ? { ? ? ? ? ? ? SolidBrush fontBrush; ? ? ? ? ? ? _pieceR = (int)(_rowHeight * 0.3); ? ? ? ? ? ? if (chess != Piece.无子) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? if (chess == Piece.黑子) ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? fontBrush = new SolidBrush(Color.Black); ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? else ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? fontBrush = new SolidBrush(Color.White); ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? g.FillEllipse(fontBrush, _lefttop.X + _colWidth * (col - 1) - (int)(_pieceR), _lefttop.Y + _rowHeight * (row - 1) - (int)(_pieceR), _pieceR * 2, _pieceR * 2); ? ? ? ? ? ? } ? ? ? ? } ? ? ? ? public void DrawPickDropMark(Graphics g, int row, int col) ? ? ? ? { ? ? ? ? ? ? //在棋盘范围内绘制闪烁标记 ? ? ? ? ? ? if (row > 0) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? Pen pen = new Pen(_timeColor, 4); ? ? ? ? ? ? ? ? Point p = new Point(_lefttop.X + _colWidth * (col - 1), _lefttop.Y + _rowHeight * (row - 1)); ? ? ? ? ? ? ? ? //绘制闪烁标记 ? ? ? ? ? ? ? ? g.DrawLine(pen, p.X - _pieceR, p.Y - _pieceR, p.X - _pieceR / 2, p.Y - _pieceR); ? ? ? ? ? ? ? ? g.DrawLine(pen, p.X - _pieceR, p.Y - _pieceR, p.X - _pieceR, p.Y - _pieceR / 2); ? ? ? ? ? ? ? ? g.DrawLine(pen, p.X + _pieceR, p.Y - _pieceR, p.X + _pieceR / 2, p.Y - _pieceR); ? ? ? ? ? ? ? ? g.DrawLine(pen, p.X + _pieceR, p.Y - _pieceR, p.X + _pieceR, p.Y - _pieceR / 2); ? ? ? ? ? ? ? ? g.DrawLine(pen, p.X - _pieceR, p.Y + _pieceR, p.X - _pieceR / 2, p.Y + _pieceR); ? ? ? ? ? ? ? ? g.DrawLine(pen, p.X - _pieceR, p.Y + _pieceR, p.X - _pieceR, p.Y + _pieceR / 2); ? ? ? ? ? ? ? ? g.DrawLine(pen, p.X + _pieceR, p.Y + _pieceR, p.X + _pieceR / 2, p.Y + _pieceR); ? ? ? ? ? ? ? ? g.DrawLine(pen, p.X + _pieceR, p.Y + _pieceR, p.X + _pieceR, p.Y + _pieceR / 2); ? ? ? ? ? ? ? } ? ? ? ? ? } ? ? ? ? //吃子判定(因为不用考虑时间和空间复杂度,用暴力跑的,主要这段时间被卡超时卡太烦了) ? ? ? ? public void EatChess(int row, int col) ? ? ? ? { ? ? ? ? ? ? for (int i = 1; i <= 19; i++) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? for (int j = 1; j <= 19; j++) ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? if (_chess[i, j] != Piece.无子) ? ? ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? ? _qi[i, j] = Judge(_chess[i, j], i, j); ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? } ? ? ? ? ? ? } ? ? ? ? ? ? for (int i = 1; i <= 19; i++) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? for (int j = 1; j <= 19; j++) ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? if (_chess[i, j] == _chess[i + 1, j] && i <= 18) ? ? ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? ? _qi[i + 1, j] = _qi[i, j] + _qi[i + 1, j]; ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? if (_chess[i, j] == _chess[i, j + 1] && j <= 18) ? ? ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? ? _qi[i, j + 1] = _qi[i, j] + _qi[i, j + 1]; ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? } ? ? ? ? ? ? ? for (int i = 1; i <= 19; i++) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? for (int j = 1; j <= 19; j++) ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? if (_chess[i, j] == _chess[i + 1, j] && i <= 18) ? ? ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? ? if (_qi[i, j] < _qi[i + 1, j]) ? ? ? ? ? ? ? ? ? ? ? ? ? ? _qi[i, j] = _qi[i + 1, j]; ? ? ? ? ? ? ? ? ? ? ? ? else ? ? ? ? ? ? ? ? ? ? ? ? ? ? _qi[i + 1, j] = _qi[i, j]; ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? if (_chess[i, j] == _chess[i, j + 1] && j <= 18) ? ? ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? ? if (_qi[i, j] < _qi[i, j + 1]) ? ? ? ? ? ? ? ? ? ? ? ? ? ? _qi[i, j] = _qi[i, j + 1]; ? ? ? ? ? ? ? ? ? ? ? ? else ? ? ? ? ? ? ? ? ? ? ? ? ? ? _qi[i, j + 1] = _qi[i, j]; ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? if (_chess[i, j] == _chess[i - 1, j] && i >= 2) ? ? ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? ? if (_qi[i, j] < _qi[i - 1, j]) ? ? ? ? ? ? ? ? ? ? ? ? ? ? _qi[i, j] = _qi[i - 1, j]; ? ? ? ? ? ? ? ? ? ? ? ? else ? ? ? ? ? ? ? ? ? ? ? ? ? ? _qi[i - 1, j] = _qi[i, j]; ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? if (_chess[i, j] == _chess[i, j - 1] && j >= 2) ? ? ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? ? if (_qi[i, j] < _qi[i, j - 1]) ? ? ? ? ? ? ? ? ? ? ? ? ? ? _qi[i, j] = _qi[i, j - 1]; ? ? ? ? ? ? ? ? ? ? ? ? else ? ? ? ? ? ? ? ? ? ? ? ? ? ? _qi[i, j - 1] = _qi[i, j]; ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? } ? ? ? ? ? ? } ? ? ? ? ? ? for (int i = 19; i >= 1; i--) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? for (int j = 19; j >= 1; j--) ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? if (_chess[i, j] == _chess[i + 1, j] && i <= 18) ? ? ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? ? if (_qi[i, j] < _qi[i + 1, j]) ? ? ? ? ? ? ? ? ? ? ? ? ? ? _qi[i, j] = _qi[i + 1, j]; ? ? ? ? ? ? ? ? ? ? ? ? else ? ? ? ? ? ? ? ? ? ? ? ? ? ? _qi[i + 1, j] = _qi[i, j]; ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? if (_chess[i, j] == _chess[i, j + 1] && j <= 18) ? ? ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? ? if (_qi[i, j] < _qi[i, j + 1]) ? ? ? ? ? ? ? ? ? ? ? ? ? ? _qi[i, j] = _qi[i, j + 1]; ? ? ? ? ? ? ? ? ? ? ? ? else ? ? ? ? ? ? ? ? ? ? ? ? ? ? _qi[i, j + 1] = _qi[i, j]; ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? if (_chess[i, j] == _chess[i - 1, j] && i >= 2) ? ? ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? ? if (_qi[i, j] < _qi[i - 1, j]) ? ? ? ? ? ? ? ? ? ? ? ? ? ? _qi[i, j] = _qi[i - 1, j]; ? ? ? ? ? ? ? ? ? ? ? ? else ? ? ? ? ? ? ? ? ? ? ? ? ? ? _qi[i - 1, j] = _qi[i, j]; ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? if (_chess[i, j] == _chess[i, j - 1] && j >= 2) ? ? ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? ? if (_qi[i, j] < _qi[i, j - 1]) ? ? ? ? ? ? ? ? ? ? ? ? ? ? _qi[i, j] = _qi[i, j - 1]; ? ? ? ? ? ? ? ? ? ? ? ? else ? ? ? ? ? ? ? ? ? ? ? ? ? ? _qi[i, j - 1] = _qi[i, j]; ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? } ? ? ? ? ? ? } ? ? ? ? ? ? for (int i = 1; i <= 19; i++) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? for (int j = 19; j >= 1; j--) ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? if (_chess[i, j] == _chess[i + 1, j] && i <= 18) ? ? ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? ? if (_qi[i, j] < _qi[i + 1, j]) ? ? ? ? ? ? ? ? ? ? ? ? ? ? _qi[i, j] = _qi[i + 1, j]; ? ? ? ? ? ? ? ? ? ? ? ? else ? ? ? ? ? ? ? ? ? ? ? ? ? ? _qi[i + 1, j] = _qi[i, j]; ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? if (_chess[i, j] == _chess[i, j + 1] && j <= 18) ? ? ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? ? if (_qi[i, j] < _qi[i, j + 1]) ? ? ? ? ? ? ? ? ? ? ? ? ? ? _qi[i, j] = _qi[i, j + 1]; ? ? ? ? ? ? ? ? ? ? ? ? else ? ? ? ? ? ? ? ? ? ? ? ? ? ? _qi[i, j + 1] = _qi[i, j]; ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? if (_chess[i, j] == _chess[i - 1, j] && i >= 2) ? ? ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? ? if (_qi[i, j] < _qi[i - 1, j]) ? ? ? ? ? ? ? ? ? ? ? ? ? ? _qi[i, j] = _qi[i - 1, j]; ? ? ? ? ? ? ? ? ? ? ? ? else ? ? ? ? ? ? ? ? ? ? ? ? ? ? _qi[i - 1, j] = _qi[i, j]; ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? if (_chess[i, j] == _chess[i, j - 1] && j >= 2) ? ? ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? ? if (_qi[i, j] < _qi[i, j - 1]) ? ? ? ? ? ? ? ? ? ? ? ? ? ? _qi[i, j] = _qi[i, j - 1]; ? ? ? ? ? ? ? ? ? ? ? ? else ? ? ? ? ? ? ? ? ? ? ? ? ? ? _qi[i, j - 1] = _qi[i, j]; ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? } ? ? ? ? ? ? } ? ? ? ? ? ? for (int i = 19; i >= 1; i--) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? for (int j = 1; j <= 19; j++) ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? if (_chess[i, j] == _chess[i + 1, j] && i <= 18) ? ? ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? ? if (_qi[i, j] < _qi[i + 1, j]) ? ? ? ? ? ? ? ? ? ? ? ? ? ? _qi[i, j] = _qi[i + 1, j]; ? ? ? ? ? ? ? ? ? ? ? ? else ? ? ? ? ? ? ? ? ? ? ? ? ? ? _qi[i + 1, j] = _qi[i, j]; ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? if (_chess[i, j] == _chess[i, j + 1] && j <= 18) ? ? ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? ? if (_qi[i, j] < _qi[i, j + 1]) ? ? ? ? ? ? ? ? ? ? ? ? ? ? _qi[i, j] = _qi[i, j + 1]; ? ? ? ? ? ? ? ? ? ? ? ? else ? ? ? ? ? ? ? ? ? ? ? ? ? ? _qi[i, j + 1] = _qi[i, j]; ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? if (_chess[i, j] == _chess[i - 1, j] && i >= 2) ? ? ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? ? if (_qi[i, j] < _qi[i - 1, j]) ? ? ? ? ? ? ? ? ? ? ? ? ? ? _qi[i, j] = _qi[i - 1, j]; ? ? ? ? ? ? ? ? ? ? ? ? else ? ? ? ? ? ? ? ? ? ? ? ? ? ? _qi[i - 1, j] = _qi[i, j]; ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? if (_chess[i, j] == _chess[i, j - 1] && j >= 2) ? ? ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? ? if (_qi[i, j] < _qi[i, j - 1]) ? ? ? ? ? ? ? ? ? ? ? ? ? ? _qi[i, j] = _qi[i, j - 1]; ? ? ? ? ? ? ? ? ? ? ? ? else ? ? ? ? ? ? ? ? ? ? ? ? ? ? _qi[i, j - 1] = _qi[i, j]; ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? } ? ? ? ? ? ? } ? ? ? ? ? ? for (int i = 1; i <= 19; i++) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? for (int j = 1; j <= 19; j++) ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? if (_qi[i, j] == 0 && _chess[i, j] != _pickChess) ? ? ? ? ? ? ? ? ? ? ? ? _chess[i, j] = Piece.无子; ? ? ? ? ? ? ? ? } ? ? ? ? ? ? } ? ? ? ? } ? ? ? ? //判断气 ? ? ? ? public int Judge(Piece nowchess, int row, int col) ? ? ? ? { ? ? ? ? ? ? int qi = 0; ? ? ? ? ? ? _bianli[row, col] = true; ? ? ? ? ? ? if (_chess[row, col + 1] == Piece.无子 && col <= 18) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? qi++; ? ? ? ? ? ? } ? ? ? ? ? ? if (_chess[row, col - 1] == Piece.无子 && col >= 2) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? qi++; ? ? ? ? ? ? } ? ? ? ? ? ? if (_chess[row + 1, col] == Piece.无子 && row <= 18) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? qi++; ? ? ? ? ? ? } ? ? ? ? ? ? if (_chess[row - 1, col] == Piece.无子 && row >= 2) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? qi++; ? ? ? ? ? ? } ? ? ? ? ? ? return qi; ? ? ? ? ? ? } ? ? ? ? //搜索 ? ? ? ? public int SearchChess(int i, int j) ? ? ? ? { ? ? ? ? ? ? _bianli[i, j] = true; ? ? ? ? ? ? if (_chess[i, j] == Piece.黑子) ? ? ? ? ? ? ? ? return 1; ? ? ? ? ? ? else if (_chess[i, j] == Piece.白子) ? ? ? ? ? ? ? ? return 2; ? ? ? ? ? ? else ? ? ? ? ? ? { ? ? ? ? ? ? ? ? if (i + 1 <= 19 && _bianli[i + 1, j] == false) ? ? ? ? ? ? ? ? ? ? return SearchChess(i + 1, j); ? ? ? ? ? ? ? ? if (j + 1 <= 19 && _bianli[i, j + 1] == false) ? ? ? ? ? ? ? ? ? ? return SearchChess(i, j + 1); ? ? ? ? ? ? ? ? if (i - 1 >= 1 && _bianli[i - 1, j] == false) ? ? ? ? ? ? ? ? ? ? return SearchChess(i - 1, j); ? ? ? ? ? ? ? ? if (j - 1 >= 1 && _bianli[i, j - 1] == false) ? ? ? ? ? ? ? ? ? ? return SearchChess(i, j - 1); ? ? ? ? ? ? ? ? if (j - 1 >= 1 && _bianli[i, j - 1] == false) ? ? ? ? ? ? ? ? ? ? return SearchChess(i, j - 1); ? ? ? ? ? ? ? ? if (i - 1 >= 1 && _bianli[i - 1, j] == false) ? ? ? ? ? ? ? ? ? ? return SearchChess(i - 1, j); ? ? ? ? ? ? ? ? if (j + 1 <= 19 && _bianli[i, j + 1] == false) ? ? ? ? ? ? ? ? ? ? return SearchChess(i, j + 1); ? ? ? ? ? ? ? ? if (i + 1 <= 19 && _bianli[i + 1, j] == false) ? ? ? ? ? ? ? ? ? ? return SearchChess(i + 1, j); ? ? ? ? ? ? ? ? return 0; ? ? ? ? ? ? } ? ? ? ? } ? ? ? ? public void PlaySound(string wavFile) ? ? ? ? { ? ? ? ? ? ? //装载声音 ? ? ? ? ? ? SoundPlayer soundplay = new SoundPlayer(wavFile); ? ? ? ? ? ? //播放声音 ? ? ? ? ? ? soundplay.Play(); ? ? ? ? } ? ? } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。