五子棋游戏设计方案
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
下一步:
POINT ArrayPp=PositionToPosition(pp);
把刚才棋盘范围内的有效点击屏幕坐标转为棋盘数组坐标,
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
50,50
<!--[if !vml]--><!--[endif]-->
<!--[if !vml]--><!--[endif]-->
<!--[if !supportLists]-->(2)<!--[endif]-->如何通过鼠标点击落子;
<!--[if !supportLists]-->(3)<!--[endif]-->如何判断输赢,在棋盘的—,|,/,\,四个方向进行搜索,超过5子以上连成一线则认为赢了。
<!--[if !supportLists]-->(4)<!--[endif]-->如何实现梅棋功能。
CfiveStoneApp
<!--[if !mso]-->
<!--[endif]--><!--[if !mso & !vml]--> <!--[endif]--><!--[if !vml]-->
<!--[endif]-->
<!--[if !vml]wenku.baidu.com->
<!--[endif]-->
四、需求分析:
五子棋历史源远流长,发展形势喜人,以下在网络上一篇有关五子棋历史发展的报道:
都初始化为该点位置;
while(start上面一个位置不为空或异色子)
{
start=上面的位置坐标;
}
while(end下面一个位置不为空或异色子)
{
start=下面的位置坐标;
}
注:-左面为上面,右面为下面;
|上面为上面,下面为下面;
/上面为上面,下面为下面;
\上面为上面,下面为下面;
如果end与start之间位置大于等于5,则认为该方赢。
for(int I=0;I<15;I++)
for(int j=0;j<15;j++)
FiveChess[I][j]=0;
刚开始时棋盘中未落一子,故全部交叉点为0。
<!--[if !supportLists]-->2、<!--[endif]-->如何用鼠标落子。
算法:
当程序在棋盘上点击一次后,捕获这个鼠标点击位置,如果这个点的位置在棋盘在棋盘范围内,则认可这一鼠标点击,否则,则认为这次鼠标点击无效。若鼠标点击在棋盘范围之内,则还要进一步判断,在这个位置是否已经落下了子,如果是也认为此次点击无效,如不是,则在棋盘数组填写相应的数据(或1或2),并相应的位置画出一个棋子。
五子棋棋盘由15*15横竖线交叉绘制而成,落子点在横竖的交叉点上。
采用15*15的二维数组表示棋盘,每个数组元素表示一个交叉点,用数组的值表示棋子:
以0表示未落子;
以1表示黑子;
以2表示白子。
注:
在程序中棋盘数组在中定义,是一全局数组;
long FiveChess[15][15];
在主程序中初始化:
五子棋是起源于中国古代的传统黑白棋种之一。现代五子棋日文称之为“連珠”,英译为“Renju”,英文称之为“Gobang”或“FIR”(Five in a Row的缩写),亦有“连五子”、“五子连”、“串珠”、“五目”、“五目碰”、“五格”等多种称谓。?五子棋不仅能增强思维能力,提高智力,而且富含哲理,有助于修身养性。五子棋既有现代休闲的明显特征“短、平、快”,又有古典哲学的高深学问“阴阳易理”;它既有简单易学的特性,为人民群众所喜闻乐见,又有深奥的技巧和高水平的国际性比赛;它的棋文化源渊流长,具有东方的神秘和西方的直观;既有“场”的概念,亦有“点”的连接。它是中西文化的交流点,是古今哲理的结晶。?五子棋起源于古代中国,发展于日本,风靡于欧洲。对于它与围棋的关系有两种说法,一说早于围棋,早在“尧造围棋”之前,民间就已有五子棋游戏;一说源于围棋,是围棋发展的一个分支。在中国的文化里,倍受人们的青睐。古代的五子棋的棋具与围棋相同,纵横各十七道。五子棋大约随围棋一起在我国南北朝时先后传入朝鲜、日本等地。据日本史料文献介绍,中国古代的五子棋是经由高丽(朝鲜),于1688年至1704年的日本元禄时代传到日本的。到日本明治32年(公元1899年),经过公开征名,“连珠”这一名称才被正式确定下来,取意于“日月如合壁,五星如连珠”。从此,连珠活动经过了不断的改良,主要是规则的变化(即对执黑棋一方的限制),例如,1899年规定,禁止黑白双方走“双三”;1903年规定,只禁止黑方走“双三”;1912年规定,黑方被迫走“双三”亦算输;1916年规定,黑方不许走“长连”;1918年规定,黑方不许走“四、三、三”;1931年规定,黑方不许走“双四”,并规定将19×19的围棋盘改为15×15的连珠专用棋盘。本世纪初五子棋传入欧洲并迅速风靡全欧。通过一系列的变化,使五子棋这一简单的游戏复杂化、规范化,而最终成为今天的职业连珠五子棋,同时也成为一种国际比赛棋。?目前,职业连珠已迅速在国际上发展起来。1988年8月8日,国际连珠联盟(RIF)由日本、俄罗斯、瑞典、亚美尼亚、阿塞拜疆、爱沙尼亚、法国、拉脱维亚、白俄罗斯等9个成员国在瑞典宣告创立,我国于1996年正式加入国际连珠联盟,现在全世界已有47个国家和地区成为国际连珠联盟的正式会员。职业连珠的世界锦标赛从1989年起每两年举办一次,现已举办了六届,第三、五、六届的冠军是爱沙尼亚人,其余三届的冠军都是日本人。我国最好成绩是团体第七,个人张进宇第9名。就水平而言,目前以俄罗斯、日本、瑞典最强,其中日本研究也最深,我国只处于中等水平。日本拥有自己的五子棋职业棋手,并且对连珠技术的研究也相当普遍和全面。日本每年举行连珠名人战。?五子棋的根在中国,有着广泛的群众基础。但与世界先进的五子棋技术相比,我们的棋艺水平还很低,所以我们要推广五子棋,宣传五子棋,争取在较短的时间内赶上和超过世界五子棋坛的先进水平。1990年,由那威和十几名五子棋爱好者,共同发起并成立了中国第一个现代职业五子棋的民间组织----京都五子棋队,现已发展成为拥有百余名选手的北京京都五子棋队。日本连珠联盟曾多次派代表团访问中国,与中国广大爱好者进行交流和友谊比赛,瑞典连珠联盟也于1995年派代表团访问了中国,京都五子棋队曾两次选派选手代表中国参加世界杯比赛,取得此成绩反映了我国五子棋水平在世界上所处的位置,同时也显示了我国在此项运动中的发展潜力。1997年5月北京成功地举办了第一届“康柏杯”国际五子棋名人邀请赛,引起了国际棋联的极大重视,并在第四十四届棋联会议上提出:“中国作为五子棋的发源国,不仅回到了国际大家庭中来,更重要的是对五子棋在下个世纪的发展起到了世界性的推动作用,并将为国际连珠棋成为奥运项目做出贡献。”?随着1996年中央电视台(CCTV-5)《黑白世界-五子棋讲座》的开播和中国五子棋网上比赛的开通,将世界连珠五子棋运动的最新状况及时展现在眼前,为五子棋爱好者提供了尽情参与的机会,这无疑对国内的普及、发展起到了推动的作用。北京连珠五子棋体育文化交流中心已拥有了22位国际段位棋手,他们肩负着新的历史使命,不断为中国五子棋爱好者提供立足国内、面向世界、一展才华的机会。我国于1998年8月成功地举办了第二届世界杯青少年锦标赛,1999年7月在北京举办了第六届世界杯冠军赛,2000年将举办第三届世界杯团体赛。在北京的带动下,全国其他地区也先后成立了五子棋组织。河北廊坊地区成立了廊坊五子棋协会;天津市成立了由天津市体委领导的天津市五子棋工作委员会;上海、云南、杭州等地也都成立了五子棋的组织。五子棋的发展在中国出现方兴未艾之势。?一位哲人说过:“中国人的智慧火种,往往使外国人得以燎原,反过来,燎原的火焰必将照亮火种的源头。”
五、关键部分设计算法及实现:................ 4
六、文件清单:............................. 9
七、使用说明:............................. 9
八、参考书目:............................. 10
九、附录:(源代码清单)..................... 11
撤消悔棋算法:
同样定义一个全局数组,上面悔棋过程中每悔一步,把悔棋的位置记到该数组,撤消悔棋只需要把最后一次记录的撤消悔棋数组所对应的棋盘数组置为1或2即可。
一、摘要:................................. 1
二、关键字:............................... 1
三、程序主流程图........................... 2
四、需求分析:............................. 3
具体实现:
当用户在程序窗口点击一次鼠标后,松开后,进入窗口过程的消息分支WM_LBUTTONUP;
在这个消息中的参数lParam中带有鼠标点击松开时的位置(x坐标,y纵坐标),放到一个用POINT定义的结构中:
POINT pp;
=LOWORD(lParam); 402||>402) break;//超出范围而退出,等待下一次按键落子。
如上文所述,五子棋既简单易学,又有其内涵和深度;集娱乐性和对抗性为一体,是一款为老、少、中各年龄阶段的人所喜欢的棋类游戏。
五、关键部分设计算法及实现:
系统地将五子棋程序完成,是有一定难度的。现将其关键部分的实现过程描述如下:
<!--[if !supportLists]-->1、<!--[endif]-->如何表示棋盘棋子。
<!--[if !supportLists]-->(5)<!--[endif]-->如何保存并读入棋谱;
<!--[if !supportLists]-->(6)<!--[endif]-->如何让电脑拥有人类的智慧;
<!--[if !supportLists]-->(7)<!--[endif]-->编写软件代码应遵守的编写规范,成对编码原则和代码的注释;
400,400
例:
100,100转化成棋盘数组为1,1
再对刚才ArrayPp所表示的棋盘位置进行判断是否有子;
if(FiveChess[][ ]!=0)
{
break;//退出,等待下一次按键
}
如无子,则在相应的棋盘数组中填写数据:
FiveChess[][ ]=1;或
FiveChess[][ ]=2;
并在相应的位置画好棋子;
hdc1=GetDC(hWnd);
hMemDc1=CreateCompatibleDC(hdc1);
SelectObject(hMemDc1,hBlack); //黑子
SelectObject(hMemDc1,hWhite);//白子
BitBlt(hdc1,,,24,24,hMemDc1,0,0,SRCCOPY);
DeleteDC(hMemDc1);
ReleaseDC(hWnd,hdc1);
<!--[if !supportLists]-->3、<!--[endif]-->如何判输赢;
算法:
每下一子则在-、|、/、\四个方向搜索一次,如果有五颗或五颗同一色棋子在同一线上,则判该方胜。
搜索算法如下:
置开始点和终止点坐标POINT start,end;
<!--[if !supportLists]-->(8)<!--[endif]-->其它未详尽处,请参看源代码。
二、关键字:
棋盘数组
搜索算法
人工智能
活
半活
双活三
三、程序主要类结构图
<!--[if !vml]--> <!--[endif]--><!--[if !mso]--> <!--[endif]-->
五子棋程序
<!--[if !supportLists]-->一、<!--[endif]-->摘要:
五子棋游戏是一历史悠久,对抗性强,技巧性高的棋类游戏。本文用VC设计了五子棋游戏。并就以下问题进行了探讨:
<!--[if !supportLists]-->(1)<!--[endif]-->棋子棋盘在程序中的表示;
具体实现:
见中SEARCH()函数,则函数返回50,则表示赢了。
<!--[if !supportLists]-->4、<!--[endif]-->如何实现悔棋功能和撤消悔棋功能:
悔棋一步算法:
首先设置好一全局数组,每下一步棋把相应的位置记录在该数组中,悔棋时只需要把该数组最后一次记录的位置所对应的棋盘数组中的值置为0,然后再根据棋盘数组中的数组,重复绘制一次棋盘棋子即可。
POINT ArrayPp=PositionToPosition(pp);
把刚才棋盘范围内的有效点击屏幕坐标转为棋盘数组坐标,
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
50,50
<!--[if !vml]--><!--[endif]-->
<!--[if !vml]--><!--[endif]-->
<!--[if !supportLists]-->(2)<!--[endif]-->如何通过鼠标点击落子;
<!--[if !supportLists]-->(3)<!--[endif]-->如何判断输赢,在棋盘的—,|,/,\,四个方向进行搜索,超过5子以上连成一线则认为赢了。
<!--[if !supportLists]-->(4)<!--[endif]-->如何实现梅棋功能。
CfiveStoneApp
<!--[if !mso]-->
<!--[endif]--><!--[if !mso & !vml]--> <!--[endif]--><!--[if !vml]-->
<!--[endif]-->
<!--[if !vml]wenku.baidu.com->
<!--[endif]-->
四、需求分析:
五子棋历史源远流长,发展形势喜人,以下在网络上一篇有关五子棋历史发展的报道:
都初始化为该点位置;
while(start上面一个位置不为空或异色子)
{
start=上面的位置坐标;
}
while(end下面一个位置不为空或异色子)
{
start=下面的位置坐标;
}
注:-左面为上面,右面为下面;
|上面为上面,下面为下面;
/上面为上面,下面为下面;
\上面为上面,下面为下面;
如果end与start之间位置大于等于5,则认为该方赢。
for(int I=0;I<15;I++)
for(int j=0;j<15;j++)
FiveChess[I][j]=0;
刚开始时棋盘中未落一子,故全部交叉点为0。
<!--[if !supportLists]-->2、<!--[endif]-->如何用鼠标落子。
算法:
当程序在棋盘上点击一次后,捕获这个鼠标点击位置,如果这个点的位置在棋盘在棋盘范围内,则认可这一鼠标点击,否则,则认为这次鼠标点击无效。若鼠标点击在棋盘范围之内,则还要进一步判断,在这个位置是否已经落下了子,如果是也认为此次点击无效,如不是,则在棋盘数组填写相应的数据(或1或2),并相应的位置画出一个棋子。
五子棋棋盘由15*15横竖线交叉绘制而成,落子点在横竖的交叉点上。
采用15*15的二维数组表示棋盘,每个数组元素表示一个交叉点,用数组的值表示棋子:
以0表示未落子;
以1表示黑子;
以2表示白子。
注:
在程序中棋盘数组在中定义,是一全局数组;
long FiveChess[15][15];
在主程序中初始化:
五子棋是起源于中国古代的传统黑白棋种之一。现代五子棋日文称之为“連珠”,英译为“Renju”,英文称之为“Gobang”或“FIR”(Five in a Row的缩写),亦有“连五子”、“五子连”、“串珠”、“五目”、“五目碰”、“五格”等多种称谓。?五子棋不仅能增强思维能力,提高智力,而且富含哲理,有助于修身养性。五子棋既有现代休闲的明显特征“短、平、快”,又有古典哲学的高深学问“阴阳易理”;它既有简单易学的特性,为人民群众所喜闻乐见,又有深奥的技巧和高水平的国际性比赛;它的棋文化源渊流长,具有东方的神秘和西方的直观;既有“场”的概念,亦有“点”的连接。它是中西文化的交流点,是古今哲理的结晶。?五子棋起源于古代中国,发展于日本,风靡于欧洲。对于它与围棋的关系有两种说法,一说早于围棋,早在“尧造围棋”之前,民间就已有五子棋游戏;一说源于围棋,是围棋发展的一个分支。在中国的文化里,倍受人们的青睐。古代的五子棋的棋具与围棋相同,纵横各十七道。五子棋大约随围棋一起在我国南北朝时先后传入朝鲜、日本等地。据日本史料文献介绍,中国古代的五子棋是经由高丽(朝鲜),于1688年至1704年的日本元禄时代传到日本的。到日本明治32年(公元1899年),经过公开征名,“连珠”这一名称才被正式确定下来,取意于“日月如合壁,五星如连珠”。从此,连珠活动经过了不断的改良,主要是规则的变化(即对执黑棋一方的限制),例如,1899年规定,禁止黑白双方走“双三”;1903年规定,只禁止黑方走“双三”;1912年规定,黑方被迫走“双三”亦算输;1916年规定,黑方不许走“长连”;1918年规定,黑方不许走“四、三、三”;1931年规定,黑方不许走“双四”,并规定将19×19的围棋盘改为15×15的连珠专用棋盘。本世纪初五子棋传入欧洲并迅速风靡全欧。通过一系列的变化,使五子棋这一简单的游戏复杂化、规范化,而最终成为今天的职业连珠五子棋,同时也成为一种国际比赛棋。?目前,职业连珠已迅速在国际上发展起来。1988年8月8日,国际连珠联盟(RIF)由日本、俄罗斯、瑞典、亚美尼亚、阿塞拜疆、爱沙尼亚、法国、拉脱维亚、白俄罗斯等9个成员国在瑞典宣告创立,我国于1996年正式加入国际连珠联盟,现在全世界已有47个国家和地区成为国际连珠联盟的正式会员。职业连珠的世界锦标赛从1989年起每两年举办一次,现已举办了六届,第三、五、六届的冠军是爱沙尼亚人,其余三届的冠军都是日本人。我国最好成绩是团体第七,个人张进宇第9名。就水平而言,目前以俄罗斯、日本、瑞典最强,其中日本研究也最深,我国只处于中等水平。日本拥有自己的五子棋职业棋手,并且对连珠技术的研究也相当普遍和全面。日本每年举行连珠名人战。?五子棋的根在中国,有着广泛的群众基础。但与世界先进的五子棋技术相比,我们的棋艺水平还很低,所以我们要推广五子棋,宣传五子棋,争取在较短的时间内赶上和超过世界五子棋坛的先进水平。1990年,由那威和十几名五子棋爱好者,共同发起并成立了中国第一个现代职业五子棋的民间组织----京都五子棋队,现已发展成为拥有百余名选手的北京京都五子棋队。日本连珠联盟曾多次派代表团访问中国,与中国广大爱好者进行交流和友谊比赛,瑞典连珠联盟也于1995年派代表团访问了中国,京都五子棋队曾两次选派选手代表中国参加世界杯比赛,取得此成绩反映了我国五子棋水平在世界上所处的位置,同时也显示了我国在此项运动中的发展潜力。1997年5月北京成功地举办了第一届“康柏杯”国际五子棋名人邀请赛,引起了国际棋联的极大重视,并在第四十四届棋联会议上提出:“中国作为五子棋的发源国,不仅回到了国际大家庭中来,更重要的是对五子棋在下个世纪的发展起到了世界性的推动作用,并将为国际连珠棋成为奥运项目做出贡献。”?随着1996年中央电视台(CCTV-5)《黑白世界-五子棋讲座》的开播和中国五子棋网上比赛的开通,将世界连珠五子棋运动的最新状况及时展现在眼前,为五子棋爱好者提供了尽情参与的机会,这无疑对国内的普及、发展起到了推动的作用。北京连珠五子棋体育文化交流中心已拥有了22位国际段位棋手,他们肩负着新的历史使命,不断为中国五子棋爱好者提供立足国内、面向世界、一展才华的机会。我国于1998年8月成功地举办了第二届世界杯青少年锦标赛,1999年7月在北京举办了第六届世界杯冠军赛,2000年将举办第三届世界杯团体赛。在北京的带动下,全国其他地区也先后成立了五子棋组织。河北廊坊地区成立了廊坊五子棋协会;天津市成立了由天津市体委领导的天津市五子棋工作委员会;上海、云南、杭州等地也都成立了五子棋的组织。五子棋的发展在中国出现方兴未艾之势。?一位哲人说过:“中国人的智慧火种,往往使外国人得以燎原,反过来,燎原的火焰必将照亮火种的源头。”
五、关键部分设计算法及实现:................ 4
六、文件清单:............................. 9
七、使用说明:............................. 9
八、参考书目:............................. 10
九、附录:(源代码清单)..................... 11
撤消悔棋算法:
同样定义一个全局数组,上面悔棋过程中每悔一步,把悔棋的位置记到该数组,撤消悔棋只需要把最后一次记录的撤消悔棋数组所对应的棋盘数组置为1或2即可。
一、摘要:................................. 1
二、关键字:............................... 1
三、程序主流程图........................... 2
四、需求分析:............................. 3
具体实现:
当用户在程序窗口点击一次鼠标后,松开后,进入窗口过程的消息分支WM_LBUTTONUP;
在这个消息中的参数lParam中带有鼠标点击松开时的位置(x坐标,y纵坐标),放到一个用POINT定义的结构中:
POINT pp;
=LOWORD(lParam); 402||>402) break;//超出范围而退出,等待下一次按键落子。
如上文所述,五子棋既简单易学,又有其内涵和深度;集娱乐性和对抗性为一体,是一款为老、少、中各年龄阶段的人所喜欢的棋类游戏。
五、关键部分设计算法及实现:
系统地将五子棋程序完成,是有一定难度的。现将其关键部分的实现过程描述如下:
<!--[if !supportLists]-->1、<!--[endif]-->如何表示棋盘棋子。
<!--[if !supportLists]-->(5)<!--[endif]-->如何保存并读入棋谱;
<!--[if !supportLists]-->(6)<!--[endif]-->如何让电脑拥有人类的智慧;
<!--[if !supportLists]-->(7)<!--[endif]-->编写软件代码应遵守的编写规范,成对编码原则和代码的注释;
400,400
例:
100,100转化成棋盘数组为1,1
再对刚才ArrayPp所表示的棋盘位置进行判断是否有子;
if(FiveChess[][ ]!=0)
{
break;//退出,等待下一次按键
}
如无子,则在相应的棋盘数组中填写数据:
FiveChess[][ ]=1;或
FiveChess[][ ]=2;
并在相应的位置画好棋子;
hdc1=GetDC(hWnd);
hMemDc1=CreateCompatibleDC(hdc1);
SelectObject(hMemDc1,hBlack); //黑子
SelectObject(hMemDc1,hWhite);//白子
BitBlt(hdc1,,,24,24,hMemDc1,0,0,SRCCOPY);
DeleteDC(hMemDc1);
ReleaseDC(hWnd,hdc1);
<!--[if !supportLists]-->3、<!--[endif]-->如何判输赢;
算法:
每下一子则在-、|、/、\四个方向搜索一次,如果有五颗或五颗同一色棋子在同一线上,则判该方胜。
搜索算法如下:
置开始点和终止点坐标POINT start,end;
<!--[if !supportLists]-->(8)<!--[endif]-->其它未详尽处,请参看源代码。
二、关键字:
棋盘数组
搜索算法
人工智能
活
半活
双活三
三、程序主要类结构图
<!--[if !vml]--> <!--[endif]--><!--[if !mso]--> <!--[endif]-->
五子棋程序
<!--[if !supportLists]-->一、<!--[endif]-->摘要:
五子棋游戏是一历史悠久,对抗性强,技巧性高的棋类游戏。本文用VC设计了五子棋游戏。并就以下问题进行了探讨:
<!--[if !supportLists]-->(1)<!--[endif]-->棋子棋盘在程序中的表示;
具体实现:
见中SEARCH()函数,则函数返回50,则表示赢了。
<!--[if !supportLists]-->4、<!--[endif]-->如何实现悔棋功能和撤消悔棋功能:
悔棋一步算法:
首先设置好一全局数组,每下一步棋把相应的位置记录在该数组中,悔棋时只需要把该数组最后一次记录的位置所对应的棋盘数组中的值置为0,然后再根据棋盘数组中的数组,重复绘制一次棋盘棋子即可。