各个用例,简单描述如下:

? 棋盘绘制:绘制19*19的棋盘及相关按钮和选项,并负责电脑、玩家落子后棋子的具体绘制; ? 棋势扫描:扫描目前棋盘上的所有八个方向上的落子情况,获取整个对弈双方的棋势;

? 棋势排序:对获取的八个方向的棋势(实际上下合一,左右合一,左下右上合一,坐上右下合一,

为四个方向),进行排序,便于进行棋势评估;

? 棋势评估:分别对电脑和玩家的棋势进行评估,量化棋势;

? 择位落子:比较电脑和玩家的棋势,若有利于玩家,则采取“守、堵”的策略,若有利于电脑,

则采取“攻、走”的策略;

? 胜负判定:每次电脑或是玩家落子后,判断胜负情况,若出现“五子连珠”,则“连珠”一方取胜,

另一方失败,游戏结束。

2、系统界面设计

为了实现玩家的用例所需要的功能,同时又便于使用,五子棋系统的界面设计得比较简单,如图3所示。

整体界面为一个19*19的棋盘,在f-06、f-14、j-10、n-06、n-14这五个位置画了一个小方块,以提醒玩家棋盘的中央位置,便于把握有利位置落子。

在棋盘的右侧是一些控制和提醒选项、按钮和对弈状态标签。

其中,选项有“我是老大我先来”和“让让电脑也无妨”两个。选择前者,则玩家先落子;选择后者,则电脑先落子。

按钮有“人机对战,快冲啊”和“不行了?那重来吧”两个。单击前者,则游戏开始;单击后者,则中断游戏,重新开始。

标签有“就不告诉你是谁赢了”和“就不告诉你这是第几步”两个。前者是在游戏分出胜负后,显示是黑方取胜还是白方取胜;后者是在游戏过程中,不论是电脑落子还是玩家落子,都提示现在是第几步落子。

图3 五子棋系统界面

3、系统模块设计

为了实现五子棋系统本身具有的功能,将系统分为这几个模块:五子棋主模块、棋势扫描模块、棋势排序模块、棋势评估模块以及随机落子模块。其中,五子棋主模块实现棋盘绘制、胜负判定的功能,以及对弈过程中对比双方棋势的择位落子模块。棋势扫描模块、棋势排序模块、棋势评估模块分别实现棋势扫描、棋势排序、棋势评估的功能;而随机落子模块则实现在前两步棋势尚未形成时,电脑紧邻玩家落子位置随机择位落子的功能,是用例图中择位落子功能的一部分。

对应的,系统一共有五个类,分别对应五个模块;分别为:五子棋主模块Gobang类、棋势扫描StatusScan类、棋势排序StatusSort类、棋势评估StatusEvaluation类,以及随机落子RandomPlay类。类图如图4所示。

其中Gobang类中的属性和方法并没有完全列出,只列出了主要的属性和方法;其余类基本列出了所有的属性和方法。具体细节将在第四部分“五子棋的实现与测试”一节讨论,这里不再赘述。

图4 五子棋系统的类图

四、五子棋的实现与测试

1、Gobang类的实现

Gobang类是五子棋的核心类,棋盘绘制、棋子落子,响应事件的处理,游戏的控制和模式设置,胜负判定,以及对棋势扫描、排序、评估等的调用都在这里实现。Gobang类的类图如图5所示。

图5 Gobang类类图

其中棋盘的绘制,有paint()和init()来实现,棋子落子由setQizi()来实现,响应事件的处理也在这个类中添加监视器并处理,而游戏的控制和设置在Game_start()和Game_rastart()中实现,游戏胜负的判定由Judge()方法和四个判定不同方向上是否五子连珠的Game_win_*()函数来实现。而最为重要的棋势扫描、排序和评估,则由其属性scanp、scanc、sort、evaluatep、evaluatec分别调用它们的方法来实现。随机落子由属性randomPlay调用其方法实现。

2、StatusScan类的实现

StatusScan类通过扫描目前棋盘上的所有八个方向上的落子情况,获取整个对弈双方的棋势。StatusScan类的类图如图6所示。

图6 StatusScan类类图

其中三维数组shape为一个20*20*5的数组,用来存储所获取的整个对弈双方的棋势。当然了,在实际实现中,实例化了两个StatusScan类的对象scanp和scanc,这两个对象分别用来存储玩家的棋势和电脑的棋势。而statusScan()方法具体实现从棋盘上获取整个棋势的具体过程,参数chesspad存储棋盘上的详细落子情况,参数colour决定需要获取的是黑方的棋势还是白方的棋势。具体扫描时,对于棋盘(i, j)处,有上下、左右、左下右上、坐上右下八个方向,但是统计时,将上下、左右、左下右上、左上右下分别合一,则一共有四个结果,分别存储在shape[i][j][0]、shape[i][j][1]、shape[i][j][2]、shape[i][j][3]中。

3、StatusSort类的实现

StatusSort类对StatusScan类扫描得到的棋势进行排序,以便于做进一步的棋势评估。StatusSort类的类图如图7所示。

图7 StatusSort类类图

其中,StatusSort类只有一个方法statusSort(),参数shape即为StatusScan类扫描获取的棋势数据,该方法主要是对shape中的棋势数据进行排序,使得shape数组满足以下条件:

from i,j = 1 to 19

shap[i][j][0] >= shap[i][j][1] >= shap[i][j][2] >= shap[i][j][3]排序后的结果仍然存储在shape数组中。

4、StatusEvaluation类的实现

