版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、前言围棋不仅能增强思维能力,提高智力,而且富含哲理,有助于修身养性。同时它起源于中 国,古称“弈” ,是我国传统技艺之一。本游戏软件提供了人机对弈,和棋手对弈(局域网 对弈)两种模式,局域网模式可以保证多人同时进行游戏。本软件使用C#语言编写,在windows 7 x64 系统下采用 Visual Studio 2010 开发和调试,附源码如下。客户端程序:ype)case = (margin_left + i *gap - chessSize);= (margin_top + j * gap - chessSize);= (chessSize * 2);= (chessSize * 2);,
2、 rect);if (m_bShowIndex && m_Boardi, j.step > 0)(m_Boardi, j.(), fontNumber, , rect, format);break;case = (margin_left + i *gap - chessSize);= (margin_top + j * gap - chessSize);= (chessSize * 2);int centerX = (margin_left + i * gap);int centerY = (margin_top + j * gap);, rect);2, centerY
3、 -(new Pen, 3), centerX - chessSize / chessSize / 2, centerX + chessSize / 2, centerY + chessSize / 2);if (m_bShowIndex && m_Boardi, j.step > 0)(m_Boardi, j.(), fontNumber, , rect, format);break;case= (margin_left + i *gap - chessSize);= (margin_top + j * gap - chessSize);= (chessSize * 2
4、);= (chessSize * 2);, rect);if (m_bShowIndex && m_Boardi, j.step > 0)(m_Boardi, j.(), fontNumber, , rect, format);break;case= (margin_left + i *gap - chessSize);= (chessSize * 2);= (chessSize * 2);centerX = (margin_left + i * gap);centerY = (margin_top + j * gap);, rect);2, centerY -(new
5、Pen, 3), centerX - chessSize / chessSize / 2, centerX + chessSize / 2, centerY + chessSize / 2);if (m_bShowIndex && m_Boardi, j.step > 0)(m_Boardi, j.(), fontNumber, , rect, format);break;case= (margin_left + i *gap - chessSize / 2);= (margin_top + j * gap - chessSize / 2);= (chessSize);=
6、 (chessSize);, rect);break;case= (margin_left + i *gap - chessSize / 2);= (margin_top + j * gap - chessSize / 2);= (chessSize);, rect);break;case = (margin_left + i gap - chessSize / 2);= (margin_top + j * gap - chessSize / 2);= (chessSize);= (chessSize);, rect);break;ype !=return false;ype = type;#
7、region 判断是否可以提子bool bEat = false;bool bValidStep = true;ype = (type)ype = (type) bEat = tryToEat(pos, new + 1, , ref bValidStep) | bEat;if (!bValidStep)return false;ype = (type)bEat = tryToEat(pos, new , - 1), ref bValidStep) | bEat;if (!bValidStep)return false;ype = (type)bEat = tryToEat(pos, new ,
8、 + 1), ref bValidStep) | bEat;if (!bValidStep)return false;#endregionif (!bEat)tep = m_currentStep;m_Board, .pos = pos;m_currentStep+;return true;ype = newBoardi, j;return true;ype = '0' : (m_Boardj, i.type = '1' : '2'(ch);(strLine);();return true;ype = ChessBlock block;findB
9、lock(new (i, j), out block);if > 0)type = foreach pos in block)ifnewType = m_Board - 1, .type;if (type = &&(newType| newTypetype = newType;elseif (type != &&type = (newType)break;typeifnewType = m_Board + 1, .type;if (type = && (newType = | newType =type = newType;elseif (
10、type != && type = (newType)break;typeifnewType = m_Board, - 1.type;if (type = && (newType = | newType =type = newType;elseif (type != && type = (newType)typebreak;break;else ifelseifnewType = m_Board, + 1.type;if (type = && (newType = | newType =type = newType;elseif
11、(type != && type = (newType)typeif (type =type =(type =type =type =foreachposToFill in block)m_Board, .type = type;ype =ChessBlock block;findBlockOnSim(new (i, j), out block);if > 0)type = foreach pos in block)ifnewType = - 1, .type;if (type = &&(newType = |newType type = newType;
12、elseif (type != &&type = (newType)break;typeifnewType = + 1, .type;if (type = && (newType = | newType =type = newType;elseif (type != && type = (newType)break;break;typeifnewType = , - 1.type;if (type = && (newType = | newType =type = newType;elseif (type != &&
13、; type = (newType)typeifnewType = , + 1.type;if (type = && (newType = | newType = type = newType;elseif (type != && type = (newType)typebreak;if (type = type =type =else if (type =elsetype = foreachposToFill in block), .type = type;ype = | m_Boardi, j.type| m_Boardi, j.type = m_Board
14、i, j.type = ype;if (type = | type = |type = | type = ChessBlock block;findBlock(pos, out block);if > 0)typeResult =switch (type)casecase typeResult break;typeResultbreak;break;case typeResult break;foreach posToToggle in block)m_Board, .type = typeResult;ype =m_Boardi, j.type =else if (m_Boardi,
15、j.type =m_Boardi, j.type =ype)casecasecasenBlack+;casebreak;casecasenWhite+; break;default:nPending+; break;double fBlack = nBlack + (double)nPending / 2;double fWhite = nWhite + (double)nPending / 2;StringBuilder strResult = new StringBuilder();("黑子 : " + () + "n");("白子 : &
16、quot; + () + "nn");(" 结果 : ");fWhite += ;if (fBlack > fWhite)("黑子赢 " + (fBlack - fWhite).ToString();else if (fWhite > fBlack)(" 白子赢 " + (fWhite - fBlack).ToString();return ();ype;while > 0)posCurrent = ();ype = type)(pos1);(pos1);ype = type)(pos1);(po
17、s1);ype = type)(pos1);(pos1);ype = type)(pos1);(pos1);ype;while > 0)posCurrent = ();ype = type)(pos1);(pos1);ype = type)(pos1);(pos1);ype = type)(pos1);(pos1);ype = type)(pos1);(pos1);吃别人(包括劫持)被自己吃了QueueposToProcceednewQueue();ype;ypereturn true;if(!(pos1)&&ype =type)ypereturn true;if(!(p
18、os1)&&ype =type)ypereturn true;if(!(pos1)&&ype= type)ypereturn true;if (!(pos1) &&ype = type)ype =ype =os, m_Board_backupi, j.type, m_Board_backupi, j.step);= = -= 2;return true;os, m_Boardi, j.type, m_Boardi, j.step);= = #region = 单人游戏时 =ype = &&i, j.step = 0)if (new
19、 (i, j), )(new Node(new (i, j);if <= 0)= true;#endregion#region 每个节点都进行若干回合的模拟棋局foreach (Node root in move_Node)for (int i = 0; i < numsim; +i)/* 复制棋局信息 */* 进行模拟 */* 获得根节点的访问次数最多CopyState(root);play_simulation(root);#endregionNode n = GetBestChild(move_Node);的子节点 */private bool CanAddChess pos
20、, type)ype !=return false;ype = type;#region 判断是否可以提子bool bEat = false;bool bValidStep = true;bool result = true;ype = (type)ype = (type)bEat = ChecktryToEat(pos, new + 1, , ref bValidStep) | bEat; if (!bValidStep)result = false;ype = (type)bEat = ChecktryToEat(pos, new , - 1), ref bValidStep) | bEa
21、t; if (!bValidStep)result = false;ype = (type)bEat = ChecktryToEat(pos, new , + 1), ref bValidStep) | bEat;if (!bValidStep)result = false;#endregionype = return result;private bool ChecktryToEat posNewChess, posToEat, ref bool bValidStep) bValidStep = true;chessBlock;if (!isLive(posToEat, out chessB
22、lock)ype != return true;return false;private void CopyState(Node n)for (int i = 0; i < 19; +i)for (int j = 0; j < 19; +j)i, j = new Chessi, j.pos, i, j.type, i, j.step);J, ype)case case case nBlack+;break;case case case nWhite+;break;default:nPending+;break;double fBlack = nBlack + (double)nPe
23、nding / 2;double fWhite = nWhite + (double)nPending / 2;fWhite += ;if (fBlack > fWhite && .ChessType .White)|(fBlack < fWhite && =os;Chess chs = new Chess(pos, type, ;return chs;ype !=return false;ype = type;#region 判断是否可以提子bool bEat = false;bool bValidStep = true;ype = (type)b
24、Eat = tryToEatOnSim(pos, new - 1, , ref bValidStep) | bEat;if (!bValidStep)return false;ype = (type)bEat = tryToEatOnSim(pos, new + 1, , ref bValidStep) | bEat;if (!bValidStep)return false;ype = (type)bEat = tryToEatOnSim(pos, new , - 1), ref bValidStep) | bEat;if (!bValidStep)return false;ype = (ty
25、pe)bEat = tryToEatOnSim(pos, new , + 1), ref bValidStep) | bEat;if (!bValidStep)return false;#endregion(type =if(!bEat)ype= else, .type =return false;tep = ;+;return true;Eat others (Include "jie")Be eaten yourselfQueueposToProcceedreturn true;if (!(pos1) return true;if(!(pos1)return true;
26、if(!(pos1)return true;if (!(pos1) && else, .type =ype;if (type =, .type =, .type =ins)();(node);else if = temp10.wins)new Queue();ype;ype&&ype =type)ype&&ype =type)ype&&ype= type)ypeype = type) ype = ypeelse if (type =(node);List<Node> temp2 = new List<Node&g
27、t;();foreach (Node node in temp1)pos = ;if - <= 1 |- <= 1)(node);continue;if (3, , )(node);Node result ;if > 0)result = temp2 - 1);elseresult = temp1 - 1);return result;#endregion =单人游戏时 =amePlayerside.user = user;gameTabletableIndex.gamePlayerside.someone = true;("0 在第 1 桌第 2 座入座 &quo
28、t;, tableIndex + 1, side + 1);amePlayeranotherSide.someone = true)amePlayeranotherSide.;(user, sendString);amePlayerside.someone = false;gameTabletableIndex.gamePlayerside.started = false;gameTabletableIndex.gamePlayerside.grade = 0;anotherSide = (side + 1) % 2;if(gameTabletableIndex.gamePlayeranoth
29、erSide.someone = true)gameTabletableIndex.gamePlayeranotherSide.started = false;= 0;ength +splitString1.Length);(gameTabletableIndex, sendString);break;case "Ready":amePlayerside.started = true;if (side = 0)anotherSide = 1;sendString = "Message, 黑方已准备。 "elseanotherSide = 0;sendSt
30、ring = "Message, 白方已准备。 "(gameTabletableIndex, sendString);if(gameTabletableIndex.gamePlayeranotherSide.started = true)break;case "NotReady":tableIndex = (splitString1);side = (splitString2);gameTabletableIndex.gamePlayerside.started = false;if (side = 0)sendString = "Messag
31、e,黑方取消准备。 " elsesendString = "Message,白方取消准备。 "(gameTabletableIndex, sendString); tartTimer();break;case "UnsetDot":nsetDot(xi, xj, color);break;case "SetDot":amePlayeranotherSide.user, receiveString);gameTabletableIndex.gamePlayeranotherSide.passfalse;break;case &
32、quot;Pass":amePlayerside.pass = true;if (gameTabletableIndex.gamePlayeranotherSide.pass)amePlayerside.pass = false;gameTabletableIndex.gamePlayeranotherSide.pass= false;gameTabletableIndex.gamePlayerside.startedfalse;gameTabletableIndex.gamePlayeranotherSide.started = false;else(gameTabletableIndex.gamePlayeranotherSide.user,receiveString);break;case "Lose":amePlayeranotherSide.user,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2027年山东荣河职业学院单招职业技能考试模拟试卷A4版附答案详解
- 2026年虚拟办公协作技术报告
- 2026二下数学第一单元公开课课件
- 2026能源科技行业市场发展现状与投资潜力分析报告
- 2026中国细胞治疗药物审批进展与支付体系构建报告
- 2026中国影视综艺节目制作行业市场供需分析及投资评估规划分析研究报告
- 2026欧洲化工原料行业市场供需分析及投资评估规划分析研究报告
- 2026中国叶黄素酯消费升级趋势与高端产品定位策略报告
- 2026青岛市港口物流行业现状供需调研及投资评估规划产业报告
- 2026汽车行业市场调研及政策影响与发展趋势研究报告
- 2026年战士留疆考试真题及答案解析
- 景区旅游安全风险评估报告
- GB/T 4706.23-2024家用和类似用途电器的安全第23部分:室内加热器的特殊要求
- CPK-能力分析模板(标准版)
- DL∕T 1728-2017 人货两用型输电杆塔登塔装备
- 2024年浙江省中考数学真题试卷及答案
- SBT 11184-2017 药品流通企业关键绩效指标体系
- GB/T 7000.217-2023灯具第2-17部分:特殊要求舞台灯光、电视、电影及摄影场所(室内外)用灯具
- 失智老人照护员高级理论及技能
- 水闸电气、自控工程方案
- DB37-T 3862-2020 汽油清净增效剂技术要求-(高清版)
评论
0/150
提交评论