五子棋系统实验报告
五子棋实验报告(含代码)

实验报告实验一五子棋游戏北方工业大学 2013级计算机技术米鹏一、实验原理及方法五子棋游戏开发借用Visual Studio 2012软件开发平台,选用C#语言进行编写。
整体程序主要分为三部分:界面操作部分、AI逻辑部分和棋子定点分析部分。
1、界面操作部分界面操作部分代码主要针对图像呈现、对应矩阵存储、下棋过程控制等可见的操作环节进编写。
同时负责整个程序的初始化工作。
图像呈现采用C#中Graphics进行绘制。
棋盘被划分为15行15列,每个划分出的小方格均为30*30的正方形,棋盘可操作的范围规定在(20,20)、(460,460)两点的确定的正方形区域内。
通过鼠标左击来确定下子地点。
程序会根据鼠标鼠标点击的位置进行计算,计算得到时对应矩阵的行列,之后再改变对应矩阵的内容后,在通过行列值乘以小方格边长计算得到在显示区域中的具体位置,再稍加变动后画到显示区域中。
以X点坐标为例,下面是计算X(Column)的流程图:在对应矩阵存储方面,后面AI逻辑和棋子分析所用到的矩阵都是来源这里。
同时AI 逻辑和棋子分析不能去修改对应矩阵内容。
图像呈现点的位置、重绘的根据都是来源这里。
在下棋过程控制方面采用信号亮的机制,当操作者下过后,根据信号AI会立即计算将要下点的位置同时改变信号亮变量。
当AI下过棋子后,由于信号亮的的限制就等待操作者去下棋,同时改变信号亮变量内容。
AI和操作者的所有下子、修改矩阵、显示棋子的过程都是统一的。
在每一盘游戏开始时程序会对一些重要的变量进行初始化这里包括矩阵、信号亮、第一步棋子颜色、呈现图像等内容进行初始化。
同时AI会在棋盘中央下第一子。
2、AI逻辑部分AI逻辑部分算是整个程序策略的灵魂。
其中的一些关键性判别的前后关系将影响AI 的下棋的结果。
同时加大和降低AI的难度也是这里。
下面是我设计的策略过程:从下棋者的考虑角度进行考虑,尽可能保证每一次下子都是有必要的、都是在情理当中的。
我所设计的策略并不是完整,漏洞在与没有考虑三棋子连续的情况。
实验四 五子棋实验

人工智能基础(第2版)
实验四:博弈问题—五子棋实验
1.提交期限和方法
2.实验目的
熟悉和掌握博弈搜索算法的原理、实质和过程。
3.实验任务
1. 制作类似于如图所示五子棋系统实验程序。
2. 用你所熟悉的程序语言实现,可以B/S实现,也可以C/S实现。
4.提交要求
1、本次实验为个人任务,需独立完成,以纸质和电子档的形式把实验报告提交给学习
委员,再由学习委员在规定期限内提交给任课老师。
2、要求把所做的程序的演示图附加到实验报告上,代码不需要添加到实验报告上。
3、撰写实验报告
实验报告具体内容如下:
实验题目、实验目的、实验原理、实验条件、实验内容、实验步骤、程序代码、个人实验小结。
4、未按时提交实验报告者,每迟交一天扣1分,扣完为止。
经辅导员同意并签字的事病假时间不计入迟交范围。
凡被发现实验报告有抄袭者,本次成绩以零分记。
五子棋程序实习报告

