五子棋游戏实验报告

合集下载

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

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

实验报告实验一五子棋游戏北方工业大学 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的难度也是这里。

下面是我设计的策略过程:从下棋者的考虑角度进行考虑,尽可能保证每一次下子都是有必要的、都是在情理当中的。

我所设计的策略并不是完整,漏洞在与没有考虑三棋子连续的情况。

五子棋程序实习报告

五子棋程序实习报告

五子棋程序实习报告一、实习背景及目的近期,我通过五子棋程序的实习,深入了解了五子棋的规则和算法,并成功编写了一个五子棋程序。

本次实习的目的是为了提高我的编程能力和逻辑思维能力,同时了解人工智能在棋类游戏中的应用。

二、五子棋规则及算法分析五子棋是一种两人对弈的棋类游戏,游戏的目标是在棋盘上形成连续的五个棋子。

棋盘通常为15×15的网格,每个玩家轮流在空格中放置自己的棋子。

五子棋的算法主要包括两种:一种是基于搜索的算法,如极大极小值搜索和启发式搜索;另一种是基于机器学习的算法,如蒙特卡洛树搜索和深度学习。

三、程序设计及实现在本次实习中,我选择了基于极大极小值搜索的五子棋算法,并使用Python语言进行程序设计。

程序的主要功能包括棋盘的显示、玩家的输入和计算机的智能下棋。

首先,我使用类来表示棋盘,每个棋盘对象包含一个15×15的二维数组,用于存储棋子的位置。

同时,我还定义了一个常量类,用于存储棋子的颜色和空格的表示。

接下来,我实现了一个玩家输入的类,玩家可以通过该类来选择下棋的位置。

为了简化输入过程,我使用了一个简单的文本界面,玩家只需输入坐标即可。

最后,我实现了一个计算机下棋的类,该类使用了极大极小值搜索算法。

具体实现过程如下:1. 将棋盘划分为多个可能的获胜区域,例如横线、竖线和斜线。

2. 对于每个获胜区域,计算计算机和玩家在该区域获胜的概率。

3. 使用极大极小值搜索算法,选择最优的落子位置。

四、实习心得通过本次五子棋程序的实习,我对五子棋的规则和算法有了更深入的了解,同时也提高了我的编程能力和逻辑思维能力。

在程序设计过程中,我遇到了很多问题,如棋盘的表示、搜索算法的实现等,通过查阅资料和不断调试,我最终成功解决了这些问题。

此外,通过本次实习,我也了解到了人工智能在棋类游戏中的应用。

目前,深度学习等算法在棋类游戏中取得了显著的成果,例如AlphaGo在围棋领域的突破。

未来,我相信人工智能将在更多棋类游戏中发挥重要作用。

五子棋游戏实验报告

五子棋游戏实验报告

五子棋游戏实验报告五子棋游戏实验报告引言:五子棋是一种古老而受欢迎的策略游戏,它不仅能够锻炼思维能力,还能培养耐心和决策能力。

为了进一步了解五子棋游戏对人类思维和决策的影响,我们进行了一项实验。

本实验旨在探究五子棋游戏对玩家的思维策略、决策效率和情绪状态的影响。

实验设计:参与实验的被试共计50人,他们被随机分为两组。

每个被试都需要进行五子棋游戏,其中一组被试在游戏前接受了一段时间的训练,而另一组则没有。

我们通过观察被试的行为和采集数据来分析五子棋游戏对思维和决策的影响。

实验过程:实验开始前,我们向所有被试提供了五子棋游戏的规则和基本策略。

然后,我们对训练组进行了一段时间的训练,让他们熟悉游戏规则和各种常见的战术。

接下来,两组被试开始进行五子棋游戏,每个被试有15分钟的时间来下棋。

实验结果:通过对被试的行为和数据的分析,我们得出了以下结论:1. 思维策略:在游戏中,训练组的被试表现出更加深思熟虑的思维策略。

他们更善于预测对手的下一步,并采取相应的防守或进攻策略。

相比之下,未训练组的被试更加随机地下棋,缺乏长远规划。