StatusEvaluate类对StatusSort类排序过的棋势进行评估,为对弈时电脑择位落子提供依据。StatusEvaluate

类的类图如图8所示。

java五子棋实验报告6,五子棋Java实验报告相关推荐

  1. java五子棋的报告_Java五子棋实现报告

    用java 写的五子棋报告.... 一.实验目的 (1) 使用Java编写五子棋程序 (2) 掌握编写过程的一些类和类成员的使用,并且了解五子棋制作过 程的一些步骤和了解一些算法. 二.实验环境 在电 ...

  2. java类与对象实验_JAVA类与对象实验报告

    <JAVA类与对象实验报告>由会员分享,可在线阅读,更多相关<JAVA类与对象实验报告(6页珍藏版)>请在人人文库网上搜索. 1.面向对象程序设计实验报告实验三.类与对象(1) ...

  3. JAVA实验报告九异常处理_JAVA实验报告_Java异常处理

    贵州大学实验报告 学院:计信学院专业:网络工程班级:101 姓名学号实验组实验时间05.27 指导教师肖源源成绩 实验项目名称Java异常处理 实验目的1)掌握Java异常的概念及工作机制 2)掌握异 ...

  4. java弹弹球实验报告_Java弹球游戏实验报告—chen

    Java弹球游戏实验报告-chen 课 程 设 计 报 告 题 目 弹球小游戏 姓 名 方成 学 号 20 专 业 java 指导教师 陈华恩 2013年 12 月 30 目录 一.实验目的2 二.需 ...

  5. java五子棋实训训心得,java五子棋实习报告

    java五子棋实习报告 Java 程序设计基础 实习报告 课程名称 Java 程序设计基础 实习题目 java 五子棋 专 业 班 级 学 号 学生姓名 指导教师 Java 实习报告 一.一.J JA ...

  6. Java简单记事本设计实验报告_基于JAVA的记事本设计报告.doc

    基于JAVA的记事本设计报告 华北科技学院计算机系综合性实验报告 PAGE 第 PAGE 11 页 XX学校计算机系综合性实验 实 验 报 告 课程名称 Java程序设计 实验学期 至 学年 第 学期 ...

  7. java课程设计实验报告_javaweb课程设计实验报告

    javaweb课程设计实验报告 1 湖南科技大学计算机科学与工程学院 WEB 编程课程设计报告 题目: 网上购物商店 学 号:1111111111 姓 名: 1 指导老师: 1 完成时间: 11111 ...

  8. 河南工业大学高级JAVA实验,大学_计算机控制技术实验报告河南工业大学4

    ff. listChids(fs[i]); gg. hh. } ii. } jj. } kk. } ll. 运行截图 (2) . 用InputStream的子类读入一个英文文本文件,并用System. ...

  9. java程序设计实验报告代写_代写file I/O作业、代写java Scanner I/O程序、代写java编程作业、代做java实验报告...

    代写file I/O作业.代写java Scanner I/O程序.代写java编程作业.代做java实验报告 日期:2018-09-05 03:40 ?Objectives oCreate a pr ...

  10. java实验报告可下载_JAVA实验报告.doc

    JAVA实验报告.doc 学 生 实 验 报 告 册(理工类)课程名称面向对象程序设计 专业班级16计算机科学与技术(专转本) 学生学号 1613203022 学生姓名 张义丹 所属院部 计算机工程 ...

最新文章

  1. 如何让PhpStorm同时打开多个项目?(多项目并存的问题)
  2. mac 上的环境变量配置
  3. windows进程间通信方式总结
  4. 干掉 Navicat:这个 IDEA 的兄弟真香!
  5. 蓝桥杯java第八届第一题--购物单
  6. SpringCloud 应用在 Kubernetes 上的最佳实践 — 线上发布(优雅上下线)
  7. Android访问WCF服务(使用json实现参数传递)
  8. stackoverflow_Stackoverflow的见解:投票最多的是Spring 4问题
  9. storm的流分组策略
  10. Coding-Job:从研发到生产的容器化融合实践
  11. 物联网与人工智能之间的区别与联系
  12. 错误ImportError: 'No module named skimage.io'和ImportError: No module named google.protobuf.internal
  13. js add方法_爬虫必备:Python 执行 JS 代码 —— PyExecJS、PyV8、Js2Py
  14. 一位平凡毕业生的大学四年
  15. 升级到ckplayerX
  16. 在上海、苏州、深圳、长沙从“蜗居”到“安家”,8090后要付出多少?
  17. 系统工程师 运维工程师区别
  18. 用python处理excel数据、求线性回归方程的r值_Python 线性回归计算r-squared方法
  19. 数学在计算机方面的应用论文参考文献,数学论文参考文献
  20. HTTPS证书过期|SSL证书过期 |华硕路由器| NAS|Certtificate is not valid

热门文章

  1. 曾宝仪和机器人_41岁曾宝仪和男友林明谦如老夫老妻 差点与黄子佼狭路相逢(图) - 中华娱乐网...
  2. 设计解析-封面/banner
  3. 第01课 了解单片机的原理控制一个LED灯的亮和灭-----51单片机C语言试验教程
  4. 天干地支算年份的C语言算法,用数学的方法计算出干支年份
  5. 售后服务系统预约工单方便客户报修?
  6. LeCun-Nature-Deep Learning论文阅读笔记
  7. Linux中,新建文件夹和文件命令。
  8. 集合用计算机怎么算,2.2.4 计算机表示集合的方式
  9. JointJS简单小例子
  10. CREO工程图设计 2D出图 图纸设计视频教程