五子棋游戏实验报告.

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

五子棋游戏实验报告

课程名称计算机程序设计(VB)学号

姓名

班级

提交时间

五子棋软件设计

一、实验目的

1.通过五子棋软件设计或者自拟题目设计,巩固本课程所学的各个章节重点知识,自拟题目的同学需尽早向教师提出自己的想法及设计方案。

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

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

二、实验内容

1.基本要求:

(1)输入两个对手名字,然后进入游戏界面。

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

(3)可以悔棋。

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

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

"

(6)棋局能够恢复,即重新打开,打开后出现棋局结束的状态、对手名字(此功能要求用数据库和文件两种技术实现)。

2.其它要求:

(1)界面友好、漂亮。

(2)程序尽可能无bug。

(3)程序健壮性强,基本上达到无论用户如何操作,软件都不出错,都有相应的处理方法。

3.设计步骤

(1)首先做界面

界面包括几个窗体,窗体上有相应的控件。

因为需要画棋盘,所以必须有图形容器,这里用picturebox框

第一个窗体是登陆界面,因为玩家姓名需要在程序中不断变换,因此需要将玩家名定义成两个变量,又因为这两个变量在几个窗体中都用到,所以在模块中定义为全局变量

当五子棋主界面启动之后,首先系统要自动绘制棋盘。

#

思路:用直线绘制棋盘----直线是由点绘制的---每个点都有坐标----改变坐标系为用户坐标系

用户坐标系的定义要在窗体启动时实现。

(2)坐标系的两个顶点坐标的确定

考虑到五子棋15*15,确定棋盘坐标系顶点为(-8, 8),(8, -8)

(3)棋子的绘制与存储棋子的绘制用实心圆模式,颜色为黑色及白色两种。

棋子在内存中的存储方式:因为表示各个棋子的数据类型都相同,所以考虑用数组存储,因为棋盘是二维的,因此棋子用二维数组a存储。a(i,j)表示用户坐标(i,j)的棋子状态,0表示此处无棋子,1表示此处为黑子,2表示此处为白子,下棋初始时,棋盘所有位置的初始状态都为0

(4)下棋子的步骤鼠标点击棋盘交叉点附近的位置,系统应实现自动识别鼠标点击位置附近的交叉点

解决方法:坐标系的变换已经将棋盘交叉点坐标整数化,因此系统所需要实现的功能即是将鼠标所点击的位置坐标化为整数即可,例如将(, )变成(6, -5)。在交叉点上交替下黑白棋子。

解决方法:定义一个逻辑数据类型变量blackwhite,该变量的值为真时下黑子,为假时下白子,每下一个棋子,该变量的值都要取反(NOT)。

判断赢棋每次下子时都必须进行赢棋判断,判断的依据是5个子按照横线、竖线或斜线连成一行。

解决方法:2层循环。

当有一方胜利时,棋局结束,此时在棋盘上继续点击,将不再下棋。

解决方法:设置一个逻辑变量wuziqi,其值为真时说明棋局没有结束,可以在棋盘上放棋子,该值为假时,说明该棋局结束,不能放棋子。

(6)五子棋保存棋局

思路:保存棋局的功能即把内存中与棋局相关的数据(棋局名称、棋子位置、棋子颜色、棋局状态(即棋局是否结束))存入外存中,以便以后能够恢复棋局。保存的实现用两种技术实现:文件和数据库。

采用数据库技术实现棋局保存:

数据库设计:

数据表字段:棋局名、x坐标、y坐标、该点状态值、下棋状态。

每条记录表示棋盘上一个存储的点的信息。

要实现用数据库保存数据,就必须使程序连接到数据库上,这里用的是data控件,通过在程序中对data控件属性的设置来连接数据库、数据表。

首先判断如果输入的棋局名和当前记录的棋局名相等,说明表中有输入棋局名对应的棋局信息,将其删除,判断过程是将用户输入的棋局名(字符串)从记录集(即表)的棋局字段顶端至下逐一比较

在表的最后,也就是最后一条记录后加上新保存棋局的各条记录

因为棋盘上空点居多,大部分点的信息为0,因此只需保存有棋子的点的信息

用文件技术进行棋局保存,思路相同。

(7)五子棋恢复棋局

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

窗体启动事件应该完成的事情:

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

具体算法:

用一个字符串变量strfile初始值为空,从表的顶端向下依次移动记录指针,如果当前记录的棋局名字段和strfile不相等,说明进入另一个棋局的记录中,将该棋局记录的棋局名赋值给strfile,并加入到组合框中,一直到表中最后一个记录

因为要从数据库中取出相关数据到a数组中,因此要将a数组所有数据清零。

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

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

?

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

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

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

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

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

(8)悔棋

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

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

遗留问题:保存棋手姓名和棋局名并在恢复棋局的时候显示。(需要同学们自己完成)

思路:在数据表中多建立两个字段,分别表示两个棋手姓名,同其它数据的保存类似。三、设计日期

*

十二月

四、完成日期

十二月

五、实验体会

相关文档
最新文档