2. 决策效率:训练组的被试在游戏中做出决策的速度更快。

他们能够快速分析局势,并做出相应的反应。

而未训练组的被试则需要更多的时间来思考和决策。

3. 情绪状态:我们观察到训练组的被试在游戏过程中更加冷静和放松。

他们能够保持冷静的头脑,不受情绪的干扰。

相比之下,未训练组的被试在面对困难局面时更容易感到紧张和焦虑。

讨论:通过这项实验,我们发现五子棋游戏对思维和决策能力有着积极的影响。

训练组的被试在思考问题和做出决策时表现出更高的效率和准确性。

此外,他们还能够更好地控制情绪,保持冷静。

这些结果表明,五子棋游戏可以作为一种有效的训练工具来提升思维能力和决策能力。

然而,我们也发现这项实验存在一些局限性。

首先,实验样本较小,可能无法完全代表整个人群。

其次,实验时间较短,无法观察到长期训练对思维和决策能力的影响。

五子棋实习报告百度文库

五子棋实习报告百度文库

一、实习背景随着科技的发展,我国的教育事业也在不断地推进。

为了更好地培养学生的创新精神和实践能力,我校开展了丰富多彩的课外实践活动。

其中,五子棋活动作为一种有益于学生身心健康、锻炼思维能力的活动,受到了广大师生的喜爱。

为了深入了解五子棋活动的开展情况,提高自身教学水平,我于本学期参加了五子棋实习活动。

二、实习目的1. 了解五子棋活动的起源、规则和发展历程,掌握五子棋的基本技巧。

2. 掌握五子棋教学的方法和策略,提高自身教学水平。

3. 通过实习活动,培养学生的团队协作精神、竞技意识和良好品质。

4. 丰富自己的业余生活,提高自己的综合素质。

三、实习过程1. 实习前期准备在实习开始前,我通过网络、书籍等多种途径,对五子棋进行了深入了解。

学习了五子棋的起源、规则、基本技巧等知识,为实习活动奠定了基础。

2. 实习阶段(1)参与教学活动在实习过程中,我担任了五子棋课程的助教,协助老师进行教学。

在老师的指导下,我了解了五子棋教学的基本流程,包括课堂导入、讲解规则、示范操作、学生练习、总结评价等环节。

(2)组织活动为了提高学生的兴趣,我组织了多次五子棋比赛。

在比赛中,我负责裁判工作,确保比赛的公平、公正。

同时,我还负责记录比赛结果,为优秀选手颁发奖品。

(3)课后辅导在课后,我主动为学生提供辅导,解答他们在学习中遇到的问题。

通过辅导,我发现学生们在五子棋学习过程中,普遍存在以下问题:① 规则理解不透彻;② 棋力水平参差不齐;③ 团队协作意识薄弱。

针对这些问题,我制定了相应的辅导方案,帮助学生提高棋艺。

3. 实习总结在实习过程中,我逐渐掌握了五子棋教学的方法和策略。

以下是我总结的一些经验:(1)注重规则讲解在五子棋教学中,首先要让学生了解游戏规则,这是提高棋艺的基础。

(2)因材施教针对学生的不同水平,制定相应的教学计划。

对于基础较差的学生,要注重基础知识的讲解;对于基础较好的学生,要引导他们进行实战演练。

(3)培养学生的团队协作意识在五子棋比赛中,鼓励学生互相学习、共同进步。

五子棋实验报告

五子棋实验报告

五子棋实验报告五子棋实验报告引言:五子棋是一种古老而受欢迎的棋类游戏,它不仅能够锻炼思维能力,还能培养战略思维和判断力。

为了进一步了解五子棋的特点和策略,我们进行了一项实验研究。

实验设计:我们邀请了十位志愿者参与本次实验,他们中的五位是五子棋高手,另外五位则是初学者。

实验分为两个阶段,第一阶段是对高手和初学者之间的对局进行观察和分析,第二阶段是对初学者进行指导并观察他们的进步情况。

实验过程:在第一阶段,我们观察了五位高手之间的对局。