五子棋程序实习报告一、实习背景及目的近期,我通过五子棋程序的实习,深入了解了五子棋的规则和算法,并成功编写了一个五子棋程序。
本次实习的目的是为了提高我的编程能力和逻辑思维能力,同时了解人工智能在棋类游戏中的应用。
二、五子棋规则及算法分析五子棋是一种两人对弈的棋类游戏,游戏的目标是在棋盘上形成连续的五个棋子。
棋盘通常为15×15的网格,每个玩家轮流在空格中放置自己的棋子。
五子棋的算法主要包括两种:一种是基于搜索的算法,如极大极小值搜索和启发式搜索;另一种是基于机器学习的算法,如蒙特卡洛树搜索和深度学习。
三、程序设计及实现在本次实习中,我选择了基于极大极小值搜索的五子棋算法,并使用Python语言进行程序设计。
程序的主要功能包括棋盘的显示、玩家的输入和计算机的智能下棋。
首先,我使用类来表示棋盘,每个棋盘对象包含一个15×15的二维数组,用于存储棋子的位置。
同时,我还定义了一个常量类,用于存储棋子的颜色和空格的表示。
接下来,我实现了一个玩家输入的类,玩家可以通过该类来选择下棋的位置。
为了简化输入过程,我使用了一个简单的文本界面,玩家只需输入坐标即可。
最后,我实现了一个计算机下棋的类,该类使用了极大极小值搜索算法。
具体实现过程如下:1. 将棋盘划分为多个可能的获胜区域,例如横线、竖线和斜线。
2. 对于每个获胜区域,计算计算机和玩家在该区域获胜的概率。
3. 使用极大极小值搜索算法,选择最优的落子位置。
四、实习心得通过本次五子棋程序的实习,我对五子棋的规则和算法有了更深入的了解,同时也提高了我的编程能力和逻辑思维能力。
在程序设计过程中,我遇到了很多问题,如棋盘的表示、搜索算法的实现等,通过查阅资料和不断调试,我最终成功解决了这些问题。
此外,通过本次实习,我也了解到了人工智能在棋类游戏中的应用。
目前,深度学习等算法在棋类游戏中取得了显著的成果,例如AlphaGo在围棋领域的突破。
未来,我相信人工智能将在更多棋类游戏中发挥重要作用。
五子棋游戏实验报告

五子棋游戏实验报告五子棋游戏实验报告引言:五子棋是一种古老而受欢迎的策略游戏,它不仅能够锻炼思维能力,还能培养耐心和决策能力。
为了进一步了解五子棋游戏对人类思维和决策的影响,我们进行了一项实验。
本实验旨在探究五子棋游戏对玩家的思维策略、决策效率和情绪状态的影响。
实验设计:参与实验的被试共计50人,他们被随机分为两组。
每个被试都需要进行五子棋游戏,其中一组被试在游戏前接受了一段时间的训练,而另一组则没有。
我们通过观察被试的行为和采集数据来分析五子棋游戏对思维和决策的影响。
实验过程:实验开始前,我们向所有被试提供了五子棋游戏的规则和基本策略。
然后,我们对训练组进行了一段时间的训练,让他们熟悉游戏规则和各种常见的战术。
接下来,两组被试开始进行五子棋游戏,每个被试有15分钟的时间来下棋。
实验结果:通过对被试的行为和数据的分析,我们得出了以下结论:1. 思维策略:在游戏中,训练组的被试表现出更加深思熟虑的思维策略。
他们更善于预测对手的下一步,并采取相应的防守或进攻策略。
相比之下,未训练组的被试更加随机地下棋,缺乏长远规划。
2. 决策效率:训练组的被试在游戏中做出决策的速度更快。
他们能够快速分析局势,并做出相应的反应。
而未训练组的被试则需要更多的时间来思考和决策。
3. 情绪状态:我们观察到训练组的被试在游戏过程中更加冷静和放松。
他们能够保持冷静的头脑,不受情绪的干扰。
相比之下,未训练组的被试在面对困难局面时更容易感到紧张和焦虑。
讨论:通过这项实验,我们发现五子棋游戏对思维和决策能力有着积极的影响。
训练组的被试在思考问题和做出决策时表现出更高的效率和准确性。
此外,他们还能够更好地控制情绪,保持冷静。
这些结果表明,五子棋游戏可以作为一种有效的训练工具来提升思维能力和决策能力。
然而,我们也发现这项实验存在一些局限性。
首先,实验样本较小,可能无法完全代表整个人群。
其次,实验时间较短,无法观察到长期训练对思维和决策能力的影响。
五子棋人机博弈实验报告

