实例介绍
【实例截图】
【核心代码】
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Collections; using System.Drawing.Drawing2D; using System.Net; using System.Net.Sockets; using System.Threading; namespace DTTest { public partial class Form1 : Form { private string localPath = Application.StartupPath; private Image deskImg; private CHIChess chi; private ArrayList chessList; private ChiDesk desk; private GraphicsPath oldPath; private GraphicsPath newPath; private bool isMove = false; private ArrayList history; private int[][] curMap; private CHIChess eatedChess; private UdpClient client; private bool canMove = false; public string remoteIP; public bool isOwner = true; private Abouts bout; private IAsyncResult result; private ListenMsg lmsg; public Form1(string remoteip,bool isOwner) { InitializeComponent(); this.remoteIP = remoteip; this.isOwner = isOwner; deskImg=Image.FromFile(localPath "\\imgs\\desk.bmp"); this.deskBox.Size = deskImg.Size; this.Size = new Size(deskImg.Width 9, deskImg.Height 60); this.MaximumSize = this.Size; this.MinimumSize = this.Size; desk = new ChiDesk(); chessList = new ArrayList(); #region //chi = new CHIChess(); //chi.location = new Point(68,79); //chi.ChiType = CHITypes.JU; //chi.curImg = this.getCHiChessImg(chi.ChiType); #endregion curMap = desk.GetMaps(); ; this.LoadChesses(curMap); client = new UdpClient(new IPEndPoint(Dns.GetHostByName(Dns.GetHostName()).AddressList[0], 1234)); lmsg = new ListenMsg(this.listenMsg); this.result = lmsg.BeginInvoke(null,null); } private void LoadChesses(int[][] map) { if (history != null) history= null; history = new ArrayList(); if (chessList != null) chessList.Clear(); oldPath = null; newPath = null; for (int row = 0; row < 10; row ) { for (int col = 0; col < 9; col ) { if (map[row][col] != 0) { CHIChess chiche = new CHIChess(); chiche.ChiType = desk.GetTypeByID(map[row][col]); chiche.SetIndexs(new Indexs(col,row)); chiche.curImg = this.getCHiChessImg(chiche.ChiType); chiche.CreatePath(); chessList.Add(chiche); } } } this.canMove = this.isOwner; this.deskBox.Invalidate(); } private void deskBox_Paint(object sender,PaintEventArgs e) { e.Graphics.DrawImageUnscaled(deskImg,new Point(0,0)); foreach(CHIChess onechess in chessList) { if (onechess != chi) { onechess.CreateSelf(e.Graphics); //e.Graphics.DrawPath(Pens.Red, onechess.chiPath); } } if (newPath != null&&oldPath != null) { e.Graphics.DrawPath(new Pen(Color.Red, 2), newPath); e.Graphics.DrawPath(new Pen(Color.Green,2), oldPath); } if (chi != null) { chi.CreateSelf(e.Graphics); //e.Graphics.DrawPath(Pens.Red,chi.chiPath); } } public Image getCHiChessImg(CHITypes chitype) { Image chiImg = null; if (isOwner == true)//正方 { switch (chitype) { case CHITypes.JIANG: chiImg = Image.FromFile(localPath "\\imgs\\111.png"); break; case CHITypes.SHI: chiImg = Image.FromFile(localPath "\\imgs\\222.png"); break; case CHITypes.XIANG: chiImg = Image.FromFile(localPath "\\imgs\\333.png"); break; case CHITypes.MA: chiImg = Image.FromFile(localPath "\\imgs\\444.png"); break; case CHITypes.JU: chiImg = Image.FromFile(localPath "\\imgs\\555.png"); break; case CHITypes.PAO: chiImg = Image.FromFile(localPath "\\imgs\\666.png"); break; case CHITypes.ZU: chiImg = Image.FromFile(localPath "\\imgs\\777.png"); break; case CHITypes.JIANG2: chiImg = Image.FromFile(localPath "\\imgs\\1.png"); break; case CHITypes.SHI2: chiImg = Image.FromFile(localPath "\\imgs\\2.png"); break; case CHITypes.XIANG2: chiImg = Image.FromFile(localPath "\\imgs\\3.png"); break; case CHITypes.MA2: chiImg = Image.FromFile(localPath "\\imgs\\4.png"); break; case CHITypes.JU2: chiImg = Image.FromFile(localPath "\\imgs\\5.png"); break; case CHITypes.PAO2: chiImg = Image.FromFile(localPath "\\imgs\\6.png"); break; case CHITypes.ZU2: chiImg = Image.FromFile(localPath "\\imgs\\7.png"); break; } } else { switch (chitype) { case CHITypes.JIANG: chiImg = Image.FromFile(localPath "\\imgs\\1.png"); break; case CHITypes.SHI: chiImg = Image.FromFile(localPath "\\imgs\\2.png"); break; case CHITypes.XIANG: chiImg = Image.FromFile(localPath "\\imgs\\3.png"); break; case CHITypes.MA: chiImg = Image.FromFile(localPath "\\imgs\\4.png"); break; case CHITypes.JU: chiImg = Image.FromFile(localPath "\\imgs\\5.png"); break; case CHITypes.PAO: chiImg = Image.FromFile(localPath "\\imgs\\6.png"); break; case CHITypes.ZU: chiImg = Image.FromFile(localPath "\\imgs\\7.png"); break; case CHITypes.JIANG2: chiImg = Image.FromFile(localPath "\\imgs\\111.png"); break; case CHITypes.SHI2: chiImg = Image.FromFile(localPath "\\imgs\\222.png"); break; case CHITypes.XIANG2: chiImg = Image.FromFile(localPath "\\imgs\\333.png"); break; case CHITypes.MA2: chiImg = Image.FromFile(localPath "\\imgs\\444.png"); break; case CHITypes.JU2: chiImg = Image.FromFile(localPath "\\imgs\\555.png"); break; case CHITypes.PAO2: chiImg = Image.FromFile(localPath "\\imgs\\666.png"); break; case CHITypes.ZU2: chiImg = Image.FromFile(localPath "\\imgs\\777.png"); break; } } return chiImg; } private void deskBox_MouseDown(object sender,MouseEventArgs e) { if (e.Button == MouseButtons.Left) { Point curpoint = e.Location; findSel fs = new findSel(this.findSel); fs.Invoke(e.Location); this.deskBox.Invalidate(); } } private void findSel(Point e) { bool isfind = false; foreach (CHIChess onechess in chessList) { if (onechess.chiPath.IsVisible(e)&&Convert.ToInt16(onechess.ChiType)>=8&&canMove==true) { chi = onechess; isfind = true; break; } } } private void deskBox_MouseMove(object sender,MouseEventArgs e) { if (e.Button == MouseButtons.Left&&chi!=null) { chi.location = e.Location; isMove = true; this.deskBox.Invalidate(); } } private void deskBox_MouseUp(object sender,MouseEventArgs e) { this.MoveChess(e.Location); } private void MoveChess(Point p) { if (chi != null) { bool isnew = this.findNewPath(p,curMap); chi.CreatePath(); if (isnew == true) { newPath = (GraphicsPath)chi.chiPath.Clone(); this.SendMoveInfo(); } chi = null; this.deskBox.Invalidate(); } } private bool findNewPath(Point p,int[][] map) { Indexs oldIndex = chi.MyIndex; bool findnew = false; for (int row = 0; row < 10; row ) { for (int col = 0; col < 9; col ) { //if(map[row][col]==0) //{ GraphicsPath gpath = new GraphicsPath(); if (row < 5) { gpath.AddRectangle(new Rectangle(68 col* 39-20,38 row* 39-20,40,40)); } else { gpath.AddRectangle(new Rectangle(68 col* 39-20,43 row* 39-20,40,40)); } if (gpath.IsVisible(chi.location)) { if (checkCanPass(chi.MyIndex, new Indexs(col, row), chi.ChiType, curMap))//能通过 { if (chi.ChiType != CHITypes.PAO2 && chi.ChiType != CHITypes.PAO)//吃子 { if(map[row][col]!=0&&!EatChess(new Indexs(col,row))) { break; } } CHIChess chiclone1=chi.cloneSelf(); HistoryRecorder recoder = new HistoryRecorder(chiclone1,chiclone1.MyIndex, new Indexs(col, row)); if (eatedChess != null) { recoder.eatCHI = this.eatedChess.cloneSelf(); } eatedChess = null; history.Add(recoder); oldPath =(GraphicsPath)chi.chiPath.Clone(); map[chi.MyIndex.Y][chi.MyIndex.X] = 0; chi.SetIndexs(new Indexs(col, row)); map[row][col] = desk.GetIDByType(chi.ChiType); findnew = true; } break; } //} } } if (!findnew) chi.SetIndexs(oldIndex); return findnew; } private bool checkCanPass(Indexs oldIndex, Indexs newIndexs,CHITypes types,int[][] map) { bool passed = true; //判断两边的将是否碰面了 if (oldIndex.X >= 3 && oldIndex.X <= 5) { bool haslaotou = false; Indexs laotou1 = new Indexs(-1, -1); Indexs laotou2 = new Indexs(-1, -1); for (int y = 0; y <= 2; y ) { if (map[y][oldIndex.X] == 5) { laotou1.X = oldIndex.X; laotou1.Y = y; break; } } for (int y = 7; y <= 9; y ) { if (map[y][oldIndex.X] == 12) { laotou2.X = oldIndex.X; laotou2.Y = y; } } if (laotou1.Y != -1 && laotou2.Y != -1 && laotou1.X==laotou2.X)//两个老头在同一条线上面 { int zicount = 0; if (laotou2.Y > laotou1.Y) { for (int y = laotou1.Y 1; y <laotou2.Y; y ) { if ((map[y][oldIndex.X] != 0 && map[y][oldIndex.X] != map[oldIndex.Y][oldIndex.X]) ||oldIndex.X==newIndexs.X)//找到了隔点 { zicount ; break; } } } if (zicount<=0) { return false; } } } if (types == CHITypes.JU || types == CHITypes.JU2) { if (newIndexs.X == oldIndex.X&&newIndexs.Y!=oldIndex.Y)//纵向移动 { if (oldIndex.Y < newIndexs.Y) { for (int y = oldIndex.Y 1;y<newIndexs.Y; y ) { if (map[y][oldIndex.X] != 0)//路径中间有障碍物 { passed = false; break; } } } else { for (int y=newIndexs.Y 1; y <oldIndex.Y; y ) { if (map[y][oldIndex.X] != 0)//路径中间有障碍物 { passed = false; break; } } } return passed; } else if (newIndexs.Y == oldIndex.Y&&newIndexs.X!=oldIndex.X)//横向移动 { if (oldIndex.X<newIndexs.X) { for (int x = oldIndex.X 1; x < newIndexs.X; x ) { if (map[oldIndex.Y][x] != 0) { passed = false; break; } } } else { for (int x = newIndexs.X 1; x < oldIndex.X; x ) { if (map[oldIndex.Y][x] != 0) { passed = false; break; } } } } else { return false; } } if (types == CHITypes.MA || types == CHITypes.MA2) { passed = false; if (newIndexs.X == oldIndex.X - 1 && newIndexs.Y == oldIndex.Y - 2&&map[oldIndex.Y-1][oldIndex.X]==0) { return true; } if (newIndexs.X == oldIndex.X 1 && newIndexs.Y == oldIndex.Y - 2 && map[oldIndex.Y - 1][oldIndex.X] == 0) { return true; } if (newIndexs.X == oldIndex.X - 1 && newIndexs.Y == oldIndex.Y 2 && map[oldIndex.Y 1][oldIndex.X] == 0) { return true; } if (newIndexs.X == oldIndex.X 1 && newIndexs.Y==oldIndex.Y 2 && map[oldIndex.Y 1][oldIndex.X] == 0) { return true; } if (newIndexs.X == oldIndex.X - 2 && newIndexs.Y == oldIndex.Y - 1 && map[oldIndex.Y][oldIndex.X - 1] == 0) { return true; } if (newIndexs.X == oldIndex.X - 2 && newIndexs.Y == oldIndex.Y 1 && map[oldIndex.Y][oldIndex.X - 1] == 0) { return true; } if (newIndexs.X == oldIndex.X 2 && newIndexs.Y==oldIndex.Y - 1 && map[oldIndex.Y][oldIndex.X 1] == 0) { return true; } if (newIndexs.X == oldIndex.X 2 && newIndexs.Y == oldIndex.Y 1 && map[oldIndex.Y][oldIndex.X 1] == 0) { return true; } return passed; } if (types == CHITypes.XIANG || types == CHITypes.XIANG2) { passed = false; if (types == CHITypes.XIANG&&newIndexs.Y<=4) { if (newIndexs.X == oldIndex.X - 2 && newIndexs.Y == oldIndex.Y - 2 && map[oldIndex.Y - 1][oldIndex.X - 1] == 0) { return true; } if (newIndexs.X == oldIndex.X 2 && newIndexs.Y == oldIndex.Y - 2 && map[oldIndex.Y - 1][oldIndex.X 1] == 0) { return true; } if (newIndexs.X == oldIndex.X - 2 && newIndexs.Y == oldIndex.Y 2 && map[oldIndex.Y 1][oldIndex.X - 1] == 0) { return true; } if (newIndexs.X == oldIndex.X 2 && newIndexs.Y == oldIndex.Y 2 && map[oldIndex.Y 1][oldIndex.X 1] == 0) { return true; } return passed; } if(types==CHITypes.XIANG2&&newIndexs.Y>=5) { if (newIndexs.X == oldIndex.X - 2 && newIndexs.Y == oldIndex.Y - 2 && map[oldIndex.Y - 1][oldIndex.X - 1] == 0) { return true; } if (newIndexs.X == oldIndex.X 2 && newIndexs.Y == oldIndex.Y - 2 && map[oldIndex.Y - 1][oldIndex.X 1] == 0) { return true; } if (newIndexs.X == oldIndex.X - 2 && newIndexs.Y == oldIndex.Y 2 && map[oldIndex.Y 1][oldIndex.X - 1] == 0) { return true; } if (newIndexs.X == oldIndex.X 2 && newIndexs.Y == oldIndex.Y 2 && map[oldIndex.Y 1][oldIndex.X 1] == 0) { return true; } } return passed; } if (types == CHITypes.SHI || types == CHITypes.SHI2) { passed = false; if (Math.Abs(newIndexs.X-oldIndex.X)==1&&Math.Abs(newIndexs.Y-oldIndex.Y)==1) { if (newIndexs.X >= 3 && newIndexs.X <= 5) { if((newIndexs.Y>=0&&newIndexs.Y<=2)||(newIndexs.Y>=7&&newIndexs.Y<=9)) { return true; } } } return passed; } if (types == CHITypes.JIANG || types == CHITypes.JIANG2) { passed = false; if ((Math.Abs(newIndexs.X - oldIndex.X) == 1 && newIndexs.Y== oldIndex.Y)|| Math.Abs(newIndexs.Y - oldIndex.Y) == 1 && newIndexs.X == oldIndex.X) { if (newIndexs.X >= 3 && newIndexs.X <= 5) { if ((newIndexs.Y >= 0 && newIndexs.Y <= 2) || (newIndexs.Y >= 7 && newIndexs.Y <= 9)) { return true; } } } return passed; } if (types == CHITypes.PAO || types == CHITypes.PAO2) { int chessCount = 0; if (newIndexs.X == oldIndex.X && newIndexs.Y != oldIndex.Y)//纵向移动 { if (oldIndex.Y < newIndexs.Y) { for (int y = oldIndex.Y 1; y < newIndexs.Y; y ) { if (map[y][oldIndex.X] != 0)//路径中间有障碍物 { chessCount ; } } } else { for (int y = newIndexs.Y 1; y < oldIndex.Y; y ) { if (map[y][oldIndex.X] != 0)//路径中间有障碍物 { chessCount ; } } } if (chessCount == 0 && map[newIndexs.Y][newIndexs.X] == 0)//空走 { return true; } if (chessCount == 1 && map[newIndexs.Y][newIndexs.X] != 0)//吃子走 { if (EatChess(newIndexs)) { return true; } } return false; } else if (newIndexs.Y == oldIndex.Y && newIndexs.X != oldIndex.X)//横向移动 { if (oldIndex.X < newIndexs.X) { for (int x = oldIndex.X 1; x < newIndexs.X; x ) { if (map[oldIndex.Y][x] != 0) { chessCount ; } } } else { for (int x = newIndexs.X 1; x < oldIndex.X; x ) { if (map[oldIndex.Y][x] != 0) { chessCount ; } } } if (chessCount == 0&&map[newIndexs.Y][newIndexs.X]==0)//空走 { return true; } if (chessCount == 1 && map[newIndexs.Y][newIndexs.X] != 0)//吃子走 { if (EatChess(newIndexs)) { return true; } } return false; } else { return false; } } if (types == CHITypes.ZU || types == CHITypes.ZU2) { passed = false; if (types == CHITypes.ZU) { if (oldIndex.Y <= 4) { if (newIndexs.Y - oldIndex.Y ==1&&newIndexs.X==oldIndex.X) { return true; } } else { if (!(newIndexs.X != oldIndex.X && newIndexs.Y != oldIndex.Y)) { if(newIndexs.Y - oldIndex.Y==1) { return true; } if(Math.Abs(newIndexs.X-oldIndex.X)==1) { return true; } } } return passed; } if (types == CHITypes.ZU2) { if (oldIndex.Y>=5) { if (newIndexs.Y - oldIndex.Y ==-1 && newIndexs.X == oldIndex.X) { return true; } } else { if (!(newIndexs.X != oldIndex.X && newIndexs.Y != oldIndex.Y)) { if (newIndexs.Y - oldIndex.Y == -1) { return true; } if(Math.Abs(newIndexs.X - oldIndex.X) == 1) { return true; } } } } return passed; } return passed; } private bool EatChess(Indexs newchessIndex) { bool eatOk = false; object[] objs = chessList.ToArray(); for (int i = 0; i < objs.Length; i ) { CHIChess onechess = (CHIChess)objs[i]; if (onechess.MyIndex.X == newchessIndex.X && onechess.MyIndex.Y == newchessIndex.Y && onechess != chi)//找到了吃的子 { if ((chi.ChiType.ToString().IndexOf("2")!=-1&&onechess.ChiType.ToString().IndexOf("2")==-1)|| (chi.ChiType.ToString().IndexOf("2")==-1 && onechess.ChiType.ToString().IndexOf("2")!=-1))//只能吃对方的子 { eatedChess = onechess.cloneSelf(); chessList.Remove(onechess); eatOk = true; } break; } } return eatOk; } private void button1_Click(object sender, EventArgs e) { //if (history != null && history.Count > 0) //{ // UdpClient uclient = new UdpClient(); // uclient.Connect(IPAddress.Parse(this.textBox1.Text),2345); // HistoryRecorder hisrecoder = (HistoryRecorder)history.ToArray()[history.Count - 1]; // byte[] bts = null; // if (hisrecoder.eatCHI != null) // { // bts = Encoding.UTF8.GetBytes(desk.GetIDByType(hisrecoder.hisCHI.ChiType) // "|" hisrecoder.fromIndex.X "," hisrecoder.fromIndex.Y "|" // hisrecoder.toIndex.X "," hisrecoder.toIndex.Y "|" desk.GetIDByType(hisrecoder.eatCHI.ChiType)); // } // else // { // bts = Encoding.UTF8.GetBytes(desk.GetIDByType(hisrecoder.hisCHI.ChiType) // "|" hisrecoder.fromIndex.X "," hisrecoder.fromIndex.Y "|" // hisrecoder.toIndex.X "," hisrecoder.toIndex.Y "|0"); // } // uclient.Send(bts, bts.Length); //} } private void SendMsg(byte[] msg) { UdpClient uclient = new UdpClient(); uclient.Connect(IPAddress.Parse(remoteIP), 1234); uclient.Send(msg,msg.Length); } private void SendMoveInfo() { if (history != null && history.Count > 0) { HistoryRecorder hisrecoder = (HistoryRecorder)history.ToArray()[history.Count - 1]; byte[] bts = null; if (hisrecoder.eatCHI != null) { bts = Encoding.UTF8.GetBytes(desk.GetIDByType(hisrecoder.hisCHI.ChiType) "|" hisrecoder.fromIndex.X "," hisrecoder.fromIndex.Y "|" hisrecoder.toIndex.X "," hisrecoder.toIndex.Y "|" desk.GetIDByType(hisrecoder.eatCHI.ChiType)); } else { bts = Encoding.UTF8.GetBytes(desk.GetIDByType(hisrecoder.hisCHI.ChiType) "|" hisrecoder.fromIndex.X "," hisrecoder.fromIndex.Y "|" hisrecoder.toIndex.X "," hisrecoder.toIndex.Y "|0"); } this.canMove = false; this.SendMsg(bts); } } private void button2_Click(object sender, EventArgs e) { } private void listenMsg() { while (true) { IPEndPoint remote = new IPEndPoint(Dns.GetHostByName(Dns.GetHostName()).AddressList[0], 1234); byte[] bts = this.client.Receive(ref remote); if (bts.Length >=10&&Encoding.UTF8.GetString(bts).Contains("|")) { TransferObject msgobj = DecodeMsg(Encoding.UTF8.GetString(bts)); foreach (CHIChess ochess in chessList) { if (ochess.MyIndex.X == msgobj.fromIndex.X && ochess.MyIndex.Y == msgobj.fromIndex.Y && ochess.ChiType == desk.GetTypeByID(msgobj.hischiID)) { chi = ochess; break; } } if (chi != null) { chi.SetIndexs(msgobj.fromIndex); if (msgobj.toIndexs.Y < 5) { chi.location = new Point(68 msgobj.toIndexs.X * 39, 38 msgobj.toIndexs.Y * 39); } else { chi.location = new Point(68 msgobj.toIndexs.X * 39, 43 msgobj.toIndexs.Y * 39); } this.MoveChess(chi.location); this.canMove = true; } continue; } if (Encoding.UTF8.GetString(bts).Trim() == "hui".Trim()) { this.deskBox.Enabled = false; if (MessageBox.Show("对方要求悔棋,你是否同意?", "悔棋", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) { ToHistory(); this.SendMsg(Encoding.UTF8.GetBytes("huiyes"));//同意了 } else { this.SendMsg(Encoding.UTF8.GetBytes("huino"));//不同意 } this.deskBox.Enabled = true; continue; } if (Encoding.UTF8.GetString(bts).Trim() == "new".Trim()) { this.deskBox.Enabled = false; if (MessageBox.Show("对方要求重新开始,你是否同意?", "重新开始", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) { this.SendMsg(Encoding.UTF8.GetBytes("newyes".Trim()));//同意重新开始 curMap = desk.GetMaps(); this.LoadChesses(curMap); } else { this.SendMsg(Encoding.UTF8.GetBytes("newno".Trim()));//不同意重新开始 } this.deskBox.Enabled = true; continue; } if (Encoding.UTF8.GetString(bts).Trim() == "newyes".Trim())//对方同意了重新开始 { curMap = desk.GetMaps(); this.LoadChesses(curMap); continue; } if (Encoding.UTF8.GetString(bts).Trim() == "newno".Trim())//对方不同意重新开始 { this.deskBox.Enabled = false; MessageBox.Show("对方不同意重新开始!", "信息", MessageBoxButtons.OK, MessageBoxIcon.Information); this.deskBox.Enabled = true; continue; } if (Encoding.UTF8.GetString(bts).Trim() == "renshu".Trim())//对方已经认输了, 重新开始 { this.deskBox.Enabled = false; MessageBox.Show("恭喜你,对方已经认输了!", "信息", MessageBoxButtons.OK, MessageBoxIcon.Information); curMap = desk.GetMaps(); this.LoadChesses(curMap); this.deskBox.Enabled = true; continue; } if (Encoding.UTF8.GetString(bts).Trim() == "qiuhe".Trim())//对方求和了 { this.deskBox.Enabled = false; if (MessageBox.Show("对方求和,你是否同意?", "求和", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)//同意求和,重新开始 { curMap = desk.GetMaps(); this.LoadChesses(curMap); this.SendMsg(Encoding.UTF8.GetBytes("qiuheyes".Trim()));//同意求和 } else { this.SendMsg(Encoding.UTF8.GetBytes("qiuheno".Trim()));//不同意求和 } this.deskBox.Enabled = true; continue; } if (Encoding.UTF8.GetString(bts).Trim() == "qiuheyes".Trim())//对方同意了你的求和,重新开始 { curMap = desk.GetMaps(); this.LoadChesses(curMap); continue; } if (Encoding.UTF8.GetString(bts).Trim() == "qiuheno".Trim())//对方同意了你的求和,重新开始 { this.deskBox.Enabled = false; MessageBox.Show("对方不同意你的求和!", "信息", MessageBoxButtons.OK, MessageBoxIcon.Information); this.deskBox.Enabled = true; continue; } if (Encoding.UTF8.GetString(bts).Trim() == "huiyes".Trim()) { ToHistory(); //this.deskBox.Enabled = true; continue; } if (Encoding.UTF8.GetString(bts).Trim() == "huino".Trim()) { this.deskBox.Enabled = false; MessageBox.Show("对方不同意你的悔棋!","信息",MessageBoxButtons.OK,MessageBoxIcon.Information); this.deskBox.Enabled = true; continue; } if (Encoding.UTF8.GetString(bts).Trim() == "fclose".Trim()) { this.deskBox.Enabled = false; this.Close(); MessageBox.Show("对方已经下线!", "信息", MessageBoxButtons.OK, MessageBoxIcon.Information); continue; } } } private TransferObject DecodeMsg(string msgstr) { string[] str = msgstr.Split(new char[] { '|' }); TransferObject tobj = new TransferObject(); if (str.Length > 0) { tobj.hischiID = Math.Abs(Convert.ToInt16(str[0]) - 7); string[] fromStr = str[1].Split(new char[] { ',' }); tobj.fromIndex.X = Convert.ToInt16(fromStr[0]); tobj.fromIndex.Y = Math.Abs(9 - Convert.ToInt16(fromStr[1])); string[] toStr = str[2].Split(new char[] { ',' }); tobj.toIndexs.X = Convert.ToInt16(toStr[0]); tobj.toIndexs.Y = Math.Abs(9 - Convert.ToInt16(toStr[1])); tobj.eatchiID = Math.Abs(Convert.ToInt16(str[3]) - 7); } return tobj; } private void lastToolStripMenuItem_Click(object sender, EventArgs e)//还原历史记录 { if (history != null && history.Count > 0) { this.SendMsg(Encoding.UTF8.GetBytes("hui"));//发送悔棋的信息 this.deskBox.Enabled = false; } else { MessageBox.Show("没有棋可悔!", "信息", MessageBoxButtons.OK, MessageBoxIcon.Information); } } private void ToHistory() { if (history != null && history.Count > 0) { bool ishisOk = false; object[] hisobjs = history.ToArray(); HistoryRecorder hisrecorder = (HistoryRecorder)hisobjs[hisobjs.Length - 1];//查找链表最后一条记录 object[] objs = chessList.ToArray(); for (int i = 0; i < objs.Length; i ) { CHIChess chichess = (CHIChess)objs[i]; if (chichess.MyIndex.X == hisrecorder.toIndex.X && chichess.MyIndex.Y == hisrecorder.toIndex.Y) { chessList.Remove(chichess);//删除现在的 chessList.Add(hisrecorder.hisCHI.cloneSelf());//添加原来的 if (hisobjs.Length - 2 >= 0) { CHIChess chichess1 = (CHIChess)((HistoryRecorder)hisobjs[hisobjs.Length - 2]).hisCHI; oldPath = (GraphicsPath)chichess1.chiPath.Clone(); } newPath = (GraphicsPath)hisrecorder.hisCHI.chiPath.Clone(); curMap[hisrecorder.fromIndex.Y][hisrecorder.fromIndex.X] = desk.GetIDByType(chichess.ChiType); curMap[hisrecorder.toIndex.Y][hisrecorder.toIndex.X] = 0; ishisOk = true; break; } } if (hisrecorder.eatCHI != null) { CHIChess cloneCHI = hisrecorder.eatCHI.cloneSelf(); chessList.Add(cloneCHI); curMap[hisrecorder.eatCHI.MyIndex.Y][hisrecorder.eatCHI.MyIndex.X] = desk.GetIDByType(cloneCHI.ChiType); } if (ishisOk) { if (this.canMove == true) { this.canMove = false; } else { this.canMove = true; } history.Remove(hisrecorder); } this.deskBox.Invalidate(); } } private void newStartToolStripMenuItem_Click(object sender, EventArgs e) { SendMsg(Encoding.UTF8.GetBytes("new")); } private void exitToolStripMenuItem_Click(object sender, EventArgs e) { this.Close(); } private void remoteToolStripMenuItem_Click(object sender, EventArgs e) { } private void Form1_FormClosed(object sender, FormClosedEventArgs e) { SendMsg(Encoding.UTF8.GetBytes("fclose")); client.Close(); client = null; this.DialogResult = DialogResult.OK; //try //{ // lmsg.EndInvoke(this.result); //} //catch //{ //} } private void aboutgame_Click(object sender, EventArgs e) { if (bout == null) { bout = new Abouts(); bout.Show(); } } private void 认输ToolStripMenuItem_Click(object sender, EventArgs e)//认输了 { SendMsg(Encoding.UTF8.GetBytes("renshu")); curMap = desk.GetMaps(); this.LoadChesses(curMap); } private void 求和ToolStripMenuItem_Click(object sender, EventArgs e)//求和了 { SendMsg(Encoding.UTF8.GetBytes("qiuhe")); } } public delegate void ListenMsg(); public delegate void findSel(Point e); }
标签: 象棋
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论