他们的思考时间短,下棋速度快,每一步都经过深思熟虑。

他们善于利用对手的弱点,通过布局和进攻来取得优势。

他们的棋局稳健而有力,很少出现失误。

与此相反,初学者的对局显得更加紧张和激烈。

他们思考的时间较长,下棋的速度较慢。

初学者更注重自己的进攻,而忽略了对手的威胁。

他们常常陷入被动局面,容易被高手击败。

在第二阶段,我们对初学者进行了指导。

我们向他们介绍了一些基本的五子棋策略,并分析了高手的对局特点。

初学者经过指导后,开始注意对手的威胁并学会了更好地布局和进攻。

他们的下棋速度也有所提升,思考的时间也相对减少。

通过与高手的对局,初学者逐渐提高了自己的棋艺,并取得了一些胜利。

实验结果:通过观察和分析,我们得出了一些有趣的结论。

首先,五子棋的策略非常重要。

高手善于观察和分析,能够在短时间内做出正确的决策。

而初学者则需要更多的练习和指导,才能提高自己的棋艺。

其次,思考的时间并不是决定胜负的唯一因素。

虽然高手思考的时间较短,但他们能够快速准确地判断局势,并做出正确的决策。

而初学者则需要更多的时间来思考,但他们在经过指导后也能够提高自己的下棋速度。

结论:通过本次实验,我们深入了解了五子棋的特点和策略。

高手的对局展现了他们的深思熟虑和布局能力,而初学者则通过指导逐渐提高了自己的棋艺。

五子棋不仅仅是一种棋类游戏,更是一种锻炼思维和培养战略思维的好方法。

我们希望通过这次实验的结果,能够鼓励更多的人去学习和享受这个古老而有趣的游戏。

【报告】c五子棋实验报告

【报告】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并且对其添加单击事件以及鼠标事件,可以实现文本的剪贴、复制粘贴等功能。

c 五子棋实验报告

c  五子棋实验报告

c 五子棋实验报告
C五子棋实验报告
引言
五子棋是一种古老的策略游戏,它既考验了玩家的思维能力,又具有很高的娱乐性。

在本次实验中,我们将利用C语言编程,设计一个简单的五子棋游戏,并对其进行实验测试。

实验目的
1. 学习使用C语言进行游戏开发;
2. 设计并实现一个简单的五子棋游戏;
3. 对游戏进行功能测试和性能评估。

实验方法
1. 使用C语言编写五子棋游戏的程序代码;
2. 设计游戏界面和用户交互功能;
3. 实现游戏规则和胜负判定功能;
4. 进行功能测试和性能评估。

实验结果
经过实验,我们成功地设计并实现了一个简单的五子棋游戏。

游戏具有清晰的界面和简单的操作方式,玩家可以轻松上手。

在功能测试中,游戏能够正确判定胜负,且没有出现明显的bug。

在性能评估中,游戏在常见的操作系统上都能够流畅运行,响应速度较快。

实验结论
通过本次实验,我们学习到了使用C语言进行游戏开发的基本方法和技巧。


们成功地设计并实现了一个简单的五子棋游戏,并对其进行了功能测试和性能
评估。

实验结果表明,我们的游戏具有良好的稳定性和性能表现,能够满足玩
家的基本需求。

展望
在未来,我们可以进一步完善游戏的功能和界面设计,增加更多的游戏模式和
挑战性。

我们也可以考虑将游戏移植到其他平台上,以提供更广泛的游戏体验。

同时,我们还可以利用更先进的技术和算法,进一步优化游戏的性能和用户体验。

总之,我们将继续努力,不断改进和完善我们的五子棋游戏,为玩家提供
更好的游戏体验。

黑白棋实验报告

黑白棋实验报告

一、实验背景黑白棋,又称五子棋、连珠棋等,是一种两人对弈的策略型棋类游戏。

本实验旨在通过编程实现黑白棋游戏,并运用人工智能算法优化游戏策略,提高游戏水平。

二、实验目的1. 理解黑白棋游戏规则及基本策略。

