五子棋游戏实验报告.docx
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《五子棋游戏实验报告.docx》由会员分享,可在线阅读,更多相关《五子棋游戏实验报告.docx(20页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、五子棋玩耍试验报告课程名称计算机程序设计VB 学号姓名班级提交时间五子棋软件设计一、试验目的1通过五子棋软件设计或者自拟题目设计,稳固本课程所学的各个章节重点学问,自拟题目的同学需尽早向教师提出自己的想法及设计方案。 2通过开发一个较大的系统,增加软件开发力气。3通过调试系统,增加规律思维力气。二、试验内容1. 根本要求:(1)输入两个对手名字,然后进入玩耍界面。 (2用鼠标点击的方式在棋盘上摆放棋子,黑白交替。(棋盘 1515)3可以悔棋。4)五子连在一起的时候能推断成功,并且显示出成功者的名字。5能够将棋局的结果保存,保存该棋局完毕的状态、对手名字、 棋局名字(棋局名字在保存时由用户在相应
2、的界面下添入此功能要求用数据库和文件两种技术实现。6)棋局能够恢复,即重翻开,翻开后消灭棋局完毕的状态、对手名字此功能要求用数据库和文件两种技术实现。2. 其它要求:(1) 界面友好、秀丽。(2) 程序尽可能无bug.(3)程序强健性强,根本上到达无论用户如何操作,软件都不出错,都有相应的处理方法。3设计步骤(1) 首先做界面界面包括几个窗体,窗体上有相应的控件。由于需要画棋盘,所以必需有图形容器,这里用picturebox 框第一个窗体是登陆界面,由于玩家姓名需要在程序中不断变换,因此需要将玩家名定义成两个变量,又由于这两个变量在几个窗体中都用到,所以在模块中定义为全局变量当五子棋主界面启动
3、之后,首先系统要自动绘制棋盘。思路:用直线绘制棋盘-直线是由点绘制的每个点都有坐标-转变坐标系为用户坐标系用户坐标系的定义要在窗体启动时实现。(2) 坐标系的两个顶点坐标确实定?考虑到五子棋 15*15,确定棋盘坐标系顶点为-8, 8,8, -8(3) 棋子的绘制与存储棋子的绘制用实心圆模式,颜色为黑色及白色两种。棋子在内存中的存储方式:由于表示各个棋子的数据类型都一样,所以考虑用数组存储,由于棋盘是二维的,因此棋子用二维数组a 存储。ai,j表示用户坐标i,j的棋子状态,0表示此处无棋子,1 表示此处为黑子,2 表示此处为白子,下棋初始时,棋盘全部位置的初始状态都为 0(4) 下棋子的步骤鼠
4、标点击棋盘穿插点四周的位置,系统应实现自动识别鼠标点击位置四周的穿插点解决方法:坐标系的变换已经将棋盘穿插点坐标整数化,因此系统所需要实现的功能即是将鼠标所点击的位置坐标化为整数即可,例如将(6。2, -5。3)变成6, 5)。在穿插点上交替下黑白棋子.解决方法:定义一个规律数据类型变量blackwhite,该变量的值为真时下黑子,为假时下白子,每下一个棋子,该变量的值都要取反(NOT)。推断赢棋每次下子时都必需进展赢棋推断,推断的依据是 5 个子依据横线、竖线或斜线连成一行。解决方法:2 层循环。当有一方成功时,棋局完毕,此时在棋盘上连续点击,将不再下棋。解决方法:设置一个规律变量 wuzi
5、qi,其值为真时说明棋局没有完毕,可以在棋盘上放棋子,该值为假时,说明该棋局完毕,不能放棋子。6五子棋保存棋局思路:保存棋局的功能即把内存中与棋局相关的数据(棋局名称、棋子位置、棋子颜色、棋局状态即棋局是否完毕存入外存中,以便以后能够恢复棋局。保存的实现用两种技术实现:文件和数据库。承受数据库技术实现棋局保存: 数据库设计:数据表字段:棋局名、x 坐标、y 坐标、该点状态值、下棋状态。每条记录表示棋盘上一个存储的点的信息.要实现用数据库保存数据,就必需使程序连接到数据库上,这里用的是 data 控件,通过在程序中对data 控件属性的设置来连接数据库、数据表。首先推断假设输入的棋局名和当前记录
6、的棋局名相等,说明表中有输入棋局名对应的棋局信息,将其删除,推断过程是将用户输入的棋局名(字符串)从记录集即表的棋局字段顶端至 下逐一比较在表的最终,也就是最终一条记录后加上保存棋局的各条记录由于棋盘上空点居多,大局部点的信息为0,因此只需保存有棋子的点的信息用文件技术进展棋局保存,思路一样.7)五子棋恢复棋局思路:首先从数据库文件中找到要恢复棋局的数据(即曾经保存的数据,然后把这些数据赋值给内存中相应的数组或者变量中,依据这些数据重绘制棋盘和棋子,即完成了对棋局的恢复。窗体启动大事应当完成的事情:组合框中应当显示曾经保存的棋局名。由于每次保存棋局时,都是将棋局全部棋子的记录添加在表的最终,因
7、此表中关于棋局名的记录只能是类似于 aaabbbbccccc 的形式,而不行能是abbcacc 的形式,依据这个特点编程序取出表中不同的棋局名。具体算法:用一个字符串变量strfile 初始值为空,从表的顶端向下依次移动记录指针,假设当前记录的棋局名字段和strfile 不相等,说明进入另一个棋局的记录中,将该棋局记录的棋局名赋值给strfile,并参与到组合框中,始终到表中最终一个记录由于要从数据库中取出相关数据到a 数组中,因此要将a 数组全部数据清零。要建立一个 data 控件,与数据库连接起来,而后识别棋局即表中的棋局名字段与在列表框中选择的棋局名比较),将数据库该棋局中全部信息都赋值
8、给a 数组及相关变量。刚刚仅仅是数据的恢复,马上数据库中已经保存过的数据恢复到内存中,下一步应当依据内存中的数据重绘制棋盘以及棋子.重绘制棋盘是独立的一块功能,因此考虑用全局子过程来实现,该子过程定义在模块中.思路如下:清屏绘制棋盘-依据 a 数组中的每一项的两个下标来打算绘制棋子的位置,依据每一项的值是 1 还是 2 来打算在该位置绘制何颜色的棋子.打算该黑白方走的 blackwhite 变量当时没有保存,可以承受在数据库中保存的方式来解决, 本例中解决方法是通过数黑白棋子个数来打算恢复棋局后该谁走的。因此设置了一个变量做计数器,每走一步棋计数器的值加一。用文件技术实现棋局恢复,思路一样。8
9、悔棋悔一步棋:用几个变量来表示关于一步棋的几个信息,每次下子都将该子的信息赋值给那几个变量,悔一步棋马上那几个变量所表示的点的 a 数组信息清零。而后调用 paint过程重画.以上是教师带着学生完成的软件功能。遗留问题:保存棋手姓名和棋局名并在恢复棋局的时候显示。需要同学们自己完成) 思路:在数据表中多建立两个字段,分别表示两个棋手姓名,同其它数据的保存类似.三、设计日期十二月四、完成日期十二月五、试验体会其实,一开头学习vb 我就对它不抱有确定的热忱,可能是由于要用到计算机以及编程问题,当时一想到有代码,就会无比的苦恼,但是为了让这门课顺当通过,我还是怀着一颗必 必要学的心情。起初,我对待这
10、门课程和其他课程一样,保持着必需认真听讲的决心。但是由于理论课太过枯燥,没学几次,我就败下阵来,开头有一节没一节的听,但是心里还是 存有内疚,就得自己不该这样懒散,所以总是坐在前边几排座位上,逼着自己确定要学些什么, 这总归要比坐在后边效果要好一些。在学了这半学期vb 之后,我同样有了一些体会,虽然不会比创程序的同学深刻,但是也让我信任了,起码在教师他自己的课堂上,他讲的要点 都是对的.1、确定要认真听讲做笔记,这是提高效率最快的方法,就像教师说的。有了上机课,我才能真正懂得听课的重要性,其实有些课件虽然教师为了学生能够准时的 进展自我复习传上去一些,但有些东西终归是教师上课讲的,而并没有写入
11、课件的。所以, 当真正自己写的时候,一遍一遍的被程序提示出错,内心其实很焦急,由于教师只有一个, 而且也不会围着你团团转,所以这时候,请教同学是唯一的方法,但是这唯一的方法也不是时时都能发挥作用,同学也有不会,还是需要教师。其实我知道,大局部的问题都是上课教师 已经讲过的,只是自己没听。或者是一知半解,常常写丢一些重要程序,导致程序始终无法运行。比方我常常把退出子过程 exit sub 弄丢,自己当时没觉得它很重要,虽然教师讲过假设没有这个,后边的程序会很麻烦。当时,我也只是那么一听,没在意,后来编程黑白子竖方 向赢棋时没把它加上,之后麻烦就消灭了,我的黑白子始终都没法完成竖方向赢棋总是有一
12、个方向没法推断,起初教师告知我看看是否有算法上的错误,但是,我找了一节多课我承 认我这个人太固执,必需要知道为什么错了,才会做下一步,我觉得我的算法确定没问题, 但是不明白为什么错,后来在读别人的程序时,才觉察是我的exit sub 没写,造成的,只有退出我上一个的子过程,这个过程才能正常运行.所以可见没听教师的话,是多么可怕,尤其 还是在我也没听他讲课的前提下根本不懂代码意思,乱删改造成的后果.所以,不管是在 哪里,学学问是对任何事情在打根底。做每一步都要问一句问什么,但凡都有缘由.2、学会独立思考,多问自己为什么,求帮助是下策在最初的的上机试验里,我总会问教师一些我自己可以解决的问题 ,自
13、己不愿动脑想,期望以最快捷的方式,获得最正确的结果。但是,往往会被教师教育一下,由于在其中,有一半是 拼写错误,而自己没留意,另一半是写程序时不够完整认真说起来是根本没怎么想,只是 将课上抄录下来的不完整笔记,凭借自己的主观意愿,编写的程序,不问为什么。其实后 来想一想,确实是自己的问题,既耽误自己时间,也耽误教师时间。这些程序教师只是给一 个思路,教你如何编写程序,但是完整的需要自己来做,这些都需要弄清思路,才会懂得我需要什么,从而编写出什么,这样犯错几率才会大大削减。这也是熬炼自己思路规律性的时 候,也是教师让我们学的地方。只是当时没有听进去。就像教师说的,只有这样才能将程序 融为自己的,
14、真正有力气去编自己想要边的程序。3、任何颖的事物都需要一个生疏的过程,但凡要趁热打铁,效率才会高。其实,这也是教师常常说的,可我们总是在做错事之后,才会想起来,原来某某某说的话是多么的对,但是总是无视它事前的作用。我确实每次上完课,笔记连翻都不翻,到真正上机的时候才会开头琢磨这个程序的意思,所以每一次的上机,我的速度都是比别人慢好多, 而且尤其是笔记也没有记得很全的时候也没有准时的补,上机时间都不够我完成上次所讲的程序的.所以会很懊悔,没有好好听讲,没有好好记笔记、补笔记,造成了效率低下的 局面。所以,凡事都要趁热打铁,才会尽快吸取。4、任何事情都不是一气呵成,事先的打算会是你事半功倍,而实践
15、是检验真理的唯一标准, 程序亦是如此.这是我这两天在争论程序为什么这么写的缘由时,才开头领悟到的。这一点教师也有可能 说过。我在抛开教师所编写的五子棋的程序下,想通过自己的思考,把五子棋的思路捋顺, 所以开头自己画构造图真正开头有这种想法的是在我看到教师给我们呈现的他的往届同学 做贪吃蛇的心得中,才觉察重要性)。一开头我花了一个很短的一段时间,画出一个我自认 为很满足思路图,但是当我在重用一些数去试验,当我再比照我写的图与教师编写的程序 有何不同的时候,就会觉察,有很多漏洞。比方,我想到了有下棋,但没有想到下棋前要清屏, 防止程序之前有任何痕迹,防止出错;还有我想到了下棋之后要推断赢棋,但是当
16、我到赢棋 的那一步思路,我才想到,要推断赢棋,就必需有五个一样颜色的子连一起,那么在这之前我就 要加上关于数组的赋值,来代表每一种颜色的棋子,从而构造if 条件语句,完成应其目的等等。其实这些都不是我一开头做程序就想到的,只有当依据打算实施的过程中,才能验证思路 的正确性,才能知道自己的思路与规律缺陷在哪里,从而弥补缺乏。这也是将自己的规律思维进一步完善的过程,也是教师想让我们得到的东西。所以,通过这次的课程,我能体会到教师的良苦认真,也感谢教师始终不厌倦的一遍遍教 我们,一遍遍告知我们不情愿听的忠言。我会将我从这里学到的态度,以及做事的思维方式, 运用到其他事情上,哪怕是一点点,也会让我的效
17、率比以往更有提高。六、全部界面和代码Form 1Private Sub Command1_Click)If Trim(Text1.Text) = ”“ Or Trim(Text2.Text= “” ThenMsgBox ”请输入玩家姓名!“ End IfIf Trim(Text1。Text = Trim(Text2.Text) Then MsgBox “不能输入一样姓名!“Exit Sub End Ifb = Text1。Textw = Text2。Text Form2.Show Unload MeEnd SubForm 2Dim m As Integer Dim n As Integer D
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 五子棋 游戏 实验 报告
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内