java五子棋实验报告6,五子棋Java实验报告
各个用例,简单描述如下:
? 棋盘绘制:绘制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实验报告相关推荐
- java五子棋的报告_Java五子棋实现报告
用java 写的五子棋报告.... 一.实验目的 (1) 使用Java编写五子棋程序 (2) 掌握编写过程的一些类和类成员的使用,并且了解五子棋制作过 程的一些步骤和了解一些算法. 二.实验环境 在电 ...
- java类与对象实验_JAVA类与对象实验报告
<JAVA类与对象实验报告>由会员分享,可在线阅读,更多相关<JAVA类与对象实验报告(6页珍藏版)>请在人人文库网上搜索. 1.面向对象程序设计实验报告实验三.类与对象(1) ...
- JAVA实验报告九异常处理_JAVA实验报告_Java异常处理
贵州大学实验报告 学院:计信学院专业:网络工程班级:101 姓名学号实验组实验时间05.27 指导教师肖源源成绩 实验项目名称Java异常处理 实验目的1)掌握Java异常的概念及工作机制 2)掌握异 ...
- java弹弹球实验报告_Java弹球游戏实验报告—chen
Java弹球游戏实验报告-chen 课 程 设 计 报 告 题 目 弹球小游戏 姓 名 方成 学 号 20 专 业 java 指导教师 陈华恩 2013年 12 月 30 目录 一.实验目的2 二.需 ...
- java五子棋实训训心得,java五子棋实习报告
java五子棋实习报告 Java 程序设计基础 实习报告 课程名称 Java 程序设计基础 实习题目 java 五子棋 专 业 班 级 学 号 学生姓名 指导教师 Java 实习报告 一.一.J JA ...
- Java简单记事本设计实验报告_基于JAVA的记事本设计报告.doc
基于JAVA的记事本设计报告 华北科技学院计算机系综合性实验报告 PAGE 第 PAGE 11 页 XX学校计算机系综合性实验 实 验 报 告 课程名称 Java程序设计 实验学期 至 学年 第 学期 ...
- java课程设计实验报告_javaweb课程设计实验报告
javaweb课程设计实验报告 1 湖南科技大学计算机科学与工程学院 WEB 编程课程设计报告 题目: 网上购物商店 学 号:1111111111 姓 名: 1 指导老师: 1 完成时间: 11111 ...
- 河南工业大学高级JAVA实验,大学_计算机控制技术实验报告河南工业大学4
ff. listChids(fs[i]); gg. hh. } ii. } jj. } kk. } ll. 运行截图 (2) . 用InputStream的子类读入一个英文文本文件,并用System. ...
- 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 ...
- java实验报告可下载_JAVA实验报告.doc
JAVA实验报告.doc 学 生 实 验 报 告 册(理工类)课程名称面向对象程序设计 专业班级16计算机科学与技术(专转本) 学生学号 1613203022 学生姓名 张义丹 所属院部 计算机工程 ...
最新文章
- 如何让PhpStorm同时打开多个项目?(多项目并存的问题)
- mac 上的环境变量配置
- windows进程间通信方式总结
- 干掉 Navicat:这个 IDEA 的兄弟真香!
- 蓝桥杯java第八届第一题--购物单
- SpringCloud 应用在 Kubernetes 上的最佳实践 — 线上发布(优雅上下线)
- Android访问WCF服务(使用json实现参数传递)
- stackoverflow_Stackoverflow的见解:投票最多的是Spring 4问题
- storm的流分组策略
- Coding-Job:从研发到生产的容器化融合实践
- 物联网与人工智能之间的区别与联系
- 错误ImportError: 'No module named skimage.io'和ImportError: No module named google.protobuf.internal
- js add方法_爬虫必备:Python 执行 JS 代码 —— PyExecJS、PyV8、Js2Py
- 一位平凡毕业生的大学四年
- 升级到ckplayerX
- 在上海、苏州、深圳、长沙从“蜗居”到“安家”,8090后要付出多少?
- 系统工程师 运维工程师区别
- 用python处理excel数据、求线性回归方程的r值_Python 线性回归计算r-squared方法
- 数学在计算机方面的应用论文参考文献,数学论文参考文献
- HTTPS证书过期|SSL证书过期 |华硕路由器| NAS|Certtificate is not valid
热门文章
- 曾宝仪和机器人_41岁曾宝仪和男友林明谦如老夫老妻 差点与黄子佼狭路相逢(图) - 中华娱乐网...
- 设计解析-封面/banner
- 第01课 了解单片机的原理控制一个LED灯的亮和灭-----51单片机C语言试验教程
- 天干地支算年份的C语言算法,用数学的方法计算出干支年份
- 售后服务系统预约工单方便客户报修?
- LeCun-Nature-Deep Learning论文阅读笔记
- Linux中,新建文件夹和文件命令。
- 集合用计算机怎么算,2.2.4 计算机表示集合的方式
- JointJS简单小例子
- CREO工程图设计 2D出图 图纸设计视频教程