2. 掌握人工智能在黑白棋游戏中的应用。

3. 通过优化算法,提高黑白棋游戏水平。

三、实验内容1. 黑白棋游戏规则黑白棋游戏规则如下:(1)棋盘为15×15的网格,每个网格可以放置一枚棋子。

(2)黑方先手,双方轮流在空白网格放置棋子,黑色棋子为“黑”,白色棋子为“白”。

(3)当任意一方在水平、竖直或两个对角线上形成连续的五个棋子时,该方获胜。

2. 人工智能算法本实验采用Minimax(最小-最大)算法进行人工智能策略优化。

Minimax算法是一种决策树搜索算法,用于解决二人零和博弈问题。

在黑白棋游戏中,Minimax算法通过模拟对手的走法,寻找最优的落子策略。

3. 优化算法为了提高游戏水平,我们对Minimax算法进行了以下优化:(1)棋子权重:将棋盘上的棋子按照位置赋予不同的权重,以反映棋子的重要程度。

例如,棋盘中心的棋子权重高于边缘棋子。

(2)22点权重:在棋盘的四个角落,我们赋予额外的权重,以鼓励在角落放置棋子。

(3)边线权重:棋盘边缘的棋子权重高于中间棋子,以反映棋子贴边的重要性。

(4)顶角权重:棋盘四个顶角的棋子权重最高,以鼓励在顶角放置棋子。

四、实验结果与分析1. 游戏效果通过优化后的Minimax算法,我们的黑白棋游戏水平得到了显著提高。

在与对手的对弈中,我们能够更好地判断棋局走势,制定合理的落子策略。

2. 优化效果分析(1)棋子权重:通过对棋子权重的优化,我们能够更好地把握棋局走势,避免在棋局后期陷入被动。

(2)22点权重:在棋局初期,我们倾向于在22点位置放置棋子,以占据有利地形。

(3)边线权重:在棋局中后期,我们注重在棋盘边缘放置棋子,以扩大棋局范围。

(4)顶角权重:在棋局的关键时刻,我们会在顶角位置放置棋子,以形成优势。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

五子棋游戏实验报告课程名称计算机程序设计(VB)学号______________________姓名______________________班级______________________提交时间五子棋软件设计一、实验目的1•通过五子棋软件设计或者自拟题目设计,巩固本课程所学的各个章节重点知识,自拟题目的同学需尽早向教师提岀自己的想法及设计方案。

2•通过开发一个较大的系统,增强软件开发能力。

3•通过调试系统,增强逻辑思维能力。

二、实验内容1.基本要求:(1)输入两个对手名字,然后进入游戏界面。

(2)用鼠标点击的方式在棋盘上摆放棋子,黑白交替。

(棋盘15*15 )(3)可以悔棋。

(4)五子连在一起的时候能判断胜利,并且显示出胜利者的名字。

(5)能够将棋局的结果保存,保存该棋局结束的状态、对手名字、棋局名字(棋局名字在保存时由用户在相应的界面下添入)(此功能要求用数据库和文件两种技术实现)。

因为棋盘上空点居多,大部分点的信息为0,因此只需保存有棋子的点的信息用文件技术进行棋局保存,思路相同。

(7)五子棋恢复棋局思路:首先从数据库文件中找到要恢复棋局的数据(即曾经保存的数据),然后把这些数据赋值给内存中相应的数组或者变量中,按照这些数据重新绘制棋盘和棋子,即完成了对棋局的恢复。

窗体启动事件应该完成的事情:组合框中应该显示曾经保存的棋局名。

因为每次保存棋局时,都是将棋局所有棋子的记录添加在表的最后,因此表中关于棋局名的记录只能是类似于aaabbbbccccc的形式,而不可能是abbcacc的形式,根据这个特点编程序取出表中不同的棋局名。

具体算法:用一个字符串变量strfile初始值为空,从表的顶端向下依次移动记录指针,如果当前记录的棋局名字段和strfile不相等,说明进入另一个棋局的记录中,将该棋局记录的棋局名赋值给strfile,并加入到组合框中,一直到表中最后一个记录因为要从数据库中取岀相关数据到a数组中,因此要将a数组所有数据清零。