五子棋人机博弈实验报告目录一(课程设计目的............................................. 2 二(课程设计要求............................................. 2 三(课程设计内容............................................. 2 四(课程设计思想............................................. 2 五(系统实现 (2)设计平台 (2)数据结构设计 (3)程序流程图设计 (3)主要算法设计 (4)程序调试及运行结果.............................. 4 六(课程设计总结............................................. 5 七(参考资料................................................... 6 八(附录:五子棋博弈算法源代码 (7)1一( 课程设计目的通过上学期学习的《人工智能》学科,运用推理技术、搜索方法和决策规划和博弈树设计五子棋人机博弈系统,以此进一步深化对理论知识技术的了解,培养学生编程能力以及实践水平。
二(课程设计要求通过本次课程设计要求学生掌握以下内容:1.深入了解博弈树和alpha-beta剪枝算法。
2.设计出适合五子棋算法的启发式函数。
3.熟练掌握启发式的搜索方法。
三(课程设计内容本系统实现的是五子棋博弈算法,运用java语言实现了图形用户界面,方便用户使用。
算法采用了博弈算法和启发式函数进行搜索,人机对弈可自动判断输赢,结束后可重新开局。
四(课程设计思想本系统实现的是五子棋博弈算法,为了方便用户的使用,采用的是java图形用户界面技术。
为了记录棋盘的每一个下棋点,定义数组array[19][19]。
五子棋实习报告百度文库

一、实习背景随着科技的发展,我国的教育事业也在不断地推进。
为了更好地培养学生的创新精神和实践能力,我校开展了丰富多彩的课外实践活动。
其中,五子棋活动作为一种有益于学生身心健康、锻炼思维能力的活动,受到了广大师生的喜爱。
为了深入了解五子棋活动的开展情况,提高自身教学水平,我于本学期参加了五子棋实习活动。
二、实习目的1. 了解五子棋活动的起源、规则和发展历程,掌握五子棋的基本技巧。
2. 掌握五子棋教学的方法和策略,提高自身教学水平。
3. 通过实习活动,培养学生的团队协作精神、竞技意识和良好品质。
4. 丰富自己的业余生活,提高自己的综合素质。
三、实习过程1. 实习前期准备在实习开始前,我通过网络、书籍等多种途径,对五子棋进行了深入了解。
学习了五子棋的起源、规则、基本技巧等知识,为实习活动奠定了基础。
2. 实习阶段(1)参与教学活动在实习过程中,我担任了五子棋课程的助教,协助老师进行教学。
在老师的指导下,我了解了五子棋教学的基本流程,包括课堂导入、讲解规则、示范操作、学生练习、总结评价等环节。
(2)组织活动为了提高学生的兴趣,我组织了多次五子棋比赛。
在比赛中,我负责裁判工作,确保比赛的公平、公正。
同时,我还负责记录比赛结果,为优秀选手颁发奖品。
(3)课后辅导在课后,我主动为学生提供辅导,解答他们在学习中遇到的问题。
通过辅导,我发现学生们在五子棋学习过程中,普遍存在以下问题:① 规则理解不透彻;② 棋力水平参差不齐;③ 团队协作意识薄弱。
针对这些问题,我制定了相应的辅导方案,帮助学生提高棋艺。
3. 实习总结在实习过程中,我逐渐掌握了五子棋教学的方法和策略。
以下是我总结的一些经验:(1)注重规则讲解在五子棋教学中,首先要让学生了解游戏规则,这是提高棋艺的基础。
(2)因材施教针对学生的不同水平,制定相应的教学计划。
对于基础较差的学生,要注重基础知识的讲解;对于基础较好的学生,要引导他们进行实战演练。
(3)培养学生的团队协作意识在五子棋比赛中,鼓励学生互相学习、共同进步。
五子棋实验报告

五子棋实验报告五子棋实验报告引言:五子棋是一种古老而受欢迎的棋类游戏,它不仅能够锻炼思维能力,还能培养战略思维和判断力。
为了进一步了解五子棋的特点和策略,我们进行了一项实验研究。
实验设计:我们邀请了十位志愿者参与本次实验,他们中的五位是五子棋高手,另外五位则是初学者。
实验分为两个阶段,第一阶段是对高手和初学者之间的对局进行观察和分析,第二阶段是对初学者进行指导并观察他们的进步情况。
实验过程:在第一阶段,我们观察了五位高手之间的对局。
他们的思考时间短,下棋速度快,每一步都经过深思熟虑。
他们善于利用对手的弱点,通过布局和进攻来取得优势。
他们的棋局稳健而有力,很少出现失误。
与此相反,初学者的对局显得更加紧张和激烈。
他们思考的时间较长,下棋的速度较慢。
初学者更注重自己的进攻,而忽略了对手的威胁。
他们常常陷入被动局面,容易被高手击败。
在第二阶段,我们对初学者进行了指导。
我们向他们介绍了一些基本的五子棋策略,并分析了高手的对局特点。
初学者经过指导后,开始注意对手的威胁并学会了更好地布局和进攻。
他们的下棋速度也有所提升,思考的时间也相对减少。
通过与高手的对局,初学者逐渐提高了自己的棋艺,并取得了一些胜利。
实验结果:通过观察和分析,我们得出了一些有趣的结论。
首先,五子棋的策略非常重要。
高手善于观察和分析,能够在短时间内做出正确的决策。
而初学者则需要更多的练习和指导,才能提高自己的棋艺。
其次,思考的时间并不是决定胜负的唯一因素。
虽然高手思考的时间较短,但他们能够快速准确地判断局势,并做出正确的决策。
而初学者则需要更多的时间来思考,但他们在经过指导后也能够提高自己的下棋速度。
结论:通过本次实验,我们深入了解了五子棋的特点和策略。
高手的对局展现了他们的深思熟虑和布局能力,而初学者则通过指导逐渐提高了自己的棋艺。
五子棋不仅仅是一种棋类游戏,更是一种锻炼思维和培养战略思维的好方法。
我们希望通过这次实验的结果,能够鼓励更多的人去学习和享受这个古老而有趣的游戏。
【报告】c五子棋实验报告

【关键字】报告c五子棋实验报告篇一:五子棋对战实验报告实验项目五子棋网络对战和聊天实验日期XX0406实验报告要求:一、实验目的:学习和使用socket编程,熟练软件开发二、实验原理:使用socket进行网络通信,java作为编程语言三、实验要求:编写五子棋程序可以实现联机网络对战,并且可以进行聊天四、实验步骤、结果(程序+注释+截图)及分析:首先拟定编程语言与开发方案,选择java语言,考虑到java可以跨平台运行,然后决定把这个程序拆分为客户端、服务器两个部分,每个部分再分成5个小的部分实现不同功能。
1、然后考虑使用java的swing包,创建ClientChessPanel类负责棋盘部分,包括判断输赢,使用数组chesses[i][j]记录棋盘上棋子的分布,对数组进行不同的赋值表示网格节点上无棋、黑棋、白棋;使用playChessHandler作为鼠标单击事件,单击事件调用Clientskt中的函数传送棋子坐标以及输赢信息。
drawChess函数画棋子,drawGrids画网格,gameOver判断棋盘棋子分布,输赢情况。
importjavax.swing.*;importjava.awt.*;;importChatOneToOneClient.Clientskt;classClientChessPanel extends JPanel{private static final long serialVersionUID = 1L;private int space=20; //网格间的距离private int grids=30; //棋盘的网格数private int radius=space/2; //棋的半径Clientsktskt;//当chesses[i][j]=0,表示网格节点(i,j)上无棋//当chesses[i][j]=1,表示网格节点(i,j)上放白棋//当chesses[i][j]=2,表示网格节点(i,j)上放黑棋privateint[][] chesses=new int[grids+1][grids+1];private intcurrColor=1; //当前棋的颜色privateMouseListenerplayChessHandler=new MouseAdapter(){public void mouseClicked(MouseEvent e){if(skt.reMouseGo()){int x=e.getX();int y=e.getY();//放一颗棋子if(x=0 && y=0)if(chesses[round(x)][round(y)]==0){chesses[round(x)][round(y)]=currColor;repaint(); //刷新图形skt.dataout("x:"+String.valueOf(round(x)));skt.dataout("y:"+String.valueOf(round(y)));skt.setMouseGo(false);if(gameOver(currColor)){skt.dataout("g:你输了");ClientMyDialog(skt.chat,"你赢了");;}currColor=currColor==1?2:1; //切换棋子的颜色}}}};public int round(float a){ //获得接近a的网格节点坐标float f=a/space;returnMath.round(f);}publicClientChessPanel(intspace,intgrids,Clientsktskt){ this.space=space;this.grids=grids;this.radius=space/2;this.skt=skt;setBackground(Color.BLUE);setSize(space*grids,space*grids);addMouseListener(playChessHandler);startChess();}public void startChess(){clearGrids(); //清空棋盘currColor=1;repaint(); //刷新图形private void clearGrids(){for(inti=0;i for(int j=0;j chesses[i][j]=0;}//画一颗棋子private void drawChess(Graphics g,intx,inty,int color){g.setColor(color==1?Color.GREEN:Color.BLACK);g.fillOval(x*space-radius,y*space-radius,radius*2,radius*2);}//画网格private void drawGrids(Graphics g){g.setColor(Color.DARK_GRAY);for(inti=0;i g.drawLine(0,i*space,grids*space,i*space);g.drawLine(i*space,0,i*space,grids*space);}}//接收对方下的棋坐标public void paintChess(intx,int y){if(x=0 && y=0){if(chesses[x][y]==0){chesses[x][y]=currColor;currColor=currColor==1?2:1; //切换棋子的颜色skt.setMouseGo(false);skt.setMouseGo(true);repaint(); //刷新图形}}}//判断游戏是否结束publicbooleangameOver(intgameOver){int five=0;//用于判断是否有连续5个子for(inti=0;i for(int j=0;j if(chesses[i][j]==gameOver){five++;for(in(本文来自:小草范文网:c五子棋实验报告)t k=1;k if(chesses[i][j+k]==gameOver){five++;if(five==5){return true;}else{five=1;k=5;}}for(int k=1;k if(chesses[i+k][j]==gameOver){ five++;if(five==5){return true;}}else{five=1;k=5;}}for(int k=1;k if(chesses[i+k][j+k]==gameOver){ five++;if(five==5){return true;}}else{five=1;k=5;}}for(int k=1;k4;k++){//左斜向比较if(chesses[i+k][j-k]==gameOver){five++;if(five==5){return true;}}else{five=1;}}}}five=0;}return false;}public void paintComponent(Graphics g){ //覆盖paintComponent()方法super.paintComponent(g); //必须先调用父类的方法drawGrids(g); //画网格for(inti=0;i for(int j=0;j if(chesses[i][j]!=0)drawChess(g,i,j,chesses[i][j]); //画棋子}}2、ClientComponentPopupMenu类主要负责聊天的部分,使用JTextField并且对其添加单击事件以及鼠标事件,可以实现文本的剪贴、复制粘贴等功能。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
湖南工业大学课程设计任务书2015—2016学年第2 学期计算机与通信学院(系、部)计算机科学与技术专业计算机1502班级课程名称:面向对象程序设计设计题目:五子棋完成期限:自2016年6月13日至2016年6月19日共1周指导教师(签字):年月日系(教研室)主任(签字):年月日面向对象程序设计课程设计设计说明书五子棋起止日期: 2016年6月13日至 2016年6月18日学生姓名王回班级计算机1502学号15408100209成绩指导教师(签字)计算机与通信学院2016年 6 月 18日五子棋一、课题的介绍和课题的任务设计的课题名称:五子棋实现以下功能:功能1、模拟真实棋盘棋子功能2、模拟人与人对战下棋功能3、模拟实时胜负判断功能4、模拟棋局的存储与读取二、设计的要求具有动画功能(即图像能即时移动),能实现人与人进行简单的对玩,能实现简单的胜负判断三、系统的分析和系统中类的设计CWZQApp类作用:初始化应用程序及运行该程序的所需要的成员函数CWZQDoc类作用:存放应用程序的数据以及实现文件的保存,加载功能CMainFrame类作用:管理应用程序的窗口,显示标题栏,状态栏,工具栏等,同时处理针对窗口操作的信息CAboutDlg类作用:向导自动生成对话框类CWZQView类作用:管理视图窗口,在框架窗口中实现用户数据的显示和打印,存放添加的功能模块CWZQView类中的成员函数与数据成员:void Save(); //**** //保存文件void OnOpen() //打开文件void over(CPoint point);//**** //检查是否结束voidOnDraw(CDC* pDC) //画棋盘函数void OnLButtonUp(UINT nFlags, CPoint point)//模拟下棋函数HCURSOR hcursorwhite; //**** //两个鼠标HCURSOR hcursorblack; //****intwzq[19][19]; //**** //棋盘数组boolcolorwhite; //**** // colorwhite TRUE时白棋下,否则黑棋下CBitmapm_bmblack; //**** //棋子位图CBitmapm_bmwhite; //****void CWZQView::OnDraw(CDC* pDC) //构造棋盘,显示白棋以及黑棋GetDocument() //获取文档指针,在视图中显示文档内容CBrush //用于构造CBrush对象,然后传给需要画刷的CDC成员函数pDC->FillRect(myrect1,&mybrush1) // 画黑框线四、系统的实现及调试添加的功能:1.图标,光标以及位图的绘制程序运行开始鼠标在进入棋盘界面未放下棋子时变为类似棋子光标,此处需要描绘2种棋子光标:黑白鼠标Cursor以替换当前鼠标:IDC_CURSOR1 黑棋子IDC_CURSOR2 白棋子说明:由于下棋时我们必须把鼠标热点设置在中间,点击下图(图3-1-3)最右边按扭,然后把鼠标移动到图像中你想设置为热点的地方,按下鼠标左键。
绘图过程:点击ResouceView,打开Cursor,创建2个光标,分别命名为光标1和2,采用单色[32*32]面板进行绘制。
在下棋者点击鼠标落下棋子后,需要黑白两种图标做为记录,此处需要描绘2中图标:黑白位图Bitmap以表示棋盘上面的棋子:IDB_BLACKIDB_WHITE2.菜单栏的绘制在menu栏中绘制菜单:菜单以供操作:开始: ID_START保存: ID_SAVE打开: ID_OPEN工具栏:如上图所示。
说明:工具栏一般都是根据菜单选项而产生的,它的ID一般都能从菜单的ID 中找到。
2、设置鼠标,以及鼠标图形的变换函数使得每下完一步棋鼠标都会变成对方的旗子换做对方下3、画棋盘程序启动时显示的棋盘格式(先画背景后画黑框线)4、下棋操作:voidCWZQView::OnLButtonUp(UINT nFlags, CPoint point)函数功能:模拟人与人交替下棋的过程具体实现步骤:第一步:判断旗子是否在棋盘内(point.x>30&&point.x<410&&point.y>30&&point.y<410)第二步:若在棋盘内则判断该位置是否已经有棋子(if(colorwhite&&wzq[px][py]==0)表示该位置没有棋子)第三步:使用SelectObject()函数把一个对象(位图、画笔、画刷等)选入指定的设备描述表。
新的对象代替同一类型的老对象,在本程序中对象为黑白棋子位图。
使用BitBlt()函数用于把源设备环境中的位图复制到当前设备环境中本程序BitBlt(px*20+32,py*20+32,160,160,&Dc,0,0,SRCCOPY)内部参数的表示:目标区域左上角点的x坐标目标区域左上角点的y坐标目标区域的宽度目标区域的高度源贴图区域DC的指针(源位图的设备环境)源贴图区域x坐标源贴图区域y坐标像素直接拷贝模式第四步:检查是否结束(即给数组wzq[px][py]是否等于1或-1),若结束则换另一种颜色的棋子下调试:在实现下棋操作的时候刚开始使用OnLButtonDown(UINT nFlags, CPoint point)函数,运行时发现Down函数时是在鼠标按下时放下棋子,但当我们按下后意识到下错了就没办法移动了,这样的实际体验没有达到预期的效果,根据资料我们将Down函数改为了OnLButtonUp(UINT nFlags, CPoint point)函数,这表示当鼠标键松开时放下棋子,这样修改后实际操作就变得人性化很多。
5、判断胜负:voidCWZQView::over(CPoint point)用一个over()函数判断是否结束,是则结束并重新开始;否则,接着把鼠标变成对方棋子,表示对方下棋。
函数功能:利用刚下棋的位置为中心,检查它各个方向上的连续五个棋子是否同色,是则结束并重新开始。
将五子棋数组赋值为1和-1(若为白棋子则为1,黑棋子为-1)利用连续五个棋子的值相加,如果它们的值的绝对值等于5,则说明是同色。
具体实现步骤:第一步:获取鼠标指向数组的位置x和y第二步:计算开始判断的坐标xx和yy第三步:检查各个方向上连续5个棋子的颜色(横向、竖向、向右下角、向左下角)如果五个棋子都是白色(a=a+wzq[xx+i][yy+i]==5则利用AfxMessageBox()函数弹出”白棋胜”的窗口。
如果五个棋子都是黑色(a=a+wzq[xx+i][yy+i]==-5)则利用AfxMessageBox()函数弹出”黑棋胜”的窗口。
第四步:执行OnStart()函数重新开始6、文件的保存和读取函数功能:实现棋局的存储和读取具体实现步骤:第一步:利用CFileDialog类生成一个windows常用文件对话框对象(CFileDialog类封装了Windows常用的文件对话框。
常用的文件对话框提供了一种简单的与Windows标准相一致的文件打开和文件存盘对话框功能。
)设置保存的文件,后缀名wzq设置对话框风格,一般为OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, 即隐藏只读选项和覆盖已有文件前提示.OFN_HIDEREADONLY== 隐藏只读选项 OFN_OVERWRITEPROMPT==覆盖已有文件前提FALSE为保存文件对话框 "wzq"为缺省的扩展名NULL缺省显示在文件名组合框的编辑框的文件名,一般可选NULL设置文件筛选类型如:"(*.WZQ)|*.wzq|All Files|*.*||",它指明可供选择的文件类型和相应的扩展名。
this 父窗口指针第二步:循环把棋盘数组的值写入文件第三步:关闭文件五、系统的使用说明1、程序的基本界面图:2、菜单栏中的文件下的开始可以开始一局新的棋局,保存可以保存当前棋局,打开可以打开保存过的wzq文件大致流程如下: 1、画棋盘;2、画棋子;3、为棋盘数组赋值,在界面上显示为将棋子放置在棋盘上4、每下一步判断输赢;5、实现文件的保存于读取使用说明:1、一开始是白棋先下,如果白棋赢则下一把黑棋先下,如果黑棋赢则还是白棋先下2、某一方胜利后弹出一个对话框宣布胜利。
点击确定按钮即重新开始新一回合的棋局。
3、如果玩家在游戏过程中希望重新开始游戏、暂时保存棋局或者继续以前的棋局,则可以通过菜单栏中的”文件”进行操作;六、总结本五子棋设计实现了基本的棋局模拟,包括棋盘初始化,棋局棋子实物模拟,人人对战,实时判断胜负,保存与读取未完成的棋局。
通过MFC程序设计使得界面友好真是但是离真正的五子棋游戏还有还有距离。
程序优点:程序界面友好,效率较高,经过调试,bug极少或可以忽略不计。
不足之处:未实现人机对战,未实现联网对战,并且局限于一个电脑的鼠标。
此次课程设计使我全面掌握所学知识,包括问题分析、总体结构设计、用户界面设计、程序设计基本技能和技巧,在设计中逐步提高程序设计能力,培养到了科学的工作方法。
通过上机实习,验证自己设计的算法和程序的正确性,有效利用基本调试方法,迅速找出程序代码中的错误并且修改,进一步提高程序设计水平。
而且通过课程设计能得到锻炼,能根据实际问题的具体情况,提高程序设计和调试能力。