要建立一个data控件,与数据库连接起来,而后识别棋局(即表中的棋局名字段与在列表框中选择的棋局名比较),将数据库该棋局中所有信息都赋值给a数组及相关变量。

刚才仅仅是数据的恢复,即将数据库中已经保存过的数据恢复到内存中,下一步应该根据内存中的数据重新绘制棋盘以及棋子。

重新绘制棋盘是独立的一块功能,因此考虑用全局子过程来实现,该子过程定义在模块中。

思路如下:清屏一绘制棋盘一根据a数组中的每一项的两个下标来决定绘制棋子的位置,根据每一项的值是1还是2来决定在该位置绘制何颜色的棋子。

决定该黑白方走的blackwhite变量当时没有保存,可以采用在数据库中保存的方式来解决,本例中解决方法是通过数黑白棋子个数来决定恢复棋局后该谁走的。

因此设置了一个变量做计数器,每走一步棋计数器的值加一。

用文件技术实现棋局恢复,思路相同。

(8)悔棋悔一步棋:用几个变量来表示关于一步棋的几个信息,每次下子都将该子的信息赋值给那几个变量,悔一步棋即将那几个变量所表示的点的a数组信息清零。

而后调用paint ()过程重画。

以上是教师带着学生完成的软件功能。

遗留问题:保存棋手姓名和棋局名并在恢复棋局的时候显示。

(需要同学们自己完成)思路:在数据表中多建立两个字段,分别表示两个棋手姓名,同其它数据的保存类似。

三、设计日期十二月四、完成日期十二月五、实验体会其实,一开始学习vb我就对它不抱有一定的热情,可能是因为要用到计算机以及编程问题,当时一想到有代码,就会无比的苦恼,但是为了让这门课顺利通过,我还是怀着一颗必须要学的心情。

起初,我对待这门新课程和其他课这是我这两天在研究程序为什么这么写的原因时,才开始领悟到的。

这一点老师也有可能说过。

我在抛开老师所编写的五子棋的程序下,想通过自己的思考,把五子棋的思路捋顺,所以开始自己画结构图(真正开始有这种想法的是在我看到老师给我们展示的他的往届同学做贪吃蛇的心得中,才发觉重要性)。

一开始我花了一个很短的一段时间,画岀一个我自认为很满意思路图,但是当我在重新用一些数去实验,当我再对比我写的图与老师编写的程序有何不同的时候,就会发现,有很多漏洞。

比如,我想到了有下棋,但没有想到下棋前要清屏,防止程序之前有任何痕迹,防止岀错;还有我想到了下棋之后要判断赢棋,但是当我到赢棋的那一步思路,我才想到,要判断赢棋,就必须有五个相同颜色的子连一起,那么在这之前我就要加上关于数组的赋值,来代表每一种颜色的棋子,从而构造if条件语句,完成应其目的等等。

其实这些都不是我一开始做程序就想到的,只有当按照计划实施的过程中,才能验证思路的正确性,才能知道自己的思路与逻辑缺陷在哪里,从而弥补不足。

这也是将自己的逻辑思维进一步完善的过程,也是老师想让我们得到的东西。

所以,通过这次的课程,我能体会到老师的良苦用心,也感谢老师一直不厌倦的一遍遍教我们,一遍遍告诉我们不愿意听的忠言。

我会将我从这里学到的态度,以及做事的思维方式,运用到其他事情上,哪怕是一点点,也会让我的效率比以往更有提高。

六、全部界面和代码Form 1Private Sub Comma nd1_Click()If Trim仃eext1.Text) = ""Or Trim(Text2.Text) = "" ThenMsgBox "请输入玩家姓名!"End IfIf Trim(Text1.Text) = Trim(Text2.Text) The nMsgBox "不能输入相同姓名!“Exit SubEnd Ifb = Text1.Textw = Text2.TextForm2.ShowUn load MeEnd SubForm 2Dim m As In tegerDim n As In tegerDim i As In tegerDim j As In tegerPrivate Sub Form_Load()End SubPrivate Sub 开始游戏_Click()Picture1.ClsFor i = -7 To 7Picturel.Line (-7, i)-(7, i), QBColor(O) Picturel.Line (i, -7)-(i, 7), QBColor(0) NextFor i = -11 To 11For j = -11 To 11a(i, j) = 0NextNextEnd lfExit Sub End If2 And a(m + i - 4, n + i - 4) = 2 Then MsgBox "白方胜利!“wuziqi = FalseExit SubEnd IfNextEnd IfEnd SubPrivate Sub 保存棋局_Click()Form3.ShowEnd Sub + i - 2) = 2 And a(m + i - 3, n + i - 3)=Private Sub 打开已保存棋局_Click() Form4.ShowEnd SubPrivate Sub 悔棋_Click()If wuziqi = True The na(m, n) = 0Call pai ntEnd IfEnd SubPrivate Sub 保存棋局文件_Click() Common Dialog1.Filter = "*wzq/*wzq"Com mon Dialogl.Actio n = 2Open CommonDialogl.FileName For Output As #1 Print #1, wuziqiFor i = -7 To 7For j = -7 To 7If a(i, j) <> 0 The nPrint #1, iPrint #1, jPrint #1, a(i, j)Print #1, bPrint #1, wEnd IfNextNextClose #1End SubPrivate Sub 打开棋局文件_Click()For i = -7 To 7For j = -7 To 7a(i, j) = 0NextCommon Dialogl.Filter = "*wzq/*wzq"Com mon Dialogl.Actio n = 1Ope n Commo nDialogl.FileName For In put As #1Line In put #1, strwzqwuziqi = CBool(strwzq)Do While Not EOF(1)Line In put #1, striLine In put #1, strjLine In put #1, straLine In put #1, strbLine In put #1, strwa(Val(stri), Val(strj)) = Val(stra)LoopClose #1Call pai ntEnd SubForm 3Dim recou nt As In tegerPrivate Sub Comma nd1_Click()With Data1五子棋棋库.mdb" .RecordSource ="五子棋棋库".RefreshIf Trim(Text1.Text) = "" The nMsgBox "棋局名不能为空“Exit SubEnd IfIf .Recordset.RecordCou nt > 0 The n.Recordset.MoveLastrecou nt = .Recordset.RecordCou nt.Recordset.MoveFirstFor i = 1 To recou ntIf .Recordset.Fields(” 棋局名")=Text1.Text Then .Recordset.DeleteEnd IfIf Not .Recordset.EOF The n.Recordset.MoveNextEnd IfNextEnd IfFor i = -7 To 7For j = -7 To 7If a(i, j) <> 0 The n.Recordset.AddNew.Recordset.Fields(” 棋局名")=Textl.Text.Recordset.Fields(“ 执黑棋者")=b .Recordset.Fields(” 执白棋者")=w .Recordset.Fields("X 坐标")=i .Recordset.Fields ("Y 坐标")=j .Recordset.Fields(” 该点状态值")=a(i, j) .Recordset.Fields(” 下棋状态")=wuziqi .Recordset.Update End IfNextUn load MeEnd WithEnd SubForm 4Dim recou nt As In tegerPrivate Sub Form_Load()Combo1.Text ="请选择所要打开的棋局”strfile =""With Data1五子棋棋库.mdb".RecordSource ="五子棋棋库".RefreshIf .Recordset.RecordCou nt > 0 The n.Recordset.MoveLastrecou nt = .Recordset.RecordCou nt.Recordset.MoveFirstFor i = 1 To recou ntIf .Recordset.Fields(" 棋局名")<> strfile Then strfile = .Recordset.Fields("棋局名") Combo1.AddItem strfile End IfIf Not .Recordset.EOF The n.Recordset.MoveNextEnd IfNextEnd IfEnd WithEnd SubEnd IfNextEnd IfEnd With Call pai nt Un load Me End Sub。

相关文档
最新文档